diff --git a/README.md b/README.md index a5b55148c6f6df8fe63242144ba464f986dfbf96..a153d40fbcdd9fe5aefc1cbe5dd1f951d872ba1e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ CiviCRM (WordPress Integration) =============================== -This is the repository for the *CiviCRM* plugin for *WordPress* maintained by Tadpole Collective. For the official installation code for *CiviCRM* in *WordPress* - please visit: +This is the development repository for the *CiviCRM* plugin for *WordPress*. What you see here is not intended as the code for the installation of *CiviCRM* in *WordPress* - if you want to do that, please visit: [https://civicrm.org/download](https://civicrm.org/download) @@ -9,14 +9,11 @@ This is the repository for the *CiviCRM* plugin for *WordPress* maintained by Ta If you want to contribute to the development of this plugin, please bear the following in mind: -* Bug fixes should go in the branch 4.5 branch (stable) -* Structural changes should go under master (trunk, i.e. 4.6). +* Bug fixes should go in the branch 4.5 branch (stable) * Structural changes should go under master (trunk, i.e. 4.6). ---- - -### About CiviCRM ### - -CiviCRM is web-based, open source, Constituent Relationship Management (CRM) software geared toward meeting the needs of non-profit and other civic-sector organizations. + ### About CiviCRM ### + CiviCRM is web-based, open source, Constituent Relationship Management (CRM) software geared toward meeting the needs of non-profit and other civic-sector organizations. As a non profit committed to the public good itself, CiviCRM understands that forging and growing strong relationships with constituents is about more than collecting and tracking constituent data - it is about sustaining relationships with supporters over time. diff --git a/assets/templates/civicrm.shortcode.php b/assets/templates/civicrm.shortcode.php index 4f8f31a93889d4a275178fe0db61ccf2b539b771..c590390b01a72437875c92bd261993dddbe6abad 100644 --- a/assets/templates/civicrm.shortcode.php +++ b/assets/templates/civicrm.shortcode.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm.php b/civicrm.php index 3b4732471d58c891f3b11c45292f89a0368de5c5..94ebc083acddabb46d0c3d1466b1dc1dc524a4c8 100644 --- a/civicrm.php +++ b/civicrm.php @@ -2,11 +2,10 @@ /* Plugin Name: CiviCRM Description: CiviCRM - Growing and Sustaining Relationships -Version: 4.7.31 +Version: 5.0.0 Author: CiviCRM LLC Author URI: https://civicrm.org/ Plugin URI: https://wiki.civicrm.org/confluence/display/CRMDOC/Installing+CiviCRM+for+WordPress -GitLab Plugin URI: https://develop.tadpole.cc/plugins/civicrm License: AGPL3 Text Domain: civicrm Domain Path: /languages @@ -17,7 +16,7 @@ Domain Path: /languages +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -42,7 +41,7 @@ Domain Path: /languages /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CONTRIBUTORS.txt b/civicrm/CONTRIBUTORS.txt index 78815a8d7f6d1bf7445790606d550070e7ffefb7..aa39577eff267a6e2bed23dcb512410f3ed600b2 100644 --- a/civicrm/CONTRIBUTORS.txt +++ b/civicrm/CONTRIBUTORS.txt @@ -1,5 +1,35 @@ The following people and organizations sponsored and/or contributed new and improved features to the project. +************************************************ +Key Contributors and Sponsors for 5.x +************************************************ + +CiviCRM - Coleman Watts, Tim Otten + +AGH Strategies - Andrew Hunt +Agileware - Alok Patel +Australian Greens - Seamus Lee +CiviDesk - Yashodha Chaku +CompuCorp - Mukesh Ram, Omar Abu Hussein, René Olivo, Vinu Varshith Sekar +Coop SymbioTIC - Samuel Vanhove +Davis Media Access - Darrick Servis +Fuzion - Jitendra Purohit +Ginkgo Street Labs - Frank Gómez +JMA Consulting - Monish Deb +John Kingsnorth +Joinery - Allen Shaw +Left Join Labs - Sean Madsen +Lighthouse Design and Consulting - Brian Shaughnessy +Åukasz Krutul +MJW Consulting - Matthew Wire +myDropWizard - David Snopek +Oxfam Germany - Thomas Schüttler +Progressive Technology Project - Jamie McClelland +Systopia - Björn Endres +Tadpole Collective - Kevin Cristiano +Third Sector Design - Michael McAndrew +Wikimedia Foundation - Eileen McNaughton + ************************************************ Key Contributors and Sponsors for 4.7 ************************************************ diff --git a/civicrm/CRM/ACL/API.php b/civicrm/CRM/ACL/API.php index 3337c4ab9b897c8846d2bcd028a46d2200e72ee1..1271722fdf02f343b0ffcfa8e6eb2799243e3cc1 100644 --- a/civicrm/CRM/ACL/API.php +++ b/civicrm/CRM/ACL/API.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_ACL_API { diff --git a/civicrm/CRM/ACL/BAO/ACL.php b/civicrm/CRM/ACL/BAO/ACL.php index 7cec618ecc0296ab053c0627ba283effe472d115..fc6fd265d7350975d412bdc7fcd125e1aa572844 100644 --- a/civicrm/CRM/ACL/BAO/ACL.php +++ b/civicrm/CRM/ACL/BAO/ACL.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/ACL/BAO/Cache.php b/civicrm/CRM/ACL/BAO/Cache.php index 1bb9bf5ca0c89e94a5f46ae01502e173d7b33618..33e9ae33f63c6584c6792f3b9a8281728aed712b 100644 --- a/civicrm/CRM/ACL/BAO/Cache.php +++ b/civicrm/CRM/ACL/BAO/Cache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/ACL/BAO/EntityRole.php b/civicrm/CRM/ACL/BAO/EntityRole.php index 2146e0288897021a7f1f73ae73d2f957c457c6df..22eb7bf3de330285e5d2d7195f8908d5eaa263f9 100644 --- a/civicrm/CRM/ACL/BAO/EntityRole.php +++ b/civicrm/CRM/ACL/BAO/EntityRole.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/ACL/DAO/ACL.php b/civicrm/CRM/ACL/DAO/ACL.php index fbb4110cb6137e85eea815ed7f2c574af0799da9..97e9f1c151fe9ea76a49314d631e142af1a7ae96 100644 --- a/civicrm/CRM/ACL/DAO/ACL.php +++ b/civicrm/CRM/ACL/DAO/ACL.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/ACL/ACL.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/ACL/DAO/Cache.php b/civicrm/CRM/ACL/DAO/Cache.php index c505046dc4d18bb47b890f6a1d5e2c8a0a50ff3b..577f80cf79914d49aee4f0dda14051a2217c925e 100644 --- a/civicrm/CRM/ACL/DAO/Cache.php +++ b/civicrm/CRM/ACL/DAO/Cache.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/ACL/Cache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/ACL/DAO/EntityRole.php b/civicrm/CRM/ACL/DAO/EntityRole.php index d807024237164b6caa4d3a1bc6d9d07d226e662c..9b3ecdd26c487ad82c69bc58bce5ad636344879f 100644 --- a/civicrm/CRM/ACL/DAO/EntityRole.php +++ b/civicrm/CRM/ACL/DAO/EntityRole.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/ACL/EntityRole.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/ACL/Form/ACL.php b/civicrm/CRM/ACL/Form/ACL.php index c440178d08e2c7cd2efdc0ac7e861ee7965df28e..30009f898d1d6c8c54e89bd20e36293396dc4707 100644 --- a/civicrm/CRM/ACL/Form/ACL.php +++ b/civicrm/CRM/ACL/Form/ACL.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_ACL_Form_ACL extends CRM_Admin_Form { diff --git a/civicrm/CRM/ACL/Form/ACLBasic.php b/civicrm/CRM/ACL/Form/ACLBasic.php index 07b6df7bdad498ba8adca6c575a6e6e8756d0d52..14a1e2a53fb2e8bef2ce26e12e4a547807598572 100644 --- a/civicrm/CRM/ACL/Form/ACLBasic.php +++ b/civicrm/CRM/ACL/Form/ACLBasic.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_ACL_Form_ACLBasic extends CRM_Admin_Form { diff --git a/civicrm/CRM/ACL/Form/EntityRole.php b/civicrm/CRM/ACL/Form/EntityRole.php index 7d3798d72dbd0405a8eec66de8da988bb340256a..bed9ed4ed48fe1d0bb508f0877881de94f72650c 100644 --- a/civicrm/CRM/ACL/Form/EntityRole.php +++ b/civicrm/CRM/ACL/Form/EntityRole.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_ACL_Form_EntityRole extends CRM_Admin_Form { diff --git a/civicrm/CRM/ACL/Form/WordPress/Permissions.php b/civicrm/CRM/ACL/Form/WordPress/Permissions.php index 6ec23020fd182e58f76eb6de5f80f11960e4d9ca..b952957d85cca9740de0e84807efa0e0f8c2bdc9 100644 --- a/civicrm/CRM/ACL/Form/WordPress/Permissions.php +++ b/civicrm/CRM/ACL/Form/WordPress/Permissions.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/ACL/Page/ACL.php b/civicrm/CRM/ACL/Page/ACL.php index a17e4bc09012055f3bf7d7d63dca15cd33f3c0a9..f333f1d6c8caa4cfaaec12b5d4700d97c5ca4dbd 100644 --- a/civicrm/CRM/ACL/Page/ACL.php +++ b/civicrm/CRM/ACL/Page/ACL.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_ACL_Page_ACL extends CRM_Core_Page_Basic { diff --git a/civicrm/CRM/ACL/Page/ACLBasic.php b/civicrm/CRM/ACL/Page/ACLBasic.php index 758705e31494feebbf8e3e0ea713e2d6b95cc305..bc4e995d611372736c344ad1c9b70c61a5a99c4e 100644 --- a/civicrm/CRM/ACL/Page/ACLBasic.php +++ b/civicrm/CRM/ACL/Page/ACLBasic.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_ACL_Page_ACLBasic extends CRM_Core_Page_Basic { diff --git a/civicrm/CRM/ACL/Page/EntityRole.php b/civicrm/CRM/ACL/Page/EntityRole.php index 4fbd6215cda1d4149659d9dd3e7b9767b2ebd71e..2f66d4c74371762478e1e308e5bdf36b0beecd1a 100644 --- a/civicrm/CRM/ACL/Page/EntityRole.php +++ b/civicrm/CRM/ACL/Page/EntityRole.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_ACL_Page_EntityRole extends CRM_Core_Page_Basic { diff --git a/civicrm/CRM/Activity/ActionMapping.php b/civicrm/CRM/Activity/ActionMapping.php index b80bc8996c6546b6a72c20aee1a24bbde123d00f..f0bb5d7d07b7b4a3d8011e6d628face4f5dd2a97 100644 --- a/civicrm/CRM/Activity/ActionMapping.php +++ b/civicrm/CRM/Activity/ActionMapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ use Civi\ActionSchedule\RecipientBuilder; diff --git a/civicrm/CRM/Activity/BAO/Activity.php b/civicrm/CRM/Activity/BAO/Activity.php index 28c4f4566621f678f0245a5e7bc9c107a70596d5..e3ff859b889d346287a5103f0a34adbb13c67e88 100644 --- a/civicrm/CRM/Activity/BAO/Activity.php +++ b/civicrm/CRM/Activity/BAO/Activity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -1659,7 +1659,9 @@ LEFT JOIN civicrm_activity_contact src ON (src.activity_id = ac.activity_id AND if ($userID == NULL) { $userID = CRM_Core_Session::getLoggedInContactID(); } - + if (!CRM_Core_Permission::check('send SMS')) { + throw new CRM_Core_Exception("You do not have the 'send SMS' permission"); + } $text = &$activityParams['sms_text_message']; // CRM-4575 diff --git a/civicrm/CRM/Activity/BAO/ActivityAssignment.php b/civicrm/CRM/Activity/BAO/ActivityAssignment.php index 3f19f83cac1fb1f2e7bf6d2367720655ca28550c..1ec56d0c3b9116cf46401c0bc70027008a0567bd 100644 --- a/civicrm/CRM/Activity/BAO/ActivityAssignment.php +++ b/civicrm/CRM/Activity/BAO/ActivityAssignment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/BAO/ActivityContact.php b/civicrm/CRM/Activity/BAO/ActivityContact.php index ee63f83e7482ce82b3403c29d4126872c702e9de..7486cf553ec10ab73d6732c0488bf95575fcf975 100644 --- a/civicrm/CRM/Activity/BAO/ActivityContact.php +++ b/civicrm/CRM/Activity/BAO/ActivityContact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/BAO/ActivityTarget.php b/civicrm/CRM/Activity/BAO/ActivityTarget.php index 2c548156ac49687c506a7ba216e6c7776bb90182..26aaab0c8b80678ddc15b4870b319ecaa2892a8d 100644 --- a/civicrm/CRM/Activity/BAO/ActivityTarget.php +++ b/civicrm/CRM/Activity/BAO/ActivityTarget.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/BAO/ICalendar.php b/civicrm/CRM/Activity/BAO/ICalendar.php index a94cd18e24384d6e82a1b50ca32f749110f7cc47..805c350a51cdcd703430daee38a91003ecbfeddb 100644 --- a/civicrm/CRM/Activity/BAO/ICalendar.php +++ b/civicrm/CRM/Activity/BAO/ICalendar.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/BAO/Query.php b/civicrm/CRM/Activity/BAO/Query.php index 2287312afa1f4f1b4a9ee5e867d0ac03d40e18f8..d460e262b8ed108ba944fce25fdf0a97caa99990 100644 --- a/civicrm/CRM/Activity/BAO/Query.php +++ b/civicrm/CRM/Activity/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Activity_BAO_Query { diff --git a/civicrm/CRM/Activity/Controller/Search.php b/civicrm/CRM/Activity/Controller/Search.php index 1395d13f62ad9a619b3d03ff4d81660d3530c74c..6efc8fddd39d4f60553eb9ce4b60adcbe498156e 100644 --- a/civicrm/CRM/Activity/Controller/Search.php +++ b/civicrm/CRM/Activity/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/DAO/Activity.php b/civicrm/CRM/Activity/DAO/Activity.php index ce006eac72ba5dd2ba41776c13868e2491fd6bcb..c10f7d5b8816e525732523c336b44269c1df1941 100644 --- a/civicrm/CRM/Activity/DAO/Activity.php +++ b/civicrm/CRM/Activity/DAO/Activity.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Activity/Activity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Activity/DAO/ActivityContact.php b/civicrm/CRM/Activity/DAO/ActivityContact.php index 77618bafb42abfe9068f93c5b586b9f82374f4a8..2d6ced947f90136f79f905d4834b3769632b694a 100644 --- a/civicrm/CRM/Activity/DAO/ActivityContact.php +++ b/civicrm/CRM/Activity/DAO/ActivityContact.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Activity/ActivityContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Activity/Form/Activity.php b/civicrm/CRM/Activity/Form/Activity.php index fb72c80fa2b78b3ffea63e4f81ca691770a7c404..113247adfebd7869e4127b8ea2ad6c4ee0848080 100644 --- a/civicrm/CRM/Activity/Form/Activity.php +++ b/civicrm/CRM/Activity/Form/Activity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -810,7 +810,7 @@ class CRM_Activity_Form_Activity extends CRM_Contact_Form_Task { $this->addFormRule(array('CRM_Activity_Form_Activity', 'formRule'), $this); - $doNotNotifyAssigneeFor = Civi::settings()->get('do_not_notify_assignees_for'); + $doNotNotifyAssigneeFor = (array) Civi::settings()->get('do_not_notify_assignees_for'); if (($this->_activityTypeId && in_array($this->_activityTypeId, $doNotNotifyAssigneeFor)) || !Civi::settings()->get('activity_assignee_notification')) { $this->assign('activityAssigneeNotification', FALSE); } diff --git a/civicrm/CRM/Activity/Form/ActivityFilter.php b/civicrm/CRM/Activity/Form/ActivityFilter.php index 95c3b2448a79609016f3866375315135acc80a9f..3a73c3b6764c8a6420451575018f1a49700f0868 100644 --- a/civicrm/CRM/Activity/Form/ActivityFilter.php +++ b/civicrm/CRM/Activity/Form/ActivityFilter.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/ActivityLinks.php b/civicrm/CRM/Activity/Form/ActivityLinks.php index d06ba2db63738f947bc2d3d50597ce772324a103..6f3a9a818e8664e72ea94177c7b8962cbfff5929 100644 --- a/civicrm/CRM/Activity/Form/ActivityLinks.php +++ b/civicrm/CRM/Activity/Form/ActivityLinks.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -73,13 +73,26 @@ class CRM_Activity_Form_ActivityLinks extends CRM_Core_Form { } } elseif ($act['name'] == 'SMS') { - if (!$contactId || !CRM_SMS_BAO_Provider::activeProviderCount()) { + if (!$contactId || !CRM_SMS_BAO_Provider::activeProviderCount() || !CRM_Core_Permission::check('send SMS')) { continue; } // Check for existence of a mobile phone and ! do not SMS privacy setting - $mobileTypeID = CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_Phone', 'phone_type_id', 'Mobile'); - list($name, $phone, $doNotSMS) = CRM_Contact_BAO_Contact_Location::getPhoneDetails($contactId, $mobileTypeID); - if (!$doNotSMS && $phone) { + try { + $phone = civicrm_api3('Phone', 'getsingle', array( + 'contact_id' => $contactId, + 'phone_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Core_BAO_Phone', 'phone_type_id', 'Mobile'), + 'return' => array('phone', 'contact_id'), + 'options' => array('limit' => 1, 'sort' => "is_primary DESC"), + 'api.Contact.getsingle' => array( + 'id' => '$value.contact_id', + 'return' => 'do_not_sms', + ), + )); + } + catch (CiviCRM_API3_Exception $e) { + continue; + } + if (!$phone['api.Contact.getsingle']['do_not_sms'] && $phone['phone']) { $url = 'civicrm/activity/sms/add'; } else { diff --git a/civicrm/CRM/Activity/Form/ActivityView.php b/civicrm/CRM/Activity/Form/ActivityView.php index 254e5daf687a85206755d4cc3f46a00b209c375a..98e987266905b6d3b832a4924fa439e6e3332d7f 100644 --- a/civicrm/CRM/Activity/Form/ActivityView.php +++ b/civicrm/CRM/Activity/Form/ActivityView.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Search.php b/civicrm/CRM/Activity/Form/Search.php index 8f275c62aad93adca7a6d197e84deca4c7a5715e..f7327f6052e664f2afd06dae2ac9d2010224d5c7 100644 --- a/civicrm/CRM/Activity/Form/Search.php +++ b/civicrm/CRM/Activity/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -170,9 +170,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search { $this->addRowSelectors($rows); } - $permission = CRM_Core_Permission::getPermission(); - - $this->addTaskMenu(CRM_Activity_Task::permissionedTaskTitles($permission)); + $this->addTaskMenu(CRM_Activity_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission())); } } diff --git a/civicrm/CRM/Activity/Form/Task.php b/civicrm/CRM/Activity/Form/Task.php index 90131945fde6964b15e9923b95d76e5010e43299..5e8e62f6c0ad44e38e9223170ad54ad08a11d47d 100644 --- a/civicrm/CRM/Activity/Form/Task.php +++ b/civicrm/CRM/Activity/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/AddToTag.php b/civicrm/CRM/Activity/Form/Task/AddToTag.php index 3b32d612a45f6dbf6948c416aaf5cbcca194cc11..58025d1b21ba60d60ac2f3d68417784ef58976f9 100644 --- a/civicrm/CRM/Activity/Form/Task/AddToTag.php +++ b/civicrm/CRM/Activity/Form/Task/AddToTag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/Batch.php b/civicrm/CRM/Activity/Form/Task/Batch.php index 3b63f4a3714cb15939d93f1ab35c33d2b0d39ed0..e76f0e3ebd63b3ea5ea23de02ffc9e7230f79130 100644 --- a/civicrm/CRM/Activity/Form/Task/Batch.php +++ b/civicrm/CRM/Activity/Form/Task/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/Delete.php b/civicrm/CRM/Activity/Form/Task/Delete.php index 6fee99f7dc4e592630ae4b7336c9b4ee66fca6a2..ab88458eb3ea2544680ece68c5a06f1cb5830f15 100644 --- a/civicrm/CRM/Activity/Form/Task/Delete.php +++ b/civicrm/CRM/Activity/Form/Task/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/Email.php b/civicrm/CRM/Activity/Form/Task/Email.php index ad693bf5bb8a62842be5ff35c5ebc54883bb9aa8..7e820851559d1ff37fce823c0d4a2e1d20a4fdf4 100644 --- a/civicrm/CRM/Activity/Form/Task/Email.php +++ b/civicrm/CRM/Activity/Form/Task/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/FileOnCase.php b/civicrm/CRM/Activity/Form/Task/FileOnCase.php index da475882be613a7d3f3962e9de430aafc9c14f9b..b900e83e4d10c9d98e0ac2feb5d2ca4f811f0548 100644 --- a/civicrm/CRM/Activity/Form/Task/FileOnCase.php +++ b/civicrm/CRM/Activity/Form/Task/FileOnCase.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/PickOption.php b/civicrm/CRM/Activity/Form/Task/PickOption.php index 7914eb9eb6fd9a266920e2b840868f8aefb8fe69..4d65b9264a5fbb8e542d1fab3cc2635d701d927d 100644 --- a/civicrm/CRM/Activity/Form/Task/PickOption.php +++ b/civicrm/CRM/Activity/Form/Task/PickOption.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/PickProfile.php b/civicrm/CRM/Activity/Form/Task/PickProfile.php index 13ad599e32be9913711a282971ef98894741e860..4cdaec36225a64f8b117f10fb247550907746aae 100644 --- a/civicrm/CRM/Activity/Form/Task/PickProfile.php +++ b/civicrm/CRM/Activity/Form/Task/PickProfile.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/Print.php b/civicrm/CRM/Activity/Form/Task/Print.php index b61214a8c4d12c0790b1f1ad2739c964b1870577..bf763931b74601843eb332f1ef7646e63c65fddb 100644 --- a/civicrm/CRM/Activity/Form/Task/Print.php +++ b/civicrm/CRM/Activity/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/RemoveFromTag.php b/civicrm/CRM/Activity/Form/Task/RemoveFromTag.php index e1fecc0a3609c7b1c9561d7bf15ac6273580845a..088ae89f61aeaab6e36817fc75149fccf4c7a8fe 100644 --- a/civicrm/CRM/Activity/Form/Task/RemoveFromTag.php +++ b/civicrm/CRM/Activity/Form/Task/RemoveFromTag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/SMS.php b/civicrm/CRM/Activity/Form/Task/SMS.php index b44723d4aea048c9bf23a8a1e8af0a6ac391490c..78e2a783053abd15fbaa094a816d059cad49c736 100644 --- a/civicrm/CRM/Activity/Form/Task/SMS.php +++ b/civicrm/CRM/Activity/Form/Task/SMS.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Form/Task/SearchTaskHookSample.php b/civicrm/CRM/Activity/Form/Task/SearchTaskHookSample.php index a9251f0280d6f867d7ca8f03a9c7cb6e6a7d2716..dc2193f7c5801405443ef4bff6437da995966e47 100644 --- a/civicrm/CRM/Activity/Form/Task/SearchTaskHookSample.php +++ b/civicrm/CRM/Activity/Form/Task/SearchTaskHookSample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Import/Controller.php b/civicrm/CRM/Activity/Import/Controller.php index 9ad060e9ad215c4f2e486cb151803978a3a3ae1a..589827d79e2820a24d1ad91ad2b691f9ee2e179b 100644 --- a/civicrm/CRM/Activity/Import/Controller.php +++ b/civicrm/CRM/Activity/Import/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Activity_Import_Controller extends CRM_Core_Controller { diff --git a/civicrm/CRM/Activity/Import/Field.php b/civicrm/CRM/Activity/Import/Field.php index 029f7fd23b408802c0a033644f52fa417265264f..c867b4a080827ac2e30cad7420859ef1dc51cf36 100644 --- a/civicrm/CRM/Activity/Import/Field.php +++ b/civicrm/CRM/Activity/Import/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Activity_Import_Field { diff --git a/civicrm/CRM/Activity/Import/Form/DataSource.php b/civicrm/CRM/Activity/Import/Form/DataSource.php index 8e1bdec64243180887243b37d17c5a6a42b5030d..b89f477c971e866f59ebc68220d4ccc64aa636e7 100644 --- a/civicrm/CRM/Activity/Import/Form/DataSource.php +++ b/civicrm/CRM/Activity/Import/Form/DataSource.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Import/Form/MapField.php b/civicrm/CRM/Activity/Import/Form/MapField.php index 488970061ad8963e6c4ce8b90e1e73fa6dde2891..4a6917d35be9de81bdf01dd0182e313039e93643 100644 --- a/civicrm/CRM/Activity/Import/Form/MapField.php +++ b/civicrm/CRM/Activity/Import/Form/MapField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Import/Form/Preview.php b/civicrm/CRM/Activity/Import/Form/Preview.php index b309805758f82e7feb23fb7c44940c26873d369f..05a499fc42700fea925f8eebdf9f2863e2737184 100644 --- a/civicrm/CRM/Activity/Import/Form/Preview.php +++ b/civicrm/CRM/Activity/Import/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Import/Form/Summary.php b/civicrm/CRM/Activity/Import/Form/Summary.php index 83f360a7a05ec69ca3034925e03d3e80583aaca4..ffb993220eb540fc3f0a6b37f9a2ff5c90558f0f 100644 --- a/civicrm/CRM/Activity/Import/Form/Summary.php +++ b/civicrm/CRM/Activity/Import/Form/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Import/Parser.php b/civicrm/CRM/Activity/Import/Parser.php index 4103c7cc02eba26fe3ea39283a22f79c4286d4d7..3920b17caa99c956c94115566e2b4bd4fc421e87 100644 --- a/civicrm/CRM/Activity/Import/Parser.php +++ b/civicrm/CRM/Activity/Import/Parser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_Activity_Import_Parser extends CRM_Import_Parser { diff --git a/civicrm/CRM/Activity/Import/Parser/Activity.php b/civicrm/CRM/Activity/Import/Parser/Activity.php index 4e41cf675b20d3d7c8c884f46636febe494b674d..abfa3b5b45bd4afce776275c417b3671f5e9abe3 100644 --- a/civicrm/CRM/Activity/Import/Parser/Activity.php +++ b/civicrm/CRM/Activity/Import/Parser/Activity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ diff --git a/civicrm/CRM/Activity/Page/AJAX.php b/civicrm/CRM/Activity/Page/AJAX.php index 34ea1c7438e3663720fbd20df338727fafe82d32..b5df7881b92029ccbfbd5e32531cc37970180637 100644 --- a/civicrm/CRM/Activity/Page/AJAX.php +++ b/civicrm/CRM/Activity/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Activity/Page/Tab.php b/civicrm/CRM/Activity/Page/Tab.php index de6a0f35d25268c65fa79f30366a02dfe5bcc264..97791e8ed289c554728c325e8804a96f0700e533 100644 --- a/civicrm/CRM/Activity/Page/Tab.php +++ b/civicrm/CRM/Activity/Page/Tab.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Page/UserDashboard.php b/civicrm/CRM/Activity/Page/UserDashboard.php index ad32029a42df7556dee04cd37d4e22ae6cd9cb66..256ba4027826606bf3c2743e804ed529e03e1bcc 100644 --- a/civicrm/CRM/Activity/Page/UserDashboard.php +++ b/civicrm/CRM/Activity/Page/UserDashboard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Selector/Activity.php b/civicrm/CRM/Activity/Selector/Activity.php index 69972ea1102cd9aed5164a439ec2682b6fad626f..385aa8dcc04d30e583929a231251bbf1705f846b 100644 --- a/civicrm/CRM/Activity/Selector/Activity.php +++ b/civicrm/CRM/Activity/Selector/Activity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/Selector/Search.php b/civicrm/CRM/Activity/Selector/Search.php index 8252b500426f23c4c59a31c9ff8c5b3d225e6174..4d4fe541d1080af86296b3418e2badeb1547f895 100644 --- a/civicrm/CRM/Activity/Selector/Search.php +++ b/civicrm/CRM/Activity/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Activity/StateMachine/Search.php b/civicrm/CRM/Activity/StateMachine/Search.php index 992a79986b48bb68df2cc04d4d9b7776214fca33..9eb4827765f15c02c3f58cd29edfc0cf6660dc01 100644 --- a/civicrm/CRM/Activity/StateMachine/Search.php +++ b/civicrm/CRM/Activity/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Activity_StateMachine_Search extends CRM_Core_StateMachine { diff --git a/civicrm/CRM/Activity/Task.php b/civicrm/CRM/Activity/Task.php index f291090898fe9a7eff481f66494818fc0c8a5249..8e1a594e624c8e63fea24156872669c0bc7f4b18 100644 --- a/civicrm/CRM/Activity/Task.php +++ b/civicrm/CRM/Activity/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,34 +27,15 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** * Class to represent the actions that can be performed on a group of contacts used by the search forms. */ -class CRM_Activity_Task { - const - DELETE_ACTIVITIES = 1, - PRINT_ACTIVITIES = 2, - EXPORT_ACTIVITIES = 3, - BATCH_ACTIVITIES = 4, - EMAIL_CONTACTS = 5, - EMAIL_SMS = 6; +class CRM_Activity_Task extends CRM_Core_Task { - /** - * The task array. - * - * @var array - */ - static $_tasks = NULL; - - /** - * The optional task array. - * - * @var array - */ - static $_optionalTasks = NULL; + static $objectType = 'activity'; /** * These tasks are the core set of tasks that the user can perform @@ -63,20 +44,20 @@ class CRM_Activity_Task { * @return array * the set of tasks for a group of contacts */ - public static function &tasks() { + public static function tasks() { if (!(self::$_tasks)) { self::$_tasks = array( - 1 => array( + self::TASK_DELETE => array( 'title' => ts('Delete activities'), 'class' => 'CRM_Activity_Form_Task_Delete', 'result' => FALSE, ), - 2 => array( + self::TASK_PRINT => array( 'title' => ts('Print selected rows'), 'class' => 'CRM_Activity_Form_Task_Print', 'result' => FALSE, ), - 3 => array( + self::TASK_EXPORT => array( 'title' => ts('Export activities'), 'class' => array( 'CRM_Export_Form_Select', @@ -84,7 +65,7 @@ class CRM_Activity_Task { ), 'result' => FALSE, ), - 4 => array( + self::BATCH_UPDATE => array( 'title' => ts('Update multiple activities'), 'class' => array( 'CRM_Activity_Form_Task_PickProfile', @@ -92,7 +73,7 @@ class CRM_Activity_Task { ), 'result' => FALSE, ), - 5 => array( + self::TASK_EMAIL => array( 'title' => ts('Email - send now (to %1 or less)', array( 1 => Civi::settings() ->get('simple_mail_limit'), @@ -103,17 +84,17 @@ class CRM_Activity_Task { ), 'result' => FALSE, ), - 6 => array( + self::TASK_SMS => array( 'title' => ts('SMS - send reply'), 'class' => 'CRM_Activity_Form_Task_SMS', 'result' => FALSE, ), - 7 => array( + self::TAG_ADD => array( 'title' => ts('Tag - add to activities'), 'class' => 'CRM_Activity_Form_Task_AddToTag', 'result' => FALSE, ), - 8 => array( + self::TAG_REMOVE => array( 'title' => ts('Tag - remove from activities'), 'class' => 'CRM_Activity_Form_Task_RemoveFromTag', 'result' => FALSE, @@ -125,7 +106,7 @@ class CRM_Activity_Task { if (CRM_Core_Permission::check('access all cases and activities') || CRM_Core_Permission::check('access my cases and activities') ) { - self::$_tasks[6] = array( + self::$_tasks[self::TASK_SMS] = array( 'title' => ts('File on case'), 'class' => 'CRM_Activity_Form_Task_FileOnCase', 'result' => FALSE, @@ -135,54 +116,40 @@ class CRM_Activity_Task { // CRM-4418, check for delete if (!CRM_Core_Permission::check('delete activities')) { - unset(self::$_tasks[1]); + unset(self::$_tasks[self::TASK_DELETE]); } - CRM_Utils_Hook::searchTasks('activity', self::$_tasks); - asort(self::$_tasks); + parent::tasks(); } return self::$_tasks; } - /** - * These tasks are the core set of task titles on activity. - * - * @return array - * the set of task titles - */ - public static function &taskTitles() { - self::tasks(); - $titles = array(); - foreach (self::$_tasks as $id => $value) { - $titles[$id] = $value['title']; - } - return $titles; - } - /** * Show tasks selectively based on the permission level of the user. * * @param int $permission + * @param array $params * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission) { - $tasks = array(); + public static function permissionedTaskTitles($permission, $params = array()) { if ($permission == CRM_Core_Permission::EDIT) { $tasks = self::taskTitles(); } else { $tasks = array( - 3 => self::$_tasks[3]['title'], + self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'], ); //CRM-4418, if (CRM_Core_Permission::check('delete activities')) { - $tasks[1] = self::$_tasks[1]['title']; + $tasks[self::TASK_DELETE] = self::$_tasks[self::TASK_DELETE]['title']; } } + + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); return $tasks; } @@ -198,8 +165,9 @@ class CRM_Activity_Task { self::tasks(); if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) { // make the print task by default - $value = 2; + $value = self::TASK_PRINT; } + return array( self::$_tasks[$value]['class'], self::$_tasks[$value]['result'], diff --git a/civicrm/CRM/Activity/Tokens.php b/civicrm/CRM/Activity/Tokens.php index eb5ad34b827bc133a0e24a20b5a00c9eca5dfb00..9f4af94b54c90b863d9e167a5728f87b924f99dc 100644 --- a/civicrm/CRM/Activity/Tokens.php +++ b/civicrm/CRM/Activity/Tokens.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form.php b/civicrm/CRM/Admin/Form.php index 8129e3f18466135d86ae47c8b3df74a0c91b9f92..cf781cc44ba884c42f314ac88e16fd5c902decef 100644 --- a/civicrm/CRM/Admin/Form.php +++ b/civicrm/CRM/Admin/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/CMSUser.php b/civicrm/CRM/Admin/Form/CMSUser.php index ee79cc7742164387430cc93123fdf36ef74bde1d..f8dfbf07a833009991d1f92352c115d2874c3b79 100644 --- a/civicrm/CRM/Admin/Form/CMSUser.php +++ b/civicrm/CRM/Admin/Form/CMSUser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/ContactType.php b/civicrm/CRM/Admin/Form/ContactType.php index 9e50d1427358d34166619558ebb564d3c7f927be..9f63a17575f843f922184bc96c907fa0acca1315 100644 --- a/civicrm/CRM/Admin/Form/ContactType.php +++ b/civicrm/CRM/Admin/Form/ContactType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Extensions.php b/civicrm/CRM/Admin/Form/Extensions.php index d6901f557fbef7e173fbd831bae3979249f133a8..cced34a566a8170f97094ce1a88dfeb219e1682a 100644 --- a/civicrm/CRM/Admin/Form/Extensions.php +++ b/civicrm/CRM/Admin/Form/Extensions.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Job.php b/civicrm/CRM/Admin/Form/Job.php index 9003bda4e583a2c812142c290ce73f3c0342e556..2169f29e0289f578e486729c19f50e2b3b41cfa0 100644 --- a/civicrm/CRM/Admin/Form/Job.php +++ b/civicrm/CRM/Admin/Form/Job.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/LabelFormats.php b/civicrm/CRM/Admin/Form/LabelFormats.php index 73ef984e89cdece34af75257a60d18a6e8a58037..67cc7aa908696b48b05bec5b2a2608319c8e903d 100644 --- a/civicrm/CRM/Admin/Form/LabelFormats.php +++ b/civicrm/CRM/Admin/Form/LabelFormats.php @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/LocationType.php b/civicrm/CRM/Admin/Form/LocationType.php index 9c6dbb723b55f6f644864ad6f780e1efdf4e2c04..835b3f5575fcf0a760ca09c6495a608fa4802200 100644 --- a/civicrm/CRM/Admin/Form/LocationType.php +++ b/civicrm/CRM/Admin/Form/LocationType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/MailSettings.php b/civicrm/CRM/Admin/Form/MailSettings.php index a40b3f2adcd21f5eae6a4b6be129d78a2a930d67..fd90c12890366fccde049f62fafccc9a76476e55 100644 --- a/civicrm/CRM/Admin/Form/MailSettings.php +++ b/civicrm/CRM/Admin/Form/MailSettings.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Mapping.php b/civicrm/CRM/Admin/Form/Mapping.php index 8286b9c6495f4b0daad58744d2df255f9b50d1ab..2555f20e6550411077df306642b1f0d3d1474ed9 100644 --- a/civicrm/CRM/Admin/Form/Mapping.php +++ b/civicrm/CRM/Admin/Form/Mapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/MessageTemplates.php b/civicrm/CRM/Admin/Form/MessageTemplates.php index 7e2330dc513710aa063d23037db8e1a37ad3984f..6a0b2c86aa68aa089fab6a842defeacf08a2de8f 100644 --- a/civicrm/CRM/Admin/Form/MessageTemplates.php +++ b/civicrm/CRM/Admin/Form/MessageTemplates.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Navigation.php b/civicrm/CRM/Admin/Form/Navigation.php index 12cd0804717a82df2b896a53bf53f49ce6a68b95..54ad6dcc58162f62c40b5336b42dbdb8e3ddd951 100644 --- a/civicrm/CRM/Admin/Form/Navigation.php +++ b/civicrm/CRM/Admin/Form/Navigation.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/OptionGroup.php b/civicrm/CRM/Admin/Form/OptionGroup.php index c7622ff790706b3a52ca8dae540bec8e806ceffb..f0b37f25a078728834ce85a88ac268167c0c1653 100644 --- a/civicrm/CRM/Admin/Form/OptionGroup.php +++ b/civicrm/CRM/Admin/Form/OptionGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Options.php b/civicrm/CRM/Admin/Form/Options.php index bd79a922bb62183024e35e330f3b6b13a1476d41..07ea080b35d71a5a4dd8914919f9d3fe016b3bcb 100644 --- a/civicrm/CRM/Admin/Form/Options.php +++ b/civicrm/CRM/Admin/Form/Options.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/ParticipantStatusType.php b/civicrm/CRM/Admin/Form/ParticipantStatusType.php index e55c748271221ce4f69b9e4137e43538de730dc8..b7b73668ec930dabf2c08759400c758bebe71f17 100644 --- a/civicrm/CRM/Admin/Form/ParticipantStatusType.php +++ b/civicrm/CRM/Admin/Form/ParticipantStatusType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Admin_Form_ParticipantStatusType extends CRM_Admin_Form { diff --git a/civicrm/CRM/Admin/Form/PaymentProcessor.php b/civicrm/CRM/Admin/Form/PaymentProcessor.php index 061e6fff06f073bcc28c1f38f3039c67dd775878..32706c6109516be168abc7c9111ad03075299ac4 100644 --- a/civicrm/CRM/Admin/Form/PaymentProcessor.php +++ b/civicrm/CRM/Admin/Form/PaymentProcessor.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/PaymentProcessorType.php b/civicrm/CRM/Admin/Form/PaymentProcessorType.php index 9edb6eb7f51bfa81e384d47792d54717116e5882..d6c512f8649a12d954966de5a90d46e8956c4bfd 100644 --- a/civicrm/CRM/Admin/Form/PaymentProcessorType.php +++ b/civicrm/CRM/Admin/Form/PaymentProcessorType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/PdfFormats.php b/civicrm/CRM/Admin/Form/PdfFormats.php index c984a4e4dc33b74cef08fc0835b2f53fefdd534c..175d713c186642e7122412f9ee7f6d85dc9321fa 100644 --- a/civicrm/CRM/Admin/Form/PdfFormats.php +++ b/civicrm/CRM/Admin/Form/PdfFormats.php @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Persistent.php b/civicrm/CRM/Admin/Form/Persistent.php index 1f93a2c724aea461b39bc6bd09df586b72ba957d..0687708013491eb0afd6f97fcce0c60b92411d36 100644 --- a/civicrm/CRM/Admin/Form/Persistent.php +++ b/civicrm/CRM/Admin/Form/Persistent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Preferences.php b/civicrm/CRM/Admin/Form/Preferences.php index 43d1455dd46d77c4890bbb5d7004d0cd8daa3e0a..149325d9b5dee987dd2d1a005504e0b80314034a 100644 --- a/civicrm/CRM/Admin/Form/Preferences.php +++ b/civicrm/CRM/Admin/Form/Preferences.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Preferences/Address.php b/civicrm/CRM/Admin/Form/Preferences/Address.php index b00f7b673953e8120abfdf78b18263791a5f5245..244aa62cc8e24b6d9f4e4891169efa8aa84cadb0 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Address.php +++ b/civicrm/CRM/Admin/Form/Preferences/Address.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Preferences/Campaign.php b/civicrm/CRM/Admin/Form/Preferences/Campaign.php index 7c628073d7438195cdf7b6b13c0a1c07adb0bf52..4fb64342240febe35914306e444cc7c0b847a6f5 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Campaign.php +++ b/civicrm/CRM/Admin/Form/Preferences/Campaign.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: Display.php 36505 2011-10-03 14:19:56Z lobo $ * */ diff --git a/civicrm/CRM/Admin/Form/Preferences/Contribute.php b/civicrm/CRM/Admin/Form/Preferences/Contribute.php index 9fb2377ccc66f1898641276d63be9174e7bd5a53..db7f076f15e92e67a5e55862fcde8f12f904e4b3 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Contribute.php +++ b/civicrm/CRM/Admin/Form/Preferences/Contribute.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Preferences/Display.php b/civicrm/CRM/Admin/Form/Preferences/Display.php index 36bd8b891c501eea9f1204562db6fefe1bcf9254..5783c70c9751d54e2081d2646a77e371c6f05fbf 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Display.php +++ b/civicrm/CRM/Admin/Form/Preferences/Display.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Preferences/Event.php b/civicrm/CRM/Admin/Form/Preferences/Event.php index 5d8d75a660380d575bf717793105d1d558c199df..1e3607f83aaed8611e900d443ef82294aef5fa23 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Event.php +++ b/civicrm/CRM/Admin/Form/Preferences/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: Display.php 36505 2011-10-03 14:19:56Z lobo $ * */ diff --git a/civicrm/CRM/Admin/Form/Preferences/Mailing.php b/civicrm/CRM/Admin/Form/Preferences/Mailing.php index 74639b944dc213faf4a7bb7fdefc064e4503404d..166fa1afba1b69786c478b45a0b6f43c284750d3 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Mailing.php +++ b/civicrm/CRM/Admin/Form/Preferences/Mailing.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: Display.php 36505 2011-10-03 14:19:56Z lobo $ * */ diff --git a/civicrm/CRM/Admin/Form/Preferences/Member.php b/civicrm/CRM/Admin/Form/Preferences/Member.php index e1f68214d02d1ebf89d40879599b501a31a6a732..a8efcbe3cb553ff727d753d3df3c17ef7487484d 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Member.php +++ b/civicrm/CRM/Admin/Form/Preferences/Member.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Preferences/Multisite.php b/civicrm/CRM/Admin/Form/Preferences/Multisite.php index 4aa58a961bf79a665aeced9463d817b6cb186700..35acc53d3e3b1f83cc2c9affb167c58199ec4ad5 100644 --- a/civicrm/CRM/Admin/Form/Preferences/Multisite.php +++ b/civicrm/CRM/Admin/Form/Preferences/Multisite.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: Display.php 36505 2011-10-03 14:19:56Z lobo $ * */ diff --git a/civicrm/CRM/Admin/Form/PreferencesDate.php b/civicrm/CRM/Admin/Form/PreferencesDate.php index fcea91b7397bddae3cdfa3bbac540422121a8f6d..e400a2b33a74f67a648afedeff4d58af93514fff 100644 --- a/civicrm/CRM/Admin/Form/PreferencesDate.php +++ b/civicrm/CRM/Admin/Form/PreferencesDate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/RelationshipType.php b/civicrm/CRM/Admin/Form/RelationshipType.php index c42db6dc3170490daccf4f29e4f3602d666e0966..9f939d2bbb531cca0fd745447c00679bfa3ec9a9 100644 --- a/civicrm/CRM/Admin/Form/RelationshipType.php +++ b/civicrm/CRM/Admin/Form/RelationshipType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/ScheduleReminders.php b/civicrm/CRM/Admin/Form/ScheduleReminders.php index 9e47d4b404e484e7399c42546cce6b95063d3fca..6e56a4dfc0c129173fca59837c25a57c3470d975 100644 --- a/civicrm/CRM/Admin/Form/ScheduleReminders.php +++ b/civicrm/CRM/Admin/Form/ScheduleReminders.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting.php b/civicrm/CRM/Admin/Form/Setting.php index 89e2574084d2db1843f263355ebf23cdf6962be3..f7ed1b624651a5f2baa5b4c7d5fc03bc975da219 100644 --- a/civicrm/CRM/Admin/Form/Setting.php +++ b/civicrm/CRM/Admin/Form/Setting.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -105,6 +105,11 @@ class CRM_Admin_Form_Setting extends CRM_Core_Form { else { $options = NULL; } + //Load input as readonly whose values are overridden in civicrm.settings.php. + if (Civi::settings()->getMandatory($setting)) { + $props['html_attributes']['readonly'] = TRUE; + $setStatus = TRUE; + } $add = 'add' . $props['quick_form_type']; if ($add == 'addElement') { @@ -147,6 +152,9 @@ class CRM_Admin_Form_Setting extends CRM_Core_Form { } } + if (!empty($setStatus)) { + CRM_Core_Session::setStatus(ts("Some fields are loaded as 'readonly' as they have been set (overridden) in civicrm.settings.php."), '', 'info', array('expires' => 0)); + } // setting_description should be deprecated - see Mail.tpl for metadata based tpl. $this->assign('setting_descriptions', $descriptions); $this->assign('settings_fields', $settingMetaData); diff --git a/civicrm/CRM/Admin/Form/Setting/Case.php b/civicrm/CRM/Admin/Form/Setting/Case.php index d530c87e530e8037b71c9e7b0b4a2f71ad0405e7..14d82de76aa376d6dc378775fb027b0c60ad4c3b 100644 --- a/civicrm/CRM/Admin/Form/Setting/Case.php +++ b/civicrm/CRM/Admin/Form/Setting/Case.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Component.php b/civicrm/CRM/Admin/Form/Setting/Component.php index 4a45be0e23bc8ef82bfdb51cd181286505367797..1498ef0c2ad43ef743b7d1ce674209a9ce432e66 100644 --- a/civicrm/CRM/Admin/Form/Setting/Component.php +++ b/civicrm/CRM/Admin/Form/Setting/Component.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Date.php b/civicrm/CRM/Admin/Form/Setting/Date.php index ae510be0965d0a821de6fff5958cb7969ad67052..186a7954f407f8b6f4b9754eea6dff67a49b31d5 100644 --- a/civicrm/CRM/Admin/Form/Setting/Date.php +++ b/civicrm/CRM/Admin/Form/Setting/Date.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Debugging.php b/civicrm/CRM/Admin/Form/Setting/Debugging.php index 40d95b0ee7bd121994d69f214ffdde10b54759a4..6ab965f4f58b890e88d38c2b2a965158d4ec4a8b 100644 --- a/civicrm/CRM/Admin/Form/Setting/Debugging.php +++ b/civicrm/CRM/Admin/Form/Setting/Debugging.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Localization.php b/civicrm/CRM/Admin/Form/Setting/Localization.php index 21cd8f8a3a49052a117c98fe0a4d0e6e742234cf..68b911097c30f80786948144b1a4320534db0e4a 100644 --- a/civicrm/CRM/Admin/Form/Setting/Localization.php +++ b/civicrm/CRM/Admin/Form/Setting/Localization.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Mail.php b/civicrm/CRM/Admin/Form/Setting/Mail.php index 83679cabe9b760ae3718497747dd41fda4339699..b16347b472c6aed61637aa8bf51e5a48ba5b06d0 100644 --- a/civicrm/CRM/Admin/Form/Setting/Mail.php +++ b/civicrm/CRM/Admin/Form/Setting/Mail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Mapping.php b/civicrm/CRM/Admin/Form/Setting/Mapping.php index 9e6ac247f0761a8b17e783c5ab8e6e4f874b7f23..e4d36781ad0ed6d5b81cdced158805435fa1c4ca 100644 --- a/civicrm/CRM/Admin/Form/Setting/Mapping.php +++ b/civicrm/CRM/Admin/Form/Setting/Mapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php b/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php index 6f9b6457e465b9f6742664f9d9f8afcca47d54b3..a62e88c2b2d4cf8b3f62734e74a39e36a92914d6 100644 --- a/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php +++ b/civicrm/CRM/Admin/Form/Setting/Miscellaneous.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Path.php b/civicrm/CRM/Admin/Form/Setting/Path.php index edb8e959bf2f45a4b815372e522f9cedbd4b7ddd..253b2142246582f864f0bc58b0c69ba123ba1534 100644 --- a/civicrm/CRM/Admin/Form/Setting/Path.php +++ b/civicrm/CRM/Admin/Form/Setting/Path.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Search.php b/civicrm/CRM/Admin/Form/Setting/Search.php index 5d4a3b2245c56dde82c284edd98dec573d9ce7b9..d086773dc4fb9656a235582c3d1a514085e4c5f7 100644 --- a/civicrm/CRM/Admin/Form/Setting/Search.php +++ b/civicrm/CRM/Admin/Form/Setting/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Smtp.php b/civicrm/CRM/Admin/Form/Setting/Smtp.php index 4bfa646424747990e4220e699456a65745dc1f58..2dbc9c53eb891ddcd5510b867fda9356ce3bfa05 100644 --- a/civicrm/CRM/Admin/Form/Setting/Smtp.php +++ b/civicrm/CRM/Admin/Form/Setting/Smtp.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/UF.php b/civicrm/CRM/Admin/Form/Setting/UF.php index ab290514d38b8b657ce64717c4c84e39c587e242..69c824e07f096af0d0935d61822a82e23e8a7621 100644 --- a/civicrm/CRM/Admin/Form/Setting/UF.php +++ b/civicrm/CRM/Admin/Form/Setting/UF.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/UpdateConfigBackend.php b/civicrm/CRM/Admin/Form/Setting/UpdateConfigBackend.php index e1b6a3627e74a5a3b5a553125a914d39313a4576..3026a3007496e688128c7712c6312dbb1e043985 100644 --- a/civicrm/CRM/Admin/Form/Setting/UpdateConfigBackend.php +++ b/civicrm/CRM/Admin/Form/Setting/UpdateConfigBackend.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/Setting/Url.php b/civicrm/CRM/Admin/Form/Setting/Url.php index b629a2b6d6c5679582c5727764b0273f21bc3c75..7246ccc1c5ddfd7e29e6ee910fe367895b8574c1 100644 --- a/civicrm/CRM/Admin/Form/Setting/Url.php +++ b/civicrm/CRM/Admin/Form/Setting/Url.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Form/WordReplacements.php b/civicrm/CRM/Admin/Form/WordReplacements.php index 11c4bfbf8da5a71d62567a5287196b25be9bee4f..664d4b9df09ed896fca76d8a807891de097584ca 100644 --- a/civicrm/CRM/Admin/Form/WordReplacements.php +++ b/civicrm/CRM/Admin/Form/WordReplacements.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Admin_Form_WordReplacements extends CRM_Core_Form { protected $_numStrings = 10; diff --git a/civicrm/CRM/Admin/Page/AJAX.php b/civicrm/CRM/Admin/Page/AJAX.php index 3b1d779f82202f06c41a6a86f1cda4a8dff8251c..3303dcc2de6155597dc4d64a6fb6e6c9ddb40930 100644 --- a/civicrm/CRM/Admin/Page/AJAX.php +++ b/civicrm/CRM/Admin/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/APIExplorer.php b/civicrm/CRM/Admin/Page/APIExplorer.php index c5bfa84a05a36fee6fd4d0b0e398b77c19e22007..10360483d8ecf2a44a3464c488d2d3febe9c2ebf 100644 --- a/civicrm/CRM/Admin/Page/APIExplorer.php +++ b/civicrm/CRM/Admin/Page/APIExplorer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Access.php b/civicrm/CRM/Admin/Page/Access.php index 5e493932a2712660f08babab214d419518dca20a..db0ffc860a912589e634bd2c4f68a73933c3c257 100644 --- a/civicrm/CRM/Admin/Page/Access.php +++ b/civicrm/CRM/Admin/Page/Access.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Admin.php b/civicrm/CRM/Admin/Page/Admin.php index e35a5a9f1909f118f2b12abe274fcf71d79becf4..fbafa003cc7a6c8fdd8b258d575c091d1d91906f 100644 --- a/civicrm/CRM/Admin/Page/Admin.php +++ b/civicrm/CRM/Admin/Page/Admin.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/CKEditorConfig.php b/civicrm/CRM/Admin/Page/CKEditorConfig.php index c0e29be43525cba6b372c14cc8bea0c5206ab86a..51321a1713a72e31eb92a04c3de325527b7bb9f8 100644 --- a/civicrm/CRM/Admin/Page/CKEditorConfig.php +++ b/civicrm/CRM/Admin/Page/CKEditorConfig.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -96,10 +96,7 @@ class CRM_Admin_Page_CKEditorConfig extends CRM_Core_Page { 'settings' => $settings, )); - $configUrl = self::getConfigUrl($this->preset); - if (!$configUrl) { - $configUrl = self::getConfigUrl('default'); - } + $configUrl = self::getConfigUrl($this->preset) ?: self::getConfigUrl('default'); $this->assign('preset', $this->preset); $this->assign('presets', CRM_Core_OptionGroup::values('wysiwyg_presets', FALSE, FALSE, FALSE, NULL, 'label', TRUE, FALSE, 'name')); @@ -132,7 +129,13 @@ class CRM_Admin_Page_CKEditorConfig extends CRM_Core_Page { $val = trim($val); if (strpos($key, 'config_') === 0 && strlen($val)) { if ($val != 'true' && $val != 'false' && $val != 'null' && $val[0] != '{' && $val[0] != '[' && !is_numeric($val)) { - $val = json_encode($val); + $val = json_encode($val, JSON_UNESCAPED_SLASHES); + } + elseif ($val[0] == '{' || $val[0] == '[') { + if (!is_array(json_decode($val, TRUE))) { + // Invalid JSON. Do not save. + continue; + } } $pos = strrpos($config, '};'); $key = preg_replace('/^config_/', 'config.', $key); @@ -201,10 +204,7 @@ class CRM_Admin_Page_CKEditorConfig extends CRM_Core_Page { */ private function getConfigSettings() { $matches = $result = array(); - $file = self::getConfigFile($this->preset); - if (!$file) { - $file = self::getConfigFile('default'); - } + $file = self::getConfigFile($this->preset) ?: self::getConfigFile('default'); $result['skin'] = 'moono'; if ($file) { $contents = file_get_contents($file); @@ -270,7 +270,7 @@ class CRM_Admin_Page_CKEditorConfig extends CRM_Core_Page { if (!is_dir(Civi::paths()->getPath('[civicrm.files]/persist'))) { mkdir(Civi::paths()->getPath('[civicrm.files]/persist')); } - $newFileName = Civi::paths()->getPath('[civicrm.files]/persist/crm-ckeditor-default.js'); + $newFileName = Civi::paths()->getPath(self::CONFIG_FILEPATH . 'default.js'); file_put_contents($newFileName, $config); } } diff --git a/civicrm/CRM/Admin/Page/ConfigTaskList.php b/civicrm/CRM/Admin/Page/ConfigTaskList.php index e42fa94b7ef9e6a696ae7117f7808c3479b54823..b9df4b91e224c2373d160d6165ef8456af0e8b37 100644 --- a/civicrm/CRM/Admin/Page/ConfigTaskList.php +++ b/civicrm/CRM/Admin/Page/ConfigTaskList.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/ContactType.php b/civicrm/CRM/Admin/Page/ContactType.php index c11e4a356d2b37e40f55f50f990725ec75b3f9c8..596c26fe7e0f2ed1e756c4ca4ce0af2114144cab 100644 --- a/civicrm/CRM/Admin/Page/ContactType.php +++ b/civicrm/CRM/Admin/Page/ContactType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/EventTemplate.php b/civicrm/CRM/Admin/Page/EventTemplate.php index 72be36e773aa9c0c4eaa5e70ef8bf4143590fea1..8edade59f02b3b41b7eda4476302aa0598473c99 100644 --- a/civicrm/CRM/Admin/Page/EventTemplate.php +++ b/civicrm/CRM/Admin/Page/EventTemplate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Extensions.php b/civicrm/CRM/Admin/Page/Extensions.php index 8abf943cc19071381dcb1847a6d5caa2d540d9d0..126ca59baaeaf645574f211e405ce6c963780332 100644 --- a/civicrm/CRM/Admin/Page/Extensions.php +++ b/civicrm/CRM/Admin/Page/Extensions.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This is a part of CiviCRM extension management functionality. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Job.php b/civicrm/CRM/Admin/Page/Job.php index 3c838b392c3913448a680760cb18f1f1d4d2afd1..25e6c0a2fb0fba6d0d6da60e94ea843374ccf14e 100644 --- a/civicrm/CRM/Admin/Page/Job.php +++ b/civicrm/CRM/Admin/Page/Job.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/JobLog.php b/civicrm/CRM/Admin/Page/JobLog.php index e3128511d05b12552f2b2c24808e7c8e97d548b8..177cdbee0b03628035375038558be50a74202a82 100644 --- a/civicrm/CRM/Admin/Page/JobLog.php +++ b/civicrm/CRM/Admin/Page/JobLog.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/LabelFormats.php b/civicrm/CRM/Admin/Page/LabelFormats.php index a90b78b69593170ca45cdc9255a58b13596c73a6..5c99d8ee6d8297a12974e177e8a0cf61dadb1660 100644 --- a/civicrm/CRM/Admin/Page/LabelFormats.php +++ b/civicrm/CRM/Admin/Page/LabelFormats.php @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/LocationType.php b/civicrm/CRM/Admin/Page/LocationType.php index 32c7af03c019f553ed8c6d580579808175adc099..23e7d71e44eab584f6bd4d58ba7e3e56e807087c 100644 --- a/civicrm/CRM/Admin/Page/LocationType.php +++ b/civicrm/CRM/Admin/Page/LocationType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/MailSettings.php b/civicrm/CRM/Admin/Page/MailSettings.php index a2969ce83ef7af90c6a3756e647e389e5c728d98..3054686adb9dafd7d527d342f0e64bd8831851af 100644 --- a/civicrm/CRM/Admin/Page/MailSettings.php +++ b/civicrm/CRM/Admin/Page/MailSettings.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Mapping.php b/civicrm/CRM/Admin/Page/Mapping.php index 3b690fe4d9bed5f65c5754f5eecff4adc343f7bf..2a0e57a27263df20c3158476141c81d120b2bfdb 100644 --- a/civicrm/CRM/Admin/Page/Mapping.php +++ b/civicrm/CRM/Admin/Page/Mapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/MessageTemplates.php b/civicrm/CRM/Admin/Page/MessageTemplates.php index b9b99b4235fa9c06307f3f61816ed9e7e1d8f32d..f4c1907f6bbbd127bf5a3afa25986acfb4999cba 100644 --- a/civicrm/CRM/Admin/Page/MessageTemplates.php +++ b/civicrm/CRM/Admin/Page/MessageTemplates.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Navigation.php b/civicrm/CRM/Admin/Page/Navigation.php index d22d8be7cd22f40c20af7149176fc6d9953a1f39..865f01ae1ed303eda8a5f63d57d8ea7e242ec66e 100644 --- a/civicrm/CRM/Admin/Page/Navigation.php +++ b/civicrm/CRM/Admin/Page/Navigation.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Options.php b/civicrm/CRM/Admin/Page/Options.php index 1a5fdb8671ef5c7771de63f9864aadd7cff64fc4..dbfe1b9005a97de700c1b5793b963ff2531a95d1 100644 --- a/civicrm/CRM/Admin/Page/Options.php +++ b/civicrm/CRM/Admin/Page/Options.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -151,6 +151,7 @@ class CRM_Admin_Page_Options extends CRM_Core_Page_Basic { $this->assign('showCounted', TRUE); } $this->assign('isLocked', self::$_isLocked); + $this->assign('allowLoggedIn', Civi::settings()->get('allow_mail_from_logged_in_contact')); $config = CRM_Core_Config::singleton(); if (self::$_gName == 'activity_type') { $this->assign('showComponent', TRUE); diff --git a/civicrm/CRM/Admin/Page/ParticipantStatusType.php b/civicrm/CRM/Admin/Page/ParticipantStatusType.php index 899271b9f22ee1be48fa454eb15945ba1da76a2c..6b9c9d326e57e01dcfc4e1f09b5c07993ae064b1 100644 --- a/civicrm/CRM/Admin/Page/ParticipantStatusType.php +++ b/civicrm/CRM/Admin/Page/ParticipantStatusType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Admin_Page_ParticipantStatusType extends CRM_Core_Page_Basic { diff --git a/civicrm/CRM/Admin/Page/PaymentProcessor.php b/civicrm/CRM/Admin/Page/PaymentProcessor.php index 63c9e1917607fe96b04aee7a428b3db6f1bbdc6e..76ddb1619ae370d4285fd4d6a02c84c4aed23b83 100644 --- a/civicrm/CRM/Admin/Page/PaymentProcessor.php +++ b/civicrm/CRM/Admin/Page/PaymentProcessor.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/PaymentProcessorType.php b/civicrm/CRM/Admin/Page/PaymentProcessorType.php index 66239e578a9e3980e21b3c473b558af1967a9080..6b6ed0232f67eed672325ce2f00e3835acb181c0 100644 --- a/civicrm/CRM/Admin/Page/PaymentProcessorType.php +++ b/civicrm/CRM/Admin/Page/PaymentProcessorType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/PdfFormats.php b/civicrm/CRM/Admin/Page/PdfFormats.php index 1c86644879d95b2c47701f5c370a8a3a6a512a3e..dcebf0b193de8673381d2769e84f4d84d6006369 100644 --- a/civicrm/CRM/Admin/Page/PdfFormats.php +++ b/civicrm/CRM/Admin/Page/PdfFormats.php @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Persistent.php b/civicrm/CRM/Admin/Page/Persistent.php index 5fe710b75c8dee33fc8fcf3ad6a66dcb00cf6767..8032f4beabb98984e4eea2b50d6079cecc638c1f 100644 --- a/civicrm/CRM/Admin/Page/Persistent.php +++ b/civicrm/CRM/Admin/Page/Persistent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/PreferencesDate.php b/civicrm/CRM/Admin/Page/PreferencesDate.php index da39905bcaf523c5bdfa9de4d939c8c754d898bb..5dd5e5909ffb00297d4a555f2a7835d4fea539fc 100644 --- a/civicrm/CRM/Admin/Page/PreferencesDate.php +++ b/civicrm/CRM/Admin/Page/PreferencesDate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/RelationshipType.php b/civicrm/CRM/Admin/Page/RelationshipType.php index 9a4f44941dde0bb506c686029e45937c3aa18a70..14962e972870576086e8962f5463b7cb5172950d 100644 --- a/civicrm/CRM/Admin/Page/RelationshipType.php +++ b/civicrm/CRM/Admin/Page/RelationshipType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/ScheduleReminders.php b/civicrm/CRM/Admin/Page/ScheduleReminders.php index 8148cadb63d1695729328b0201fedc5f95bdcd27..64921da5b08a7d6a8b1f84bab570c78edde395f7 100644 --- a/civicrm/CRM/Admin/Page/ScheduleReminders.php +++ b/civicrm/CRM/Admin/Page/ScheduleReminders.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Admin/Page/Setting.php b/civicrm/CRM/Admin/Page/Setting.php index af66540df01d3a8691615e7a370efc5288a8cb54..296c3566a3556c68309d0c5d8a17863d0640a5c8 100644 --- a/civicrm/CRM/Admin/Page/Setting.php +++ b/civicrm/CRM/Admin/Page/Setting.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Badge/BAO/Badge.php b/civicrm/CRM/Badge/BAO/Badge.php index 983de171ac9bfaad6850a53d07a870b80c01d4a0..e7925b5c476d16bc1a09620f8c2f9fd98c42a432 100644 --- a/civicrm/CRM/Badge/BAO/Badge.php +++ b/civicrm/CRM/Badge/BAO/Badge.php @@ -26,7 +26,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Badge/BAO/Layout.php b/civicrm/CRM/Badge/BAO/Layout.php index 40472b3c5445e7bd1aa74f6442611b5369961a40..762f479eba5941733e56b4326cd81ad47259693e 100644 --- a/civicrm/CRM/Badge/BAO/Layout.php +++ b/civicrm/CRM/Badge/BAO/Layout.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Badge_BAO_Layout extends CRM_Core_DAO_PrintLabel { diff --git a/civicrm/CRM/Badge/Form/Layout.php b/civicrm/CRM/Badge/Form/Layout.php index ba4d20170704bfa9f2dc086b357e0b0ba2f9124a..fe51abb1c3e173ac4812a20f03e6401307e56736 100644 --- a/civicrm/CRM/Badge/Form/Layout.php +++ b/civicrm/CRM/Badge/Form/Layout.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Badge/Page/AJAX.php b/civicrm/CRM/Badge/Page/AJAX.php index 986efcafdcf5bbc67a00e4b2cf1ea4e4d161a171..608e3f0bc51bdb0f2c8772a152b99cc9173165c1 100644 --- a/civicrm/CRM/Badge/Page/AJAX.php +++ b/civicrm/CRM/Badge/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ class CRM_Badge_Page_AJAX { diff --git a/civicrm/CRM/Badge/Page/Layout.php b/civicrm/CRM/Badge/Page/Layout.php index 9a448c53d221fce0d9761bfb9473cf81d49dd81a..da191e151a1389f6e8f064c033d4aac3fca09e8b 100644 --- a/civicrm/CRM/Badge/Page/Layout.php +++ b/civicrm/CRM/Badge/Page/Layout.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Batch/BAO/Batch.php b/civicrm/CRM/Batch/BAO/Batch.php index cbe84d0698cfa68c4ae5bd1b9954ba2bebb32977..f7ec3dce4f9f21e4e830a14e518bd6af43f262bb 100644 --- a/civicrm/CRM/Batch/BAO/Batch.php +++ b/civicrm/CRM/Batch/BAO/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Batch/BAO/EntityBatch.php b/civicrm/CRM/Batch/BAO/EntityBatch.php index 9189e733fa3f5d6ee6bc838faf1a975c8e02f800..d13e6e899db647767f02a66797ce8cbe19ba8ea8 100644 --- a/civicrm/CRM/Batch/BAO/EntityBatch.php +++ b/civicrm/CRM/Batch/BAO/EntityBatch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Batch_BAO_EntityBatch extends CRM_Batch_DAO_EntityBatch { diff --git a/civicrm/CRM/Batch/DAO/Batch.php b/civicrm/CRM/Batch/DAO/Batch.php index fa9a16a01447736fba4e6fcbf31da29828cb2f0a..dfdc5dba0f5ee3835ed0133d8adcdfda84a9785a 100644 --- a/civicrm/CRM/Batch/DAO/Batch.php +++ b/civicrm/CRM/Batch/DAO/Batch.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Batch/Batch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Batch/DAO/EntityBatch.php b/civicrm/CRM/Batch/DAO/EntityBatch.php index 4ee6b4382c0acfc0a87202e8a3260f93d6f41eaf..38894cf6d8a2f918f226618baa1e3f9043a1da43 100644 --- a/civicrm/CRM/Batch/DAO/EntityBatch.php +++ b/civicrm/CRM/Batch/DAO/EntityBatch.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Batch/EntityBatch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Batch/Form/Batch.php b/civicrm/CRM/Batch/Form/Batch.php index 529bbdae23673bab8fc61b376a61bba113ef7602..bdad95626d87019a4e379cc3a5a365d999262f87 100644 --- a/civicrm/CRM/Batch/Form/Batch.php +++ b/civicrm/CRM/Batch/Form/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Batch/Form/Entry.php b/civicrm/CRM/Batch/Form/Entry.php index 7e58b23d08c29c86b0a023bb5ca736c61268ee81..5173aac2f5934ca73f2e4375dbfa4511b95d207a 100644 --- a/civicrm/CRM/Batch/Form/Entry.php +++ b/civicrm/CRM/Batch/Form/Entry.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Batch/Form/Search.php b/civicrm/CRM/Batch/Form/Search.php index 42f218967999a30d7608ca779a57003a905f5e29..1ff788772fd1818ef63983ae2dc539cda28def47 100644 --- a/civicrm/CRM/Batch/Form/Search.php +++ b/civicrm/CRM/Batch/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Batch_Form_Search extends CRM_Core_Form { /** diff --git a/civicrm/CRM/Batch/Page/AJAX.php b/civicrm/CRM/Batch/Page/AJAX.php index 2877e0244cc27c9188cbfe5c42ba4dcb4953dfeb..a02427ba5dab8536ff158e4859b526777a08653f 100644 --- a/civicrm/CRM/Batch/Page/AJAX.php +++ b/civicrm/CRM/Batch/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Batch/Page/Batch.php b/civicrm/CRM/Batch/Page/Batch.php index ddbe0338eec6fd693845b90d79455589b9a6bdfa..23fd26717217c3964a09d7e9a52c5b62d1090a28 100644 --- a/civicrm/CRM/Batch/Page/Batch.php +++ b/civicrm/CRM/Batch/Page/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Bridge/OG/CiviCRM.php b/civicrm/CRM/Bridge/OG/CiviCRM.php index bab36080113009e05f263f6c61078246565e598f..bc8220a4b83f2b21ea16de4c8958ed37ef2a3046 100644 --- a/civicrm/CRM/Bridge/OG/CiviCRM.php +++ b/civicrm/CRM/Bridge/OG/CiviCRM.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Bridge_OG_CiviCRM { diff --git a/civicrm/CRM/Bridge/OG/Drupal.php b/civicrm/CRM/Bridge/OG/Drupal.php index bff8507cfbd4c1559da31c3fc2d6d4ae82f7a306..042a6fcb99f79432a182675bcc074810eac35950 100644 --- a/civicrm/CRM/Bridge/OG/Drupal.php +++ b/civicrm/CRM/Bridge/OG/Drupal.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Bridge/OG/Utils.php b/civicrm/CRM/Bridge/OG/Utils.php index a1fc56e9a828f0958f7de5818b76087d612947f5..871931033b78634521838a51f68ec2c00b685d99 100644 --- a/civicrm/CRM/Bridge/OG/Utils.php +++ b/civicrm/CRM/Bridge/OG/Utils.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Bridge_OG_Utils { const aclEnabled = 1, syncFromCiviCRM = 1; diff --git a/civicrm/CRM/Campaign/BAO/Campaign.php b/civicrm/CRM/Campaign/BAO/Campaign.php index 43c534f5ef4d2829bf41f7acd9c5a438efbb0141..48896de1d7ffc38d0bb95e398da6b6bbb7f633d9 100644 --- a/civicrm/CRM/Campaign/BAO/Campaign.php +++ b/civicrm/CRM/Campaign/BAO/Campaign.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Campaign_BAO_Campaign extends CRM_Campaign_DAO_Campaign { diff --git a/civicrm/CRM/Campaign/BAO/Petition.php b/civicrm/CRM/Campaign/BAO/Petition.php index cb1c1b72a618f0a29bc30de93fd926c24a59d8a3..9e19ca136c04b93fe554b00482e419f6435750c9 100644 --- a/civicrm/CRM/Campaign/BAO/Petition.php +++ b/civicrm/CRM/Campaign/BAO/Petition.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Campaign_BAO_Petition extends CRM_Campaign_BAO_Survey { /** diff --git a/civicrm/CRM/Campaign/BAO/Query.php b/civicrm/CRM/Campaign/BAO/Query.php index 1a181247d07b67467956e496e79a7ace201fd09b..c22316de298cafec03f1e1a3fcdee6a51f2d1e65 100644 --- a/civicrm/CRM/Campaign/BAO/Query.php +++ b/civicrm/CRM/Campaign/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Campaign_BAO_Query { //since normal activity clause clause get collides. diff --git a/civicrm/CRM/Campaign/BAO/Survey.php b/civicrm/CRM/Campaign/BAO/Survey.php index a652633d726a4da66f6a1049a70a731fb88abdd5..626ed8f0fd07072e0657b38e774799f5a5ac809b 100644 --- a/civicrm/CRM/Campaign/BAO/Survey.php +++ b/civicrm/CRM/Campaign/BAO/Survey.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -61,15 +61,12 @@ class CRM_Campaign_BAO_Survey extends CRM_Campaign_DAO_Survey { } /** - * Takes an associative array and creates a Survey object. - * - * the function extract all the params it needs to initialize the create a - * survey object. - * + * Takes an associative array and creates a Survey object based on the + * supplied values. * * @param array $params * - * @return CRM_Survey_DAO_Survey + * @return bool|CRM_Campaign_DAO_Survey */ public static function create(&$params) { if (empty($params)) { @@ -90,12 +87,24 @@ class CRM_Campaign_BAO_Survey extends CRM_Campaign_DAO_Survey { if (!(CRM_Utils_Array::value('created_date', $params))) { $params['created_date'] = date('YmdHis'); } + + CRM_Utils_Hook::pre('create', 'Survey', NULL, $params); + } + else { + CRM_Utils_Hook::pre('edit', 'Survey', $params['id'], $params); } $dao = new CRM_Campaign_DAO_Survey(); $dao->copyValues($params); $dao->save(); + if (!empty($params['id'])) { + CRM_Utils_Hook::post('edit', 'Survey', $dao->id, $dao); + } + else { + CRM_Utils_Hook::post('create', 'Survey', $dao->id, $dao); + } + if (!empty($params['custom']) && is_array($params['custom']) ) { diff --git a/civicrm/CRM/Campaign/Controller/Search.php b/civicrm/CRM/Campaign/Controller/Search.php index b306e52957d5ded2635e58339acdca95d9b0d316..e0adbceb04cae296b09b526de3dd4eac6f9718f0 100644 --- a/civicrm/CRM/Campaign/Controller/Search.php +++ b/civicrm/CRM/Campaign/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/DAO/Campaign.php b/civicrm/CRM/Campaign/DAO/Campaign.php index 99b0bd359ed515c2cc7da43bd71586d25c3aea8b..182908f4dea2dd339df69d45565f5a616e4d8ac1 100644 --- a/civicrm/CRM/Campaign/DAO/Campaign.php +++ b/civicrm/CRM/Campaign/DAO/Campaign.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Campaign/Campaign.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Campaign/DAO/CampaignGroup.php b/civicrm/CRM/Campaign/DAO/CampaignGroup.php index e6dda96f316a4819d924ec72fce53065faf97eaf..aa3d3ba831b6691fb0381bc94d91f8f16845e5b7 100644 --- a/civicrm/CRM/Campaign/DAO/CampaignGroup.php +++ b/civicrm/CRM/Campaign/DAO/CampaignGroup.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Campaign/CampaignGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Campaign/DAO/Survey.php b/civicrm/CRM/Campaign/DAO/Survey.php index 30ad453f183e7c3ff998f3fc1a69cf59b746fdde..ebb2c5275acfe3be6985f400f7a208074d77017e 100644 --- a/civicrm/CRM/Campaign/DAO/Survey.php +++ b/civicrm/CRM/Campaign/DAO/Survey.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Campaign/Survey.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Campaign/Form/Campaign.php b/civicrm/CRM/Campaign/Form/Campaign.php index 2d4f97b5552753e44a7ec5c972f27bd795bc584a..9feb418b7fd08d695b4f3294983f3e7be2605fd7 100644 --- a/civicrm/CRM/Campaign/Form/Campaign.php +++ b/civicrm/CRM/Campaign/Form/Campaign.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Gotv.php b/civicrm/CRM/Campaign/Form/Gotv.php index bdb78d7bcbbd7f1714416ffefdefb9624dce73fe..21585020533dce79691092c2175a36c105120958 100644 --- a/civicrm/CRM/Campaign/Form/Gotv.php +++ b/civicrm/CRM/Campaign/Form/Gotv.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Petition.php b/civicrm/CRM/Campaign/Form/Petition.php index abcfc81d394a5cbd1612d213f90be3b835c85a0b..7185ac8c5ef5dcc11c74292c4ed9d940155b3382 100644 --- a/civicrm/CRM/Campaign/Form/Petition.php +++ b/civicrm/CRM/Campaign/Form/Petition.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Petition/Signature.php b/civicrm/CRM/Campaign/Form/Petition/Signature.php index f144dc4076b076a774c2960c6a8de8ab163f59b2..31823573e4b56817059a47d782eb1f1d82dd2f71 100644 --- a/civicrm/CRM/Campaign/Form/Petition/Signature.php +++ b/civicrm/CRM/Campaign/Form/Petition/Signature.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Search.php b/civicrm/CRM/Campaign/Form/Search.php index da3d9fafbcb15522f5d3929c056f83bddbe232ff..a8f5d7ff9393f8c70e6224c526462ef4d231b803 100644 --- a/civicrm/CRM/Campaign/Form/Search.php +++ b/civicrm/CRM/Campaign/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -205,14 +205,13 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search { $this->addRowSelectors($rows); } - $permission = CRM_Core_Permission::getPermission(); - $allTasks = CRM_Campaign_Task::permissionedTaskTitles($permission); + $allTasks = CRM_Campaign_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission()); //hack to serve right page to state machine. $taskMapping = array( - 'interview' => 1, - 'reserve' => 2, - 'release' => 3, + 'interview' => CRM_Campaign_Task::INTERVIEW, + 'reserve' => CRM_Campaign_Task::RESERVE, + 'release' => CRM_Campaign_Task::RELEASE, ); $currentTaskValue = CRM_Utils_Array::value($this->_operation, $taskMapping); diff --git a/civicrm/CRM/Campaign/Form/Search/Campaign.php b/civicrm/CRM/Campaign/Form/Search/Campaign.php index f7a837716449438046db91a74836880213f86cbb..bab970a3ddd6ebb764c13d62daebb37ce5cec3bf 100644 --- a/civicrm/CRM/Campaign/Form/Search/Campaign.php +++ b/civicrm/CRM/Campaign/Form/Search/Campaign.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Search/Petition.php b/civicrm/CRM/Campaign/Form/Search/Petition.php index d9bbabe0f9eef561d1c1ab32b5a7963be2c03b97..1c6e01ea0016e1c87a745aba5d8b1a3a2a2cc78f 100644 --- a/civicrm/CRM/Campaign/Form/Search/Petition.php +++ b/civicrm/CRM/Campaign/Form/Search/Petition.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Search/Survey.php b/civicrm/CRM/Campaign/Form/Search/Survey.php index 781f61101b7abf3a3ef839e9873cc2da247ab192..cca82c0fd8e17131c8884643c8af604423102fff 100644 --- a/civicrm/CRM/Campaign/Form/Search/Survey.php +++ b/civicrm/CRM/Campaign/Form/Search/Survey.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Survey.php b/civicrm/CRM/Campaign/Form/Survey.php index ea1113db7d2a68258c7d188ca51de5b05d4ba982..2a465cb6c1a239c77a136047073538bcd78e55b6 100644 --- a/civicrm/CRM/Campaign/Form/Survey.php +++ b/civicrm/CRM/Campaign/Form/Survey.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Survey/Delete.php b/civicrm/CRM/Campaign/Form/Survey/Delete.php index 503b4b1160a760e4ec14c0551a3bd8ea476da7d4..d283ba722ff496f8b5eeb5710bc9b8c3b917a770 100644 --- a/civicrm/CRM/Campaign/Form/Survey/Delete.php +++ b/civicrm/CRM/Campaign/Form/Survey/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Survey/Main.php b/civicrm/CRM/Campaign/Form/Survey/Main.php index aae8c13410c870a9c41f284303a0cbad9bc612c7..8a2f88f13c85c5fe5c610d1ec96c830733cc2957 100644 --- a/civicrm/CRM/Campaign/Form/Survey/Main.php +++ b/civicrm/CRM/Campaign/Form/Survey/Main.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Survey/Questions.php b/civicrm/CRM/Campaign/Form/Survey/Questions.php index 1dfd387d7fb2f3e9910948fc983d7681a3869048..858237343f7f7cc1e9a53cb6dca6e7a0f93e7093 100644 --- a/civicrm/CRM/Campaign/Form/Survey/Questions.php +++ b/civicrm/CRM/Campaign/Form/Survey/Questions.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Survey/Results.php b/civicrm/CRM/Campaign/Form/Survey/Results.php index 15c5dbfc98ca44112b582994ddbd9d70ea5112e5..d8c070c6eef75756736acbf277f9ea1f33eab56e 100644 --- a/civicrm/CRM/Campaign/Form/Survey/Results.php +++ b/civicrm/CRM/Campaign/Form/Survey/Results.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Survey/TabHeader.php b/civicrm/CRM/Campaign/Form/Survey/TabHeader.php index ee5c58c81e66e7feb9d38f1a3eb1177297c4b27e..6b4aea1d7d2fb6a6b81b6d2cfb8d8e4784221585 100644 --- a/civicrm/CRM/Campaign/Form/Survey/TabHeader.php +++ b/civicrm/CRM/Campaign/Form/Survey/TabHeader.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/SurveyType.php b/civicrm/CRM/Campaign/Form/SurveyType.php index 2d936f469af439506838d5adc288c592cfd123a0..afae24df237292ddb7d42dbcd9250ac67b7e0033 100644 --- a/civicrm/CRM/Campaign/Form/SurveyType.php +++ b/civicrm/CRM/Campaign/Form/SurveyType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Task.php b/civicrm/CRM/Campaign/Form/Task.php index 7366d5d605b337e2738636d5a58cea85a588d12d..3a27eb0b3361751d7dc19f8aa627f256787735dd 100644 --- a/civicrm/CRM/Campaign/Form/Task.php +++ b/civicrm/CRM/Campaign/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Task/Interview.php b/civicrm/CRM/Campaign/Form/Task/Interview.php index 8c0ce7992f8b82fb959740350a161bf5025fc643..191e39b81058c31c8945d4c6139517320b70fff7 100644 --- a/civicrm/CRM/Campaign/Form/Task/Interview.php +++ b/civicrm/CRM/Campaign/Form/Task/Interview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Task/Print.php b/civicrm/CRM/Campaign/Form/Task/Print.php index 6fc4c94f1e345b6b42689bdbb64bb763f6f1e93a..e6fe1c6e4864e5f783a6e0965f3e23fc018f60c7 100644 --- a/civicrm/CRM/Campaign/Form/Task/Print.php +++ b/civicrm/CRM/Campaign/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Task/Release.php b/civicrm/CRM/Campaign/Form/Task/Release.php index 9f1d0cdcd3c9ed8204662f8af58a248e71548880..d6ec8a139e76450dbce5d9d36cead3bb7cc87fa4 100644 --- a/civicrm/CRM/Campaign/Form/Task/Release.php +++ b/civicrm/CRM/Campaign/Form/Task/Release.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Task/Reserve.php b/civicrm/CRM/Campaign/Form/Task/Reserve.php index 6638ee1950ea808d591e9c2da84e667251898c35..6c7ebbe7be7b30894b9b4b17bdc999ada9737c7e 100644 --- a/civicrm/CRM/Campaign/Form/Task/Reserve.php +++ b/civicrm/CRM/Campaign/Form/Task/Reserve.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Form/Task/Result.php b/civicrm/CRM/Campaign/Form/Task/Result.php index 98bd9fb731249ab666756b143dc1f9dd9a969446..29a9a7e0afcb489ef02ffa39fe6377221a648ca1 100644 --- a/civicrm/CRM/Campaign/Form/Task/Result.php +++ b/civicrm/CRM/Campaign/Form/Task/Result.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Info.php b/civicrm/CRM/Campaign/Info.php index 8667ca30c38c935f0c9adbd41603300ddcc17ff2..d8d6f9159959e9b634a8477007fe9fea4ca05e50 100644 --- a/civicrm/CRM/Campaign/Info.php +++ b/civicrm/CRM/Campaign/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * abstract class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Campaign_Info extends CRM_Core_Component_Info { diff --git a/civicrm/CRM/Campaign/Page/AJAX.php b/civicrm/CRM/Campaign/Page/AJAX.php index caaadfad8a08f5d72546e1ecfe4f05c7fec3f2a1..f1534cbefe58b5f63f5926b220d17a04beaf0f96 100644 --- a/civicrm/CRM/Campaign/Page/AJAX.php +++ b/civicrm/CRM/Campaign/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Campaign/Page/DashBoard.php b/civicrm/CRM/Campaign/Page/DashBoard.php index 0ba913f40835f81928fe76dd99b703b70d4da4f7..0f179b6adccfb2c0e2c02f1130a55e832f5e35bc 100644 --- a/civicrm/CRM/Campaign/Page/DashBoard.php +++ b/civicrm/CRM/Campaign/Page/DashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | --------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Page/Petition.php b/civicrm/CRM/Campaign/Page/Petition.php index 9a10f16752e994464bc883c8cb0562dc9080138c..41e115b455e73e97d949939ba78b0c1dbad4b602 100644 --- a/civicrm/CRM/Campaign/Page/Petition.php +++ b/civicrm/CRM/Campaign/Page/Petition.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Page/Petition/Confirm.php b/civicrm/CRM/Campaign/Page/Petition/Confirm.php index d68ae05f098c21a0d35b164d9ecb303fff3eb487..2fca570d41b2a34208c4df2ba0d7b42fd7d6cb8e 100644 --- a/civicrm/CRM/Campaign/Page/Petition/Confirm.php +++ b/civicrm/CRM/Campaign/Page/Petition/Confirm.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Campaign_Page_Petition_Confirm extends CRM_Core_Page { /** diff --git a/civicrm/CRM/Campaign/Page/Petition/ThankYou.php b/civicrm/CRM/Campaign/Page/Petition/ThankYou.php index f0fc9fffb21e20e2eb36473d87a7ddef65902f90..8a8eea467246474a361b52cd08c78a25f4eecda4 100644 --- a/civicrm/CRM/Campaign/Page/Petition/ThankYou.php +++ b/civicrm/CRM/Campaign/Page/Petition/ThankYou.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Campaign_Page_Petition_ThankYou extends CRM_Core_Page { /** diff --git a/civicrm/CRM/Campaign/Page/SurveyType.php b/civicrm/CRM/Campaign/Page/SurveyType.php index 74da1d9f3186e91e9ebac581143400b4815f7be9..0a15c6140f34f1d9414a2d4154eeb5a322729d71 100644 --- a/civicrm/CRM/Campaign/Page/SurveyType.php +++ b/civicrm/CRM/Campaign/Page/SurveyType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Page/Vote.php b/civicrm/CRM/Campaign/Page/Vote.php index 76586b3699ad761fb862c7b866f4e10846a4ad36..449129372af71b6c1161299a2649a46c75516c07 100644 --- a/civicrm/CRM/Campaign/Page/Vote.php +++ b/civicrm/CRM/Campaign/Page/Vote.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | --------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/PseudoConstant.php b/civicrm/CRM/Campaign/PseudoConstant.php index c50535c595196f3e8e3f15067b23d11412e2b183..fa7f4013480181ec882e2acdfa6a20d521ebe135 100644 --- a/civicrm/CRM/Campaign/PseudoConstant.php +++ b/civicrm/CRM/Campaign/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/Selector/Search.php b/civicrm/CRM/Campaign/Selector/Search.php index f97eace40aeb09c4af2d762bf827d761a47fa96a..0127fec731856512db49d995395ca60fe5fff346 100644 --- a/civicrm/CRM/Campaign/Selector/Search.php +++ b/civicrm/CRM/Campaign/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Campaign/StateMachine/Search.php b/civicrm/CRM/Campaign/StateMachine/Search.php index 3ff6997b460456cfcb762de237c5fabf2499d2b9..8f036637d29dd3042f813f9610a719051d6e5b8d 100644 --- a/civicrm/CRM/Campaign/StateMachine/Search.php +++ b/civicrm/CRM/Campaign/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Campaign_StateMachine_Search extends CRM_Core_StateMachine { diff --git a/civicrm/CRM/Campaign/Task.php b/civicrm/CRM/Campaign/Task.php index 2b12d19e00476cd1ce6b65ea3d11807f2ac95213..13906d60302ba5e8d7021cfbf0fd93858ed232c9 100644 --- a/civicrm/CRM/Campaign/Task.php +++ b/civicrm/CRM/Campaign/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -36,22 +36,15 @@ * * Used by the search forms. */ -class CRM_Campaign_Task { - const INTERVIEW = 1, RESERVE = 2, RELEASE = 3, PRINT_VOTERS = 4; +class CRM_Campaign_Task extends CRM_Core_Task { - /** - * The task array - * - * @var array - */ - static $_tasks = NULL; + const + // Campaign tasks + INTERVIEW = 601, + RESERVE = 602, + RELEASE = 603; - /** - * The optional task array - * - * @var array - */ - static $_optionalTasks = NULL; + static $objectType = 'campaign'; /** * These tasks are the core set of tasks that the user can perform @@ -60,10 +53,10 @@ class CRM_Campaign_Task { * @return array * the set of tasks for a group of voters. */ - public static function &tasks() { + public static function tasks() { if (!(self::$_tasks)) { self::$_tasks = array( - 1 => array( + self::INTERVIEW => array( 'title' => ts('Record Respondents Interview'), 'class' => array( 'CRM_Campaign_Form_Task_Interview', @@ -71,7 +64,7 @@ class CRM_Campaign_Task { ), 'result' => FALSE, ), - 2 => array( + self::RESERVE => array( 'title' => ts('Reserve Respondents'), 'class' => array( 'CRM_Campaign_Form_Task_Reserve', @@ -80,54 +73,38 @@ class CRM_Campaign_Task { ), 'result' => FALSE, ), - 3 => array( + self::RELEASE => array( 'title' => ts('Release Respondents'), 'class' => 'CRM_Campaign_Form_Task_Release', 'result' => FALSE, ), - 4 => array( + self::TASK_PRINT => array( 'title' => ts('Print Respondents'), 'class' => 'CRM_Campaign_Form_Task_Print', 'result' => FALSE, ), ); - CRM_Utils_Hook::searchTasks('campaign', self::$_tasks); - asort(self::$_tasks); + parent::tasks(); } return self::$_tasks; } - /** - * These tasks are the core set of task titles - * on voters. - * - * @return array - * the set of task titles - */ - public static function &taskTitles() { - self::tasks(); - $titles = array(); - foreach (self::$_tasks as $id => $value) { - $titles[$id] = $value['title']; - } - - return $titles; - } - /** * Show tasks selectively based on the permission level * of the user * * @param int $permission + * @param array $params * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission) { + public static function permissionedTaskTitles($permission, $params = array()) { $tasks = self::taskTitles(); + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); return $tasks; } @@ -143,8 +120,8 @@ class CRM_Campaign_Task { public static function getTask($value) { self::tasks(); if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) { - // make the interview task by default - $value = 1; + // Set the interview task as default + $value = self::INTERVIEW; } return array( diff --git a/civicrm/CRM/Case/BAO/Case.php b/civicrm/CRM/Case/BAO/Case.php index 2dea9949360f5f7a8a319abf90c421f242126389..91bebdf1235b16c38dd6200ab124754e5476c449 100644 --- a/civicrm/CRM/Case/BAO/Case.php +++ b/civicrm/CRM/Case/BAO/Case.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/BAO/CaseContact.php b/civicrm/CRM/Case/BAO/CaseContact.php index ea85094adc0e46e54477ff030e08fccf7346dbbe..ab8d134ab88678cd04c256005f041bd44de401c7 100644 --- a/civicrm/CRM/Case/BAO/CaseContact.php +++ b/civicrm/CRM/Case/BAO/CaseContact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/BAO/CaseType.php b/civicrm/CRM/Case/BAO/CaseType.php index 5f028ec7442f3cf91011bf06c5c8bbc74b2ddff0..ee220afd200c94937026dae802d362eee6af3e2b 100644 --- a/civicrm/CRM/Case/BAO/CaseType.php +++ b/civicrm/CRM/Case/BAO/CaseType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/BAO/Query.php b/civicrm/CRM/Case/BAO/Query.php index 753702893fc1671482bf8d0edb5bfeb25a9b6728..d9a45cc297ac3dcfc888668d8fc6ea085fc3010d 100644 --- a/civicrm/CRM/Case/BAO/Query.php +++ b/civicrm/CRM/Case/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Case_BAO_Query extends CRM_Core_BAO_Query { diff --git a/civicrm/CRM/Case/Controller/Search.php b/civicrm/CRM/Case/Controller/Search.php index 57ef1e05d8847b9357ef061e0c7f2650a2a479c3..7481f1d53130114bc00d94fcae0919a6b672674b 100644 --- a/civicrm/CRM/Case/Controller/Search.php +++ b/civicrm/CRM/Case/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/DAO/Case.php b/civicrm/CRM/Case/DAO/Case.php index d54b69eaf512c7b885c76a7ebbd97a7785def4a7..514544ec04c340c03dfd71e12f1a2c4cb60fef2d 100644 --- a/civicrm/CRM/Case/DAO/Case.php +++ b/civicrm/CRM/Case/DAO/Case.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Case/Case.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Case/DAO/CaseActivity.php b/civicrm/CRM/Case/DAO/CaseActivity.php index 352e134e0de9f3040c101951899db9e35bf14e3f..6f084690afef2db852286483e2fa2b6cd8f97fca 100644 --- a/civicrm/CRM/Case/DAO/CaseActivity.php +++ b/civicrm/CRM/Case/DAO/CaseActivity.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Case/CaseActivity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Case/DAO/CaseContact.php b/civicrm/CRM/Case/DAO/CaseContact.php index 9c297170eb8322ddabac113c9834c5f17ca42899..38a1147f8935a81910d1c44cd3f300535f192a19 100644 --- a/civicrm/CRM/Case/DAO/CaseContact.php +++ b/civicrm/CRM/Case/DAO/CaseContact.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Case/CaseContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Case/DAO/CaseType.php b/civicrm/CRM/Case/DAO/CaseType.php index 8ee224bf4a3d11270b90da30a766d555011fe8c3..b55d114318aa244099da48c5e2b6be3695b378bc 100644 --- a/civicrm/CRM/Case/DAO/CaseType.php +++ b/civicrm/CRM/Case/DAO/CaseType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Case/CaseType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Case/Form/Activity.php b/civicrm/CRM/Case/Form/Activity.php index 9bebe8b97e926eb8261de965f30eccacceb1a29c..852fed9e19cf0722feb43065774949a566b1d3cd 100644 --- a/civicrm/CRM/Case/Form/Activity.php +++ b/civicrm/CRM/Case/Form/Activity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Activity/ChangeCaseStartDate.php b/civicrm/CRM/Case/Form/Activity/ChangeCaseStartDate.php index bc0e25b07a2eef9b32ed8978c76af9845431eae0..14494ed04aee5d6b40545b31d79427c07ed6bc7d 100644 --- a/civicrm/CRM/Case/Form/Activity/ChangeCaseStartDate.php +++ b/civicrm/CRM/Case/Form/Activity/ChangeCaseStartDate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Activity/ChangeCaseStatus.php b/civicrm/CRM/Case/Form/Activity/ChangeCaseStatus.php index 57361dcd610e94227cf1d4567bb633c22480c446..bb0d603f5012d4b7f736e0ace226828642f9e6f4 100644 --- a/civicrm/CRM/Case/Form/Activity/ChangeCaseStatus.php +++ b/civicrm/CRM/Case/Form/Activity/ChangeCaseStatus.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Activity/ChangeCaseType.php b/civicrm/CRM/Case/Form/Activity/ChangeCaseType.php index 946d90aae0309ed067576c8246164be86530cf3f..ba3f46725d00a6c208c9ecb279912d56c74a6a03 100644 --- a/civicrm/CRM/Case/Form/Activity/ChangeCaseType.php +++ b/civicrm/CRM/Case/Form/Activity/ChangeCaseType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Activity/LinkCases.php b/civicrm/CRM/Case/Form/Activity/LinkCases.php index 294b1d03774f8f4fe154977fdbb763f75ec401a0..967b6536eab93099f3a45d0f704f17e138985659 100644 --- a/civicrm/CRM/Case/Form/Activity/LinkCases.php +++ b/civicrm/CRM/Case/Form/Activity/LinkCases.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Activity/OpenCase.php b/civicrm/CRM/Case/Form/Activity/OpenCase.php index 506b3951d077a9f8a08c8cfc0815b98c16037ffb..afd7ac218975d315e8928a3d09bd2c59bb55d71e 100644 --- a/civicrm/CRM/Case/Form/Activity/OpenCase.php +++ b/civicrm/CRM/Case/Form/Activity/OpenCase.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/ActivityToCase.php b/civicrm/CRM/Case/Form/ActivityToCase.php index f33cfbdb8ef820318789dc6a5612900a72a8e0b9..87967baa63594ea048e8052539f2b8e7f92b317d 100644 --- a/civicrm/CRM/Case/Form/ActivityToCase.php +++ b/civicrm/CRM/Case/Form/ActivityToCase.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/ActivityView.php b/civicrm/CRM/Case/Form/ActivityView.php index 7b1ccd7b7a29df5c97443bd96d9e11bb93afa021..9459d9c21cb95f3e5565c8b9af45fea6120853dd 100644 --- a/civicrm/CRM/Case/Form/ActivityView.php +++ b/civicrm/CRM/Case/Form/ActivityView.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Case.php b/civicrm/CRM/Case/Form/Case.php index 55d2122fe01bafde087c3fa556ccdebe4453a45f..8b993f697e178b74ed5d85ee1e5ab453aa3ee5ba 100644 --- a/civicrm/CRM/Case/Form/Case.php +++ b/civicrm/CRM/Case/Form/Case.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/CaseView.php b/civicrm/CRM/Case/Form/CaseView.php index 07a24dc106e484b3989a6e3237fe565b5b6c75f1..d05d41cd4c63fea229cd36cbc766e9138d6a4fb1 100644 --- a/civicrm/CRM/Case/Form/CaseView.php +++ b/civicrm/CRM/Case/Form/CaseView.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/CustomData.php b/civicrm/CRM/Case/Form/CustomData.php index ddfe9f357c4d1fc7e8b058b6aa0de7ebddcd4634..564a4e3889d6db1490ab727053795587a1c6fd1b 100644 --- a/civicrm/CRM/Case/Form/CustomData.php +++ b/civicrm/CRM/Case/Form/CustomData.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/EditClient.php b/civicrm/CRM/Case/Form/EditClient.php index a93cb14e3e641a5ca5a3c25bad871cd8814657d4..1275e2f6864714304d51ff19284b6992f018ad5f 100644 --- a/civicrm/CRM/Case/Form/EditClient.php +++ b/civicrm/CRM/Case/Form/EditClient.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Report.php b/civicrm/CRM/Case/Form/Report.php index a256d4410ee2fcdae2e9bd13ae558de2bb0118e6..805b6f53692703c25310833438e46f867463c5aa 100644 --- a/civicrm/CRM/Case/Form/Report.php +++ b/civicrm/CRM/Case/Form/Report.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Search.php b/civicrm/CRM/Case/Form/Search.php index 37b0b38dbaad331a7c33ec35265b009a27373faa..3d728857476b62f56c5f1c38812ca88b5c82d555 100644 --- a/civicrm/CRM/Case/Form/Search.php +++ b/civicrm/CRM/Case/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -174,15 +174,13 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search { $this->addRowSelectors($rows); } - $permission = CRM_Core_Permission::getPermission(); - - $tasks = CRM_Case_Task::permissionedTaskTitles($permission); + $tasks = CRM_Case_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission()); if (!empty($this->_formValues['case_deleted'])) { - unset($tasks[1]); + unset($tasks[CRM_Case_Task::DELETE]); } else { - unset($tasks[4]); + unset($tasks[CRM_Case_Task::RESTORE_CASES]); } $this->addTaskMenu($tasks); diff --git a/civicrm/CRM/Case/Form/Task.php b/civicrm/CRM/Case/Form/Task.php index d8e93ccfb16aa673ef7d65a94c5cebc38b2ad505..3a5c4f1d7f4687a65aafbf32e5c6739d02f2d99e 100644 --- a/civicrm/CRM/Case/Form/Task.php +++ b/civicrm/CRM/Case/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -26,41 +26,25 @@ */ /** - * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** - * This class generates task actions for CiviEvent. + * This class generates form task actions for CiviCase. */ -class CRM_Case_Form_Task extends CRM_Core_Form { +class CRM_Case_Form_Task extends CRM_Core_Form_Task { - /** - * The task being performed - * - * @var int - */ - protected $_task; - - /** - * The additional clause that we restrict the search with - * - * @var string - */ - protected $_componentClause = NULL; - - /** - * The array that holds all the component ids - * - * @var array - */ - protected $_componentIds; + // Must be set to entity table name (eg. civicrm_participant) by child class + static $tableName = 'civicrm_case'; + // Must be set to entity shortname (eg. event) + static $entityShortname = 'case'; /** - * The array that holds all the case ids + * Deprecated copy of $_entityIds * * @var array + * @deprecated */ public $_caseIds; @@ -73,9 +57,8 @@ class CRM_Case_Form_Task extends CRM_Core_Form { /** * @param CRM_Core_Form $form - * @param bool $useTable */ - public static function preProcessCommon(&$form, $useTable = FALSE) { + public static function preProcessCommon(&$form) { $form->_caseIds = array(); $values = $form->controller->exportValues($form->get('searchFormName')); @@ -110,7 +93,7 @@ class CRM_Case_Form_Task extends CRM_Core_Form { $form->assign('totalSelectedCases', count($ids)); } - $form->_caseIds = $form->_componentIds = $ids; + $form->_caseIds = $form->_entityIds = $form->_componentIds = $ids; //set the context for redirection for any task actions $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $form); @@ -132,38 +115,11 @@ class CRM_Case_Form_Task extends CRM_Core_Form { } /** - * Given the signer id, compute the contact id - * since its used for things like send email + * @inheritDoc */ public function setContactIDs() { - $this->_contactIds = &CRM_Core_DAO::getContactIDsFromComponent($this->_caseIds, - 'civicrm_case_contact' - ); - } - - /** - * Simple shell that derived classes can call to add buttons to - * the form with a customized title for the main Submit - * - * @param string $title - * Title of the main button. - * @param string $nextType - * Button type for the form after processing. - * @param string $backType - * @param bool $submitOnce - */ - public function addDefaultButtons($title, $nextType = 'next', $backType = 'back', $submitOnce = FALSE) { - $this->addButtons(array( - array( - 'type' => $nextType, - 'name' => $title, - 'isDefault' => TRUE, - ), - array( - 'type' => $backType, - 'name' => ts('Cancel'), - ), - ) + $this->_contactIds = CRM_Core_DAO::getContactIDsFromComponent($this->_entityIds, + 'civicrm_case_contact', 'case_id' ); } diff --git a/civicrm/CRM/Case/Form/Task/Batch.php b/civicrm/CRM/Case/Form/Task/Batch.php new file mode 100644 index 0000000000000000000000000000000000000000..b2f0419c1a7597e7ed00d2f0fddbdcc2037dd984 --- /dev/null +++ b/civicrm/CRM/Case/Form/Task/Batch.php @@ -0,0 +1,118 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2018 + */ + +/** + * This class provides the functionality for batch profile update for cases + */ +class CRM_Case_Form_Task_Batch extends CRM_Core_Form_Task_Batch { + + // Must be set to entity table name (eg. civicrm_participant) by child class + static $tableName = 'civicrm_case'; + // Must be set to entity shortname (eg. event) + static $entityShortname = 'case'; + + /** + * Process the form after the input has been submitted and validated. + * + * @return void + */ + public function postProcess() { + $params = $this->exportValues(); + + if (!isset($params['field'])) { + CRM_Core_Session::setStatus(ts('No updates have been saved.'), ts('Not Saved'), 'alert'); + return; + } + + $customFields = array(); + $dateFields = array( + 'case_created_date', + 'case_start_date', + 'case_end_date', + 'case_modified_date', + ); + foreach ($params['field'] as $key => $value) { + $value['id'] = $key; + + if (!empty($value['case_type'])) { + $caseTypeId = $value['case_type_id'] = $value['case_type'][1]; + } + unset($value['case_type']); + + // Get the case status + $daoClass = 'CRM_Case_DAO_Case'; + $caseStatus = CRM_Utils_Array::value('case_status', $value); + if (!$caseStatus) { + // default to existing status ID + $caseStatus = CRM_Core_DAO::getFieldValue($daoClass, $key, 'status_id'); + } + $value['status_id'] = $caseStatus; + unset($value['case_status']); + + foreach ($dateFields as $val) { + if (isset($value[$val])) { + $value[$val] = CRM_Utils_Date::processDate($value[$val]); + } + } + if (empty($customFields)) { + if (empty($value['case_type_id'])) { + $caseTypeId = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_Case', $key, 'case_type_id'); + } + + // case type custom data + $customFields = CRM_Core_BAO_CustomField::getFields('Case', FALSE, FALSE, $caseTypeId); + + $customFields = CRM_Utils_Array::crmArrayMerge($customFields, + CRM_Core_BAO_CustomField::getFields('Case', + FALSE, FALSE, NULL, NULL, TRUE + ) + ); + } + //check for custom data + $value['custom'] = CRM_Core_BAO_CustomField::postProcess($params['field'][$key], + $key, + 'Case', + $caseTypeId + ); + + $case = CRM_Case_BAO_Case::add($value); + + // add custom field values + if (!empty($value['custom']) && is_array($value['custom'])) { + CRM_Core_BAO_CustomValueTable::store($value['custom'], 'civicrm_case', $case->id); + } + } + + CRM_Core_Session::setStatus(ts('Your updates have been saved.'), ts('Saved'), 'success'); + } + +} diff --git a/civicrm/CRM/Case/Form/Task/Delete.php b/civicrm/CRM/Case/Form/Task/Delete.php index e9701d77c4c3410045eafe2bb74709d0e276ebd1..bd7d4b31a7f5c328b3cc8fda254989cd5bc3394d 100644 --- a/civicrm/CRM/Case/Form/Task/Delete.php +++ b/civicrm/CRM/Case/Form/Task/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Task/PDF.php b/civicrm/CRM/Case/Form/Task/PDF.php index 0a2434bc586b0aa8dbb0455037aea25c7b90113d..881dcac7654e00a0506e052754aae5a1a34a47fc 100644 --- a/civicrm/CRM/Case/Form/Task/PDF.php +++ b/civicrm/CRM/Case/Form/Task/PDF.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -86,7 +86,7 @@ class CRM_Case_Form_Task_PDF extends CRM_Case_Form_Task { */ public function listTokens() { $tokens = CRM_Core_SelectValues::contactTokens(); - foreach ($this->_caseIds as $key => $caseId) { + foreach ($this->_componentIds as $key => $caseId) { $caseTypeId = CRM_Core_DAO::getFieldValue('CRM_Case_DAO_Case', $caseId, 'case_type_id'); $tokens += CRM_Core_SelectValues::caseTokens($caseTypeId); } diff --git a/civicrm/CRM/Case/Form/Task/PickProfile.php b/civicrm/CRM/Case/Form/Task/PickProfile.php new file mode 100644 index 0000000000000000000000000000000000000000..2b9888406ceaeef26e448fb8c46fc3108cd70176 --- /dev/null +++ b/civicrm/CRM/Case/Form/Task/PickProfile.php @@ -0,0 +1,52 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2018 + */ + +/** + * This class provides the functionality for batch profile update for case + */ +class CRM_Case_Form_Task_PickProfile extends CRM_Core_Form_Task_PickProfile { + + /** + * Must be set to entity table name (eg. civicrm_participant) by child class + * + * @var string + */ + static $tableName = 'civicrm_case'; + + /** + * Must be set to entity shortname (eg. event) + * + * @var string + */ + static $entityShortname = 'case'; + +} diff --git a/civicrm/CRM/Case/Form/Task/Print.php b/civicrm/CRM/Case/Form/Task/Print.php index 5e17d3fe2ca8b1ec8b7cd1d0d55737c07e7823a4..3ee84537e6afc2b0c7d40a86d15ffae587502406 100644 --- a/civicrm/CRM/Case/Form/Task/Print.php +++ b/civicrm/CRM/Case/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Task/Restore.php b/civicrm/CRM/Case/Form/Task/Restore.php index 4318eb1f66129aa3580526e5c2d6bf5ac857f805..855863ae56165cd88308001de6898dee83c5902e 100644 --- a/civicrm/CRM/Case/Form/Task/Restore.php +++ b/civicrm/CRM/Case/Form/Task/Restore.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Task/Result.php b/civicrm/CRM/Case/Form/Task/Result.php index d4589efabb799409a543e418694613dfa78b8fb3..252862ed192ab6ffdc96a88325a27c4360fe78bd 100644 --- a/civicrm/CRM/Case/Form/Task/Result.php +++ b/civicrm/CRM/Case/Form/Task/Result.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Form/Task/SearchTaskHookSample.php b/civicrm/CRM/Case/Form/Task/SearchTaskHookSample.php index 67b043a2e4e1400e5d0b47be96e11338134e963d..eced57d41f99ac085c0dbddf4bcfaa2553614d14 100644 --- a/civicrm/CRM/Case/Form/Task/SearchTaskHookSample.php +++ b/civicrm/CRM/Case/Form/Task/SearchTaskHookSample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Info.php b/civicrm/CRM/Case/Info.php index a1e5ebbe2123935c8437389eda14d5217bb1ca97..b69f9ffac0e08665bd91fc5f2f1e05f2f440efcf 100644 --- a/civicrm/CRM/Case/Info.php +++ b/civicrm/CRM/Case/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * abstract class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Case_Info extends CRM_Core_Component_Info { diff --git a/civicrm/CRM/Case/Page/AJAX.php b/civicrm/CRM/Case/Page/AJAX.php index 2d643559fd1004bfa5e6e2ded75ae910e10dec64..67668647b5f682b13add218958ab8ee517f2710f 100644 --- a/civicrm/CRM/Case/Page/AJAX.php +++ b/civicrm/CRM/Case/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Case/Page/CaseDetails.php b/civicrm/CRM/Case/Page/CaseDetails.php index 61f673f87b1015aff3e058332b510f0596967f7f..036324c4e745ea154ebc29a4907ecaba057d885d 100644 --- a/civicrm/CRM/Case/Page/CaseDetails.php +++ b/civicrm/CRM/Case/Page/CaseDetails.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Case_Page_CaseDetails extends CRM_Core_Page { diff --git a/civicrm/CRM/Case/Page/DashBoard.php b/civicrm/CRM/Case/Page/DashBoard.php index 9ce8d4bd0981c5d84fceece8248064976a0eff44..65ad071648cc46ab5363998927f38cf681b51a76 100644 --- a/civicrm/CRM/Case/Page/DashBoard.php +++ b/civicrm/CRM/Case/Page/DashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Page/Tab.php b/civicrm/CRM/Case/Page/Tab.php index 8be97d37d8a1665801479abb0029a9195198ed2a..39bd1148b229536c67c1f4d9a746c351eb71b371 100644 --- a/civicrm/CRM/Case/Page/Tab.php +++ b/civicrm/CRM/Case/Page/Tab.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/PseudoConstant.php b/civicrm/CRM/Case/PseudoConstant.php index 4fde3b50e751844df36716e1743c912e8ff3b986..d429fca867944afd9b81bb217d7e37152b17654d 100644 --- a/civicrm/CRM/Case/PseudoConstant.php +++ b/civicrm/CRM/Case/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/Selector/Search.php b/civicrm/CRM/Case/Selector/Search.php index 99fc2c2267519fdc50457d027a4b4f715f5334c4..8c175ef8f7114d74b10b594fb1f96f7d249c905c 100644 --- a/civicrm/CRM/Case/Selector/Search.php +++ b/civicrm/CRM/Case/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Case/StateMachine/Search.php b/civicrm/CRM/Case/StateMachine/Search.php index 54488648b9346cd5954d5f60a1a930ed434b9f34..85028cfa31d4519b4e20fc0d52f63e892d642566 100644 --- a/civicrm/CRM/Case/StateMachine/Search.php +++ b/civicrm/CRM/Case/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Case_StateMachine_Search extends CRM_Core_StateMachine { diff --git a/civicrm/CRM/Case/Task.php b/civicrm/CRM/Case/Task.php index 5af2aaaf1c9d066ffcd98e8947b7fe1daf60a373..1d317542f32281e8be2d13a37a1abe5c8598ea33 100644 --- a/civicrm/CRM/Case/Task.php +++ b/civicrm/CRM/Case/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -36,22 +36,13 @@ * * Used by the search forms */ -class CRM_Case_Task { - const DELETE_CASES = 1, PRINT_CASES = 2, EXPORT_CASES = 3, RESTORE_CASES = 4; +class CRM_Case_Task extends CRM_Core_Task { - /** - * The task array - * - * @var array - */ - static $_tasks = NULL; + const + // Case tasks + RESTORE_CASES = 501; - /** - * The optional task array - * - * @var array - */ - static $_optionalTasks = NULL; + static $objectType = 'case'; /** * These tasks are the core set of tasks that the user can perform @@ -60,20 +51,20 @@ class CRM_Case_Task { * @return array * the set of tasks for a group of contacts */ - public static function &tasks() { + public static function tasks() { if (!self::$_tasks) { self::$_tasks = array( - 1 => array( + self::TASK_DELETE => array( 'title' => ts('Delete cases'), 'class' => 'CRM_Case_Form_Task_Delete', 'result' => FALSE, ), - 2 => array( + self::TASK_PRINT => array( 'title' => ts('Print selected rows'), 'class' => 'CRM_Case_Form_Task_Print', 'result' => FALSE, ), - 3 => array( + self::TASK_EXPORT => array( 'title' => ts('Export cases'), 'class' => array( 'CRM_Export_Form_Select', @@ -81,67 +72,48 @@ class CRM_Case_Task { ), 'result' => FALSE, ), - 4 => array( + self::RESTORE_CASES => array( 'title' => ts('Restore cases'), 'class' => 'CRM_Case_Form_Task_Restore', 'result' => FALSE, ), - 5 => array( + self::PDF_LETTER => array( 'title' => ts('Print/merge Document'), 'class' => 'CRM_Case_Form_Task_PDF', 'result' => FALSE, ), + self::BATCH_UPDATE => array( + 'title' => ts('Update multiple cases'), + 'class' => array( + 'CRM_Case_Form_Task_PickProfile', + 'CRM_Case_Form_Task_Batch', + ), + 'result' => FALSE, + ), ); //CRM-4418, check for delete if (!CRM_Core_Permission::check('delete in CiviCase')) { - unset(self::$_tasks[1]); + unset(self::$_tasks[self::TASK_DELETE]); } - CRM_Utils_Hook::searchTasks('case', self::$_tasks); - asort(self::$_tasks); + parent::tasks(); } return self::$_tasks; } - /** - * These tasks are the core set of task titles. - * - * @return array - * the set of task titles - */ - public static function &taskTitles() { - self::tasks(); - $titles = array(); - foreach (self::$_tasks as $id => $value) { - $titles[$id] = $value['title']; - } - return $titles; - } - - /** - * These tasks get added based on the context the user is in. - * - * @return array - * the set of optional tasks for a group of contacts - */ - public static function &optionalTaskTitle() { - $tasks = array(); - return $tasks; - } - /** * Show tasks selectively based on the permission level. * of the user * * @param int $permission + * @param array $params * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission) { - $tasks = array(); + public static function permissionedTaskTitles($permission, $params = array()) { if (($permission == CRM_Core_Permission::EDIT) || CRM_Core_Permission::check('access all cases and activities') || CRM_Core_Permission::check('access my cases and activities') @@ -150,13 +122,15 @@ class CRM_Case_Task { } else { $tasks = array( - 3 => self::$_tasks[3]['title'], + self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'], ); //CRM-4418, if (CRM_Core_Permission::check('delete in CiviCase')) { - $tasks[1] = self::$_tasks[1]['title']; + $tasks[self::TASK_DELETE] = self::$_tasks[self::TASK_DELETE]['title']; } } + + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); return $tasks; } @@ -172,7 +146,7 @@ class CRM_Case_Task { self::tasks(); if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) { // make the print task by default - $value = 2; + $value = self::TASK_PRINT; } return array( diff --git a/civicrm/CRM/Case/XMLProcessor.php b/civicrm/CRM/Case/XMLProcessor.php index e1357b9fa24f879d358601cd23290bd74b57ded5..20eacf8254439039d2d8b20ad20f616f7c1b443b 100644 --- a/civicrm/CRM/Case/XMLProcessor.php +++ b/civicrm/CRM/Case/XMLProcessor.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Case_XMLProcessor { diff --git a/civicrm/CRM/Case/XMLProcessor/Process.php b/civicrm/CRM/Case/XMLProcessor/Process.php index 60d1277a17070e81dbfcf3b729e84659a874126f..15d56f0a64188a20b23a3a8848a64f5e19f4e34e 100644 --- a/civicrm/CRM/Case/XMLProcessor/Process.php +++ b/civicrm/CRM/Case/XMLProcessor/Process.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Case_XMLProcessor_Process extends CRM_Case_XMLProcessor { /** diff --git a/civicrm/CRM/Case/XMLProcessor/Report.php b/civicrm/CRM/Case/XMLProcessor/Report.php index 8884a500b4478d11ef51da21f7403f3d97a0580e..70e449f53d6193fffc3b50de3f0c3466abcfcb4d 100644 --- a/civicrm/CRM/Case/XMLProcessor/Report.php +++ b/civicrm/CRM/Case/XMLProcessor/Report.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Case_XMLProcessor_Report extends CRM_Case_XMLProcessor { diff --git a/civicrm/CRM/Case/XMLProcessor/Settings.php b/civicrm/CRM/Case/XMLProcessor/Settings.php index 8ec1162894ae8028e08491a1d7b3350d32548b5a..a49c41de46d4a9fce4af08365b1e0e4d9211e4c6 100644 --- a/civicrm/CRM/Case/XMLProcessor/Settings.php +++ b/civicrm/CRM/Case/XMLProcessor/Settings.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Case_XMLProcessor_Settings extends CRM_Case_XMLProcessor { diff --git a/civicrm/CRM/Case/XMLRepository.php b/civicrm/CRM/Case/XMLRepository.php index a86e440160773feb5ed4e907e8c38159bf2abafb..3f427faa54a7c765ce144173270c26d30f62b00e 100644 --- a/civicrm/CRM/Case/XMLRepository.php +++ b/civicrm/CRM/Case/XMLRepository.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * The XMLRepository is responsible for loading XML for case-types. * It includes any bulk operations that apply across the list of all XML diff --git a/civicrm/CRM/Contact/ActionMapping.php b/civicrm/CRM/Contact/ActionMapping.php index 8bb7ea6914801bcb8a6cf66e22029d935ed386ee..49389dc8f6ff04afd55b7912c5bf7c564bd167fe 100644 --- a/civicrm/CRM/Contact/ActionMapping.php +++ b/civicrm/CRM/Contact/ActionMapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php index 8cafef35bce0ab978dfb3c6e40c3d5084fd13852..51e8f498b2d1c71600cc745684e93a7694d609fa 100644 --- a/civicrm/CRM/Contact/BAO/Contact.php +++ b/civicrm/CRM/Contact/BAO/Contact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { @@ -349,8 +349,9 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact { $skipDelete = TRUE; } - //add website - CRM_Core_BAO_Website::create($params['website'], $contact->id, $skipDelete); + if (isset($params['website'])) { + CRM_Core_BAO_Website::process($params['website'], $contact->id, $skipDelete); + } $userID = CRM_Core_Session::singleton()->get('userID'); // add notes diff --git a/civicrm/CRM/Contact/BAO/Contact/Location.php b/civicrm/CRM/Contact/BAO/Contact/Location.php index a06971c9c8ee5854eee7a1b78ead15dace728bb9..dd3b6e5d99f35f8c1258b32192a883988b1349b7 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Location.php +++ b/civicrm/CRM/Contact/BAO/Contact/Location.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_Contact_Location { @@ -63,6 +63,7 @@ class CRM_Contact_BAO_Contact_Location { } /** + * @deprecated Not used anywhere, use the Phone API instead * Get the sms number and display name of a contact. * * @param int $id @@ -74,6 +75,7 @@ class CRM_Contact_BAO_Contact_Location { * tuple of display_name and sms if found, or (null,null) */ public static function getPhoneDetails($id, $type = NULL) { + Civi::log()->warning('Deprecated function CRM_Contact_BAO_Contact_Location::getPhoneDetails, use Phone.get API instead', array('civi.tag' => 'deprecated')); if (!$id) { return array(NULL, NULL); } diff --git a/civicrm/CRM/Contact/BAO/Contact/Permission.php b/civicrm/CRM/Contact/BAO/Contact/Permission.php index 73c379e0dfffdbb79842f3e1de6ee3db2a5b71e8..7c56b49b65dd049938c2784eabc9eb0e5def6d2c 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Permission.php +++ b/civicrm/CRM/Contact/BAO/Contact/Permission.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_Contact_Permission { diff --git a/civicrm/CRM/Contact/BAO/Contact/Utils.php b/civicrm/CRM/Contact/BAO/Contact/Utils.php index 662e8662271bba347e1dc841dfe1194662cc70be..a650d7608798d773b7803a022a9cae0aad96a3b5 100644 --- a/civicrm/CRM/Contact/BAO/Contact/Utils.php +++ b/civicrm/CRM/Contact/BAO/Contact/Utils.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_Contact_Utils { @@ -679,7 +679,7 @@ LEFT JOIN civicrm_email ce ON ( ce.contact_id=c.id AND ce.is_primary = 1 ) public static function contactDetails($componentIds, $componentName, $returnProperties = array()) { $contactDetails = array(); if (empty($componentIds) || - !in_array($componentName, array('CiviContribute', 'CiviMember', 'CiviEvent', 'Activity')) + !in_array($componentName, array('CiviContribute', 'CiviMember', 'CiviEvent', 'Activity', 'CiviCase')) ) { return $contactDetails; } @@ -704,6 +704,9 @@ LEFT JOIN civicrm_email ce ON ( ce.contact_id=c.id AND ce.is_primary = 1 ) $compTable = 'civicrm_activity'; $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate'); } + elseif ($componentName == 'CiviCase') { + $compTable = 'civicrm_case'; + } else { $compTable = 'civicrm_participant'; } @@ -723,6 +726,12 @@ LEFT JOIN civicrm_email ce ON ( ce.contact_id=c.id AND ce.is_primary = 1 ) $from[$value] = " INNER JOIN civicrm_activity_contact acs ON (acs.activity_id = {$compTable}.id AND acs.record_type_id = {$sourceID}) INNER JOIN civicrm_contact contact ON ( contact.id = acs.contact_id )"; + } + elseif ($componentName == 'CiviCase') { + $select[] = "contact.$property as $property"; + $from[$value] = " +INNER JOIN civicrm_case_contact ccs ON (ccs.case_id = {$compTable}.id) +INNER JOIN civicrm_contact contact ON ( contact.id = ccs.contact_id )"; } else { $select[] = "$property as $property"; diff --git a/civicrm/CRM/Contact/BAO/ContactType.php b/civicrm/CRM/Contact/BAO/ContactType.php index 2efb3774647a65bfb06123aebd6bd05e9a00b335..ff82069ebd9d09a73cc6c90bb9dca94a7a572987 100644 --- a/civicrm/CRM/Contact/BAO/ContactType.php +++ b/civicrm/CRM/Contact/BAO/ContactType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_ContactType extends CRM_Contact_DAO_ContactType { @@ -654,12 +654,11 @@ WHERE name = %1"; } if (!empty($params['id'])) { - $params = array('name' => "New $contactName"); $newParams = array( 'label' => "New $contact", 'is_active' => $active, ); - CRM_Core_BAO_Navigation::processUpdate($params, $newParams); + CRM_Core_BAO_Navigation::processUpdate(['name' => "New $contactName"], $newParams); } else { $name = self::getBasicType($contactName); diff --git a/civicrm/CRM/Contact/BAO/DashboardContact.php b/civicrm/CRM/Contact/BAO/DashboardContact.php index 734a4e5f656a5964e3aeaea424835920d1676b8e..a742f3d6905b0e32a579e8fbd77dd98af765b732 100644 --- a/civicrm/CRM/Contact/BAO/DashboardContact.php +++ b/civicrm/CRM/Contact/BAO/DashboardContact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_DashboardContact extends CRM_Contact_DAO_DashboardContact { } diff --git a/civicrm/CRM/Contact/BAO/Group.php b/civicrm/CRM/Contact/BAO/Group.php index 05e78491fc624e56b81cd5395d625a65f28546b7..c7582d99feae7cfe2678afbbe7047c326786e231 100644 --- a/civicrm/CRM/Contact/BAO/Group.php +++ b/civicrm/CRM/Contact/BAO/Group.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_Group extends CRM_Contact_DAO_Group { diff --git a/civicrm/CRM/Contact/BAO/GroupContact.php b/civicrm/CRM/Contact/BAO/GroupContact.php index 73bf59b76b8a7f46e4ca55cf8b87d97a17e98bf2..f867c0cd05f574d577c851a6f1d14f4802c6aec3 100644 --- a/civicrm/CRM/Contact/BAO/GroupContact.php +++ b/civicrm/CRM/Contact/BAO/GroupContact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_GroupContact extends CRM_Contact_DAO_GroupContact { diff --git a/civicrm/CRM/Contact/BAO/GroupContactCache.php b/civicrm/CRM/Contact/BAO/GroupContactCache.php index 8b661fcda55b564437d1d7d0313bd70481fdac37..9e8d6e5fe24ca92dda0a409e823ed1b578676e78 100644 --- a/civicrm/CRM/Contact/BAO/GroupContactCache.php +++ b/civicrm/CRM/Contact/BAO/GroupContactCache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_GroupContactCache extends CRM_Contact_DAO_GroupContactCache { diff --git a/civicrm/CRM/Contact/BAO/GroupNesting.php b/civicrm/CRM/Contact/BAO/GroupNesting.php index 284aa3a1bf400708c7038949f0f9af4573b629c4..f51e164af60f096aaa585f0dd34e188d68a9971b 100644 --- a/civicrm/CRM/Contact/BAO/GroupNesting.php +++ b/civicrm/CRM/Contact/BAO/GroupNesting.php @@ -33,6 +33,28 @@ */ class CRM_Contact_BAO_GroupNesting extends CRM_Contact_DAO_GroupNesting { + /** + * Add Dashboard. + * + * @param array $params + * Values. + * + * + * @return object + */ + public static function create($params) { + $hook = empty($params['id']) ? 'create' : 'edit'; + CRM_Utils_Hook::pre($hook, 'GroupNesting', CRM_Utils_Array::value('id', $params), $params); + $dao = new CRM_Contact_BAO_GroupNesting(); + $dao->copyValues($params); + if (empty($params['id'])) { + $dao->find(TRUE); + } + $dao->save(); + CRM_Utils_Hook::post($hook, 'GroupNesting', $dao->id, $dao); + return $dao; + } + /** * Adds a new group nesting record. * diff --git a/civicrm/CRM/Contact/BAO/GroupNestingCache.php b/civicrm/CRM/Contact/BAO/GroupNestingCache.php index 2014ed146cbea81f578852b4434e90f284670e0b..4c7d284d881311cc371245614f4577f32174a264 100644 --- a/civicrm/CRM/Contact/BAO/GroupNestingCache.php +++ b/civicrm/CRM/Contact/BAO/GroupNestingCache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_GroupNestingCache { diff --git a/civicrm/CRM/Contact/BAO/GroupOrganization.php b/civicrm/CRM/Contact/BAO/GroupOrganization.php index da6d27008a9395523fb404ceab7992affe948e7b..d708497c94b170931a948af1d5f43852d8cae66a 100644 --- a/civicrm/CRM/Contact/BAO/GroupOrganization.php +++ b/civicrm/CRM/Contact/BAO/GroupOrganization.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_GroupOrganization extends CRM_Contact_DAO_GroupOrganization { @@ -48,43 +48,24 @@ class CRM_Contact_BAO_GroupOrganization extends CRM_Contact_DAO_GroupOrganizatio * @return CRM_Contact_DAO_GroupOrganization */ public static function add(&$params) { - $formattedValues = array(); - self::formatValues($params, $formattedValues); - $dataExists = self::dataExists($formattedValues); - if (!$dataExists) { + if (!empty($params['group_organization'])) { + $params['id'] = $params['group_organization']; + } + $dataExists = self::dataExists($params); + if (!$dataExists && empty($params['id'])) { return NULL; } $groupOrganization = new CRM_Contact_DAO_GroupOrganization(); - $groupOrganization->copyValues($formattedValues); - // we have ensured we have group_id & organization_id so we can do a find knowing that - // this can only find a matching record - $groupOrganization->find(TRUE); + $groupOrganization->copyValues($params); + if (!isset($params['id'])) { + // we have ensured we have group_id & organization_id so we can do a find knowing that + // this can only find a matching record + $groupOrganization->find(TRUE); + } $groupOrganization->save(); return $groupOrganization; } - /** - * Format the params. - * - * @param array $params - * (reference ) an assoc array of name/value pairs. - * @param array $formatedValues - * (reference ) an assoc array of name/value pairs. - */ - public static function formatValues(&$params, &$formatedValues) { - if (!empty($params['group_organization'])) { - $formatedValues['id'] = $params['group_organization']; - } - - if (!empty($params['group_id'])) { - $formatedValues['group_id'] = $params['group_id']; - } - - if (!empty($params['organization_id'])) { - $formatedValues['organization_id'] = $params['organization_id']; - } - } - /** * Check if there is data to create the object. * diff --git a/civicrm/CRM/Contact/BAO/Household.php b/civicrm/CRM/Contact/BAO/Household.php index 62109f0b33ef5468f1a1001c4eae9dae94104621..7c0a29841c406ec386ebc1cd123bde44a3320771 100644 --- a/civicrm/CRM/Contact/BAO/Household.php +++ b/civicrm/CRM/Contact/BAO/Household.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_Household extends CRM_Contact_DAO_Contact { diff --git a/civicrm/CRM/Contact/BAO/Individual.php b/civicrm/CRM/Contact/BAO/Individual.php index bce8ff5e9200b98a6146b66fa68a2ae3356892bf..ed7d784c84bdd7fa88183ce755bda81a0d4d834b 100644 --- a/civicrm/CRM/Contact/BAO/Individual.php +++ b/civicrm/CRM/Contact/BAO/Individual.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/BAO/ProximityQuery.php b/civicrm/CRM/Contact/BAO/ProximityQuery.php index e41ab733f5d8b70c0f38b23395a614dd34e872ab..73e12f9530d907fd4844495e2b6f737c9dbd1bf4 100644 --- a/civicrm/CRM/Contact/BAO/ProximityQuery.php +++ b/civicrm/CRM/Contact/BAO/ProximityQuery.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_ProximityQuery { diff --git a/civicrm/CRM/Contact/BAO/Query.php b/civicrm/CRM/Contact/BAO/Query.php index 5435aa3c2fb6237c70984f2be79cffc8aa4abee7..69c5655c5c77afb52129e8e0faf32701cf25499a 100644 --- a/civicrm/CRM/Contact/BAO/Query.php +++ b/civicrm/CRM/Contact/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -56,7 +56,8 @@ class CRM_Contact_BAO_Query { // There is no 4, MODE_MEMBER = 8, MODE_EVENT = 16, - // No 32, no 64. + MODE_CONTACTSRELATED = 32, + // no 64. MODE_GRANT = 128, MODE_PLEDGEBANK = 256, MODE_PLEDGE = 512, @@ -67,6 +68,13 @@ class CRM_Contact_BAO_Query { MODE_MAILING = 16384, MODE_ALL = 17407; + /** + * Constants for search operators + */ + const + SEARCH_OPERATOR_AND = 'AND', + SEARCH_OPERATOR_OR = 'OR'; + /** * The default set of return properties. * @@ -1444,11 +1452,7 @@ class CRM_Contact_BAO_Query { } } - $select = "SELECT "; - if (isset($this->_distinctComponentClause)) { - $select .= "{$this->_distinctComponentClause}, "; - } - $select .= implode(', ', $this->_select); + $select = $this->getSelect(); $from = $this->_fromClause; } @@ -4703,18 +4707,21 @@ civicrm_relationship.is_permission_a_b = 0 * * @param array $selectClauses * @param array $groupBy - Columns already included in GROUP By clause. + * @param string $aggregateFunction * * @return string */ - public static function appendAnyValueToSelect($selectClauses, $groupBy) { + public static function appendAnyValueToSelect($selectClauses, $groupBy, $aggregateFunction = 'ANY_VALUE') { if (!CRM_Utils_SQL::disableFullGroupByMode()) { $groupBy = array_map('trim', (array) $groupBy); - $aggregateFunctions = '/(ROUND|AVG|COUNT|GROUP_CONCAT|SUM|MAX|MIN)\(/i'; + $aggregateFunctions = '/(ROUND|AVG|COUNT|GROUP_CONCAT|SUM|MAX|MIN|IF)[[:blank:]]*\(/i'; foreach ($selectClauses as $key => &$val) { list($selectColumn, $alias) = array_pad(preg_split('/ as /i', $val), 2, NULL); // append ANY_VALUE() keyword if (!in_array($selectColumn, $groupBy) && preg_match($aggregateFunctions, trim($selectColumn)) !== 1) { - $val = str_replace($selectColumn, "ANY_VALUE({$selectColumn})", $val); + $val = ($aggregateFunction == 'GROUP_CONCAT') ? + str_replace($selectColumn, "$aggregateFunction(DISTINCT {$selectColumn})", $val) : + str_replace($selectColumn, "$aggregateFunction({$selectColumn})", $val); } } } @@ -4732,9 +4739,9 @@ civicrm_relationship.is_permission_a_b = 0 * */ public static function getGroupByFromOrderBy(&$groupBy, $orderBys) { - if (CRM_Utils_SQL::disableFullGroupByMode()) { + if (!CRM_Utils_SQL::disableFullGroupByMode()) { foreach ($orderBys as $orderBy) { - $orderBy = str_replace(array(' DESC', ' ASC'), '', $orderBy); // remove sort syntax from ORDER BY clauses if present + $orderBy = str_replace(array(' DESC', ' ASC', '`'), '', $orderBy); // remove sort syntax from ORDER BY clauses if present // if ORDER BY column is not present in GROUP BY then append it to end if (preg_match('/(MAX|MIN)\(/i', trim($orderBy)) !== 1 && !strstr($groupBy, $orderBy)) { $groupBy .= ", {$orderBy}"; @@ -4758,7 +4765,7 @@ civicrm_relationship.is_permission_a_b = 0 //return if ONLY_FULL_GROUP_BY is not enabled. if (CRM_Utils_SQL::supportsFullGroupBy() && !empty($sqlMode) && in_array('ONLY_FULL_GROUP_BY', explode(',', $sqlMode))) { - $regexToExclude = '/(ROUND|AVG|COUNT|GROUP_CONCAT|SUM|MAX|MIN)\(/i'; + $regexToExclude = '/(ROUND|AVG|COUNT|GROUP_CONCAT|SUM|MAX|MIN|IF)[[:blank:]]*\(/i'; foreach ($selectClauses as $key => $val) { $aliasArray = preg_split('/ as /i', $val); // if more than 1 alias we need to split by ','. @@ -4856,21 +4863,19 @@ civicrm_relationship.is_permission_a_b = 0 } // building the query string - $groupBy = $groupByCol = NULL; + $groupBy = $groupByCols = NULL; if (!$count) { if (isset($this->_groupByComponentClause)) { $groupBy = $this->_groupByComponentClause; - $groupCols = preg_replace('/^GROUP BY /', '', trim($this->_groupByComponentClause)); - $groupByCol = explode(', ', $groupCols); + $groupByCols = preg_replace('/^GROUP BY /', '', trim($this->_groupByComponentClause)); + $groupByCols = explode(', ', $groupByCols); } elseif ($this->_useGroupBy) { - $groupByCol = 'contact_a.id'; - $groupBy = ' GROUP BY contact_a.id'; + $groupByCols = array('contact_a.id'); } } if ($this->_mode & CRM_Contact_BAO_Query::MODE_ACTIVITY && (!$count)) { - $groupByCol = 'civicrm_activity.id'; - $groupBy = 'GROUP BY civicrm_activity.id '; + $groupByCols = array('civicrm_activity.id'); } $order = $orderBy = $limit = ''; @@ -4892,8 +4897,17 @@ civicrm_relationship.is_permission_a_b = 0 list($select, $from, $where, $having) = $this->query($count, $sortByChar, $groupContacts, $onlyDeleted); - if (!empty($groupByCol)) { - $groupBy = self::getGroupByFromSelectColumns($this->_select, $groupByCol); + if (!empty($groupByCols)) { + // It doesn't matter to include columns in SELECT clause, which are present in GROUP BY when we just want the contact IDs + if (!$groupContacts) { + $select = self::appendAnyValueToSelect($this->_select, $groupByCols, 'GROUP_CONCAT'); + } + $groupBy = " GROUP BY " . implode(', ', $groupByCols); + if (!empty($order)) { + // retrieve order by columns from ORDER BY clause + $orderBys = explode(",", str_replace('ORDER BY ', '', $order)); + self::getGroupByFromOrderBy($groupBy, $orderBys); + } } if ($additionalWhereClause) { @@ -4954,7 +4968,8 @@ civicrm_relationship.is_permission_a_b = 0 $from = " FROM civicrm_prevnext_cache pnc INNER JOIN civicrm_contact contact_a ON contact_a.id = pnc.entity_id1 AND pnc.cacheKey = '$cacheKey' " . substr($from, 31); $order = " ORDER BY pnc.id"; $groupByCol = array('contact_a.id', 'pnc.id'); - $groupBy = self::getGroupByFromSelectColumns($this->_select, $groupByCol); + $select = self::appendAnyValueToSelect($this->_select, $groupByCol, 'GROUP_CONCAT'); + $groupBy = " GROUP BY " . implode(', ', $groupByCol); $limit = " LIMIT $offset, $rowCount"; $query = "$select $from $where $groupBy $order $limit"; @@ -6375,7 +6390,7 @@ AND displayRelType.is_active = 1 $orderByArray = array("UPPER(LEFT(contact_a.sort_name, 1)) asc"); } else { - $order = " ORDER BY contact_a.sort_name asc, contact_a.id"; + $order = " ORDER BY contact_a.sort_name ASC, contact_a.id"; } } if (!$order && empty($orderByArray)) { @@ -6534,4 +6549,18 @@ AND displayRelType.is_active = 1 return FALSE; } + /** + * Get Select Clause. + * + * @return string + */ + public function getSelect() { + $select = "SELECT "; + if (isset($this->_distinctComponentClause)) { + $select .= "{$this->_distinctComponentClause}, "; + } + $select .= implode(', ', $this->_select); + return $select; + } + } diff --git a/civicrm/CRM/Contact/BAO/Query/Hook.php b/civicrm/CRM/Contact/BAO/Query/Hook.php index 1b337fd3a07c8eb26331b64a2d16497aefd3c7d0..2642d59e85d882360ff265bac922078d66d6b16b 100644 --- a/civicrm/CRM/Contact/BAO/Query/Hook.php +++ b/civicrm/CRM/Contact/BAO/Query/Hook.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/BAO/Query/Interface.php b/civicrm/CRM/Contact/BAO/Query/Interface.php index 0987aa61b8f300da5eb20789c13d0e61847ad26d..ffd1206d3e434c12c8d46b37158bf987116bb094 100644 --- a/civicrm/CRM/Contact/BAO/Query/Interface.php +++ b/civicrm/CRM/Contact/BAO/Query/Interface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/BAO/Relationship.php b/civicrm/CRM/Contact/BAO/Relationship.php index b2ac947046f22549570420cd30985cc0545ef4e8..29a2f7adebb231d7bd857344ee96b3d7de59f0f3 100644 --- a/civicrm/CRM/Contact/BAO/Relationship.php +++ b/civicrm/CRM/Contact/BAO/Relationship.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contact/BAO/RelationshipType.php b/civicrm/CRM/Contact/BAO/RelationshipType.php index 656f7bae6ef5fc1138e4071a98cfc095848b5ab8..656e27f62efee53a02631ed0296126efd93a5416 100644 --- a/civicrm/CRM/Contact/BAO/RelationshipType.php +++ b/civicrm/CRM/Contact/BAO/RelationshipType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_RelationshipType extends CRM_Contact_DAO_RelationshipType { @@ -85,7 +85,8 @@ class CRM_Contact_BAO_RelationshipType extends CRM_Contact_DAO_RelationshipType * * @return CRM_Contact_DAO_RelationshipType */ - public static function add(&$params, &$ids) { + public static function add(&$params, $ids = []) { + $params['id'] = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('relationshipType', $ids)); //to change name, CRM-3336 if (empty($params['label_a_b']) && !empty($params['name_a_b'])) { $params['label_a_b'] = $params['name_a_b']; @@ -97,7 +98,7 @@ class CRM_Contact_BAO_RelationshipType extends CRM_Contact_DAO_RelationshipType // set label to name if it's not set - but *only* for // ADD action. CRM-3336 as part from (CRM-3522) - if (empty($ids['relationshipType'])) { + if (!$params['id']) { if (empty($params['name_a_b']) && !empty($params['label_a_b'])) { $params['name_a_b'] = $params['label_a_b']; } @@ -119,8 +120,6 @@ class CRM_Contact_BAO_RelationshipType extends CRM_Contact_DAO_RelationshipType $relationshipType->label_b_a = CRM_Utils_Array::value('label_a_b', $params); } - $relationshipType->id = CRM_Utils_Array::value('relationshipType', $ids); - $result = $relationshipType->save(); CRM_Core_PseudoConstant::relationshipType('label', TRUE); diff --git a/civicrm/CRM/Contact/BAO/SavedSearch.php b/civicrm/CRM/Contact/BAO/SavedSearch.php index bdba332fe8c27db1e43c19421fcb5c1630bdb002..af2b0a87cf418a7b52bb2b1ee0f222834af9ff53 100644 --- a/civicrm/CRM/Contact/BAO/SavedSearch.php +++ b/civicrm/CRM/Contact/BAO/SavedSearch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/BAO/SearchCustom.php b/civicrm/CRM/Contact/BAO/SearchCustom.php index e13bc52c4f14aee9169dd73ced9093e9357e322f..0cc38ed46cb591bb1192580359c8bf9b0420a48c 100644 --- a/civicrm/CRM/Contact/BAO/SearchCustom.php +++ b/civicrm/CRM/Contact/BAO/SearchCustom.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_BAO_SearchCustom { diff --git a/civicrm/CRM/Contact/BAO/SubscriptionHistory.php b/civicrm/CRM/Contact/BAO/SubscriptionHistory.php index 331e2add53fb1ee4d4811f42643260025ca003c7..c99b2d7429bc39fd627c240d7751159c344dcd9d 100644 --- a/civicrm/CRM/Contact/BAO/SubscriptionHistory.php +++ b/civicrm/CRM/Contact/BAO/SubscriptionHistory.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Controller/Search.php b/civicrm/CRM/Contact/Controller/Search.php index e4c09ea269f009d3dc6ef271c3ccb6879ea3d771..daa7dde585b601bb12dfafb060b7cb6d3583b6d4 100644 --- a/civicrm/CRM/Contact/Controller/Search.php +++ b/civicrm/CRM/Contact/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/DAO/ACLContactCache.php b/civicrm/CRM/Contact/DAO/ACLContactCache.php index 6a0a1a7f60dc42878d544511379ef93f71b7f6ae..566c43559f0c71cf28ceda5bfdd2d59e7c63ee24 100644 --- a/civicrm/CRM/Contact/DAO/ACLContactCache.php +++ b/civicrm/CRM/Contact/DAO/ACLContactCache.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/ACLContactCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/Contact.php b/civicrm/CRM/Contact/DAO/Contact.php index 334d90a01818216f75d6dabefce2a4ce389037ca..59e9108b71414a7ec9295581b6b5e3fad443c8f0 100644 --- a/civicrm/CRM/Contact/DAO/Contact.php +++ b/civicrm/CRM/Contact/DAO/Contact.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/Contact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/ContactType.php b/civicrm/CRM/Contact/DAO/ContactType.php index 85eccc56c752e0373954d37d407922731d5c0f5a..14772d114027f58ac4f096fe0206f0a76a9feef7 100644 --- a/civicrm/CRM/Contact/DAO/ContactType.php +++ b/civicrm/CRM/Contact/DAO/ContactType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/ContactType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/DashboardContact.php b/civicrm/CRM/Contact/DAO/DashboardContact.php index e03a23879f8bd824703f95561bb3c687aa52c7ca..e3eb9e07bd949880a4b203a614a6c25c538ce527 100644 --- a/civicrm/CRM/Contact/DAO/DashboardContact.php +++ b/civicrm/CRM/Contact/DAO/DashboardContact.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/DashboardContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/Group.php b/civicrm/CRM/Contact/DAO/Group.php index 3c67ae06841e3ecf4b8f3cba876626a8c1b24984..e1de1bb5f8776cf5505682745362aa505f37d858 100644 --- a/civicrm/CRM/Contact/DAO/Group.php +++ b/civicrm/CRM/Contact/DAO/Group.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/Group.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/GroupContact.php b/civicrm/CRM/Contact/DAO/GroupContact.php index a53545599bbd3129c085bc0c3fd7fc119a776edf..6d57260fe710cbdb0e27f9bcde42494feff047bf 100644 --- a/civicrm/CRM/Contact/DAO/GroupContact.php +++ b/civicrm/CRM/Contact/DAO/GroupContact.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/GroupContact.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/GroupContactCache.php b/civicrm/CRM/Contact/DAO/GroupContactCache.php index 70970ac225dcd23304306fcb4bad3639b8c31864..0a7bd2ab3c666b7369eb156d7e8b75a03de1088d 100644 --- a/civicrm/CRM/Contact/DAO/GroupContactCache.php +++ b/civicrm/CRM/Contact/DAO/GroupContactCache.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/GroupContactCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/GroupNesting.php b/civicrm/CRM/Contact/DAO/GroupNesting.php index 40d736164f445fdaace0024cd8318bd94b1d9c96..d280df1f30ad13878e4901f8abfb9d7a2cc8c10d 100644 --- a/civicrm/CRM/Contact/DAO/GroupNesting.php +++ b/civicrm/CRM/Contact/DAO/GroupNesting.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/GroupNesting.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/GroupOrganization.php b/civicrm/CRM/Contact/DAO/GroupOrganization.php index 49bb7b4240860ff36d872e727a36af556c0f7bad..cb654891e097756510aba272b040726f8fab26dd 100644 --- a/civicrm/CRM/Contact/DAO/GroupOrganization.php +++ b/civicrm/CRM/Contact/DAO/GroupOrganization.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/GroupOrganization.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/Relationship.php b/civicrm/CRM/Contact/DAO/Relationship.php index 20f4bef28dc2828d6cd1da7c39615dc3aacb8979..f61c5c220fdbda0f18941bfcb951b42c3f87ae8e 100644 --- a/civicrm/CRM/Contact/DAO/Relationship.php +++ b/civicrm/CRM/Contact/DAO/Relationship.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/Relationship.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/RelationshipType.php b/civicrm/CRM/Contact/DAO/RelationshipType.php index df6adbf37951ce8b6f0050257b110fe307eb54e6..23b8cff703ebd6addddeaac3a6606d168f659bc7 100644 --- a/civicrm/CRM/Contact/DAO/RelationshipType.php +++ b/civicrm/CRM/Contact/DAO/RelationshipType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/RelationshipType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/SavedSearch.php b/civicrm/CRM/Contact/DAO/SavedSearch.php index 0755741e050b3985998e1874829ea03f55bebaf8..97ecac5207f3cd3a284f2e39d48220a532f9d2f2 100644 --- a/civicrm/CRM/Contact/DAO/SavedSearch.php +++ b/civicrm/CRM/Contact/DAO/SavedSearch.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/SavedSearch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/DAO/SubscriptionHistory.php b/civicrm/CRM/Contact/DAO/SubscriptionHistory.php index 0fc2f90fb7b63d4351d75fe12cf262b47887ca72..37ac628c8a5fce30008c5b5cf5aceb794aaa6f97 100644 --- a/civicrm/CRM/Contact/DAO/SubscriptionHistory.php +++ b/civicrm/CRM/Contact/DAO/SubscriptionHistory.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contact/SubscriptionHistory.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contact/Form/Contact.php b/civicrm/CRM/Contact/Form/Contact.php index e3a4ea57fec1cc5eb7a5997d2f4a3323cbbcb894..375d18a66522bbde61652b8869c2b0f5afa7e4b3 100644 --- a/civicrm/CRM/Contact/Form/Contact.php +++ b/civicrm/CRM/Contact/Form/Contact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/CustomData.php b/civicrm/CRM/Contact/Form/CustomData.php index fa4bf98db578711efc29c7d89bd8f65b7b47db88..4698051528025f835d36cf836c1ef41bbe19667c 100644 --- a/civicrm/CRM/Contact/Form/CustomData.php +++ b/civicrm/CRM/Contact/Form/CustomData.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/DedupeFind.php b/civicrm/CRM/Contact/Form/DedupeFind.php index 155862b7a79438dfb45fa7a579859907fd477ad3..f261fccc7522f0ed8d3e38d8410092084754d67e 100644 --- a/civicrm/CRM/Contact/Form/DedupeFind.php +++ b/civicrm/CRM/Contact/Form/DedupeFind.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -36,6 +36,11 @@ */ class CRM_Contact_Form_DedupeFind extends CRM_Admin_Form { + /** + * Indicate if this form should warn users of unsaved changes + */ + protected $unsavedChangesWarn = FALSE; + /** * Pre processing. */ diff --git a/civicrm/CRM/Contact/Form/DedupeRules.php b/civicrm/CRM/Contact/Form/DedupeRules.php index ff12c07eb7e796b08cf819c0f1139ca9495ec768..0770a1e0c28421051f7c65b7e440d9a9eb658cc2 100644 --- a/civicrm/CRM/Contact/Form/DedupeRules.php +++ b/civicrm/CRM/Contact/Form/DedupeRules.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Domain.php b/civicrm/CRM/Contact/Form/Domain.php index cd3d2ec7f96ef6acb2650ee4849523bc2b3e0f45..558ce38d2503c39198edc71fe615105d4a969892 100644 --- a/civicrm/CRM/Contact/Form/Domain.php +++ b/civicrm/CRM/Contact/Form/Domain.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Address.php b/civicrm/CRM/Contact/Form/Edit/Address.php index c3da42fa62ce3ebba5f205d56a60aa44ea71f9f8..b6df73e0ec9297379c1d00f87d3e7b14144ce379 100644 --- a/civicrm/CRM/Contact/Form/Edit/Address.php +++ b/civicrm/CRM/Contact/Form/Edit/Address.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php b/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php index 20f08e501bb67551b3660042a227e465997564b4..d62bcb8025046139805d6f62baa9c331be18def0 100644 --- a/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php +++ b/civicrm/CRM/Contact/Form/Edit/CommunicationPreferences.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/CustomData.php b/civicrm/CRM/Contact/Form/Edit/CustomData.php index eb865796ed788ab6dd0a4b7076528c4b117cfd5e..6893168cb695fa43bc672b5a0a957823064e950d 100644 --- a/civicrm/CRM/Contact/Form/Edit/CustomData.php +++ b/civicrm/CRM/Contact/Form/Edit/CustomData.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Demographics.php b/civicrm/CRM/Contact/Form/Edit/Demographics.php index e96acc7e2246ad780c26a1d2b3ab7a68f2d0beb7..fe6dba816eb13953b1dbd1a617fc6fe662d90639 100644 --- a/civicrm/CRM/Contact/Form/Edit/Demographics.php +++ b/civicrm/CRM/Contact/Form/Edit/Demographics.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Email.php b/civicrm/CRM/Contact/Form/Edit/Email.php index 9d6b217349c88597aa800ea1c190b5bbbe55d919..cc15d8f7abbb7814ed9f4e81d3408c9cf7046b46 100644 --- a/civicrm/CRM/Contact/Form/Edit/Email.php +++ b/civicrm/CRM/Contact/Form/Edit/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Household.php b/civicrm/CRM/Contact/Form/Edit/Household.php index 1b6823657e632ef02d1c3bb919e7d2ae1c5b3b95..678b40d42bd5d02ccc44c2512725eca5e45fa039 100644 --- a/civicrm/CRM/Contact/Form/Edit/Household.php +++ b/civicrm/CRM/Contact/Form/Edit/Household.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/IM.php b/civicrm/CRM/Contact/Form/Edit/IM.php index ca56642b398fbe1fbb4f22a038725fea75a82d15..29fc602740af8c77a6c9d3f7f39c25a79eca6631 100644 --- a/civicrm/CRM/Contact/Form/Edit/IM.php +++ b/civicrm/CRM/Contact/Form/Edit/IM.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Individual.php b/civicrm/CRM/Contact/Form/Edit/Individual.php index 0395b783403d6f8b096aee18d4350c21d2cc14a3..ded492da12c4a15d39c5b3f0fda02ebf837c9541 100644 --- a/civicrm/CRM/Contact/Form/Edit/Individual.php +++ b/civicrm/CRM/Contact/Form/Edit/Individual.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Lock.php b/civicrm/CRM/Contact/Form/Edit/Lock.php index b8119602c117ce14226b41b225e8331ea67d0eeb..f6a6298e73ba5af2be47e1d12133d295ac1d0f3d 100644 --- a/civicrm/CRM/Contact/Form/Edit/Lock.php +++ b/civicrm/CRM/Contact/Form/Edit/Lock.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Notes.php b/civicrm/CRM/Contact/Form/Edit/Notes.php index 7da39198827c412c2d70a480d9c046f2319c4a78..9fa07b06709c0724a59f216787569523d3213c73 100644 --- a/civicrm/CRM/Contact/Form/Edit/Notes.php +++ b/civicrm/CRM/Contact/Form/Edit/Notes.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Edit_Notes { diff --git a/civicrm/CRM/Contact/Form/Edit/OpenID.php b/civicrm/CRM/Contact/Form/Edit/OpenID.php index de13a9657b5c042398fb236cc05209f23cbdca23..c39a3638893e8357e5a88646b3a0283c826e9947 100644 --- a/civicrm/CRM/Contact/Form/Edit/OpenID.php +++ b/civicrm/CRM/Contact/Form/Edit/OpenID.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Organization.php b/civicrm/CRM/Contact/Form/Edit/Organization.php index a52bbd0047adcd4b6688ad657064e7f1bd6ab3b5..058f4c8961b4a858b9629855ac4743d40824a0f6 100644 --- a/civicrm/CRM/Contact/Form/Edit/Organization.php +++ b/civicrm/CRM/Contact/Form/Edit/Organization.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/Phone.php b/civicrm/CRM/Contact/Form/Edit/Phone.php index 84b7ccb379a3502cbee7f3f8d636c97e74a86bc4..e6bc3edbab246d665a4a375fae33d58b229d42a8 100644 --- a/civicrm/CRM/Contact/Form/Edit/Phone.php +++ b/civicrm/CRM/Contact/Form/Edit/Phone.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Edit/TagsAndGroups.php b/civicrm/CRM/Contact/Form/Edit/TagsAndGroups.php index 1518c2a119e0d07e787c053a2e90f78ae2292bc9..b8c666037dddb80c533e916d713a6e96a6966433 100644 --- a/civicrm/CRM/Contact/Form/Edit/TagsAndGroups.php +++ b/civicrm/CRM/Contact/Form/Edit/TagsAndGroups.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Edit_TagsAndGroups { diff --git a/civicrm/CRM/Contact/Form/Edit/Website.php b/civicrm/CRM/Contact/Form/Edit/Website.php index 8cd7336eaec3b88299acfb879521a5b55efeba71..941d00bdd62b7608983bdad05287eba95762b156 100644 --- a/civicrm/CRM/Contact/Form/Edit/Website.php +++ b/civicrm/CRM/Contact/Form/Edit/Website.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/GroupContact.php b/civicrm/CRM/Contact/Form/GroupContact.php index a443d8115f3449ecb8e5dfd800b5e99e20a82297..76753621d3d0809f0124044ac9fc67830eaf3f1d 100644 --- a/civicrm/CRM/Contact/Form/GroupContact.php +++ b/civicrm/CRM/Contact/Form/GroupContact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline.php b/civicrm/CRM/Contact/Form/Inline.php index 01340a47bd6945f1d8746c583ab065ae01cb3b31..a9520b8f5c7280b3ba85488e41cc4df902e4fc0a 100644 --- a/civicrm/CRM/Contact/Form/Inline.php +++ b/civicrm/CRM/Contact/Form/Inline.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/Address.php b/civicrm/CRM/Contact/Form/Inline/Address.php index e6c7e3504144862aeae46f77513eb16404d36a0c..b8904091d0b44317fa5385893dd54f600d20bb5b 100644 --- a/civicrm/CRM/Contact/Form/Inline/Address.php +++ b/civicrm/CRM/Contact/Form/Inline/Address.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/CommunicationPreferences.php b/civicrm/CRM/Contact/Form/Inline/CommunicationPreferences.php index ce67560a2b660165a459869f22db29f0e4ac9791..589589dbfd9c54421ea5f371575373aae1450797 100644 --- a/civicrm/CRM/Contact/Form/Inline/CommunicationPreferences.php +++ b/civicrm/CRM/Contact/Form/Inline/CommunicationPreferences.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/ContactInfo.php b/civicrm/CRM/Contact/Form/Inline/ContactInfo.php index 48ef0d31b43ade56a5651e52ef33d6333e3c1058..b9cd02b8727dd2884b304654c0d7c58c2f01b2a9 100644 --- a/civicrm/CRM/Contact/Form/Inline/ContactInfo.php +++ b/civicrm/CRM/Contact/Form/Inline/ContactInfo.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/ContactName.php b/civicrm/CRM/Contact/Form/Inline/ContactName.php index 1fabfabdd5351aae962a37872384234a295a0c99..5f60db40c3b8cd2ba086a43b7346fba22fbf7d75 100644 --- a/civicrm/CRM/Contact/Form/Inline/ContactName.php +++ b/civicrm/CRM/Contact/Form/Inline/ContactName.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/CustomData.php b/civicrm/CRM/Contact/Form/Inline/CustomData.php index 418969f183a164a253984a78d2dfcb7b28b57667..33b87f9ff27e741d4b6a02e9290be9a09ad41f81 100644 --- a/civicrm/CRM/Contact/Form/Inline/CustomData.php +++ b/civicrm/CRM/Contact/Form/Inline/CustomData.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/Demographics.php b/civicrm/CRM/Contact/Form/Inline/Demographics.php index ca843f4686f372f1dedcfb5440d0c93c5f10bee5..fed6dc9046322fc4341a3a885ea8b20ef667495f 100644 --- a/civicrm/CRM/Contact/Form/Inline/Demographics.php +++ b/civicrm/CRM/Contact/Form/Inline/Demographics.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/Email.php b/civicrm/CRM/Contact/Form/Inline/Email.php index 11ecf04535bb3fa5cf03f16894d1394d799b7825..5d391910528cf015bb5f53d874dd76f01ec0f599 100644 --- a/civicrm/CRM/Contact/Form/Inline/Email.php +++ b/civicrm/CRM/Contact/Form/Inline/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/IM.php b/civicrm/CRM/Contact/Form/Inline/IM.php index 1464c320aed1f1904b81f7faa18fec9bdc0dac96..688e805c63268a723b208e828cb85883711572bd 100644 --- a/civicrm/CRM/Contact/Form/Inline/IM.php +++ b/civicrm/CRM/Contact/Form/Inline/IM.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/Lock.php b/civicrm/CRM/Contact/Form/Inline/Lock.php index be6d6b024d1f68682e498d1858d7188f81ef99f9..abeb99ebf2bf4a31b22fa585e1dcf77ee7ba21f5 100644 --- a/civicrm/CRM/Contact/Form/Inline/Lock.php +++ b/civicrm/CRM/Contact/Form/Inline/Lock.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/OpenID.php b/civicrm/CRM/Contact/Form/Inline/OpenID.php index 6d102887a49242d62a6471c841f8ec46fea60dcc..fe886c798fb0da09e99114873f0f86a840f8dfac 100644 --- a/civicrm/CRM/Contact/Form/Inline/OpenID.php +++ b/civicrm/CRM/Contact/Form/Inline/OpenID.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/Phone.php b/civicrm/CRM/Contact/Form/Inline/Phone.php index 26872ac827b68600f49bae56473817367e219494..d7f81ff354ea72f62b759cc38fc0261ae5503fff 100644 --- a/civicrm/CRM/Contact/Form/Inline/Phone.php +++ b/civicrm/CRM/Contact/Form/Inline/Phone.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Inline/Website.php b/civicrm/CRM/Contact/Form/Inline/Website.php index 7671a5fd3bad2d55f74848c38c65b0cfa2d33967..333e5162281dce603dc2727632271fd30b60aad7 100644 --- a/civicrm/CRM/Contact/Form/Inline/Website.php +++ b/civicrm/CRM/Contact/Form/Inline/Website.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -122,7 +122,7 @@ class CRM_Contact_Form_Inline_Website extends CRM_Contact_Form_Inline { } } // Process / save websites - CRM_Core_BAO_Website::create($params['website'], $this->_contactId, TRUE); + CRM_Core_BAO_Website::process($params['website'], $this->_contactId, TRUE); $this->log(); $this->response(); diff --git a/civicrm/CRM/Contact/Form/Location.php b/civicrm/CRM/Contact/Form/Location.php index c80eb609d1b27666f89abb984b64eb51f42a5bbc..520ed19da1b0a116f4ca7ab30850f4950c4878ab 100644 --- a/civicrm/CRM/Contact/Form/Location.php +++ b/civicrm/CRM/Contact/Form/Location.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Location { diff --git a/civicrm/CRM/Contact/Form/Merge.php b/civicrm/CRM/Contact/Form/Merge.php index 9a567873eb0781fff037d6dfbed132dd569b7f57..2c6a299186ef141358d34efc6f17f61d8fade3fd 100644 --- a/civicrm/CRM/Contact/Form/Merge.php +++ b/civicrm/CRM/Contact/Form/Merge.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -74,7 +74,8 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { $this->_gid = $gid = CRM_Utils_Request::retrieve('gid', 'Positive', $this, FALSE); $this->_mergeId = CRM_Utils_Request::retrieve('mergeId', 'Positive', $this, FALSE); $this->limit = CRM_Utils_Request::retrieve('limit', 'Positive', $this, FALSE); - $urlParams = "reset=1&rgid={$this->_rgid}&gid={$this->_gid}&limit=" . $this->limit; + + $urlParams = ['reset' => 1, 'rgid' => $this->_rgid, 'gid' => $this->_gid, 'limit' => $this->limit]; $this->bounceIfInvalid($this->_cid, $this->_oid); @@ -83,7 +84,7 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { 'return' => 'contact_type', )); - $browseUrl = CRM_Utils_System::url('civicrm/contact/dedupefind', $urlParams . '&action=browse'); + $browseUrl = CRM_Utils_System::url('civicrm/contact/dedupefind', array_merge($urlParams, ['action' => 'browse'])); if (!$this->_rgid) { // Unset browse URL as we have come from the search screen. @@ -124,13 +125,13 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { $this->assign('mainUfId', $mainUfId); $this->assign('mainUfName', $mainUser ? $mainUser->name : NULL); } - - $flipUrl = CRM_Utils_System::url('civicrm/contact/merge', - "reset=1&action=update&cid={$this->_oid}&oid={$this->_cid}&rgid={$this->_rgid}&gid={$gid}" - ); + $flipParams = array_merge($urlParams, ['action' => 'update', 'cid' => $this->_oid, 'oid' => $this->_cid]); if (!$flip) { - $flipUrl .= '&flip=1'; + $flipParams['flip'] = '1'; } + $flipUrl = CRM_Utils_System::url('civicrm/contact/merge', + $flipParams + ); $this->assign('flip', $flipUrl); $this->prev = $this->next = NULL; @@ -140,8 +141,13 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { ) as $position) { if (!empty($pos[$position])) { if ($pos[$position]['id1'] && $pos[$position]['id2']) { - $urlParams .= "&cid={$pos[$position]['id1']}&oid={$pos[$position]['id2']}&mergeId={$pos[$position]['mergeId']}&action=update"; - $this->$position = CRM_Utils_System::url('civicrm/contact/merge', $urlParams); + $rowParams = array_merge($urlParams, [ + 'action' => 'update', + 'cid' => $pos[$position]['id1'], + 'oid' => $pos[$position]['id2'], + 'mergeId' => $pos[$position]['mergeId'], + ]); + $this->$position = CRM_Utils_System::url('civicrm/contact/merge', $rowParams); $this->assign($position, $this->$position); } } @@ -294,18 +300,17 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { $message = '<ul><li>' . ts('%1 has been updated.', array(1 => $name)) . '</li><li>' . ts('Contact ID %1 has been deleted.', array(1 => $this->_oid)) . '</li></ul>'; CRM_Core_Session::setStatus($message, ts('Contacts Merged'), 'success'); - $url = CRM_Utils_System::url('civicrm/contact/view', "reset=1&cid={$this->_cid}"); - $urlParams = "reset=1&gid={$this->_gid}&rgid={$this->_rgid}&limit={$this->limit}"; + $urlParams = ['reset' => 1, 'cid' => $this->_cid, 'rgid' => $this->_rgid, 'gid' => $this->_gid, 'limit' => $this->limit]; + $contactViewUrl = CRM_Utils_System::url('civicrm/contact/view', ['reset' => 1, 'cid' => $this->_cid]); if (!empty($formValues['_qf_Merge_submit'])) { - $urlParams .= "&action=update"; - $lisitingURL = CRM_Utils_System::url('civicrm/contact/dedupefind', + $urlParams['action'] = "update"; + CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/contact/dedupefind', $urlParams - ); - CRM_Utils_System::redirect($lisitingURL); + )); } if (!empty($formValues['_qf_Merge_done'])) { - CRM_Utils_System::redirect($url); + CRM_Utils_System::redirect($contactViewUrl); } if ($this->next && $this->_mergeId) { @@ -321,12 +326,16 @@ class CRM_Contact_Form_Merge extends CRM_Core_Form { $pos['next']['id2'] ) { - $urlParams .= "&cid={$pos['next']['id1']}&oid={$pos['next']['id2']}&mergeId={$pos['next']['mergeId']}&action=update"; - $url = CRM_Utils_System::url('civicrm/contact/merge', $urlParams); + $urlParams['cid'] = $pos['next']['id1']; + $urlParams['oid'] = $pos['next']['id2']; + $urlParams['mergeId'] = $pos['next']['mergeId']; + $urlParams['action'] = 'update'; + CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/contact/merge', $urlParams)); } } - CRM_Utils_System::redirect($url); + // Perhaps never reached. + CRM_Utils_System::redirect($contactViewUrl); } /** diff --git a/civicrm/CRM/Contact/Form/RelatedContact.php b/civicrm/CRM/Contact/Form/RelatedContact.php index 2f3eede683789c0f45864adc99e5e8080cc32792..6a513e5b49cef639c542d6827a6dc04c515322e8 100644 --- a/civicrm/CRM/Contact/Form/RelatedContact.php +++ b/civicrm/CRM/Contact/Form/RelatedContact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Relationship.php b/civicrm/CRM/Contact/Form/Relationship.php index e90727bb07154fb7c1dc6a364bb9971d7a1ee71a..3ef442ab9ea3986594d66b7137431e531d3a0563 100644 --- a/civicrm/CRM/Contact/Form/Relationship.php +++ b/civicrm/CRM/Contact/Form/Relationship.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contact/Form/Search.php b/civicrm/CRM/Contact/Form/Search.php index 08a5019fd9535ddb860eb191497e1cadaad4887a..2df8b362cf7e8ff1750139e0743e1172edc54819 100644 --- a/civicrm/CRM/Contact/Form/Search.php +++ b/civicrm/CRM/Contact/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -201,7 +201,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { public static function setModeValues() { if (!self::$_modeValues) { self::$_modeValues = array( - 1 => array( + CRM_Contact_BAO_Query::MODE_CONTACTS => array( 'selectorName' => self::$_selectorName, 'selectorLabel' => ts('Contacts'), 'taskFile' => 'CRM/Contact/Form/Search/ResultTasks.tpl', @@ -210,7 +210,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { 'resultContext' => NULL, 'taskClassName' => 'CRM_Contact_Task', ), - 2 => array( + CRM_Contact_BAO_Query::MODE_CONTRIBUTE => array( 'selectorName' => 'CRM_Contribute_Selector_Search', 'selectorLabel' => ts('Contributions'), 'taskFile' => 'CRM/common/searchResultTasks.tpl', @@ -219,7 +219,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { 'resultContext' => 'Search', 'taskClassName' => 'CRM_Contribute_Task', ), - 3 => array( + CRM_Contact_BAO_Query::MODE_EVENT => array( 'selectorName' => 'CRM_Event_Selector_Search', 'selectorLabel' => ts('Event Participants'), 'taskFile' => 'CRM/common/searchResultTasks.tpl', @@ -228,7 +228,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { 'resultContext' => 'Search', 'taskClassName' => 'CRM_Event_Task', ), - 4 => array( + CRM_Contact_BAO_Query::MODE_ACTIVITY => array( 'selectorName' => 'CRM_Activity_Selector_Search', 'selectorLabel' => ts('Activities'), 'taskFile' => 'CRM/common/searchResultTasks.tpl', @@ -237,7 +237,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { 'resultContext' => 'Search', 'taskClassName' => 'CRM_Activity_Task', ), - 5 => array( + CRM_Contact_BAO_Query::MODE_MEMBER => array( 'selectorName' => 'CRM_Member_Selector_Search', 'selectorLabel' => ts('Memberships'), 'taskFile' => "CRM/common/searchResultTasks.tpl", @@ -246,7 +246,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { 'resultContext' => 'Search', 'taskClassName' => 'CRM_Member_Task', ), - 6 => array( + CRM_Contact_BAO_Query::MODE_CASE => array( 'selectorName' => 'CRM_Case_Selector_Search', 'selectorLabel' => ts('Cases'), 'taskFile' => "CRM/common/searchResultTasks.tpl", @@ -255,7 +255,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { 'resultContext' => 'Search', 'taskClassName' => 'CRM_Case_Task', ), - 7 => array( + CRM_Contact_BAO_Query::MODE_CONTACTSRELATED => array( 'selectorName' => self::$_selectorName, 'selectorLabel' => ts('Related Contacts'), 'taskFile' => 'CRM/Contact/Form/Search/ResultTasks.tpl', @@ -264,7 +264,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { 'resultContext' => NULL, 'taskClassName' => 'CRM_Contact_Task', ), - 8 => array( + CRM_Contact_BAO_Query::MODE_MAILING => array( 'selectorName' => 'CRM_Mailing_Selector_Search', 'selectorLabel' => ts('Mailings'), 'taskFile' => "CRM/common/searchResultTasks.tpl", @@ -282,11 +282,11 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { * * @return mixed */ - public static function getModeValue($mode = 1) { + public static function getModeValue($mode = CRM_Contact_BAO_Query::MODE_CONTACTS) { self::setModeValues(); if (!array_key_exists($mode, self::$_modeValues)) { - $mode = 1; + $mode = CRM_Contact_BAO_Query::MODE_CONTACTS; } return self::$_modeValues[$mode]; @@ -298,25 +298,36 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { public static function getModeSelect() { self::setModeValues(); - $select = array(); + $componentModes = array(); foreach (self::$_modeValues as $id => & $value) { - $select[$id] = $value['selectorLabel']; + $componentModes[$id] = $value['selectorLabel']; } - // unset contributions or participants if user does not have - // permission on them + $enabledComponents = CRM_Core_Component::getEnabledComponents(); + + // unset disabled components + if (!array_key_exists('CiviMail', $enabledComponents)) { + unset($componentModes[CRM_Contact_BAO_Query::MODE_MAILING]); + } + + // unset contributions or participants if user does not have permission on them if (!CRM_Core_Permission::access('CiviContribute')) { - unset($select['2']); + unset($componentModes[CRM_Contact_BAO_Query::MODE_CONTRIBUTE]); } if (!CRM_Core_Permission::access('CiviEvent')) { - unset($select['3']); + unset($componentModes[CRM_Contact_BAO_Query::MODE_EVENT]); + } + + if (!CRM_Core_Permission::access('CiviMember')) { + unset($componentModes[CRM_Contact_BAO_Query::MODE_MEMBER]); } if (!CRM_Core_Permission::check('view all activities')) { - unset($select['4']); + unset($componentModes[CRM_Contact_BAO_Query::MODE_ACTIVITY]); } - return $select; + + return $componentModes; } /** @@ -325,26 +336,17 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { * @return array */ public function buildTaskList() { + // amtg = 'Add members to group' if ($this->_context !== 'amtg') { - $permission = CRM_Core_Permission::getPermission(); - - if ($this->_componentMode == 1 || $this->_componentMode == 7) { - $this->_taskList += CRM_Contact_Task::permissionedTaskTitles($permission, - CRM_Utils_Array::value('deleted_contacts', $this->_formValues) - ); - } - else { - $className = $this->_modeValue['taskClassName']; - $this->_taskList += $className::permissionedTaskTitles($permission, FALSE); - } - - // Only offer the "Update Smart Group" task if a smart group/saved search is already in play - if (isset($this->_ssID) && $permission == CRM_Core_Permission::EDIT) { - $this->_taskList += CRM_Contact_Task::optionalTaskTitle(); + $taskParams['deletedContacts'] = FALSE; + if ($this->_componentMode == CRM_Contact_BAO_Query::MODE_CONTACTS || $this->_componentMode == CRM_Contact_BAO_Query::MODE_CONTACTSRELATED) { + $taskParams['deletedContacts'] = CRM_Utils_Array::value('deleted_contacts', $this->_formValues); } + $className = $this->_modeValue['taskClassName']; + $taskParams['ssID'] = isset($this->_ssID) ? $this->_ssID : NULL; + $this->_taskList += $className::permissionedTaskTitles(CRM_Core_Permission::getPermission(), $taskParams); } - asort($this->_taskList); return $this->_taskList; } @@ -357,24 +359,11 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { // jsTree is needed for tags popup ->addScriptFile('civicrm', 'packages/jquery/plugins/jstree/jquery.jstree.js', 0, 'html-header', FALSE) ->addStyleFile('civicrm', 'packages/jquery/plugins/jstree/themes/default/style.css', 0, 'html-header'); - $permission = CRM_Core_Permission::getPermission(); + // some tasks.. what do we want to do with the selected contacts ? - $tasks = array(); - if ($this->_componentMode == 1 || $this->_componentMode == 7) { - $tasks += CRM_Contact_Task::permissionedTaskTitles($permission, - CRM_Utils_Array::value('deleted_contacts', $this->_formValues) - ); - } - else { - $className = $this->_modeValue['taskClassName']; - $tasks += $className::permissionedTaskTitles($permission, FALSE); - } + $this->_taskList = $this->buildTaskList(); if (isset($this->_ssID)) { - if ($permission == CRM_Core_Permission::EDIT) { - $tasks = $tasks + CRM_Contact_Task::optionalTaskTitle(); - } - $search_custom_id = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_SavedSearch', $this->_ssID, 'search_custom_id'); @@ -464,7 +453,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { 'class' => 'crm-form-submit', ) ); - $this->add('hidden', 'task', CRM_Contact_Task::GROUP_CONTACTS); + $this->add('hidden', 'task', CRM_Contact_Task::GROUP_ADD); $selectedRowsRadio = $this->addElement('radio', 'radio_ts', NULL, '', 'ts_sel', array('checked' => 'checked')); $allRowsRadio = $this->addElement('radio', 'radio_ts', NULL, '', 'ts_all'); $this->assign('ts_sel_id', $selectedRowsRadio->_attributes['id']); @@ -474,7 +463,7 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { $selectedContactIds = array(); $qfKeyParam = CRM_Utils_Array::value('qfKey', $this->_formValues); // We use ajax to handle selections only if the search results component_mode is set to "contacts" - if ($qfKeyParam && ($this->get('component_mode') <= 1 || $this->get('component_mode') == 7)) { + if ($qfKeyParam && ($this->get('component_mode') <= CRM_Contact_BAO_Query::MODE_CONTACTS || $this->get('component_mode') == CRM_Contact_BAO_Query::MODE_CONTACTSRELATED)) { $this->addClass('crm-ajax-selection-form'); $qfKeyParam = "civicrm search {$qfKeyParam}"; $selectedContactIdsArr = CRM_Core_BAO_PrevNextCache::getSelection($qfKeyParam); @@ -515,8 +504,8 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { $this->_ssID = CRM_Utils_Request::retrieve('ssID', 'Positive', $this); $this->_sortByCharacter = CRM_Utils_Request::retrieve('sortByCharacter', 'String', $this); $this->_ufGroupID = CRM_Utils_Request::retrieve('id', 'Positive', $this); - $this->_componentMode = CRM_Utils_Request::retrieve('component_mode', 'Positive', $this, FALSE, 1, $_REQUEST); - $this->_operator = CRM_Utils_Request::retrieve('operator', 'String', $this, FALSE, 1, $_REQUEST, 'AND'); + $this->_componentMode = CRM_Utils_Request::retrieve('component_mode', 'Positive', $this, FALSE, CRM_Contact_BAO_Query::MODE_CONTACTS, $_REQUEST); + $this->_operator = CRM_Utils_Request::retrieve('operator', 'String', $this, FALSE, CRM_Contact_BAO_Query::SEARCH_OPERATOR_AND, 'REQUEST'); /** * set the button names @@ -648,9 +637,9 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search { $this->assign('id', CRM_Utils_Array::value('uf_group_id', $this->_formValues) ); - $operator = CRM_Utils_Array::value('operator', $this->_formValues, 'AND'); + $operator = CRM_Utils_Array::value('operator', $this->_formValues, CRM_Contact_BAO_Query::SEARCH_OPERATOR_AND); $this->set('queryOperator', $operator); - if ($operator == 'OR') { + if ($operator == CRM_Contact_BAO_Query::SEARCH_OPERATOR_OR) { $this->assign('operator', ts('OR')); } else { diff --git a/civicrm/CRM/Contact/Form/Search/Advanced.php b/civicrm/CRM/Contact/Form/Search/Advanced.php index d1710683878675470bf7f48817a6d870ccf87a2a..122963c22a0cd7037c2076550a158876b1496ac3 100644 --- a/civicrm/CRM/Contact/Form/Search/Advanced.php +++ b/civicrm/CRM/Contact/Form/Search/Advanced.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -206,7 +206,7 @@ class CRM_Contact_Form_Search_Advanced extends CRM_Contact_Form_Search { $this->normalizeDefaultValues($defaults); if ($this->_context === 'amtg') { - $defaults['task'] = CRM_Contact_Task::GROUP_CONTACTS; + $defaults['task'] = CRM_Contact_Task::GROUP_ADD; } return $defaults; diff --git a/civicrm/CRM/Contact/Form/Search/Basic.php b/civicrm/CRM/Contact/Form/Search/Basic.php index 460af450a58326b02d76bc93a0943ad1d2e18d66..a5b26a36a64cc09627cf7cbab162fabecefc4bd5 100644 --- a/civicrm/CRM/Contact/Form/Search/Basic.php +++ b/civicrm/CRM/Contact/Form/Search/Basic.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -111,7 +111,7 @@ class CRM_Contact_Form_Search_Basic extends CRM_Contact_Form_Search { } if ($this->_context === 'amtg') { - $defaults['task'] = CRM_Contact_Task::GROUP_CONTACTS; + $defaults['task'] = CRM_Contact_Task::GROUP_ADD; } if ($this->_context === 'smog') { diff --git a/civicrm/CRM/Contact/Form/Search/Builder.php b/civicrm/CRM/Contact/Form/Search/Builder.php index b052193a0c7281d4865c7ac1960eb1744b96bd1d..153768095b9c0931c9c8f087ab8f8153f04d12aa 100644 --- a/civicrm/CRM/Contact/Form/Search/Builder.php +++ b/civicrm/CRM/Contact/Form/Search/Builder.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Search/Criteria.php b/civicrm/CRM/Contact/Form/Search/Criteria.php index 1adc51377b2193cf82733bfa6659c3bfc0aba4bc..87159ac23b9eb255aaff8003744d555e1efc9ffd 100644 --- a/civicrm/CRM/Contact/Form/Search/Criteria.php +++ b/civicrm/CRM/Contact/Form/Search/Criteria.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Criteria { /** @@ -158,32 +158,6 @@ class CRM_Contact_Form_Search_Criteria { ); $componentModes = CRM_Contact_Form_Search::getModeSelect(); - $enabledComponents = CRM_Core_Component::getEnabledComponents(); - - // unset disabled components that must should have been enabled - // to the option be viable - if (!array_key_exists('CiviMail', $enabledComponents)) { - unset($componentModes['8']); - } - - // unset contributions or participants if user does not have - // permission on them - if (!CRM_Core_Permission::access('CiviContribute')) { - unset($componentModes['2']); - } - - if (!CRM_Core_Permission::access('CiviEvent')) { - unset($componentModes['3']); - } - - if (!CRM_Core_Permission::access('CiviMember')) { - unset($componentModes['5']); - } - - if (!CRM_Core_Permission::check('view all activities')) { - unset($componentModes['4']); - } - if (count($componentModes) > 1) { $form->add('select', 'component_mode', @@ -198,8 +172,8 @@ class CRM_Contact_Form_Search_Criteria { 'operator', ts('Search Operator'), array( - 'AND' => ts('AND'), - 'OR' => ts('OR'), + CRM_Contact_BAO_Query::SEARCH_OPERATOR_AND => ts('AND'), + CRM_Contact_BAO_Query::SEARCH_OPERATOR_OR => ts('OR'), ), array('allowClear' => FALSE) ); @@ -396,9 +370,9 @@ class CRM_Contact_Form_Search_Criteria { $form->addElement('text', 'changed_by', ts('Modified By'), NULL); $dates = array(1 => ts('Added'), 2 => ts('Modified')); - $form->addRadio('log_date', NULL, $dates, array('allowClear' => TRUE), '<br />'); + $form->addRadio('log_date', NULL, $dates, array('allowClear' => TRUE)); - CRM_Core_Form_Date::buildDateRange($form, 'log_date', 1, '_low', '_high', ts('From'), FALSE, FALSE); + CRM_Core_Form_Date::buildDateRange($form, 'log_date', 1, '_low', '_high', ts('From:'), FALSE, FALSE); } /** diff --git a/civicrm/CRM/Contact/Form/Search/Custom.php b/civicrm/CRM/Contact/Form/Search/Custom.php index 4af599800f72021e679ee8c0f338ac98ae379b8c..67f752d5b21e94114054b5639b76139318b8b5dc 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom.php +++ b/civicrm/CRM/Contact/Form/Search/Custom.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom extends CRM_Contact_Form_Search { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/ActivitySearch.php b/civicrm/CRM/Contact/Form/Search/Custom/ActivitySearch.php index 066da42b7aabdfe746375b10f08593abf189d533..dc1aefedf7569f9697c61ad037655cdfffa4e2d1 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/ActivitySearch.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/ActivitySearch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_ActivitySearch extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/Base.php b/civicrm/CRM/Contact/Form/Search/Custom/Base.php index 74ed7650573a1d6ee469aeda47f17bcc019619d3..bf9d95eb392da87245a1e9aedd41f1307689799c 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/Base.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/Base.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_Base { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/Basic.php b/civicrm/CRM/Contact/Form/Search/Custom/Basic.php index f5028b0f265827681b194d86a57b5e4bb655ca8c..20a03cd824439ea4ac108aa2c911f76465b2c848 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/Basic.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/Basic.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_Basic extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/ContribSYBNT.php b/civicrm/CRM/Contact/Form/Search/Custom/ContribSYBNT.php index e88f797070aca041732b76c0555c3f0e7a787e8d..e5bde961e507d24a4621ea7f9c30b5071e40e7a4 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/ContribSYBNT.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/ContribSYBNT.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_ContribSYBNT extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/ContributionAggregate.php b/civicrm/CRM/Contact/Form/Search/Custom/ContributionAggregate.php index db14a49ea7378b16077a1cfa9bd480599391f56c..d01a26e475cc59c814a20c82abca992f66631237 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/ContributionAggregate.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/ContributionAggregate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_ContributionAggregate extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/DateAdded.php b/civicrm/CRM/Contact/Form/Search/Custom/DateAdded.php index 04a392cda56941e66cdc8948a70e705dd1e5f4a4..7e0e55a722cc53a99841319559d7253b514319fb 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/DateAdded.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/DateAdded.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_DateAdded extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/EventAggregate.php b/civicrm/CRM/Contact/Form/Search/Custom/EventAggregate.php index 2947696c3aa6a69f2cd61e5f6cfa10bb5c4120de..8606759d66e4d338a0eec1db22a8dce17d9e2abe 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/EventAggregate.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/EventAggregate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_EventAggregate extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText.php index f52c1bde2734501ce5e24b28d9c595b8e5caa2f8..1404f4882a96d71297cf3bd10d760c3f6b896002 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_FullText extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText/AbstractPartialQuery.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText/AbstractPartialQuery.php index f5f5ddc2bea936ce7f78a7f2a8fd9a25ed351af1..39d9d505563bc8ea287bcc58f1689a2383998f5c 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText/AbstractPartialQuery.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText/AbstractPartialQuery.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Activity.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Activity.php index deb1ff7e4087cdcd7285d179deead815f5b2af26..b1cf1ab4f5175c77e12602c70c994633760862a0 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Activity.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Activity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_FullText_Activity extends CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Case.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Case.php index dc586169739f2267a14b7943460be1716def6691..ade7852ef76a2c2c5006c9dcca56598a7ce7784e 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Case.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Case.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_FullText_Case extends CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Contact.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Contact.php index 0849903b04f77cc254aa6d1b37dd1849a8fc5273..873d67a79aebb2ebea513194c816e8d4f227d1f4 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Contact.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Contact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_FullText_Contact extends CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Contribution.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Contribution.php index 7553ed395199a9556691f1c772aba8bb9c0176e8..0f6b304c05b70c5718bc6296c9f06a057ed0b689 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Contribution.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Contribution.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_FullText_Contribution extends CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Membership.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Membership.php index f1666bb5d7bb5d6d7e3792f5a5251909e0334166..6aa47920643458f693f112a2e9778fc71bde930b 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Membership.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Membership.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_FullText_Membership extends CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Participant.php b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Participant.php index d73a1d1402f08d05a88fda680d420b98cd6c95f8..114a2d0466a42f615793be230324d049d58faf26 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/FullText/Participant.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/FullText/Participant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_FullText_Participant extends CRM_Contact_Form_Search_Custom_FullText_AbstractPartialQuery { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/Group.php b/civicrm/CRM/Contact/Form/Search/Custom/Group.php index 3c28ac54826a14d05b193a181940b4d5a7d1d2f7..3d17946f024709cb7a06a8195a3976fe9113d59b 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/Group.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/Group.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_Group extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/MultipleValues.php b/civicrm/CRM/Contact/Form/Search/Custom/MultipleValues.php index af2ed673370de14d419e40cf36875d0a900bac4a..0a64e357c14843427530d3da1d4e69885e906a3b 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/MultipleValues.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/MultipleValues.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_MultipleValues extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/PostalMailing.php b/civicrm/CRM/Contact/Form/Search/Custom/PostalMailing.php index 07f6378b801a05443863b7c6302820b063508aa6..85854ba16bd86099d867d9ba893098220b6904a4 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/PostalMailing.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/PostalMailing.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_PostalMailing extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { protected $_aclFrom = NULL; diff --git a/civicrm/CRM/Contact/Form/Search/Custom/PriceSet.php b/civicrm/CRM/Contact/Form/Search/Custom/PriceSet.php index 78ad2a2540f7547cd2728f959729ac47ae19f9a4..ec95dda8d8140060f62c011540d5c1bcb65469f3 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/PriceSet.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/PriceSet.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_PriceSet extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/Proximity.php b/civicrm/CRM/Contact/Form/Search/Custom/Proximity.php index b2389a3d0578d4637031a7bfb7aa6103807b9a50..5585414cf9b06dff091b5de376884d6e5d26f29d 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/Proximity.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/Proximity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * was added to advanced search. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_Proximity extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/RandomSegment.php b/civicrm/CRM/Contact/Form/Search/Custom/RandomSegment.php index a0125ed0538b300173751baa6c7d80b43580731d..511e4b19d0c5e2258767be7180731d8fe237106d 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/RandomSegment.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/RandomSegment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_RandomSegment extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/Sample.php b/civicrm/CRM/Contact/Form/Search/Custom/Sample.php index c5e2067c58780f2d78d8b2889a76c49aec4c681d..5c915b2bc73a13982b4158ac76439a9a20da33a1 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/Sample.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/Sample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_Sample extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { protected $_aclFrom = NULL; diff --git a/civicrm/CRM/Contact/Form/Search/Custom/TagContributions.php b/civicrm/CRM/Contact/Form/Search/Custom/TagContributions.php index 3987ce399b59fd45d49f199eb9a13998e954e320..2a6b34cac462e19902242fdebb02326eaa5ca8d0 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/TagContributions.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/TagContributions.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_TagContributions extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Search/Custom/ZipCodeRange.php b/civicrm/CRM/Contact/Form/Search/Custom/ZipCodeRange.php index 349d57d81898b24d3f44c86618f982be9bc02951..e7c458c5f530a8d62e18944363bf115ff4d93402 100644 --- a/civicrm/CRM/Contact/Form/Search/Custom/ZipCodeRange.php +++ b/civicrm/CRM/Contact/Form/Search/Custom/ZipCodeRange.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Form_Search_Custom_ZipCodeRange extends CRM_Contact_Form_Search_Custom_Base implements CRM_Contact_Form_Search_Interface { protected $_aclFrom = NULL; diff --git a/civicrm/CRM/Contact/Form/Search/Interface.php b/civicrm/CRM/Contact/Form/Search/Interface.php index 071962c0bc1cacbf0fdac4782b5799cfcbe7082e..1180240fe7a8a69cb00f3298b02a51353ed721b8 100644 --- a/civicrm/CRM/Contact/Form/Search/Interface.php +++ b/civicrm/CRM/Contact/Form/Search/Interface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ interface CRM_Contact_Form_Search_Interface { diff --git a/civicrm/CRM/Contact/Form/Task.php b/civicrm/CRM/Contact/Form/Task.php index 853e1cb00ec13177d61e9f1ee77f1bd9cd6f57df..bb2543129740beea16a841027d5dd0b72ff3ead4 100644 --- a/civicrm/CRM/Contact/Form/Task.php +++ b/civicrm/CRM/Contact/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -104,7 +104,7 @@ class CRM_Contact_Form_Task extends CRM_Core_Form { if ($isStandAlone) { list($form->_task, $title) = CRM_Contact_Task::getTaskAndTitleByClass(get_class($form)); if (!array_key_exists($form->_task, CRM_Contact_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission()))) { - CRM_Core_Error::fatal(ts('You do not have permission to access this page.')); + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); } $form->_contactIds = explode(',', CRM_Utils_Request::retrieve('cids', 'CommaSeparatedIntegers', $form, TRUE)); if (empty($form->_contactIds)) { diff --git a/civicrm/CRM/Contact/Form/Task/AddToGroup.php b/civicrm/CRM/Contact/Form/Task/AddToGroup.php index c77d358534c08e153d95bcb12495baf98194f1ff..8e27e37cb4ae841947afcf70f9bd3f01cfc83c8b 100644 --- a/civicrm/CRM/Contact/Form/Task/AddToGroup.php +++ b/civicrm/CRM/Contact/Form/Task/AddToGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/AddToHousehold.php b/civicrm/CRM/Contact/Form/Task/AddToHousehold.php index 7c2598bc8e89fec7825efb1754127b8743e40fde..bc24165d31b03f03a95ad97316e7c6c77b04bcf1 100644 --- a/civicrm/CRM/Contact/Form/Task/AddToHousehold.php +++ b/civicrm/CRM/Contact/Form/Task/AddToHousehold.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contact/Form/Task/AddToIndividual.php b/civicrm/CRM/Contact/Form/Task/AddToIndividual.php index ec029b873db9752bb399a9a354a81b4a0ed4f906..b78d3bef820ab91f52141bdf5e463d4dd7f500d3 100644 --- a/civicrm/CRM/Contact/Form/Task/AddToIndividual.php +++ b/civicrm/CRM/Contact/Form/Task/AddToIndividual.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/AddToOrganization.php b/civicrm/CRM/Contact/Form/Task/AddToOrganization.php index 45c40a1f7c530a8351959b974e228ddaa93e3060..62f916f5b7fe6f238b7a8cf3bcd7fa8cee0e22e2 100644 --- a/civicrm/CRM/Contact/Form/Task/AddToOrganization.php +++ b/civicrm/CRM/Contact/Form/Task/AddToOrganization.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/AddToParentClass.php b/civicrm/CRM/Contact/Form/Task/AddToParentClass.php index 1cc73f2da2171ccc01be4792f2379da280174ddd..1d85aee81c04b7e1c692ebd4d2919dd873973ec5 100644 --- a/civicrm/CRM/Contact/Form/Task/AddToParentClass.php +++ b/civicrm/CRM/Contact/Form/Task/AddToParentClass.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contact/Form/Task/AddToTag.php b/civicrm/CRM/Contact/Form/Task/AddToTag.php index 3ef04b3fc26081c735209e069121c5988690e35e..accd6f9a342a6452c8e89e389bc9b46e5448b275 100644 --- a/civicrm/CRM/Contact/Form/Task/AddToTag.php +++ b/civicrm/CRM/Contact/Form/Task/AddToTag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/AlterPreferences.php b/civicrm/CRM/Contact/Form/Task/AlterPreferences.php index ef487ae253abac905be647dbb07fb009937021a0..4355ff34686e22c4a6bf85a9ad92f887e7cf373a 100644 --- a/civicrm/CRM/Contact/Form/Task/AlterPreferences.php +++ b/civicrm/CRM/Contact/Form/Task/AlterPreferences.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Batch.php b/civicrm/CRM/Contact/Form/Task/Batch.php index b147077b913510c4d4c72387f1f7eedd59555e14..6f444383f309e86efa9ed118b9315e36d3b5e4a0 100644 --- a/civicrm/CRM/Contact/Form/Task/Batch.php +++ b/civicrm/CRM/Contact/Form/Task/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Delete.php b/civicrm/CRM/Contact/Form/Task/Delete.php index 33b4c4bb321c7c0a226ceb6d0091d9dad58e2560..c29cca538186fc4fee9a2e6e2a39cf143a275cae 100644 --- a/civicrm/CRM/Contact/Form/Task/Delete.php +++ b/civicrm/CRM/Contact/Form/Task/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Email.php b/civicrm/CRM/Contact/Form/Task/Email.php index efc5ac5616b89b73778efe6e60c81ea6eead324d..e72f07641329cfe7cc9c80a99115ea84d1fe8966 100644 --- a/civicrm/CRM/Contact/Form/Task/Email.php +++ b/civicrm/CRM/Contact/Form/Task/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/EmailCommon.php b/civicrm/CRM/Contact/Form/Task/EmailCommon.php index e57efd9d01f594adb7b7d7d50bde9bab83206454..0083bc9cf90fb054f9b706714fe17890d8009039 100644 --- a/civicrm/CRM/Contact/Form/Task/EmailCommon.php +++ b/civicrm/CRM/Contact/Form/Task/EmailCommon.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/HookSample.php b/civicrm/CRM/Contact/Form/Task/HookSample.php index 76fc66491a2f57ffbb3e87c039944c398a9eb891..b91a3cd04babfa53823bbadec5e2c202bb701708 100644 --- a/civicrm/CRM/Contact/Form/Task/HookSample.php +++ b/civicrm/CRM/Contact/Form/Task/HookSample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Label.php b/civicrm/CRM/Contact/Form/Task/Label.php index 6f12a62ea8356364cbb5c4d5b4a55b56a82b7cda..4b8146e3f1147ffffb5f6fdfb9b2b2e87ffaa91d 100644 --- a/civicrm/CRM/Contact/Form/Task/Label.php +++ b/civicrm/CRM/Contact/Form/Task/Label.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/LabelCommon.php b/civicrm/CRM/Contact/Form/Task/LabelCommon.php index 57376f885c39fdc3dba815dc1f3c3ad97a8c6807..11a0e34b7001890b4f4deb5f7367bb0928bbce2a 100644 --- a/civicrm/CRM/Contact/Form/Task/LabelCommon.php +++ b/civicrm/CRM/Contact/Form/Task/LabelCommon.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Map.php b/civicrm/CRM/Contact/Form/Task/Map.php index 7f0bc3ad01e2225c8d073e54d5c8584bbe4f7361..b88de102d07d275d9619ebc944cb5dcdcb5504e6 100644 --- a/civicrm/CRM/Contact/Form/Task/Map.php +++ b/civicrm/CRM/Contact/Form/Task/Map.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Map/Event.php b/civicrm/CRM/Contact/Form/Task/Map/Event.php index 257fc1b1a8432ef5a3d3628b1bec839355083b83..609f24b261c7a3a207e383f7b3c32e27b82ff652 100644 --- a/civicrm/CRM/Contact/Form/Task/Map/Event.php +++ b/civicrm/CRM/Contact/Form/Task/Map/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -50,6 +50,10 @@ class CRM_Contact_Form_Task_Map_Event extends CRM_Contact_Form_Task_Map { self::createMapXML($ids, $lid, $this, TRUE, $type); $this->assign('single', FALSE); $this->assign('skipLocationType', TRUE); + + if ($is_public == 0) { + CRM_Utils_System::addHTMLHead('<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">'); + } } /** diff --git a/civicrm/CRM/Contact/Form/Task/Merge.php b/civicrm/CRM/Contact/Form/Task/Merge.php index 9bbdf4e223d5eed27341b9e84c98e996a2f10ef4..dbf11dedb2292d9ad45af529e1aed1116199c400 100644 --- a/civicrm/CRM/Contact/Form/Task/Merge.php +++ b/civicrm/CRM/Contact/Form/Task/Merge.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/PDF.php b/civicrm/CRM/Contact/Form/Task/PDF.php index 82387229475b3ea5394a9ae01cfc3b81218739c0..e6326c2f87c3b1e89385c2ac36c836da9fef77fb 100644 --- a/civicrm/CRM/Contact/Form/Task/PDF.php +++ b/civicrm/CRM/Contact/Form/Task/PDF.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php b/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php index eb3b9ee6fcfcc57427c0485c953fba95374e78fe..e2e9d06c39aaf777ee027ac0b9e16faae55e3588 100644 --- a/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php +++ b/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/PickProfile.php b/civicrm/CRM/Contact/Form/Task/PickProfile.php index 46a5d67a6c99092765246ee00eb391e56d6393f0..62f916286b8fd9fc5f4fa82b1f3a12ef2e7e0aad 100644 --- a/civicrm/CRM/Contact/Form/Task/PickProfile.php +++ b/civicrm/CRM/Contact/Form/Task/PickProfile.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Print.php b/civicrm/CRM/Contact/Form/Task/Print.php index 4087d2bcb10ac6ede41495f48fb5d641e3d25821..f94d4beb05d1c53a42eb37ba08bd8a49f891285f 100644 --- a/civicrm/CRM/Contact/Form/Task/Print.php +++ b/civicrm/CRM/Contact/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/ProximityCommon.php b/civicrm/CRM/Contact/Form/Task/ProximityCommon.php index f1ab27e3d04152b545a9037ad50f88657289fe91..5da9d8c418f89ff9bf3b654debfb9c60556c5a17 100644 --- a/civicrm/CRM/Contact/Form/Task/ProximityCommon.php +++ b/civicrm/CRM/Contact/Form/Task/ProximityCommon.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/RemoveFromGroup.php b/civicrm/CRM/Contact/Form/Task/RemoveFromGroup.php index 2a7988082b8f426e7d366f31634277bcadf4a5d1..4d0f878589d7aaf41a3b2c5f2b3db6a7def1d54d 100644 --- a/civicrm/CRM/Contact/Form/Task/RemoveFromGroup.php +++ b/civicrm/CRM/Contact/Form/Task/RemoveFromGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/RemoveFromTag.php b/civicrm/CRM/Contact/Form/Task/RemoveFromTag.php index f6847cacd41df9b31240c857f1395dd36670a0ed..e5bec4c873050f86806952d69abeeade00a3d647 100644 --- a/civicrm/CRM/Contact/Form/Task/RemoveFromTag.php +++ b/civicrm/CRM/Contact/Form/Task/RemoveFromTag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Result.php b/civicrm/CRM/Contact/Form/Task/Result.php index 1f6f8e678a94938adc1979e1466f88b71576ce23..0884eb7905cfc9fb025a197b64dcc05f39c87849 100644 --- a/civicrm/CRM/Contact/Form/Task/Result.php +++ b/civicrm/CRM/Contact/Form/Task/Result.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/SMS.php b/civicrm/CRM/Contact/Form/Task/SMS.php index 0515118b0aedb0dc28512b9a0ec2220a3baecc1f..4224521319568fdd393a7817991402279f96f125 100644 --- a/civicrm/CRM/Contact/Form/Task/SMS.php +++ b/civicrm/CRM/Contact/Form/Task/SMS.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/SMSCommon.php b/civicrm/CRM/Contact/Form/Task/SMSCommon.php index 9c36efbfb646c982f89dbe18fb5de271f7f7cd6a..6c1db0369a6058138bac27970691539f25b0af20 100644 --- a/civicrm/CRM/Contact/Form/Task/SMSCommon.php +++ b/civicrm/CRM/Contact/Form/Task/SMSCommon.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/SaveSearch.php b/civicrm/CRM/Contact/Form/Task/SaveSearch.php index 54be7e0d025fe4ec1a906ea8e4289ada33ee7bf8..d6684974612878ee3ee4848aea0e53726281864f 100644 --- a/civicrm/CRM/Contact/Form/Task/SaveSearch.php +++ b/civicrm/CRM/Contact/Form/Task/SaveSearch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -66,9 +66,12 @@ class CRM_Contact_Form_Task_SaveSearch extends CRM_Contact_Form_Task { $values = $this->controller->exportValues('Basic'); } + // Get Task name + $modeValue = CRM_Contact_Form_Search::getModeValue($values['component_mode']); + $className = $modeValue['taskClassName']; + $taskList = $className::taskTitles(); $this->_task = CRM_Utils_Array::value('task', $values); - $crmContactTaskTasks = CRM_Contact_Task::taskTitles(); - $this->assign('taskName', CRM_Utils_Array::value($this->_task, $crmContactTaskTasks)); + $this->assign('taskName', CRM_Utils_Array::value($this->_task, $taskList)); } /** @@ -208,12 +211,9 @@ class CRM_Contact_Form_Task_SaveSearch extends CRM_Contact_Form_Task { $params = array(); $params['title'] = $formValues['title']; $params['description'] = $formValues['description']; - if (isset($formValues['group_type']) && - is_array($formValues['group_type']) - ) { + if (isset($formValues['group_type']) && is_array($formValues['group_type']) && count($formValues['group_type'])) { $params['group_type'] = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, - array_keys($formValues['group_type']) - ) . CRM_Core_DAO::VALUE_SEPARATOR; + array_keys($formValues['group_type'])) . CRM_Core_DAO::VALUE_SEPARATOR; } else { $params['group_type'] = ''; diff --git a/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php b/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php index a4c42883a8c7a02af9c54df408c5a0c80ddb4ad9..f0778dd1ee457140d1224298904a1f910c7e5207 100644 --- a/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php +++ b/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Form/Task/Useradd.php b/civicrm/CRM/Contact/Form/Task/Useradd.php index abcf56f6d89c6524f06f56500931df9f2f9d21f2..c296cb0d7fe3b7c9fb5b0803e2d5bcfce3dea06c 100644 --- a/civicrm/CRM/Contact/Form/Task/Useradd.php +++ b/civicrm/CRM/Contact/Form/Task/Useradd.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contact/Import/Controller.php b/civicrm/CRM/Contact/Import/Controller.php index 63fdb0834679730842cd4fd7239fc50205d0a485..548376dde0126c95bd91b255ffebf839c3be3c57 100644 --- a/civicrm/CRM/Contact/Import/Controller.php +++ b/civicrm/CRM/Contact/Import/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Import_Controller extends CRM_Core_Controller { diff --git a/civicrm/CRM/Contact/Import/Field.php b/civicrm/CRM/Contact/Import/Field.php index 7e1a4b9423a67bfb22864c9578de89d09e521f8a..bbca8fe202a18f5ea38585318cc537ac92c21346 100644 --- a/civicrm/CRM/Contact/Import/Field.php +++ b/civicrm/CRM/Contact/Import/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contact/Import/Form/DataSource.php b/civicrm/CRM/Contact/Import/Form/DataSource.php index 131c00fa7329833f19aa3506bb929a4c92bfbf9c..eb31790ebf8f67842b2fc328f8a3b67fe9ed6a6b 100644 --- a/civicrm/CRM/Contact/Import/Form/DataSource.php +++ b/civicrm/CRM/Contact/Import/Form/DataSource.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Import/Form/MapField.php b/civicrm/CRM/Contact/Import/Form/MapField.php index 38f13b8a8919376e7e42cbf3e2d71e1f31ae5025..cbf31f60b93b6266c8be2ed651d120a10e97fe0a 100644 --- a/civicrm/CRM/Contact/Import/Form/MapField.php +++ b/civicrm/CRM/Contact/Import/Form/MapField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Import/Form/Preview.php b/civicrm/CRM/Contact/Import/Form/Preview.php index 71aa3f6183425cd02ab129ea86944682139515a3..732527b54d973edb6ba16d5a617b8f277908196c 100644 --- a/civicrm/CRM/Contact/Import/Form/Preview.php +++ b/civicrm/CRM/Contact/Import/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Import/Form/Summary.php b/civicrm/CRM/Contact/Import/Form/Summary.php index 031f94c2dc2c8c52597ce91ed12af481aaddef2d..c0e3c740b9104095290eb0c8ab4934bbe1a93003 100644 --- a/civicrm/CRM/Contact/Import/Form/Summary.php +++ b/civicrm/CRM/Contact/Import/Form/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Import/ImportJob.php b/civicrm/CRM/Contact/Import/ImportJob.php index 781b1ad380a065c9ce7d04e7671f8d0e8c411e7a..9df6f0bc332509b0bf6515a2358be543479f9f21 100644 --- a/civicrm/CRM/Contact/Import/ImportJob.php +++ b/civicrm/CRM/Contact/Import/ImportJob.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Import/Importer.php b/civicrm/CRM/Contact/Import/Importer.php index 6252e8ceecd2cd1981a8399bb3c9ba9caaa1af52..309cffe00d92418fa95c3fb51855540cbc000cd0 100644 --- a/civicrm/CRM/Contact/Import/Importer.php +++ b/civicrm/CRM/Contact/Import/Importer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Import/Page/AJAX.php b/civicrm/CRM/Contact/Import/Page/AJAX.php index 04d9d3772296911fb3122b2d1ca17c40eeb2d1a5..e99880acc58a33f9b95f179db6d1c21c62b123d6 100644 --- a/civicrm/CRM/Contact/Import/Page/AJAX.php +++ b/civicrm/CRM/Contact/Import/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Import/Parser.php b/civicrm/CRM/Contact/Import/Parser.php index 6085e8a5a0384403418b43950500f3d68a64d097..c711114da0a379d14e38fc90f746387c6aed3ba7 100644 --- a/civicrm/CRM/Contact/Import/Parser.php +++ b/civicrm/CRM/Contact/Import/Parser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_Contact_Import_Parser extends CRM_Import_Parser { diff --git a/civicrm/CRM/Contact/Import/Parser/Contact.php b/civicrm/CRM/Contact/Import/Parser/Contact.php index 3468592260e1850701487d9e1bdd5ea20f706bfe..ad97146add13e7123bf323774fca2987eab86c8b 100644 --- a/civicrm/CRM/Contact/Import/Parser/Contact.php +++ b/civicrm/CRM/Contact/Import/Parser/Contact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ require_once 'api/v3/utils.php'; /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/AJAX.php b/civicrm/CRM/Contact/Page/AJAX.php index 6f9123fac68d33e8fbab55ebb057a1a5f56f05ce..acd0d3d7a72019b8e70518b930d4630cca304085 100644 --- a/civicrm/CRM/Contact/Page/AJAX.php +++ b/civicrm/CRM/Contact/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ @@ -808,9 +808,16 @@ LIMIT {$offset}, {$rowCount} $searchRows[$count]['weight'] = CRM_Utils_Array::value('weight', $pair); if (!empty($pairInfo['data']['canMerge'])) { - $mergeParams = "reset=1&cid={$pairInfo['entity_id1']}&oid={$pairInfo['entity_id2']}&action=update&rgid={$rgid}&limit=" . CRM_Utils_Request::retrieve('limit', 'Integer'); + $mergeParams = [ + 'reset' => 1, + 'cid' => $pairInfo['entity_id1'], + 'oid' => $pairInfo['entity_id2'], + 'action' => 'update', + 'rgid' => $rgid, + 'limit' => CRM_Utils_Request::retrieve('limit', 'Integer'), + ]; if ($gid) { - $mergeParams .= "&gid={$gid}"; + $mergeParams['gid'] = $gid; } $searchRows[$count]['actions'] = "<a class='crm-dedupe-flip' href='#' data-pnid={$pairInfo['prevnext_id']}>" . ts('flip') . "</a> | "; diff --git a/civicrm/CRM/Contact/Page/CustomSearch.php b/civicrm/CRM/Contact/Page/CustomSearch.php index ec3f8afd4f49312ad11be14822bf8f72efc11363..6ec94a569b8e8e2871bf97cc307e96497b99da02 100644 --- a/civicrm/CRM/Contact/Page/CustomSearch.php +++ b/civicrm/CRM/Contact/Page/CustomSearch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/DashBoard.php b/civicrm/CRM/Contact/Page/DashBoard.php index 69e792b62179355af36ad774758e70b26c9db88e..de3d28d1a22eaf39ab1b0dd55358e5f8ab1ddc60 100644 --- a/civicrm/CRM/Contact/Page/DashBoard.php +++ b/civicrm/CRM/Contact/Page/DashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Dashlet.php b/civicrm/CRM/Contact/Page/Dashlet.php index 62a811cbfc16dbdb5c184a07ee8d9d76ef761a1a..a020d89aa9c4e62251455c40dc3255b3ccc2dc98 100644 --- a/civicrm/CRM/Contact/Page/Dashlet.php +++ b/civicrm/CRM/Contact/Page/Dashlet.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/DedupeException.php b/civicrm/CRM/Contact/Page/DedupeException.php index 48da4951797f438a5cf049f617db8b7f1790857c..ab8bbea41b9b9b2ead401fcc630c36a99cdcaf2c 100644 --- a/civicrm/CRM/Contact/Page/DedupeException.php +++ b/civicrm/CRM/Contact/Page/DedupeException.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/DedupeFind.php b/civicrm/CRM/Contact/Page/DedupeFind.php index 99a91201debdbbd4193bf1784703af4a94a0c1ab..701dd8e13540bacc166be41c5ea4a9904024dc67 100644 --- a/civicrm/CRM/Contact/Page/DedupeFind.php +++ b/civicrm/CRM/Contact/Page/DedupeFind.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_DedupeFind extends CRM_Core_Page_Basic { protected $_cid = NULL; @@ -142,7 +142,7 @@ class CRM_Contact_Page_DedupeFind extends CRM_Core_Page_Basic { $urlQry['selected'] = 1; } - $this->assign('sourceUrl', CRM_Utils_System::url('civicrm/ajax/dedupefind', $urlQry, FALSE, NULL, FALSE)); + $this->assign('sourceUrl', CRM_Utils_System::url('civicrm/ajax/dedupefind', $urlQry)); //reload from cache table $cacheKeyString = CRM_Dedupe_Merger::getMergeCacheKeyString($rgid, $gid, $criteria); diff --git a/civicrm/CRM/Contact/Page/DedupeMerge.php b/civicrm/CRM/Contact/Page/DedupeMerge.php index d3cc7998545e3750b6193bb5ab023069964ba038..d006a725bee3acf21cd23dfc4b09c9c29a55b260 100644 --- a/civicrm/CRM/Contact/Page/DedupeMerge.php +++ b/civicrm/CRM/Contact/Page/DedupeMerge.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_DedupeMerge extends CRM_Core_Page { diff --git a/civicrm/CRM/Contact/Page/DedupeRules.php b/civicrm/CRM/Contact/Page/DedupeRules.php index d7288e6dbfa8f703542e0214ba2f32caf08a33f1..31043f6a695d52b6799d3123ea4b39510c5952e7 100644 --- a/civicrm/CRM/Contact/Page/DedupeRules.php +++ b/civicrm/CRM/Contact/Page/DedupeRules.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_DedupeRules extends CRM_Core_Page_Basic { diff --git a/civicrm/CRM/Contact/Page/ImageFile.php b/civicrm/CRM/Contact/Page/ImageFile.php index 60709a95cd3f46e0dd2f3e0002e82faddc00ccca..da9160ce16c065fbcab83fdce79c98fea9beec1f 100644 --- a/civicrm/CRM/Contact/Page/ImageFile.php +++ b/civicrm/CRM/Contact/Page/ImageFile.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_ImageFile extends CRM_Core_Page { /** diff --git a/civicrm/CRM/Contact/Page/Inline/Actions.php b/civicrm/CRM/Contact/Page/Inline/Actions.php index cfa30081a798a574c0aeb565440109a323ca2b34..3d6c79335e7a17d622b7834d51e170f415ec8281 100644 --- a/civicrm/CRM/Contact/Page/Inline/Actions.php +++ b/civicrm/CRM/Contact/Page/Inline/Actions.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/Address.php b/civicrm/CRM/Contact/Page/Inline/Address.php index 8819dfda98e1392afaa31ad64ed55b6765233ef2..750eed9134120348ab4b78493f6a2b3219795b97 100644 --- a/civicrm/CRM/Contact/Page/Inline/Address.php +++ b/civicrm/CRM/Contact/Page/Inline/Address.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/CommunicationPreferences.php b/civicrm/CRM/Contact/Page/Inline/CommunicationPreferences.php index bf1978ba2f95dcf19ec59af6ea4051b4c576853e..b350399d29f6a8a9664981b022f8d6bad890f3d0 100644 --- a/civicrm/CRM/Contact/Page/Inline/CommunicationPreferences.php +++ b/civicrm/CRM/Contact/Page/Inline/CommunicationPreferences.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/ContactInfo.php b/civicrm/CRM/Contact/Page/Inline/ContactInfo.php index 80c0ae1a452814d2dfe043c5b10cdc6fb5688510..0675aaee2f3dfea719c651babb1d09903576531d 100644 --- a/civicrm/CRM/Contact/Page/Inline/ContactInfo.php +++ b/civicrm/CRM/Contact/Page/Inline/ContactInfo.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/ContactName.php b/civicrm/CRM/Contact/Page/Inline/ContactName.php index ff84f8d1fc19660a0201572a7f6e29d9b8dacb34..d2041c2f83b64506eb374388303e2d981b39bd96 100644 --- a/civicrm/CRM/Contact/Page/Inline/ContactName.php +++ b/civicrm/CRM/Contact/Page/Inline/ContactName.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/CustomData.php b/civicrm/CRM/Contact/Page/Inline/CustomData.php index 8705b3ddc6e9834732dcab5b3c8a4fef77533918..992df754dceb0b35d51f5fd9dde088b6612fa2ee 100644 --- a/civicrm/CRM/Contact/Page/Inline/CustomData.php +++ b/civicrm/CRM/Contact/Page/Inline/CustomData.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/Demographics.php b/civicrm/CRM/Contact/Page/Inline/Demographics.php index 373ff401883c249aa843482dacc86fc3e0c1dad8..cbdd0803219505ffdfe57b44f51db987c4251439 100644 --- a/civicrm/CRM/Contact/Page/Inline/Demographics.php +++ b/civicrm/CRM/Contact/Page/Inline/Demographics.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/Email.php b/civicrm/CRM/Contact/Page/Inline/Email.php index 2e69d844699592eea827f261ef197a1f15348ffb..da710a455e5f5e453085007582103429c837dea0 100644 --- a/civicrm/CRM/Contact/Page/Inline/Email.php +++ b/civicrm/CRM/Contact/Page/Inline/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/IM.php b/civicrm/CRM/Contact/Page/Inline/IM.php index 58d04341029441136ab31aa1711c0a0814668fee..be30a38654a8859c0f0b8f11e8814bff5c89446f 100644 --- a/civicrm/CRM/Contact/Page/Inline/IM.php +++ b/civicrm/CRM/Contact/Page/Inline/IM.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/OpenID.php b/civicrm/CRM/Contact/Page/Inline/OpenID.php index 7366d11dedf481c864bebf5b779314ffd050e060..604ba943af2cafdf92224368fd0882839ca0dc6e 100644 --- a/civicrm/CRM/Contact/Page/Inline/OpenID.php +++ b/civicrm/CRM/Contact/Page/Inline/OpenID.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/Phone.php b/civicrm/CRM/Contact/Page/Inline/Phone.php index d93ea6289038d40f7a2295aecc64930b8c2d3a60..098398086e222d502be9bbb92b9e90020f462741 100644 --- a/civicrm/CRM/Contact/Page/Inline/Phone.php +++ b/civicrm/CRM/Contact/Page/Inline/Phone.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Inline/Website.php b/civicrm/CRM/Contact/Page/Inline/Website.php index ef29b1c7af49e12743b152adaeaa627f87a59938..115fd4c1e78ec8a91ef43d84566a91c313e9943b 100644 --- a/civicrm/CRM/Contact/Page/Inline/Website.php +++ b/civicrm/CRM/Contact/Page/Inline/Website.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/SavedSearch.php b/civicrm/CRM/Contact/Page/SavedSearch.php index ab9f39bd2deef84913ed2d05c3df51d9b3693006..aef27eab69461a72f706fc56494340deb5471cc4 100644 --- a/civicrm/CRM/Contact/Page/SavedSearch.php +++ b/civicrm/CRM/Contact/Page/SavedSearch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/Task.php b/civicrm/CRM/Contact/Page/Task.php index 0a33c62d07bbff0e848555fde12d0d8455f464a2..ad973863982f1c9aa54594ca9372e872404255cb 100644 --- a/civicrm/CRM/Contact/Page/Task.php +++ b/civicrm/CRM/Contact/Page/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/View.php b/civicrm/CRM/Contact/Page/View.php index 5b5e6ad3977648e79340d0d5a56cf406edf2c402..97626fa0f71d0833d73f9e025a1c14b26c3694d4 100644 --- a/civicrm/CRM/Contact/Page/View.php +++ b/civicrm/CRM/Contact/Page/View.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -85,7 +85,7 @@ class CRM_Contact_Page_View extends CRM_Core_Page { $gcid = CRM_Utils_Request::retrieve('gcid', 'Positive', $this); if (!$gcid) { - $this->_contactId = CRM_Utils_Request::retrieve('cid', 'Positive', $this, TRUE); + $this->_contactId = CRM_Utils_Request::retrieve('cid', 'Positive', $this); } else { $this->_contactId = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_GroupContact', $gcid, 'contact_id'); diff --git a/civicrm/CRM/Contact/Page/View/ContactSmartGroup.php b/civicrm/CRM/Contact/Page/View/ContactSmartGroup.php index 57200cbf603140d0bd8030601a2f539ebfed1eff..22509868466c257dfd69cc2eefee1139a424f7b3 100644 --- a/civicrm/CRM/Contact/Page/View/ContactSmartGroup.php +++ b/civicrm/CRM/Contact/Page/View/ContactSmartGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_View_ContactSmartGroup extends CRM_Core_Page { diff --git a/civicrm/CRM/Contact/Page/View/CustomData.php b/civicrm/CRM/Contact/Page/View/CustomData.php index 33e6ca6bb6b2383e2c48c7c73c0004daece5553d..ff5e63d001e09cf885bae3417794245a214348af 100644 --- a/civicrm/CRM/Contact/Page/View/CustomData.php +++ b/civicrm/CRM/Contact/Page/View/CustomData.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/View/GroupContact.php b/civicrm/CRM/Contact/Page/View/GroupContact.php index ea767bf394ee78014d2036fa04f5947d85e7722e..34d992d24c47a7fc3d5794e826142447507ab83a 100644 --- a/civicrm/CRM/Contact/Page/View/GroupContact.php +++ b/civicrm/CRM/Contact/Page/View/GroupContact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_View_GroupContact extends CRM_Core_Page { diff --git a/civicrm/CRM/Contact/Page/View/Log.php b/civicrm/CRM/Contact/Page/View/Log.php index 170bc3c6e1c9628dcbf16786b4ab82fc59d52b06..0fb42a1f0bb82c61cbb17a0fae65120e424c6867 100644 --- a/civicrm/CRM/Contact/Page/View/Log.php +++ b/civicrm/CRM/Contact/Page/View/Log.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_View_Log extends CRM_Core_Page { diff --git a/civicrm/CRM/Contact/Page/View/Note.php b/civicrm/CRM/Contact/Page/View/Note.php index 9345343a73bc8862cea2276e452f5d2be8cd19d2..7efa147d2f7645bd9e369cf9255f61a2b8650f10 100644 --- a/civicrm/CRM/Contact/Page/View/Note.php +++ b/civicrm/CRM/Contact/Page/View/Note.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/View/Print.php b/civicrm/CRM/Contact/Page/View/Print.php index 4551377057901a7cf6fd0ea7d909defb16a0cc1a..28080a70ba22201d2f4c3df4679c49c909a5d70e 100644 --- a/civicrm/CRM/Contact/Page/View/Print.php +++ b/civicrm/CRM/Contact/Page/View/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/View/Relationship.php b/civicrm/CRM/Contact/Page/View/Relationship.php index 47665c20cb08fcd9cae15d979dd77ed213573d6c..65ab9d63d4bac0067d0f3f157f7db11a97da4987 100644 --- a/civicrm/CRM/Contact/Page/View/Relationship.php +++ b/civicrm/CRM/Contact/Page/View/Relationship.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_View_Relationship extends CRM_Core_Page { diff --git a/civicrm/CRM/Contact/Page/View/Summary.php b/civicrm/CRM/Contact/Page/View/Summary.php index dd9ec548c7d76fe2df0543e1017eba57d5c864b7..783f27195d6371bd1771dcbca76fc692f67c7b67 100644 --- a/civicrm/CRM/Contact/Page/View/Summary.php +++ b/civicrm/CRM/Contact/Page/View/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/View/Tag.php b/civicrm/CRM/Contact/Page/View/Tag.php index e70288998a21198561c6801c1ccc67ecc2e128ca..07ee2e947251a0f1b23892feb65de8ba4d9f23be 100644 --- a/civicrm/CRM/Contact/Page/View/Tag.php +++ b/civicrm/CRM/Contact/Page/View/Tag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_View_Tag extends CRM_Core_Page { diff --git a/civicrm/CRM/Contact/Page/View/UserDashBoard.php b/civicrm/CRM/Contact/Page/View/UserDashBoard.php index c3582cea54bea5a6effce3630bbed537a4be8502..f6b1c62dd34b4cfa6f344b73213fcd9519a1d785 100644 --- a/civicrm/CRM/Contact/Page/View/UserDashBoard.php +++ b/civicrm/CRM/Contact/Page/View/UserDashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contact/Page/View/UserDashBoard/GroupContact.php b/civicrm/CRM/Contact/Page/View/UserDashBoard/GroupContact.php index ed399bff165650594041834f3777a8d6d15c9ba5..0ffb902c35dcd0f842ea692c17ec939852bcf151 100644 --- a/civicrm/CRM/Contact/Page/View/UserDashBoard/GroupContact.php +++ b/civicrm/CRM/Contact/Page/View/UserDashBoard/GroupContact.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Page_View_UserDashBoard_GroupContact extends CRM_Contact_Page_View_UserDashBoard { diff --git a/civicrm/CRM/Contact/Page/View/Useradd.php b/civicrm/CRM/Contact/Page/View/Useradd.php index a7bef2708f1294676915be7dcac0b8a7375c5a80..b2cdc67ffe06b4298a3c24ee1e3f32a226e7b32c 100644 --- a/civicrm/CRM/Contact/Page/View/Useradd.php +++ b/civicrm/CRM/Contact/Page/View/Useradd.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contact/Page/View/Vcard.php b/civicrm/CRM/Contact/Page/View/Vcard.php index 46212ce7abc57a6af327af8c7541f0a2ebe28a96..eccfc76c942ff5c08d2f68f661ee3df6f6c8c14b 100644 --- a/civicrm/CRM/Contact/Page/View/Vcard.php +++ b/civicrm/CRM/Contact/Page/View/Vcard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Contact/Vcard/Build.php'; diff --git a/civicrm/CRM/Contact/Selector.php b/civicrm/CRM/Contact/Selector.php index 483d6e83490615ded35de45f12054cc407f8e632..2410f41fb838d14985a95f8787427886035ee2d2 100644 --- a/civicrm/CRM/Contact/Selector.php +++ b/civicrm/CRM/Contact/Selector.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -1005,14 +1005,12 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se // For custom searches, use the contactIDs method if (is_a($this, 'CRM_Contact_Selector_Custom')) { $sql = $this->_search->contactIDs($start, $end, $sort, TRUE); - $replaceSQL = "SELECT contact_a.id as contact_id"; $coreSearch = FALSE; } // For core searches use the searchQuery method else { $sql = $this->_query->searchQuery($start, $end, $sort, FALSE, $this->_query->_includeContactIds, FALSE, TRUE, TRUE); - $replaceSQL = "SELECT contact_a.id as id"; } // CRM-9096 @@ -1026,24 +1024,27 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se $insertSQL = " INSERT INTO civicrm_prevnext_cache ( entity_table, entity_id1, entity_id2, cacheKey, data ) -SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', contact_a.display_name +SELECT DISTINCT 'civicrm_contact', contact_a.id, contact_a.id, '$cacheKey', contact_a.sort_name "; - $sql = str_replace($replaceSQL, $insertSQL, $sql); - - $errorScope = CRM_Core_TemporaryErrorScope::ignoreException(); - $result = CRM_Core_DAO::executeQuery($sql); - unset($errorScope); - - if (is_a($result, 'DB_Error')) { - // check if we get error during core search + $sql = str_replace(array("SELECT contact_a.id as contact_id", "SELECT contact_a.id as id"), $insertSQL, $sql); + try { + $result = CRM_Core_DAO::executeQuery($sql, [], FALSE, NULL, FALSE, TRUE, TRUE); + if (is_a($result, 'DB_Error')) { + throw new CRM_Core_Exception($result->message); + } + } + catch (CRM_Core_Exception $e) { if ($coreSearch) { // in the case of error, try rebuilding cache using full sql which is used for search selector display // this fixes the bugs reported in CRM-13996 & CRM-14438 $this->rebuildPreNextCache($start, $end, $sort, $cacheKey); } else { - // return if above query fails + // This will always show for CiviRules :-( as a) it orders by 'rule_label' + // which is not available in the query & b) it uses contact not contact_a + // as an alias. + // CRM_Core_Session::setStatus(ts('Query Failed')); return; } } diff --git a/civicrm/CRM/Contact/Selector/Controller.php b/civicrm/CRM/Contact/Selector/Controller.php index 6f2599bf8525093e6dc555b5653834f203951079..09af0988eff04c1a0261e91b0e03a8f7a8b85f65 100644 --- a/civicrm/CRM/Contact/Selector/Controller.php +++ b/civicrm/CRM/Contact/Selector/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_Selector_Controller extends CRM_Core_Selector_Controller { /** diff --git a/civicrm/CRM/Contact/Selector/Custom.php b/civicrm/CRM/Contact/Selector/Custom.php index 628d13aaa57ae240226cd3992508640d4246e26c..2c95ffd9f07cf20ef5e503b7af023c645a2b0413 100644 --- a/civicrm/CRM/Contact/Selector/Custom.php +++ b/civicrm/CRM/Contact/Selector/Custom.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: Selector.php 11510 2007-09-18 09:21:34Z lobo $ */ diff --git a/civicrm/CRM/Contact/StateMachine/Search.php b/civicrm/CRM/Contact/StateMachine/Search.php index 545b6e93d334576f587de5cabc52bb07aa8470ec..ce90bb0d82a1bd1d9a99737387a886d4cec0582d 100644 --- a/civicrm/CRM/Contact/StateMachine/Search.php +++ b/civicrm/CRM/Contact/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contact_StateMachine_Search extends CRM_Core_StateMachine { @@ -103,15 +103,10 @@ class CRM_Contact_StateMachine_Search extends CRM_Core_StateMachine { } $this->_controller->set('task', $value); - if ($value) { - $componentMode = $this->_controller->get('component_mode'); - $modeValue = CRM_Contact_Form_Search::getModeValue($componentMode); - $taskClassName = $modeValue['taskClassName']; - return $taskClassName::getTask($value); - } - else { - return CRM_Contact_Task::getTask($value); - } + $componentMode = $this->_controller->get('component_mode'); + $modeValue = CRM_Contact_Form_Search::getModeValue($componentMode); + $taskClassName = $modeValue['taskClassName']; + return $taskClassName::getTask($value); } /** diff --git a/civicrm/CRM/Contact/Task.php b/civicrm/CRM/Contact/Task.php index 8b2dbe0c1d709bfd0ffb3eed17ff120526425f8b..d7b32b78a6ae935806837f4a206268d374c7fa68 100644 --- a/civicrm/CRM/Contact/Task.php +++ b/civicrm/CRM/Contact/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,85 +28,54 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** * Class to represent the actions that can be performed on a group of contacts used by the search forms. */ -class CRM_Contact_Task { - const - GROUP_CONTACTS = 1, - REMOVE_CONTACTS = 2, - TAG_CONTACTS = 3, - REMOVE_TAGS = 4, - EXPORT_CONTACTS = 5, - EMAIL_CONTACTS = 6, - SMS_CONTACTS = 7, - DELETE_CONTACTS = 8, - HOUSEHOLD_CONTACTS = 9, - ORGANIZATION_CONTACTS = 10, - RECORD_CONTACTS = 11, - MAP_CONTACTS = 12, - SAVE_SEARCH = 13, - SAVE_SEARCH_UPDATE = 14, - PRINT_CONTACTS = 15, - LABEL_CONTACTS = 16, - BATCH_UPDATE = 17, - ADD_EVENT = 18, - PRINT_FOR_CONTACTS = 19, - CREATE_MAILING = 20, - MERGE_CONTACTS = 21, - EMAIL_UNHOLD = 22, - RESTORE = 23, - DELETE_PERMANENTLY = 24, - COMMUNICATION_PREFS = 25, - INDIVIDUAL_CONTACTS = 26, - ADD_TO_CASE = 27; - - /** - * The task array - * - * @var array - */ - static $_tasks = NULL; +class CRM_Contact_Task extends CRM_Core_Task { - /** - * The optional task array - * - * @var array - */ - static $_optionalTasks = NULL; + const + // Contact tasks + HOUSEHOLD_CONTACTS = 101, + ORGANIZATION_CONTACTS = 102, + RECORD_CONTACTS = 103, + MAP_CONTACTS = 104, + ADD_EVENT = 105, + MERGE_CONTACTS = 106, + EMAIL_UNHOLD = 107, + RESTORE = 108, + COMMUNICATION_PREFS = 109, + INDIVIDUAL_CONTACTS = 110, + ADD_TO_CASE = 111; + + static $objectType = 'contact'; public static function tasks() { - self::initTasks(); - return self::$_tasks; - } - - public static function initTasks() { if (!self::$_tasks) { self::$_tasks = array( - self::GROUP_CONTACTS => array( + self::GROUP_ADD => array( 'title' => ts('Group - add contacts'), 'class' => 'CRM_Contact_Form_Task_AddToGroup', 'url' => 'civicrm/task/add-to-group', ), - self::REMOVE_CONTACTS => array( + self::GROUP_REMOVE => array( 'title' => ts('Group - remove contacts'), 'class' => 'CRM_Contact_Form_Task_RemoveFromGroup', 'url' => 'civicrm/task/remove-from-group', ), - self::TAG_CONTACTS => array( + self::TAG_ADD => array( 'title' => ts('Tag - add to contacts'), 'class' => 'CRM_Contact_Form_Task_AddToTag', 'url' => 'civicrm/task/add-to-tag', ), - self::REMOVE_TAGS => array( + self::TAG_REMOVE => array( 'title' => ts('Tag - remove from contacts'), 'class' => 'CRM_Contact_Form_Task_RemoveFromTag', 'url' => 'civicrm/task/remove-from-tag', ), - self::EXPORT_CONTACTS => array( + self::TASK_EXPORT => array( 'title' => ts('Export contacts'), 'class' => array( 'CRM_Export_Form_Select', @@ -114,13 +83,16 @@ class CRM_Contact_Task { ), 'result' => FALSE, ), - self::EMAIL_CONTACTS => array( - 'title' => ts('Email - send now (to %1 or less)', array(1 => Civi::settings()->get('simple_mail_limit'))), + self::TASK_EMAIL => array( + 'title' => ts('Email - send now (to %1 or less)', array( + 1 => Civi::settings() + ->get('simple_mail_limit'), + )), 'class' => 'CRM_Contact_Form_Task_Email', 'result' => TRUE, 'url' => 'civicrm/task/send-email', ), - self::DELETE_CONTACTS => array( + self::TASK_DELETE => array( 'title' => ts('Delete contacts'), 'class' => 'CRM_Contact_Form_Task_Delete', 'result' => FALSE, @@ -140,7 +112,7 @@ class CRM_Contact_Task { 'class' => 'CRM_Contact_Form_Task_SaveSearch_Update', 'result' => TRUE, ), - self::PRINT_CONTACTS => array( + self::TASK_PRINT => array( 'title' => ts('Print selected rows'), 'class' => 'CRM_Contact_Form_Task_Print', 'result' => FALSE, @@ -160,7 +132,7 @@ class CRM_Contact_Task { 'result' => TRUE, 'url' => 'civicrm/task/pick-profile', ), - self::PRINT_FOR_CONTACTS => array( + self::PDF_LETTER => array( 'title' => ts('Print/merge document'), 'class' => 'CRM_Contact_Form_Task_PDF', 'result' => TRUE, @@ -190,8 +162,8 @@ class CRM_Contact_Task { //CRM-16329, if SMS provider is configured show sms action. $providersCount = CRM_SMS_BAO_Provider::activeProviderCount(); - if ($providersCount) { - self::$_tasks[self::SMS_CONTACTS] = array( + if ($providersCount && CRM_Core_Permission::check('send SMS')) { + self::$_tasks[self::TASK_SMS] = array( 'title' => ts('SMS - schedule/send'), 'class' => 'CRM_Contact_Form_Task_SMS', 'result' => TRUE, @@ -238,7 +210,7 @@ class CRM_Contact_Task { //CRM-4418, check for delete if (!CRM_Core_Permission::check('delete contacts')) { - unset(self::$_tasks[self::DELETE_CONTACTS]); + unset(self::$_tasks[self::TASK_DELETE]); } //show map action only if map provider and geoprovider are set (Google doesn't need geoprovider) @@ -284,42 +256,10 @@ class CRM_Contact_Task { ); } - self::$_tasks += CRM_Core_Component::taskList(); - - CRM_Utils_Hook::searchTasks('contact', self::$_tasks); - } - } - - /** - * These tasks are the core set of tasks that the user can perform - * on a contact / group of contacts - * - * @return array - * the set of tasks for a group of contacts - */ - public static function &taskTitles() { - self::initTasks(); - - $titles = array(); - foreach (self::$_tasks as $id => $value) { - $titles[$id] = $value['title']; - } - - // hack unset update saved search - unset($titles[self::SAVE_SEARCH_UPDATE]); - - if (!CRM_Utils_Mail::validOutBoundMail()) { - unset($titles[self::EMAIL_CONTACTS]); - unset($titles[self::CREATE_MAILING]); + parent::tasks(); } - // CRM-6806 - if (!CRM_Core_Permission::check('access deleted contacts') || - !CRM_Core_Permission::check('delete contacts') - ) { - unset($titles[self::DELETE_PERMANENTLY]); - } - return $titles; + return self::$_tasks; } /** @@ -327,16 +267,19 @@ class CRM_Contact_Task { * of the user * * @param int $permission - * @param bool $deletedContacts - * Are these tasks for operating on deleted contacts?. + * @param array $params + * bool deletedContacts: Are these tasks for operating on deleted contacts?. * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission, $deletedContacts = FALSE) { - self::initTasks(); + public static function permissionedTaskTitles($permission, $params = array()) { + if (!isset($params['deletedContacts'])) { + $params['deletedContacts'] = FALSE; + } + self::tasks(); $tasks = array(); - if ($deletedContacts) { + if ($params['deletedContacts']) { if (CRM_Core_Permission::check('access deleted contacts')) { $tasks[self::RESTORE] = self::$_tasks[self::RESTORE]['title']; if (CRM_Core_Permission::check('delete contacts')) { @@ -349,8 +292,8 @@ class CRM_Contact_Task { } else { $tasks = array( - self::EXPORT_CONTACTS => self::$_tasks[self::EXPORT_CONTACTS]['title'], - self::EMAIL_CONTACTS => self::$_tasks[self::EMAIL_CONTACTS]['title'], + self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'], + self::TASK_EMAIL => self::$_tasks[self::TASK_EMAIL]['title'], self::LABEL_CONTACTS => self::$_tasks[self::LABEL_CONTACTS]['title'], ); @@ -365,20 +308,10 @@ class CRM_Contact_Task { ) { $tasks[self::CREATE_MAILING] = self::$_tasks[self::CREATE_MAILING]['title']; } + } - return $tasks; - } - /** - * These tasks get added based on the context the user is in. - * - * @return array - * the set of optional tasks for a group of contacts - */ - public static function &optionalTaskTitle() { - $tasks = array( - self::SAVE_SEARCH_UPDATE => self::$_tasks[self::SAVE_SEARCH_UPDATE]['title'], - ); + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); return $tasks; } @@ -388,40 +321,13 @@ class CRM_Contact_Task { * @return array */ public static function getTask($value) { - self::initTasks(); + self::tasks(); if (!CRM_Utils_Array::value($value, self::$_tasks)) { // make it the print task by default - $value = self::PRINT_CONTACTS; - } - return array( - CRM_Utils_Array::value('class', self::$_tasks[$value]), - CRM_Utils_Array::value('result', self::$_tasks[$value]), - ); - } - - /** - * Function to return the task information on basis of provided task's form name - * - * @param string $className - * - * @return array - */ - public static function getTaskAndTitleByClass($className) { - self::initTasks(); - - foreach (self::$_tasks as $task => $value) { - if ((!empty($value['url']) || $task == self::EXPORT_CONTACTS) && ( - (is_array($value['class']) && in_array($className, $value['class'])) || - ($value['class'] == $className) - ) - ) { - return array( - $task, - CRM_Utils_Array::value('title', $value), - ); - } + $value = self::TASK_PRINT; } + return parent::getTask($value); } } diff --git a/civicrm/CRM/Contribute/ActionMapping/ByPage.php b/civicrm/CRM/Contribute/ActionMapping/ByPage.php index 0e3247013e118cb461b40f386c08bf4f9faf61c8..e56413ae0ad7da6f544cf816ff70927c9e953704 100644 --- a/civicrm/CRM/Contribute/ActionMapping/ByPage.php +++ b/civicrm/CRM/Contribute/ActionMapping/ByPage.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contribute/ActionMapping/ByType.php b/civicrm/CRM/Contribute/ActionMapping/ByType.php index 413375a19cb5346aaa374c0ae087e97ee47bf17c..59c39829e20bb20ac20560d1b8be2212d1dd17db 100644 --- a/civicrm/CRM/Contribute/ActionMapping/ByType.php +++ b/civicrm/CRM/Contribute/ActionMapping/ByType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php index 936f4ed968e4c0c0e9ced9bf7a89690b57e356de..000242ccdb3ee2e6570114cb4b266c1f0e1722de 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution.php +++ b/civicrm/CRM/Contribute/BAO/Contribution.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { @@ -97,7 +97,8 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { * @param array $ids * The array that holds all the db ids. * - * @return CRM_Contribute_BAO_Contribution|\CRM_Core_Error + * @return \CRM_Contribute_BAO_Contribution + * @throws \CRM_Core_Exception */ public static function add(&$params, $ids = array()) { if (empty($params)) { @@ -107,14 +108,8 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { $contributionID = CRM_Utils_Array::value('contribution', $ids, CRM_Utils_Array::value('id', $params)); $duplicates = array(); if (self::checkDuplicate($params, $duplicates, $contributionID)) { - $error = CRM_Core_Error::singleton(); - $d = implode(', ', $duplicates); - $error->push(CRM_Core_Error::DUPLICATE_CONTRIBUTION, - 'Fatal', - array($d), - "Duplicate error - existing contribution record(s) have a matching Transaction ID or Invoice ID. Contribution record ID(s) are: $d" - ); - return $error; + $message = ts("Duplicate error - existing contribution record(s) have a matching Transaction ID or Invoice ID. Contribution record ID(s) are: " . implode(', ', $duplicates)); + throw new CRM_Core_Exception($message); } // first clean up all the money fields @@ -127,7 +122,7 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { //if priceset is used, no need to cleanup money if (!empty($params['skipCleanMoney'])) { - unset($moneyFields[0]); + $moneyFields = []; } else { // @todo put a deprecated here - this should be done in the form layer. @@ -515,11 +510,12 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution { $transaction = new CRM_Core_Transaction(); - $contribution = self::add($params, $ids); - - if (is_a($contribution, 'CRM_Core_Error')) { + try { + $contribution = self::add($params, $ids); + } + catch (CRM_Core_Exception $e) { $transaction->rollback(); - return $contribution; + throw $e; } $params['contribution_id'] = $contribution->id; @@ -1767,6 +1763,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ $membership->status_id = $newStatus; $membership->is_override = TRUE; + $membership->status_override_end_date = 'null'; $membership->save(); civicrm_api3('activity', 'create', $activityParam); @@ -1815,6 +1812,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ if ($membership && $update) { $membership->status_id = array_search('Expired', $membershipStatuses); $membership->is_override = TRUE; + $membership->status_override_end_date = 'null'; $membership->save(); $updateResult['updatedComponents']['CiviMember'] = $membership->status_id; @@ -5475,6 +5473,7 @@ LIMIT 1;"; //we might be renewing membership, //so make status override false. $membershipParams['is_override'] = FALSE; + $membershipParams['status_override_end_date'] = 'null'; } //CRM-17723 - reset static $relatedContactIds array() // @todo move it to Civi Statics. diff --git a/civicrm/CRM/Contribute/BAO/Contribution/Utils.php b/civicrm/CRM/Contribute/BAO/Contribution/Utils.php index 9e7995a3d7aa863f296e4a2ca6370095efe472fb..def8d6bd906895d5fba57f2e7103b45f989ff58e 100644 --- a/civicrm/CRM/Contribute/BAO/Contribution/Utils.php +++ b/civicrm/CRM/Contribute/BAO/Contribution/Utils.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_BAO_Contribution_Utils { diff --git a/civicrm/CRM/Contribute/BAO/ContributionPage.php b/civicrm/CRM/Contribute/BAO/ContributionPage.php index 62ed764106d620a58a5e36d654c22e4d621eb7d7..cb1c47121454005a90ddcdc3e2831230d85d7771 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionPage.php +++ b/civicrm/CRM/Contribute/BAO/ContributionPage.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/BAO/ContributionRecur.php b/civicrm/CRM/Contribute/BAO/ContributionRecur.php index 320ed6910cef1e5e08572cdd5e29e436aae65f96..ec23ddb44b894049e061f16c0a254dc0ffaf65d3 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/BAO/ContributionRecur.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_BAO_ContributionRecur extends CRM_Contribute_DAO_ContributionRecur { diff --git a/civicrm/CRM/Contribute/BAO/ContributionSoft.php b/civicrm/CRM/Contribute/BAO/ContributionSoft.php index 27fd130ae0e964016636fcd8abbc949c8a3c39bd..acc726dfa67f9f85f517ed012b14ba5bff8239f2 100644 --- a/civicrm/CRM/Contribute/BAO/ContributionSoft.php +++ b/civicrm/CRM/Contribute/BAO/ContributionSoft.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_BAO_ContributionSoft extends CRM_Contribute_DAO_ContributionSoft { diff --git a/civicrm/CRM/Contribute/BAO/ManagePremiums.php b/civicrm/CRM/Contribute/BAO/ManagePremiums.php index 8373b2971364c96a349ad285f38d4931125dd39c..f263908fef85706c55cbf43a190878bf75a2700d 100644 --- a/civicrm/CRM/Contribute/BAO/ManagePremiums.php +++ b/civicrm/CRM/Contribute/BAO/ManagePremiums.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_BAO_ManagePremiums extends CRM_Contribute_DAO_Product { diff --git a/civicrm/CRM/Contribute/BAO/Premium.php b/civicrm/CRM/Contribute/BAO/Premium.php index 8984e0558a7c0dd01a8d23e0ed9ab59f692f7443..b8e87378f4e1f94146a80537c77cd116d93334c4 100644 --- a/civicrm/CRM/Contribute/BAO/Premium.php +++ b/civicrm/CRM/Contribute/BAO/Premium.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_BAO_Premium extends CRM_Contribute_DAO_Premium { diff --git a/civicrm/CRM/Contribute/BAO/Query.php b/civicrm/CRM/Contribute/BAO/Query.php index fc7f0348d221c9d17119d425a909aa17de724c38..0c60a6eb758f53529054a8ab2601fd4211142f54 100644 --- a/civicrm/CRM/Contribute/BAO/Query.php +++ b/civicrm/CRM/Contribute/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_BAO_Query extends CRM_Core_BAO_Query { diff --git a/civicrm/CRM/Contribute/BAO/Widget.php b/civicrm/CRM/Contribute/BAO/Widget.php index a9e511e1855ab1e89f91a12cfe36791dae9104e5..3d3e1808a994688b5e9a182783b8f951ad95e342 100644 --- a/civicrm/CRM/Contribute/BAO/Widget.php +++ b/civicrm/CRM/Contribute/BAO/Widget.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Controller/Contribution.php b/civicrm/CRM/Contribute/Controller/Contribution.php index 082fd547a027648a302c6062bd6481798c3b5d65..d6205a11d14b304571a98504191e329a2c333915 100644 --- a/civicrm/CRM/Contribute/Controller/Contribution.php +++ b/civicrm/CRM/Contribute/Controller/Contribution.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Controller/ContributionPage.php b/civicrm/CRM/Contribute/Controller/ContributionPage.php index 926799fe8bfe2537de6cc2725244bd1d40d56c60..e427bd26fbb389689b1cfd905d4fb701797553d5 100644 --- a/civicrm/CRM/Contribute/Controller/ContributionPage.php +++ b/civicrm/CRM/Contribute/Controller/ContributionPage.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Controller/Search.php b/civicrm/CRM/Contribute/Controller/Search.php index 500d8ffd68244c26d2ec611baa633dd15e19e8e2..464a8584f5d06c55f6efdb3fbd2128dfed2db02f 100644 --- a/civicrm/CRM/Contribute/Controller/Search.php +++ b/civicrm/CRM/Contribute/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/DAO/Contribution.php b/civicrm/CRM/Contribute/DAO/Contribution.php index f217ba7630a06a90f9e843096158cecc87542094..527cb61eb562cc192d8739c8357da16d9c02a039 100644 --- a/civicrm/CRM/Contribute/DAO/Contribution.php +++ b/civicrm/CRM/Contribute/DAO/Contribution.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/Contribution.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/DAO/ContributionPage.php b/civicrm/CRM/Contribute/DAO/ContributionPage.php index 35fa5ca615f866d9d502464df9ad046941601c04..ab08e950890ab8f8c9869c3d88d5c2149e21cdca 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionPage.php +++ b/civicrm/CRM/Contribute/DAO/ContributionPage.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/ContributionPage.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/DAO/ContributionProduct.php b/civicrm/CRM/Contribute/DAO/ContributionProduct.php index 2402e6a16ab25c8945da4acb4f3c4c1b1bbce60b..00a509ea6169c6a4127136e663ce36d1e09660ee 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionProduct.php +++ b/civicrm/CRM/Contribute/DAO/ContributionProduct.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/ContributionProduct.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/DAO/ContributionRecur.php b/civicrm/CRM/Contribute/DAO/ContributionRecur.php index d14b7f5ce49208ddc021bdba91f58fca139c0285..1f1650edad7d25876b316d710fdb804cd535cbaf 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionRecur.php +++ b/civicrm/CRM/Contribute/DAO/ContributionRecur.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/ContributionRecur.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/DAO/ContributionSoft.php b/civicrm/CRM/Contribute/DAO/ContributionSoft.php index edfc4fc6f896680115e21dd4a58659a158e1765e..5f81c2cf00ce1c16090f95d74bdf77d18430e6e5 100644 --- a/civicrm/CRM/Contribute/DAO/ContributionSoft.php +++ b/civicrm/CRM/Contribute/DAO/ContributionSoft.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/ContributionSoft.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/DAO/Premium.php b/civicrm/CRM/Contribute/DAO/Premium.php index 5631c954fb1a93aa16fef94f71d468f36cc17149..f8981352c93006b0ca3986de1b167f9223387801 100644 --- a/civicrm/CRM/Contribute/DAO/Premium.php +++ b/civicrm/CRM/Contribute/DAO/Premium.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/Premium.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/DAO/PremiumsProduct.php b/civicrm/CRM/Contribute/DAO/PremiumsProduct.php index bf04314024cb45136b2b4b3b38e81862029a1657..d1473251f1320b9eb095479afdaaec9510cc992a 100644 --- a/civicrm/CRM/Contribute/DAO/PremiumsProduct.php +++ b/civicrm/CRM/Contribute/DAO/PremiumsProduct.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/PremiumsProduct.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/DAO/Product.php b/civicrm/CRM/Contribute/DAO/Product.php index 09f301d4441cc3e577c4ef008b25d8fea9dd8f50..9c1328102a727c9a82086b2d187bcb9b54a2f159 100644 --- a/civicrm/CRM/Contribute/DAO/Product.php +++ b/civicrm/CRM/Contribute/DAO/Product.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/Product.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/DAO/Widget.php b/civicrm/CRM/Contribute/DAO/Widget.php index 63394c305f8d4ae7413b84f0ddeb6f030b3cdbf9..a570f7b173c4447e8713b9d45b272566f8206dac 100644 --- a/civicrm/CRM/Contribute/DAO/Widget.php +++ b/civicrm/CRM/Contribute/DAO/Widget.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Contribute/Widget.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Contribute/Form.php b/civicrm/CRM/Contribute/Form.php index 6c1b8a52af046153e026750ad8860193f5839591..82aba90ac3efab073ae4342624dccf67f311d242 100644 --- a/civicrm/CRM/Contribute/Form.php +++ b/civicrm/CRM/Contribute/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/AbstractEditPayment.php b/civicrm/CRM/Contribute/Form/AbstractEditPayment.php index d2ff4296263d58263a6cac1baecfa61079fa0e9c..353bcad960e150278bc45713c5a99eb026490504 100644 --- a/civicrm/CRM/Contribute/Form/AbstractEditPayment.php +++ b/civicrm/CRM/Contribute/Form/AbstractEditPayment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -210,6 +210,13 @@ class CRM_Contribute_Form_AbstractEditPayment extends CRM_Contact_Form_Task { */ public $paymentInstrumentID; + /** + * Component - event, membership or contribution. + * + * @var string + */ + protected $_component; + /** * Array of fields to display on billingBlock.tpl - this is not fully implemented but basically intent is the panes/fieldsets on this page should * be all in this array in order like diff --git a/civicrm/CRM/Contribute/Form/AdditionalInfo.php b/civicrm/CRM/Contribute/Form/AdditionalInfo.php index d8b6b5ff7fd3509dd4e77c2410de16f9c13cc4ab..9d73e1e87944f0d72cdfc726266e8cef0f93ca25 100644 --- a/civicrm/CRM/Contribute/Form/AdditionalInfo.php +++ b/civicrm/CRM/Contribute/Form/AdditionalInfo.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Form_AdditionalInfo { diff --git a/civicrm/CRM/Contribute/Form/AdditionalPayment.php b/civicrm/CRM/Contribute/Form/AdditionalPayment.php index 574591c9ccf223bc0ed92f1e292a48b7a59d1e57..77916e00fd3fef85c576ac536284808ba4626959 100644 --- a/civicrm/CRM/Contribute/Form/AdditionalPayment.php +++ b/civicrm/CRM/Contribute/Form/AdditionalPayment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -37,13 +37,6 @@ class CRM_Contribute_Form_AdditionalPayment extends CRM_Contribute_Form_AbstractEditPayment { public $_contributeMode = 'direct'; - /** - * Related component whose financial payment is being processed. - * - * @var string - */ - protected $_component = NULL; - /** * Id of the component entity */ diff --git a/civicrm/CRM/Contribute/Form/CancelSubscription.php b/civicrm/CRM/Contribute/Form/CancelSubscription.php index adc18069e8df59ac2e7464cafb998db978c83677..f9227d42bca77943c6d72dd393a71c444d02f526 100644 --- a/civicrm/CRM/Contribute/Form/CancelSubscription.php +++ b/civicrm/CRM/Contribute/Form/CancelSubscription.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Contribution.php b/civicrm/CRM/Contribute/Form/Contribution.php index 13a9ae4811eac67addfe903440ee1ad98092f116..8bc4c44c07416a7007c4505851a197bc600f9786 100644 --- a/civicrm/CRM/Contribute/Form/Contribution.php +++ b/civicrm/CRM/Contribute/Form/Contribution.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -237,6 +237,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // Get the contribution id if update $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this); if (!empty($this->_id)) { + $this->assignPaymentInfoBlock(); $this->assign('contribID', $this->_id); } @@ -627,11 +628,13 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $paymentInstrument = FALSE; if (!$this->_mode) { + // payment_instrument isn't required in edit and will not be present when payment block is enabled. + $required = $this->_id ? FALSE : TRUE; $checkPaymentID = array_search('Check', CRM_Contribute_PseudoConstant::paymentInstrument('name')); $paymentInstrument = $this->add('select', 'payment_instrument_id', ts('Payment Method'), array('' => ts('- select -')) + CRM_Contribute_PseudoConstant::paymentInstrument(), - TRUE, array('onChange' => "return showHideByValue('payment_instrument_id','{$checkPaymentID}','checkNumber','table-row','select',false);") + $required, array('onChange' => "return showHideByValue('payment_instrument_id','{$checkPaymentID}','checkNumber','table-row','select',false);") ); } @@ -643,6 +646,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $this->add('select', 'from_email_address', ts('Receipt From'), $this->_fromEmails); $component = 'contribution'; + $componentDetails = []; if ($this->_id) { $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id); if (CRM_Utils_Array::value('membership', $componentDetails)) { @@ -709,7 +713,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // don't allow price set for contribution if it is related to participant, or if it is a pledge payment // and if we already have line items for that participant. CRM-5095 if ($buildPriceSet && $this->_id) { - $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id); $pledgePaymentId = CRM_Core_DAO::getFieldValue('CRM_Pledge_DAO_PledgePayment', $this->_id, 'id', @@ -808,23 +811,24 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP ) ); - // if status is Cancelled freeze Amount, Payment Instrument, Check #, Financial Type, - // Net and Fee Amounts are frozen in AdditionalInfo::buildAdditionalDetail - if ($this->_id && ($this->_values['contribution_status_id'] == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Cancelled'))) { - if ($totalAmount) { - $totalAmount->freeze(); - } - $paymentInstrument->freeze(); - $trxnId->freeze(); - $financialType->freeze(); - } - // if contribution is related to membership or participant freeze Financial Type, Amount - if ($this->_id && isset($this->_values['tax_amount'])) { + if ($this->_id) { $componentDetails = CRM_Contribute_BAO_Contribution::getComponentDetails($this->_id); - if (CRM_Utils_Array::value('membership', $componentDetails) || CRM_Utils_Array::value('participant', $componentDetails)) { + $isCancelledStatus = ($this->_values['contribution_status_id'] == CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Cancelled')); + + if (CRM_Utils_Array::value('membership', $componentDetails) || + CRM_Utils_Array::value('participant', $componentDetails) || + // if status is Cancelled freeze Amount, Payment Instrument, Check #, Financial Type, + // Net and Fee Amounts are frozen in AdditionalInfo::buildAdditionalDetail + $isCancelledStatus + ) { if ($totalAmount) { $totalAmount->freeze(); + $this->getElement('currency')->freeze(); + } + if ($isCancelledStatus) { + $paymentInstrument->freeze(); + $trxnId->freeze(); } $financialType->freeze(); $this->assign('freezeFinancialType', TRUE); diff --git a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php index 4018b85863ec332c681e27e50c2d56cd254447b3..f91d8947845d4d99841b211860994ff32fbc4b90 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -716,14 +716,15 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ public function postProcess() { $contactID = $this->getContactID(); - $result = $this->processFormSubmission($contactID); + try { + $result = $this->processFormSubmission($contactID); + } + catch (CRM_Core_Exception $e) { + $this->bounceOnError($e->getMessage()); + } + if (is_array($result) && !empty($result['is_payment_failure'])) { - // We will probably have the function that gets this error throw an exception on the next round of refactoring. - CRM_Core_Session::singleton()->setStatus(ts("Payment Processor Error message :") . - $result['error']->getMessage()); - CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/contribute/transact', - "_qf_Main_display=true&qfKey={$this->_params['qfKey']}" - )); + $this->bounceOnError($result['error']->getMessage()); } // Presumably this is for hooks to access? Not quite clear & perhaps not required. $this->set('params', $this->_params); @@ -966,6 +967,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // @todo this is the wrong place for this - it should be done as close to form submission // as possible $contributionParams['total_amount'] = $params['amount']; + $contribution = CRM_Contribute_BAO_Contribution::add($contributionParams); $invoiceSettings = Civi::settings()->get('contribution_invoice_settings'); @@ -990,10 +992,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $smarty->assign('dataArray', $dataArray); $smarty->assign('totalTaxAmount', $params['tax_amount']); } - if (is_a($contribution, 'CRM_Core_Error')) { - $message = CRM_Core_Error::getMessages($contribution); - CRM_Core_Error::fatal($message); - } // lets store it in the form variable so postProcess hook can get to this and use it $form->_contributionID = $contribution->id; @@ -1020,8 +1018,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr //handle custom data. $params['contribution_id'] = $contribution->id; if (!empty($params['custom']) && - is_array($params['custom']) && - !is_a($contribution, 'CRM_Core_Error') + is_array($params['custom']) ) { CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_contribution', $contribution->id); } @@ -2498,4 +2495,18 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } } + /** + * Bounce the user back to retry when an error occurs. + * + * @param string $message + */ + protected function bounceOnError($message) { + CRM_Core_Session::singleton() + ->setStatus(ts("Payment Processor Error message :") . + $message); + CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/contribute/transact', + "_qf_Main_display=true&qfKey={$this->_params['qfKey']}" + )); + } + } diff --git a/civicrm/CRM/Contribute/Form/Contribution/Main.php b/civicrm/CRM/Contribute/Form/Contribution/Main.php index f7b04a1ac890fc049c184ea0b5459f2c91954cee..5439099b60b5c081281b87d16493e58fe43aab56 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/Main.php +++ b/civicrm/CRM/Contribute/Form/Contribution/Main.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php b/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php index 1a696dc25713629085785ddfc869aa2f5b09b01f..4a0cd690bffaa62fb4f9d31c58f96e293acca1cc 100644 --- a/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php +++ b/civicrm/CRM/Contribute/Form/Contribution/ThankYou.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionBase.php b/civicrm/CRM/Contribute/Form/ContributionBase.php index 3b90eae83850f34ddefadb1b91e3259981077927..a94e06a65200ab2fb8a6ca40c65b910e4fd3db32 100644 --- a/civicrm/CRM/Contribute/Form/ContributionBase.php +++ b/civicrm/CRM/Contribute/Form/ContributionBase.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionCharts.php b/civicrm/CRM/Contribute/Form/ContributionCharts.php index 8b78eca48d189e0c328941d64bd65c7fd4820c55..3642e11ba84403235a2f8506c2b53ffacdb6e226 100644 --- a/civicrm/CRM/Contribute/Form/ContributionCharts.php +++ b/civicrm/CRM/Contribute/Form/ContributionCharts.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Form_ContributionCharts extends CRM_Core_Form { diff --git a/civicrm/CRM/Contribute/Form/ContributionPage.php b/civicrm/CRM/Contribute/Form/ContributionPage.php index 0952bcb142fee4142e0e3011f6cab948b3b81025..138e98bb41db353908fe5199a85cd3e4fe5e361b 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/AddProduct.php b/civicrm/CRM/Contribute/Form/ContributionPage/AddProduct.php index 5780509c8718e82cfc3889ccade4c2df49e47897..4356c6598b2bd93cf9b6a5f2eebdcc9b18a91aae 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/AddProduct.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/AddProduct.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Amount.php b/civicrm/CRM/Contribute/Form/ContributionPage/Amount.php index 042ade7a6e98fdc345beb397b354a6829aa2fea9..be1caea309c47a88d608db867fab9ee6e06b7d90 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Amount.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Amount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Custom.php b/civicrm/CRM/Contribute/Form/ContributionPage/Custom.php index 930a2951293093d88c1002e776f686171aae656b..c22f1e23874344545dd77cb61c32c13981e01f2c 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Custom.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Custom.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php b/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php index 22d186344fb24dcfa2462dc45935bd7da6cdc62f..486f5021bd9d1c67e532c7d1c504658370a9dbea 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Premium.php b/civicrm/CRM/Contribute/Form/ContributionPage/Premium.php index f5c3bbe9b9c05b568a23727b4001c2eff51e3769..017b6f88134a9f8dfc3a1845ab3f6210f8108278 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Premium.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Premium.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php b/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php index af346e884bec2afa3c08d09d9a52594b255a78bb..a69e654ad295d72b45172d1764d8375b0313a20e 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Settings.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Form_ContributionPage_Settings extends CRM_Contribute_Form_ContributionPage { diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/TabHeader.php b/civicrm/CRM/Contribute/Form/ContributionPage/TabHeader.php index 8f9cad5e476caf76ac0c002af2a9a3183767801d..bc5f0e9b2414bae692b2b40f61e4f1b4bd3d72ee 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/TabHeader.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/TabHeader.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/ThankYou.php b/civicrm/CRM/Contribute/Form/ContributionPage/ThankYou.php index 9b90a9d7d385582ead296a40bf952df028489345..dee7eb1f21408cb6c011b1977d5d2ce7aa5a2329 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/ThankYou.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/ThankYou.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Widget.php b/civicrm/CRM/Contribute/Form/ContributionPage/Widget.php index 7824a8c5b38dffa806dd8c89c904f9c96d42a122..09bb4b2416026db966882d80eb921b51bda3fe42 100644 --- a/civicrm/CRM/Contribute/Form/ContributionPage/Widget.php +++ b/civicrm/CRM/Contribute/Form/ContributionPage/Widget.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Form_ContributionPage_Widget extends CRM_Contribute_Form_ContributionPage { protected $_colors; diff --git a/civicrm/CRM/Contribute/Form/ContributionView.php b/civicrm/CRM/Contribute/Form/ContributionView.php index 21a6fa560f0c7909dfe3c7a2fcebd24f5a88662c..feb6f0c8e5a3465b9e14334da3d4de5957851913 100644 --- a/civicrm/CRM/Contribute/Form/ContributionView.php +++ b/civicrm/CRM/Contribute/Form/ContributionView.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/ManagePremiums.php b/civicrm/CRM/Contribute/Form/ManagePremiums.php index 5820ff2962479cb74ae9e91235206773bf292b4e..17ae8ffe42bfef593eaa2e63b3314059c30e9861 100644 --- a/civicrm/CRM/Contribute/Form/ManagePremiums.php +++ b/civicrm/CRM/Contribute/Form/ManagePremiums.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Search.php b/civicrm/CRM/Contribute/Form/Search.php index 3eecbe8f5be55b76b7943ccc6a6afda9b170228e..b0345ee9b8ea8f36afc6a71801037f5ab17fd4ba 100644 --- a/civicrm/CRM/Contribute/Form/Search.php +++ b/civicrm/CRM/Contribute/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -179,11 +179,11 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search { $permission = CRM_Core_Permission::getPermission(); $queryParams = $this->get('queryParams'); - $softCreditFiltering = FALSE; + $taskParams['softCreditFiltering'] = FALSE; if (!empty($queryParams)) { - $softCreditFiltering = CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled($queryParams); + $taskParams['softCreditFiltering'] = CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled($queryParams); } - $tasks = CRM_Contribute_Task::permissionedTaskTitles($permission, $softCreditFiltering); + $tasks = CRM_Contribute_Task::permissionedTaskTitles($permission, $taskParams); $this->addTaskMenu($tasks); } diff --git a/civicrm/CRM/Contribute/Form/SearchContribution.php b/civicrm/CRM/Contribute/Form/SearchContribution.php index 781ac5fa798d6267a3371a945045c12d838306fa..d49ccc9cd9e7479f4ebe10504edee28457325c42 100644 --- a/civicrm/CRM/Contribute/Form/SearchContribution.php +++ b/civicrm/CRM/Contribute/Form/SearchContribution.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Form_SearchContribution extends CRM_Core_Form { diff --git a/civicrm/CRM/Contribute/Form/SoftCredit.php b/civicrm/CRM/Contribute/Form/SoftCredit.php index 5ffc5e59f00b2be61fadb216756b9a8c25b81a1d..f5de070e47723d089e20d32aecab98ff3a34e770 100644 --- a/civicrm/CRM/Contribute/Form/SoftCredit.php +++ b/civicrm/CRM/Contribute/Form/SoftCredit.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task.php b/civicrm/CRM/Contribute/Form/Task.php index 3f1a4e50f8a28eb7347fd8107c9bcd646810f6d5..dc53ce711cb126ddcbcf79c474a5d5bcb8d7f529 100644 --- a/civicrm/CRM/Contribute/Form/Task.php +++ b/civicrm/CRM/Contribute/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/Batch.php b/civicrm/CRM/Contribute/Form/Task/Batch.php index 1e3444aec11635e63849830d65c66ca74afa8444..95fd0be3d6e596056354225b5ae61462fa536ff5 100644 --- a/civicrm/CRM/Contribute/Form/Task/Batch.php +++ b/civicrm/CRM/Contribute/Form/Task/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/Delete.php b/civicrm/CRM/Contribute/Form/Task/Delete.php index 76b81892225c32d9c977bcb53fc09e929298b8e8..c51fdc9d7e7497fc305c2f19b35494b787137699 100644 --- a/civicrm/CRM/Contribute/Form/Task/Delete.php +++ b/civicrm/CRM/Contribute/Form/Task/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/Email.php b/civicrm/CRM/Contribute/Form/Task/Email.php index 0156f14a410b7f731bd59109f1875a78a14afc8f..22688109015efb25a071e915ab4149681f3b2f38 100644 --- a/civicrm/CRM/Contribute/Form/Task/Email.php +++ b/civicrm/CRM/Contribute/Form/Task/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/Invoice.php b/civicrm/CRM/Contribute/Form/Task/Invoice.php index 8f2a406dff2e4ebd5800499ce834e6ac8bbf1364..9684891001a4ea20454d667652007e253a75579c 100644 --- a/civicrm/CRM/Contribute/Form/Task/Invoice.php +++ b/civicrm/CRM/Contribute/Form/Task/Invoice.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ use Dompdf\Options; /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -421,6 +421,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { 'pendingStatusId' => $pendingStatusId, 'cancelledStatusId' => $cancelledStatusId, 'contribution_status_id' => $contribution->contribution_status_id, + 'contributionStatusName' => CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $contribution->contribution_status_id), 'subTotal' => $subTotal, 'street_address' => CRM_Utils_Array::value('street_address', CRM_Utils_Array::value($contribution->contact_id, $billingAddress)), 'supplemental_address_1' => CRM_Utils_Array::value('supplemental_address_1', CRM_Utils_Array::value($contribution->contact_id, $billingAddress)), @@ -494,7 +495,6 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); // functions call for adding activity with attachment - $pdfFileName = "{$invoiceNumber}.pdf"; $fileName = self::putFile($html, $pdfFileName); self::addActivities($subject, $contribution->contact_id, $fileName, $params); } @@ -509,7 +509,6 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { list($sent, $subject, $message, $html) = CRM_Core_BAO_MessageTemplate::sendTemplate($sendTemplateParams); // functions call for adding activity with attachment - $pdfFileName = "{$invoiceNumber}.pdf"; $fileName = self::putFile($html, $pdfFileName); self::addActivities($subject, $contribution->contact_id, $fileName, $params); } @@ -521,7 +520,6 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task { return $html; } else { - $pdfFileName = "{$invoiceNumber}.pdf"; CRM_Utils_PDF_Utils::html2pdf($messageInvoice, $pdfFileName, FALSE, array( 'margin_top' => 10, 'margin_left' => 65, diff --git a/civicrm/CRM/Contribute/Form/Task/PDF.php b/civicrm/CRM/Contribute/Form/Task/PDF.php index 69ef1665f2db3997deca7e1bab7c16effa65894d..eab146007d57f323bc0fd5dd33b474d0fd903744 100644 --- a/civicrm/CRM/Contribute/Form/Task/PDF.php +++ b/civicrm/CRM/Contribute/Form/Task/PDF.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/PDFLetter.php b/civicrm/CRM/Contribute/Form/Task/PDFLetter.php index 4daa0c6e2cc2bba3204cddcd17fa15013f20e780..3945fc97f8e3c86e20fb6fafc208984ccdb36d81 100644 --- a/civicrm/CRM/Contribute/Form/Task/PDFLetter.php +++ b/civicrm/CRM/Contribute/Form/Task/PDFLetter.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/PickProfile.php b/civicrm/CRM/Contribute/Form/Task/PickProfile.php index 3d445df4fc9c5a984442f78a11ffe9112e70cc20..cad493a3c7fe7b165941b4eb7db62836cc50851d 100644 --- a/civicrm/CRM/Contribute/Form/Task/PickProfile.php +++ b/civicrm/CRM/Contribute/Form/Task/PickProfile.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/Print.php b/civicrm/CRM/Contribute/Form/Task/Print.php index dfb89f892559283e70eca54af59bf9fb001213cd..acc122b8d8019afc54dcad9804550789d4a41a2a 100644 --- a/civicrm/CRM/Contribute/Form/Task/Print.php +++ b/civicrm/CRM/Contribute/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/Result.php b/civicrm/CRM/Contribute/Form/Task/Result.php index 62259940b8cc182150eb66b09f8ffb1ec5729249..907ab5c3cf26e645a732e5442b67a2ba9273efc5 100644 --- a/civicrm/CRM/Contribute/Form/Task/Result.php +++ b/civicrm/CRM/Contribute/Form/Task/Result.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/SearchTaskHookSample.php b/civicrm/CRM/Contribute/Form/Task/SearchTaskHookSample.php index 9e01ea3d48323e135c6e89347f27c3f26b3a9b5a..60f456e922d8593ef70351c7ffc9a5d12a8c69fa 100644 --- a/civicrm/CRM/Contribute/Form/Task/SearchTaskHookSample.php +++ b/civicrm/CRM/Contribute/Form/Task/SearchTaskHookSample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/Task/Status.php b/civicrm/CRM/Contribute/Form/Task/Status.php index a3535e5cbefede41db3c62bef48012acf06ad3b2..13e7f6c0f78e8a9104c44aa24da99beb1d1e1a9a 100644 --- a/civicrm/CRM/Contribute/Form/Task/Status.php +++ b/civicrm/CRM/Contribute/Form/Task/Status.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/UpdateBilling.php b/civicrm/CRM/Contribute/Form/UpdateBilling.php index 97d358859b4dee9b1d3c72f72e8bf105ea1b4636..1aba1d1b6a34d64f00c1b4b18e3cd6bfc5c36210 100644 --- a/civicrm/CRM/Contribute/Form/UpdateBilling.php +++ b/civicrm/CRM/Contribute/Form/UpdateBilling.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Form/UpdateSubscription.php b/civicrm/CRM/Contribute/Form/UpdateSubscription.php index b6a4430ee51dc3768247084b56e3481bd498fe68..826b7cb3af8a777f01270866da7073df2c36a370 100644 --- a/civicrm/CRM/Contribute/Form/UpdateSubscription.php +++ b/civicrm/CRM/Contribute/Form/UpdateSubscription.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Import/Controller.php b/civicrm/CRM/Contribute/Import/Controller.php index 32eef8a8b3bea49fe5a13d9eabcf90cb75bebe07..0a09843534b062ba6c85737a7a384e93b092b83c 100644 --- a/civicrm/CRM/Contribute/Import/Controller.php +++ b/civicrm/CRM/Contribute/Import/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Import_Controller extends CRM_Core_Controller { diff --git a/civicrm/CRM/Contribute/Import/Field.php b/civicrm/CRM/Contribute/Import/Field.php index 686440fc15380164d7a4d056c3cf5660428d4aff..6ab5b41cc3da304646de1802c903e3a1348abaa2 100644 --- a/civicrm/CRM/Contribute/Import/Field.php +++ b/civicrm/CRM/Contribute/Import/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Import_Field { diff --git a/civicrm/CRM/Contribute/Import/Form/DataSource.php b/civicrm/CRM/Contribute/Import/Form/DataSource.php index 6338597b5c1a022249a9530fd85ad070db2eb28d..a0159b5ebcd091002529f9b17335c0b7d152ccdd 100644 --- a/civicrm/CRM/Contribute/Import/Form/DataSource.php +++ b/civicrm/CRM/Contribute/Import/Form/DataSource.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Import/Form/MapField.php b/civicrm/CRM/Contribute/Import/Form/MapField.php index d9c6de574d9f878eb33b1f89ed2c7edd84af1423..d8f1eac5198f2c09e0b7a6265c2cd31e36d67006 100644 --- a/civicrm/CRM/Contribute/Import/Form/MapField.php +++ b/civicrm/CRM/Contribute/Import/Form/MapField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Import/Form/Preview.php b/civicrm/CRM/Contribute/Import/Form/Preview.php index 3b25cfc1c06dd4bd2b49d846f1e6891209ba5c3b..ccc66456318244b918a335e7ecb1f20f2eda777c 100644 --- a/civicrm/CRM/Contribute/Import/Form/Preview.php +++ b/civicrm/CRM/Contribute/Import/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Import/Form/Summary.php b/civicrm/CRM/Contribute/Import/Form/Summary.php index d0b20cd5af37bb510d3b21628dab95809e227127..68511dfdbe49a0d18d4345c637f141a565b98b06 100644 --- a/civicrm/CRM/Contribute/Import/Form/Summary.php +++ b/civicrm/CRM/Contribute/Import/Form/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Import/Parser.php b/civicrm/CRM/Contribute/Import/Parser.php index 603943a5db7daef342ae377856f193402e9c8ccb..8d86fcb3300567c9c22017f214c0f1c16f731c21 100644 --- a/civicrm/CRM/Contribute/Import/Parser.php +++ b/civicrm/CRM/Contribute/Import/Parser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_Contribute_Import_Parser extends CRM_Import_Parser { diff --git a/civicrm/CRM/Contribute/Import/Parser/Contribution.php b/civicrm/CRM/Contribute/Import/Parser/Contribution.php index 05736a628028a5befa8c0b2077febb2855313740..993e977decff09e02366f7060181949008956b0d 100644 --- a/civicrm/CRM/Contribute/Import/Parser/Contribution.php +++ b/civicrm/CRM/Contribute/Import/Parser/Contribution.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Info.php b/civicrm/CRM/Contribute/Info.php index 7fccbdda920ba497b908a0dcdd3e4142f13ed16d..8c6304632d64428e5911e50d5ee1eb14dd7e3d04 100644 --- a/civicrm/CRM/Contribute/Info.php +++ b/civicrm/CRM/Contribute/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * abstract class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Info extends CRM_Core_Component_Info { diff --git a/civicrm/CRM/Contribute/Page/AJAX.php b/civicrm/CRM/Contribute/Page/AJAX.php index e51e17a243eb4fed04d0a549e655ad9b2ad825df..ef0e696d10e04be7d9c48fb9b78ef55d77042a73 100644 --- a/civicrm/CRM/Contribute/Page/AJAX.php +++ b/civicrm/CRM/Contribute/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Contribute/Page/ContributionPage.php b/civicrm/CRM/Contribute/Page/ContributionPage.php index ba4786bef4376303164faf48883a8d880e24765f..505c9b0418ead55b0d50f7a42f9178ff7e1dfc36 100644 --- a/civicrm/CRM/Contribute/Page/ContributionPage.php +++ b/civicrm/CRM/Contribute/Page/ContributionPage.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Page/ContributionRecur.php b/civicrm/CRM/Contribute/Page/ContributionRecur.php index ad021d1dc70a1fa1d7e37aa800587809f4c1a627..baec9f45dd9f16f76191429e339ac8a2b674322c 100644 --- a/civicrm/CRM/Contribute/Page/ContributionRecur.php +++ b/civicrm/CRM/Contribute/Page/ContributionRecur.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Page/DashBoard.php b/civicrm/CRM/Contribute/Page/DashBoard.php index 0f46943431c284b52670e2d7065ce37351243ae5..c3bee31f183480b489d4b3b2c73c09d906dfd134 100644 --- a/civicrm/CRM/Contribute/Page/DashBoard.php +++ b/civicrm/CRM/Contribute/Page/DashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Page/ManagePremiums.php b/civicrm/CRM/Contribute/Page/ManagePremiums.php index dc28f48497afee40d94f0526026a44e454351f4e..3b6fa4a1288e9f1839244a729c76b179506fa7d1 100644 --- a/civicrm/CRM/Contribute/Page/ManagePremiums.php +++ b/civicrm/CRM/Contribute/Page/ManagePremiums.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Page/PaymentInfo.php b/civicrm/CRM/Contribute/Page/PaymentInfo.php index 8227ff067f737b8bcd8241ac74600d03605a1e85..1824edfb4bbaf1128dfe3d387453ce44a6d574e3 100644 --- a/civicrm/CRM/Contribute/Page/PaymentInfo.php +++ b/civicrm/CRM/Contribute/Page/PaymentInfo.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Page_PaymentInfo extends CRM_Core_Page { public function preProcess() { diff --git a/civicrm/CRM/Contribute/Page/Premium.php b/civicrm/CRM/Contribute/Page/Premium.php index e0686b459e64f6b22b03e17396a5073f1c3068e1..7f75a9dae31bdf810d32e555f3701acee16f53e3 100644 --- a/civicrm/CRM/Contribute/Page/Premium.php +++ b/civicrm/CRM/Contribute/Page/Premium.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Page/SubscriptionStatus.php b/civicrm/CRM/Contribute/Page/SubscriptionStatus.php index 4e2aa09863af2b8333da64f171c70daf6fca15b5..228e25038982d5bd56b728dc9cf4d2e525aec97f 100644 --- a/civicrm/CRM/Contribute/Page/SubscriptionStatus.php +++ b/civicrm/CRM/Contribute/Page/SubscriptionStatus.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Page_SubscriptionStatus extends CRM_Core_Page { diff --git a/civicrm/CRM/Contribute/Page/Tab.php b/civicrm/CRM/Contribute/Page/Tab.php index 234d94fed9df9ba4fc85a12b1691cb1bea4e83ee..d236e2a26c17750790b644d06ccb9e4aa08aa99a 100644 --- a/civicrm/CRM/Contribute/Page/Tab.php +++ b/civicrm/CRM/Contribute/Page/Tab.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Page_Tab extends CRM_Core_Page { diff --git a/civicrm/CRM/Contribute/Page/UserDashboard.php b/civicrm/CRM/Contribute/Page/UserDashboard.php index a3dfb350423db4b661fc925c86fcfa551df6f874..efad130378ceff7e99bf96cba3d522f841ac664a 100644 --- a/civicrm/CRM/Contribute/Page/UserDashboard.php +++ b/civicrm/CRM/Contribute/Page/UserDashboard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_Page_UserDashboard extends CRM_Contact_Page_View_UserDashBoard { diff --git a/civicrm/CRM/Contribute/PseudoConstant.php b/civicrm/CRM/Contribute/PseudoConstant.php index 21f5bfd6e606b5eb5337b0f4a2eb346034329e8a..c2b95a9aeee62c4e59f738540f9ea3ff4fe6ca06 100644 --- a/civicrm/CRM/Contribute/PseudoConstant.php +++ b/civicrm/CRM/Contribute/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/Selector/Search.php b/civicrm/CRM/Contribute/Selector/Search.php index 069dd8a1a583b66bf1b4957f876bfc32e7bbe384..6837bd26593331bbed294093791a89694e70e038 100644 --- a/civicrm/CRM/Contribute/Selector/Search.php +++ b/civicrm/CRM/Contribute/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/StateMachine/Contribution.php b/civicrm/CRM/Contribute/StateMachine/Contribution.php index 08b5bda75d1ab20c43bf498b15d6ad9024a6e24f..b094ccb0786bfa8361b4953bab8cdb09b81119c8 100644 --- a/civicrm/CRM/Contribute/StateMachine/Contribution.php +++ b/civicrm/CRM/Contribute/StateMachine/Contribution.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/StateMachine/ContributionPage.php b/civicrm/CRM/Contribute/StateMachine/ContributionPage.php index bc225cfc86bc0c02733c80be11f7669e64097f05..0a7cea692e124371f21a59b87bd07c03d0c6d739 100644 --- a/civicrm/CRM/Contribute/StateMachine/ContributionPage.php +++ b/civicrm/CRM/Contribute/StateMachine/ContributionPage.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Contribute/StateMachine/Search.php b/civicrm/CRM/Contribute/StateMachine/Search.php index 487b82849be52047d2fd981ef11af2048adc4dbe..a2f0107bba68ce27dd2d79c46887b498f3cb4296 100644 --- a/civicrm/CRM/Contribute/StateMachine/Search.php +++ b/civicrm/CRM/Contribute/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Contribute_StateMachine_Search extends CRM_Core_StateMachine { diff --git a/civicrm/CRM/Contribute/Task.php b/civicrm/CRM/Contribute/Task.php index a591f067ca524086f4a996afb60c706dca2e1a01..a5debaa6572c6e11129a7184b3bf56c69d4922e9 100644 --- a/civicrm/CRM/Contribute/Task.php +++ b/civicrm/CRM/Contribute/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -36,22 +36,16 @@ * * Used by the search forms. */ -class CRM_Contribute_Task { - const DELETE_CONTRIBUTIONS = 1, PRINT_CONTRIBUTIONS = 2, EXPORT_CONTRIBUTIONS = 3, BATCH_CONTRIBUTIONS = 4, EMAIL_CONTACTS = 5, UPDATE_STATUS = 6, PDF_RECEIPT = 7; +class CRM_Contribute_Task extends CRM_Core_Task { - /** - * The task array - * - * @var array - */ - static $_tasks = NULL; + const + // Contribution tasks + UPDATE_STATUS = 401, + PDF_RECEIPT = 402, + PDF_THANKYOU = 403, + PDF_INVOICE = 404; - /** - * The optional task array - * - * @var array - */ - static $_optionalTasks = NULL; + static $objectType = 'contribution'; /** * These tasks are the core set of tasks that the user can perform @@ -63,17 +57,17 @@ class CRM_Contribute_Task { public static function tasks() { if (!(self::$_tasks)) { self::$_tasks = array( - 1 => array( + self::TASK_DELETE => array( 'title' => ts('Delete contributions'), 'class' => 'CRM_Contribute_Form_Task_Delete', 'result' => FALSE, ), - 2 => array( + self::TASK_PRINT => array( 'title' => ts('Print selected rows'), 'class' => 'CRM_Contribute_Form_Task_Print', 'result' => FALSE, ), - 3 => array( + self::TASK_EXPORT => array( 'title' => ts('Export contributions'), 'class' => array( 'CRM_Export_Form_Select', @@ -81,7 +75,7 @@ class CRM_Contribute_Task { ), 'result' => FALSE, ), - 4 => array( + self::BATCH_UPDATE => array( 'title' => ts('Update multiple contributions'), 'class' => array( 'CRM_Contribute_Form_Task_PickProfile', @@ -89,7 +83,7 @@ class CRM_Contribute_Task { ), 'result' => TRUE, ), - 5 => array( + self::TASK_EMAIL => array( 'title' => ts('Email - send now (to %1 or less)', array( 1 => Civi::settings() ->get('simple_mail_limit'), @@ -97,22 +91,22 @@ class CRM_Contribute_Task { 'class' => 'CRM_Contribute_Form_Task_Email', 'result' => TRUE, ), - 6 => array( + self::UPDATE_STATUS => array( 'title' => ts('Update pending contribution status'), 'class' => 'CRM_Contribute_Form_Task_Status', 'result' => TRUE, ), - 7 => array( + self::PDF_RECEIPT => array( 'title' => ts('Receipts - print or email'), 'class' => 'CRM_Contribute_Form_Task_PDF', 'result' => FALSE, ), - 8 => array( + self::PDF_THANKYOU => array( 'title' => ts('Thank-you letters - print or email'), 'class' => 'CRM_Contribute_Form_Task_PDFLetter', 'result' => FALSE, ), - 9 => array( + self::PDF_INVOICE => array( 'title' => ts('Invoices - print or email'), 'class' => 'CRM_Contribute_Form_Task_Invoice', 'result' => FALSE, @@ -121,56 +115,42 @@ class CRM_Contribute_Task { //CRM-4418, check for delete if (!CRM_Core_Permission::check('delete in CiviContribute')) { - unset(self::$_tasks[1]); + unset(self::$_tasks[self::TASK_DELETE]); } //CRM-12920 - check for edit permission if (!CRM_Core_Permission::check('edit contributions')) { - unset(self::$_tasks[4], self::$_tasks[6]); + unset(self::$_tasks[self::BATCH_UPDATE], self::$_tasks[self::UPDATE_STATUS]); } // remove action "Invoices - print or email" $invoiceSettings = Civi::settings()->get('contribution_invoice_settings'); $invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings); if (!$invoicing) { - unset(self::$_tasks[9]); + unset(self::$_tasks[self::PDF_INVOICE]); } - CRM_Utils_Hook::searchTasks('contribution', self::$_tasks); - asort(self::$_tasks); + parent::tasks(); } return self::$_tasks; } - /** - * These tasks are the core set of task titles - * on contributors - * - * @return array - * the set of task titles - */ - public static function &taskTitles() { - self::tasks(); - $titles = array(); - foreach (self::$_tasks as $id => $value) { - $titles[$id] = $value['title']; - } - return $titles; - } - /** * Show tasks selectively based on the permission level * of the user * * @param int $permission * - * @param bool $softCreditFiltering + * @param array $params + * bool softCreditFiltering: derived from CRM_Contribute_BAO_Query::isSoftCreditOptionEnabled * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission, $softCreditFiltering = FALSE) { - $tasks = array(); + public static function permissionedTaskTitles($permission, $params = array()) { + if (!isset($params['softCreditFiltering'])) { + $params['softCreditFiltering'] = FALSE; + } if (($permission == CRM_Core_Permission::EDIT) || CRM_Core_Permission::check('edit contributions') ) { @@ -178,19 +158,21 @@ class CRM_Contribute_Task { } else { $tasks = array( - 3 => self::$_tasks[3]['title'], - 5 => self::$_tasks[5]['title'], - 7 => self::$_tasks[7]['title'], + self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'], + self::TASK_EMAIL => self::$_tasks[self::TASK_EMAIL]['title'], + self::PDF_RECEIPT => self::$_tasks[self::PDF_RECEIPT]['title'], ); //CRM-4418, if (CRM_Core_Permission::check('delete in CiviContribute')) { - $tasks[1] = self::$_tasks[1]['title']; + $tasks[self::TASK_DELETE] = self::$_tasks[self::TASK_DELETE]['title']; } } - if ($softCreditFiltering) { - unset($tasks[4], $tasks[7]); + if ($params['softCreditFiltering']) { + unset($tasks[self::BATCH_UPDATE], $tasks[self::PDF_RECEIPT]); } + + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); return $tasks; } @@ -207,17 +189,9 @@ class CRM_Contribute_Task { self::tasks(); if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) { // make the print task by default - $value = 2; - } - // this is possible since hooks can inject a task - // CRM-13697 - if (!isset(self::$_tasks[$value]['result'])) { - self::$_tasks[$value]['result'] = NULL; + $value = self::TASK_PRINT; } - return array( - self::$_tasks[$value]['class'], - self::$_tasks[$value]['result'], - ); + return parent::getTask($value); } } diff --git a/civicrm/CRM/Contribute/Tokens.php b/civicrm/CRM/Contribute/Tokens.php index 441906fa7e77d7ca39d2786ddb898260d48df4e5..e85f08effa046a9d4daf2c8dd1753a81b7e1a5f1 100644 --- a/civicrm/CRM/Contribute/Tokens.php +++ b/civicrm/CRM/Contribute/Tokens.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Action.php b/civicrm/CRM/Core/Action.php index 8be4c9f4e5496e01adb951bc0545d1a4d7422f42..b4095b83bf32c011d69f1cf7ac7753159bf36e0c 100644 --- a/civicrm/CRM/Core/Action.php +++ b/civicrm/CRM/Core/Action.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * and similar across all objects (thus providing both reuse and standards) * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/ActionLog.php b/civicrm/CRM/Core/BAO/ActionLog.php index 91538012dc781d644f6df75d00cbd7a6d1eb99ad..77c67ee2739d30d3b15ef2c2ac21aaffba62b027 100644 --- a/civicrm/CRM/Core/BAO/ActionLog.php +++ b/civicrm/CRM/Core/BAO/ActionLog.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/ActionSchedule.php b/civicrm/CRM/Core/BAO/ActionSchedule.php index 45cfe04a2a7dde83ce37ba26123dd9a10623f2e7..eeaebf4c9e3ed0f1c258c1452fb60d5cb45a7c9c 100644 --- a/civicrm/CRM/Core/BAO/ActionSchedule.php +++ b/civicrm/CRM/Core/BAO/ActionSchedule.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/Address.php b/civicrm/CRM/Core/BAO/Address.php index b66f01a11b05c3231287eede4e9766888aaac38d..0d19ca5b68b797f4307e88e21099deca2f19bcfa 100644 --- a/civicrm/CRM/Core/BAO/Address.php +++ b/civicrm/CRM/Core/BAO/Address.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Block.php b/civicrm/CRM/Core/BAO/Block.php index f12aaa697894a80d4bb78b56c4a81bc2486028e8..b3052fea75a77152a4e3e52854d1a7c45a8f5c2f 100644 --- a/civicrm/CRM/Core/BAO/Block.php +++ b/civicrm/CRM/Core/BAO/Block.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Add static functions to include some common functionality used across location sub object BAO classes. */ diff --git a/civicrm/CRM/Core/BAO/CMSUser.php b/civicrm/CRM/Core/BAO/CMSUser.php index c8452a41e6fe1433e1ba27024bb138e984133e73..5df962260c16c9c009554ce56fd907e51df36d71 100644 --- a/civicrm/CRM/Core/BAO/CMSUser.php +++ b/civicrm/CRM/Core/BAO/CMSUser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Cache.php b/civicrm/CRM/Core/BAO/Cache.php index 31c4355b6bea7f7db1becca451af1d3ea8fd32dd..7f993a7e5bad73d358220926c400c4874f8759d9 100644 --- a/civicrm/CRM/Core/BAO/Cache.php +++ b/civicrm/CRM/Core/BAO/Cache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/BAO/ConfigSetting.php b/civicrm/CRM/Core/BAO/ConfigSetting.php index 5897579fdf2dd2f166bba37dba6ca70ef9e8a11a..c9268f7f0a369487b2963ce3ce692084c61d3e82 100644 --- a/civicrm/CRM/Core/BAO/ConfigSetting.php +++ b/civicrm/CRM/Core/BAO/ConfigSetting.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Country.php b/civicrm/CRM/Core/BAO/Country.php index 23b3d64eae463d725f99b1d9f5d9146a2e030755..77fef1be198c5d332f9c67eac9485580a3063563 100644 --- a/civicrm/CRM/Core/BAO/Country.php +++ b/civicrm/CRM/Core/BAO/Country.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php index 26887449a93f0ba165ca8021894ae1011e9bfc90..a656f5048c2d06ff1ee60add00e1cf0793e44e00 100644 --- a/civicrm/CRM/Core/BAO/CustomField.php +++ b/civicrm/CRM/Core/BAO/CustomField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/CustomGroup.php b/civicrm/CRM/Core/BAO/CustomGroup.php index 79ced1dae406aeacca4a6e5b4a0eb8dbcbb4220e..2e88e0801455fa4037acd57c35c34dc5621987a9 100644 --- a/civicrm/CRM/Core/BAO/CustomGroup.php +++ b/civicrm/CRM/Core/BAO/CustomGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/CustomOption.php b/civicrm/CRM/Core/BAO/CustomOption.php index efbb6518c4e6ad58829175fb4112d3df6ca8c915..6b7f0f8d75648e6ed7be587ba1cd015a304d460c 100644 --- a/civicrm/CRM/Core/BAO/CustomOption.php +++ b/civicrm/CRM/Core/BAO/CustomOption.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/CustomQuery.php b/civicrm/CRM/Core/BAO/CustomQuery.php index b813dddac7f3844337b0e00c067cdc506b1579ae..e7b1ad62e30fd83145412858ba582b1460de60b9 100644 --- a/civicrm/CRM/Core/BAO/CustomQuery.php +++ b/civicrm/CRM/Core/BAO/CustomQuery.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_BAO_CustomQuery { const PREFIX = 'custom_value_'; diff --git a/civicrm/CRM/Core/BAO/CustomValue.php b/civicrm/CRM/Core/BAO/CustomValue.php index 0134869a4840b03ee76bf2ca2604de03e22f1c56..f9954b3a81048c55f66a54cdfd2cce29ab68ed4a 100644 --- a/civicrm/CRM/Core/BAO/CustomValue.php +++ b/civicrm/CRM/Core/BAO/CustomValue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/CustomValueTable.php b/civicrm/CRM/Core/BAO/CustomValueTable.php index caeaa600d3a4d07e4d4508ae812a3a68c9a6911e..850084e7f03307d67a870485abf25881d2d856ec 100644 --- a/civicrm/CRM/Core/BAO/CustomValueTable.php +++ b/civicrm/CRM/Core/BAO/CustomValueTable.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/Dashboard.php b/civicrm/CRM/Core/BAO/Dashboard.php index 5b2cbffe993b1f198bbc9c69a9bce78de2d54a56..558614615fc51d56d0a115eaa8e6bb61515e67ce 100644 --- a/civicrm/CRM/Core/BAO/Dashboard.php +++ b/civicrm/CRM/Core/BAO/Dashboard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Discount.php b/civicrm/CRM/Core/BAO/Discount.php index 5fc881edf939e4dfbc7e34a5723b0bd58d1f96db..32f1728242664693eebbfca727c6bfcc34919467 100644 --- a/civicrm/CRM/Core/BAO/Discount.php +++ b/civicrm/CRM/Core/BAO/Discount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/Domain.php b/civicrm/CRM/Core/BAO/Domain.php index 9994323a7d6e76683e5eaafd4bf5f3b8e0bba740..a7bf37ed2b1e6533bd7b2c9b5bc8844669822b73 100644 --- a/civicrm/CRM/Core/BAO/Domain.php +++ b/civicrm/CRM/Core/BAO/Domain.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -142,7 +142,7 @@ class CRM_Core_BAO_Domain extends CRM_Core_DAO_Domain { */ public static function create($params) { $domain = new CRM_Core_DAO_Domain(); - $domain->copyValues($params); + $domain->copyValues($params, TRUE); $domain->save(); return $domain; } diff --git a/civicrm/CRM/Core/BAO/Email.php b/civicrm/CRM/Core/BAO/Email.php index 2227465cf9e054deccea535dbb5f403966b05575..3cb40c59167ec720c651f8c538767fa9a3ed3e1f 100644 --- a/civicrm/CRM/Core/BAO/Email.php +++ b/civicrm/CRM/Core/BAO/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -304,6 +304,7 @@ AND reset_date IS NULL return $fromEmailValues; } + $contactFromEmails = []; // add logged in user's active email ids $contactID = CRM_Core_Session::singleton()->getLoggedInContactID(); if ($contactID) { @@ -321,10 +322,10 @@ AND reset_date IS NULL if (!empty($emailVal['is_primary'])) { $fromEmailHtml .= ' ' . ts('(preferred)'); } - $fromEmailValues[$emailId] = $fromEmailHtml; + $contactFromEmails[$fromEmail] = $fromEmailHtml; } } - return $fromEmailValues; + return CRM_Utils_Array::crmArrayMerge($contactFromEmails, $fromEmailValues); } /** diff --git a/civicrm/CRM/Core/BAO/EntityTag.php b/civicrm/CRM/Core/BAO/EntityTag.php index accc5d6d082602e23019fa27aa4321238183ca79..1cb1030ac531d43e7d5cb6f073b203c1b82ea765 100644 --- a/civicrm/CRM/Core/BAO/EntityTag.php +++ b/civicrm/CRM/Core/BAO/EntityTag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class contains functions for managing Tag(tag) for a contact * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_BAO_EntityTag extends CRM_Core_DAO_EntityTag { diff --git a/civicrm/CRM/Core/BAO/Extension.php b/civicrm/CRM/Core/BAO/Extension.php index ebfcc5c16e82ee2527c563f11a23ccac0c2b2691..760101b098c5fa56592734113dc213d01be95d4d 100644 --- a/civicrm/CRM/Core/BAO/Extension.php +++ b/civicrm/CRM/Core/BAO/Extension.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/File.php b/civicrm/CRM/Core/BAO/File.php index 7b0ade3794b2615473d30fd0b653075dfbb7e59c..e6ad7ee197487a29b9dba87250f8b7f282965eb0 100644 --- a/civicrm/CRM/Core/BAO/File.php +++ b/civicrm/CRM/Core/BAO/File.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/FinancialTrxn.php b/civicrm/CRM/Core/BAO/FinancialTrxn.php index 7bb1a2cc194189a3526afd54d0ac7f87196826f7..922e8ee24bd83fd2525ade2257dac5355f5956b4 100644 --- a/civicrm/CRM/Core/BAO/FinancialTrxn.php +++ b/civicrm/CRM/Core/BAO/FinancialTrxn.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_BAO_FinancialTrxn extends CRM_Financial_DAO_FinancialTrxn { /** diff --git a/civicrm/CRM/Core/BAO/IM.php b/civicrm/CRM/Core/BAO/IM.php index c23b28058e15719919fefff73954e1601c35d964..baba3acd3fd12e6ea75359edeb4890d17f8d766a 100644 --- a/civicrm/CRM/Core/BAO/IM.php +++ b/civicrm/CRM/Core/BAO/IM.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/Job.php b/civicrm/CRM/Core/BAO/Job.php index 2034fccba35a33677365031177387d10809ad2c2..7819f2721ab5b487c6ab250989a5a3943f869369 100644 --- a/civicrm/CRM/Core/BAO/Job.php +++ b/civicrm/CRM/Core/BAO/Job.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: $ * */ diff --git a/civicrm/CRM/Core/BAO/LabelFormat.php b/civicrm/CRM/Core/BAO/LabelFormat.php index ba4ca660e4f3b045f02aceb9cba149cc5d09c405..642ea1e1aea95987d0a52ee1f215133427083989 100644 --- a/civicrm/CRM/Core/BAO/LabelFormat.php +++ b/civicrm/CRM/Core/BAO/LabelFormat.php @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Location.php b/civicrm/CRM/Core/BAO/Location.php index 56953d9b7d33c462dd018bb5618c0e8c3f42d2eb..46c72a2af8bce1445b601265ea299c5c63f6d975 100644 --- a/civicrm/CRM/Core/BAO/Location.php +++ b/civicrm/CRM/Core/BAO/Location.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/LocationType.php b/civicrm/CRM/Core/BAO/LocationType.php index 9eead4bad16d26c5c280943b890ef8bbc6c58bb1..f7ef6f9219e13dd124fa2b81923d47b875b7a9fe 100644 --- a/civicrm/CRM/Core/BAO/LocationType.php +++ b/civicrm/CRM/Core/BAO/LocationType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/Log.php b/civicrm/CRM/Core/BAO/Log.php index 9403c1b5bc4c35c6dd32179ed65c8f23a9a45bf3..767f5a1d365b75a2bfef603b0751a359da919153 100644 --- a/civicrm/CRM/Core/BAO/Log.php +++ b/civicrm/CRM/Core/BAO/Log.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2016 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/MailSettings.php b/civicrm/CRM/Core/BAO/MailSettings.php index ef806d5ea9d616daf90f987ea7fbf491bc715250..08a99e3842895e222b3998464f5c11af3b1bade2 100644 --- a/civicrm/CRM/Core/BAO/MailSettings.php +++ b/civicrm/CRM/Core/BAO/MailSettings.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/Mapping.php b/civicrm/CRM/Core/BAO/Mapping.php index 34934ab123eee00b6082d00bf70f8a397c12a5aa..75be147b1246a4ae77aee8f7b32ddeacd6fe7bdf 100644 --- a/civicrm/CRM/Core/BAO/Mapping.php +++ b/civicrm/CRM/Core/BAO/Mapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping { diff --git a/civicrm/CRM/Core/BAO/MessageTemplate.php b/civicrm/CRM/Core/BAO/MessageTemplate.php index 1bc7ec1284cd642aff6fa97917a3ca2f7894b167..4433b7d51f1248e16b06aa9002f6713fa9295cd3 100644 --- a/civicrm/CRM/Core/BAO/MessageTemplate.php +++ b/civicrm/CRM/Core/BAO/MessageTemplate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Mail/mime.php'; diff --git a/civicrm/CRM/Core/BAO/Navigation.php b/civicrm/CRM/Core/BAO/Navigation.php index cff1a1d4bd3fe9851126f0f2d4224f6f80f7922b..f6f395a03d941bf04d6d2d8d5d17dd1b94239419 100644 --- a/civicrm/CRM/Core/BAO/Navigation.php +++ b/civicrm/CRM/Core/BAO/Navigation.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_BAO_Navigation extends CRM_Core_DAO_Navigation { diff --git a/civicrm/CRM/Core/BAO/Note.php b/civicrm/CRM/Core/BAO/Note.php index 87e92fdc8023c3482bef1346db521d083b2263b3..3457c4e08db57271dd0f3f1f7c777897aacdea78 100644 --- a/civicrm/CRM/Core/BAO/Note.php +++ b/civicrm/CRM/Core/BAO/Note.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -133,9 +133,9 @@ class CRM_Core_BAO_Note extends CRM_Core_DAO_Note { * (reference) an assoc array of name/value pairs. * @param array $ids * (deprecated) associated array with note id - preferably set $params['id']. - * - * @return object|null + * @return null|object $note * $note CRM_Core_BAO_Note object + * @throws \CRM_Exception */ public static function add(&$params, $ids = array()) { $dataExists = self::dataExists($params); @@ -161,7 +161,7 @@ class CRM_Core_BAO_Note extends CRM_Core_DAO_Note { $note->copyValues($params); if (empty($params['contact_id'])) { - if ($params['entity_table'] == 'civicrm_contact') { + if (CRM_Utils_Array::value('entity_table', $params) == 'civicrm_contact') { $note->contact_id = $params['entity_id']; } } @@ -183,9 +183,10 @@ class CRM_Core_BAO_Note extends CRM_Core_DAO_Note { $displayName = CRM_Contact_BAO_Contact::displayName($note->entity_id); $noteActions = FALSE; - $session = CRM_Core_Session::singleton(); - if ($session->get('userID')) { - if ($session->get('userID') == $note->entity_id) { + + $loggedInContactID = CRM_Core_Session::singleton()->getLoggedInContactID(); + if ($loggedInContactID) { + if ($loggedInContactID == $note->entity_id) { $noteActions = TRUE; } elseif (CRM_Contact_BAO_Contact_Permission::allow($note->entity_id, CRM_Core_Permission::EDIT)) { @@ -231,7 +232,7 @@ class CRM_Core_BAO_Note extends CRM_Core_DAO_Note { */ public static function dataExists(&$params) { // return if no data present - if (!strlen($params['note'])) { + if (empty($params['id']) && !strlen($params['note'])) { return FALSE; } return TRUE; diff --git a/civicrm/CRM/Core/BAO/OpenID.php b/civicrm/CRM/Core/BAO/OpenID.php index 9ce9350e0bcce698b1406dc8338a81d57df66be5..6c5d6fcd62bff7fa9df960b6214fb1ed4530664f 100644 --- a/civicrm/CRM/Core/BAO/OpenID.php +++ b/civicrm/CRM/Core/BAO/OpenID.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/OptionGroup.php b/civicrm/CRM/Core/BAO/OptionGroup.php index b06e37251bcc43ec8ab18972c497309bcd8ea029..25db8a43e248273fd0b8ceb697126b47b0556e4d 100644 --- a/civicrm/CRM/Core/BAO/OptionGroup.php +++ b/civicrm/CRM/Core/BAO/OptionGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/OptionValue.php b/civicrm/CRM/Core/BAO/OptionValue.php index 429d14ac782f09b3907b0fce01e2090fa1e084bb..560b255dc3c5ba2a7aac61e0cfa589d750b2b40e 100644 --- a/civicrm/CRM/Core/BAO/OptionValue.php +++ b/civicrm/CRM/Core/BAO/OptionValue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_BAO_OptionValue extends CRM_Core_DAO_OptionValue { diff --git a/civicrm/CRM/Core/BAO/PaperSize.php b/civicrm/CRM/Core/BAO/PaperSize.php index a66e7caed8a388b7e30ca7d0dd46fad74b2ab126..29a0da0c629e44956627ab3d208c6cb3e5d97f04 100644 --- a/civicrm/CRM/Core/BAO/PaperSize.php +++ b/civicrm/CRM/Core/BAO/PaperSize.php @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/PdfFormat.php b/civicrm/CRM/Core/BAO/PdfFormat.php index 2a2cbf54d82bbc4d5c512986ce589f283dd9c6a2..73cf693d68dae03f007bf6540d4f678581df916a 100644 --- a/civicrm/CRM/Core/BAO/PdfFormat.php +++ b/civicrm/CRM/Core/BAO/PdfFormat.php @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Persistent.php b/civicrm/CRM/Core/BAO/Persistent.php index 4f0ba98bb11f990074d7556527a2ee4f8e41ee72..9586145c6447843a0e85cb1f3ccc86f88efbcfe1 100644 --- a/civicrm/CRM/Core/BAO/Persistent.php +++ b/civicrm/CRM/Core/BAO/Persistent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/Phone.php b/civicrm/CRM/Core/BAO/Phone.php index 180a4425dd8d726122a4df502e94fd557957053a..fe8d31a5bf2a0517a9fc1a7ebe9d6315cb985234 100644 --- a/civicrm/CRM/Core/BAO/Phone.php +++ b/civicrm/CRM/Core/BAO/Phone.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/PreferencesDate.php b/civicrm/CRM/Core/BAO/PreferencesDate.php index d9d49c85251012ed79e667e0b0a9c5c75672b8ce..0ce7dc4df5155e06863eb986d2b2ada4ec486b88 100644 --- a/civicrm/CRM/Core/BAO/PreferencesDate.php +++ b/civicrm/CRM/Core/BAO/PreferencesDate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_BAO_PreferencesDate extends CRM_Core_DAO_PreferencesDate { diff --git a/civicrm/CRM/Core/BAO/PrevNextCache.php b/civicrm/CRM/Core/BAO/PrevNextCache.php index 0eab40d4c860e4cb55170cd93800c54a0c27f6e9..0112a921b8e740f05429e8e8e7692d962334bfd8 100644 --- a/civicrm/CRM/Core/BAO/PrevNextCache.php +++ b/civicrm/CRM/Core/BAO/PrevNextCache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Query.php b/civicrm/CRM/Core/BAO/Query.php index 1a7520d8366958858e7fec2a92a1c89b2167f4f0..fc83b012c1f613ef743dc6b4fc510bf5b43037ab 100644 --- a/civicrm/CRM/Core/BAO/Query.php +++ b/civicrm/CRM/Core/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/RecurringEntity.php b/civicrm/CRM/Core/BAO/RecurringEntity.php index a41d9367a73f22bdbc91785b5f1665b8772f1297..729d3f8ca59799181bde7ea7ef0c12496eed2ce1 100644 --- a/civicrm/CRM/Core/BAO/RecurringEntity.php +++ b/civicrm/CRM/Core/BAO/RecurringEntity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'packages/When/When.php'; @@ -1214,21 +1214,37 @@ class CRM_Core_BAO_RecurringEntity extends CRM_Core_DAO_RecurringEntity { $dao->mode = $mode; $dao->save(); - //CRM-20787 Fix - //I am not sure about other fields, if mode = 3 apply for an event then other fields - //should be save for all other series events or not so applying for price set only for now here. - if (CRM_Core_BAO_RecurringEntity::MODE_ALL_ENTITY_IN_SERIES === $mode) { - - //Step-1: Get all events of series - $seriesEventRecords = CRM_Core_BAO_RecurringEntity::getEntitiesFor($entityId, $entityTable); - foreach ($seriesEventRecords as $event) { - //Step-3: Save price set in other series events - if (CRM_Price_BAO_PriceSet::removeFrom($event['table'], $event['id'])) {//Remove existing priceset - CRM_Core_BAO_Discount::del($event['id'], $event['table']); + if ($priceSet) { + //CRM-20787 Fix + //I am not sure about other fields, if mode = 3 apply for an event then other fields + //should be save for all other series events or not so applying for price set only for now here. + if (CRM_Core_BAO_RecurringEntity::MODE_ALL_ENTITY_IN_SERIES === $mode) { + //Step-1: Get all events of series + $seriesEventRecords = CRM_Core_BAO_RecurringEntity::getEntitiesFor($entityId, $entityTable); + foreach ($seriesEventRecords as $event) { + //Step-2: Save price set in other series events + if (CRM_Price_BAO_PriceSet::removeFrom($event['table'], $event['id'])) {//Remove existing priceset + CRM_Core_BAO_Discount::del($event['id'], $event['table']); + } CRM_Price_BAO_PriceSet::addTo($event['table'], $event['id'], $priceSet); //Add new price set } } + + if (CRM_Core_BAO_RecurringEntity::MODE_NEXT_ALL_ENTITY === $mode) { + //Step-1: Get all events of series + $seriesEventRecords = CRM_Core_BAO_RecurringEntity::getEntitiesFor($entityId, $entityTable); + foreach ($seriesEventRecords as $event) { + //Step-2: Save price set in other series events + if ($entityId < $event["id"]) { + if (CRM_Price_BAO_PriceSet::removeFrom($event['table'], $event['id'])) {//Remove existing priceset + CRM_Core_BAO_Discount::del($event['id'], $event['table']); + } + CRM_Price_BAO_PriceSet::addTo($event['table'], $event['id'], $priceSet); //Add new price set + } + } + } } + //CRM-20787 - Fix end $finalResult['status'] = 'Done'; } diff --git a/civicrm/CRM/Core/BAO/SchemaHandler.php b/civicrm/CRM/Core/BAO/SchemaHandler.php index 6cec729fad60e2b704f9ab778b256e10e9871e87..e8a8c705e0ee1de4b2f571226e3d74e5c45b95ff 100644 --- a/civicrm/CRM/Core/BAO/SchemaHandler.php +++ b/civicrm/CRM/Core/BAO/SchemaHandler.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Setting.php b/civicrm/CRM/Core/BAO/Setting.php index 19749dadeb1ed5979bc273663e52280086b187f1..13e066d461ee32d7d895f21f547c1d1479192ff5 100644 --- a/civicrm/CRM/Core/BAO/Setting.php +++ b/civicrm/CRM/Core/BAO/Setting.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/StatusPreference.php b/civicrm/CRM/Core/BAO/StatusPreference.php index ec0032e065dad6e40f8eb197d41ea4e11ab572c6..9a2767fcd74b6de1e6c335c7369d2c6198bec7c3 100644 --- a/civicrm/CRM/Core/BAO/StatusPreference.php +++ b/civicrm/CRM/Core/BAO/StatusPreference.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/Tag.php b/civicrm/CRM/Core/BAO/Tag.php index 7087a5a456a7f81d414e88c72084efd96609368d..f9c950d7b5809c1f5ddeb151dcd945b93e09ab12 100644 --- a/civicrm/CRM/Core/BAO/Tag.php +++ b/civicrm/CRM/Core/BAO/Tag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_BAO_Tag extends CRM_Core_DAO_Tag { diff --git a/civicrm/CRM/Core/BAO/UFField.php b/civicrm/CRM/Core/BAO/UFField.php index 10dccc79db1286851ed85bfbdfff1986ee062d88..58811263c705564178b60f34bc485edc564570ff 100644 --- a/civicrm/CRM/Core/BAO/UFField.php +++ b/civicrm/CRM/Core/BAO/UFField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -975,6 +975,7 @@ SELECT id 'membership_type_id', 'member_is_test', 'is_override', + 'status_override_end_date', 'status_id', 'member_is_pay_later' ); @@ -994,10 +995,7 @@ SELECT id CRM_Utils_Array::remove($caseFields, 'case_id', 'case_type', - 'case_start_date', - 'case_end_date', 'case_role', - 'case_status', 'case_deleted' ); } diff --git a/civicrm/CRM/Core/BAO/UFGroup.php b/civicrm/CRM/Core/BAO/UFGroup.php index f2e64af8018e34115bf049d7980a9403daef5821..64417e7b853a853e666b0a0ac4111cd703b20fca 100644 --- a/civicrm/CRM/Core/BAO/UFGroup.php +++ b/civicrm/CRM/Core/BAO/UFGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -2243,6 +2243,14 @@ AND ( entity_id IS NULL OR entity_id <= 0 ) $form->add('text', $name, $title, $attributes, $required); $form->addRule($name, ts('Please enter the duration as number of minutes (integers only).'), 'positiveInteger'); } + elseif ($fieldName == 'case_status') { + $form->add('select', $name, $title, + array( + '' => ts('- select -'), + ) + CRM_Case_BAO_Case::buildOptions('case_status_id', 'create'), + $required + ); + } else { if (substr($fieldName, 0, 3) === 'is_' or substr($fieldName, 0, 7) === 'do_not_') { $form->add('advcheckbox', $name, $title, $attributes, $required); @@ -2508,25 +2516,30 @@ AND ( entity_id IS NULL OR entity_id <= 0 ) } } - //Handling Contribution Part of the batch profile + // Handling Contribution Part of the batch profile if (CRM_Core_Permission::access('CiviContribute') && $component == 'Contribute') { self::setComponentDefaults($fields, $componentId, $component, $defaults); } - //Handling Event Participation Part of the batch profile + // Handling Event Participation Part of the batch profile if (CRM_Core_Permission::access('CiviEvent') && $component == 'Event') { self::setComponentDefaults($fields, $componentId, $component, $defaults); } - //Handling membership Part of the batch profile + // Handling membership Part of the batch profile if (CRM_Core_Permission::access('CiviMember') && $component == 'Membership') { self::setComponentDefaults($fields, $componentId, $component, $defaults); } - //Handling Activity Part of the batch profile + // Handling Activity Part of the batch profile if ($component == 'Activity') { self::setComponentDefaults($fields, $componentId, $component, $defaults); } + + // Handling Case Part of the batch profile + if (CRM_Core_Permission::access('CiviCase') && $component == 'Case') { + self::setComponentDefaults($fields, $componentId, $component, $defaults); + } } /** @@ -3173,7 +3186,7 @@ AND ( entity_id IS NULL OR entity_id <= 0 ) */ public static function setComponentDefaults(&$fields, $componentId, $component, &$defaults, $isStandalone = FALSE) { if (!$componentId || - !in_array($component, array('Contribute', 'Membership', 'Event', 'Activity')) + !in_array($component, array('Contribute', 'Membership', 'Event', 'Activity', 'Case')) ) { return; } @@ -3203,6 +3216,12 @@ AND ( entity_id IS NULL OR entity_id <= 0 ) $componentBAOName = 'Activity'; $componentSubType = array('activity_type_id'); break; + + case 'Case': + $componentBAO = 'CRM_Case_BAO_Case'; + $componentBAOName = 'Case'; + $componentSubType = array('case_type_id'); + break; } $values = array(); @@ -3242,6 +3261,9 @@ AND ( entity_id IS NULL OR entity_id <= 0 ) elseif ($name == 'membership_status') { $defaults[$fldName] = $values['status_id']; } + elseif ($name == 'case_status') { + $defaults[$fldName] = $values['case_status_id']; + } elseif (CRM_Core_BAO_CustomField::getKeyID($name, TRUE) !== array(NULL, NULL)) { if (empty($formattedGroupTree)) { //get the groupTree as per subTypes. diff --git a/civicrm/CRM/Core/BAO/UFJoin.php b/civicrm/CRM/Core/BAO/UFJoin.php index c3f5627934bbb6f06783e8bb51ce347e3db02e13..9564b206511305e803f0abe3b126be50c8b85d51 100644 --- a/civicrm/CRM/Core/BAO/UFJoin.php +++ b/civicrm/CRM/Core/BAO/UFJoin.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/BAO/UFMatch.php b/civicrm/CRM/Core/BAO/UFMatch.php index afd256805e3f00e7edca023a6885c97415876bd3..265d27828d97a1159af003d7bea826e0a8c72dc7 100644 --- a/civicrm/CRM/Core/BAO/UFMatch.php +++ b/civicrm/CRM/Core/BAO/UFMatch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/BAO/Website.php b/civicrm/CRM/Core/BAO/Website.php index 585e843d5fb0beadcb4a330a83ef84e3c9e79cdc..3f968d231bc69c19626181a27322557194ae88fb 100644 --- a/civicrm/CRM/Core/BAO/Website.php +++ b/civicrm/CRM/Core/BAO/Website.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -40,12 +40,11 @@ class CRM_Core_BAO_Website extends CRM_Core_DAO_Website { * Takes an associative array and adds im. * * @param array $params - * (reference ) an assoc array of name/value pairs. + * an assoc array of name/value pairs. * - * @return object - * CRM_Core_BAO_Website object on success, null otherwise + * @return CRM_Core_BAO_Website */ - public static function add(&$params) { + public static function add($params) { $hook = empty($params['id']) ? 'create' : 'edit'; CRM_Utils_Hook::pre($hook, 'Website', CRM_Utils_Array::value('id', $params), $params); @@ -57,6 +56,31 @@ class CRM_Core_BAO_Website extends CRM_Core_DAO_Website { return $website; } + /** + * Create website. + * + * If called in a legacy manner this, temporarily, fails back to calling the legacy function. + * + * @param array $params + * @param int $contactID + * @param bool $skipDelete + * + * @return bool|CRM_Core_BAO_Website + */ + public static function create($params, $contactID = NULL, $skipDelete = NULL) { + if ($skipDelete !== NULL || ($contactID && !is_array($contactID))) { + \Civi::log()->warning(ts('Calling website:create with vars other than $params is deprecated. Use process'), ['civi.tag' => 'deprecated']); + return self::process($params, $contactID, $skipDelete); + } + foreach ($params as $key => $value) { + if (is_numeric($key)) { + \Civi::log()->warning(ts('Calling website:create for multiple websites $params is deprecated. Use process'), ['civi.tag' => 'deprecated']); + return self::process($params, $contactID, $skipDelete); + } + } + return self::add($params); + } + /** * Process website. * @@ -68,7 +92,7 @@ class CRM_Core_BAO_Website extends CRM_Core_DAO_Website { * * @return bool */ - public static function create(&$params, $contactID, $skipDelete) { + public static function process($params, $contactID, $skipDelete) { if (empty($params)) { return FALSE; } diff --git a/civicrm/CRM/Core/BAO/WordReplacement.php b/civicrm/CRM/Core/BAO/WordReplacement.php index 3b5842a9d6ad40988fd5c0a10b9e4472ab1dfb15..237ce337cf66eb1a874ede369346745118b39b59 100644 --- a/civicrm/CRM/Core/BAO/WordReplacement.php +++ b/civicrm/CRM/Core/BAO/WordReplacement.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/Base.php b/civicrm/CRM/Core/Base.php index d8676e4fcae91932f64f40031ecaebdf92c08922..76d1ff967145d0c9ba6f9f9aec88e2f46a2a81ad 100644 --- a/civicrm/CRM/Core/Base.php +++ b/civicrm/CRM/Core/Base.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * from this class. However it includes a few common files * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Block.php b/civicrm/CRM/Core/Block.php index e054dc3c09c3688ea549647c9bec66451e726838..a9249598441b314e1059adfdc099e91774d55daa 100644 --- a/civicrm/CRM/Core/Block.php +++ b/civicrm/CRM/Core/Block.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/ClassLoader.php b/civicrm/CRM/Core/ClassLoader.php index 3a455777bbcb91d1d87cb82acbaeb8331b198ea9..18e5254dc81e6188e8d93f79a2d39ea858be2c04 100644 --- a/civicrm/CRM/Core/ClassLoader.php +++ b/civicrm/CRM/Core/ClassLoader.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/CodeGen/Specification.php b/civicrm/CRM/Core/CodeGen/Specification.php index 63119cf49eb5eadfce80ed25c50b95116013af18..5d06369437a77e09d017cbd3e143d86673844206 100644 --- a/civicrm/CRM/Core/CodeGen/Specification.php +++ b/civicrm/CRM/Core/CodeGen/Specification.php @@ -16,19 +16,25 @@ class CRM_Core_CodeGen_Specification { * @param string $buildVersion * Which version of the schema to build. */ - public function parse($schemaPath, $buildVersion) { + public function parse($schemaPath, $buildVersion, $verbose = TRUE) { $this->buildVersion = $buildVersion; - echo "Parsing schema description " . $schemaPath . "\n"; + if ($verbose) { + echo "Parsing schema description " . $schemaPath . "\n"; + } $dbXML = CRM_Core_CodeGen_Util_Xml::parse($schemaPath); - echo "Extracting database information\n"; + if ($verbose) { + echo "Extracting database information\n"; + } $this->database = &$this->getDatabase($dbXML); $this->classNames = array(); # TODO: peel DAO-specific stuff out of getTables, and spec reading into its own class - echo "Extracting table information\n"; + if ($verbose) { + echo "Extracting table information\n"; + } $this->tables = $this->getTables($dbXML, $this->database); $this->resolveForeignKeys($this->tables, $this->classNames); @@ -231,8 +237,6 @@ class CRM_Core_CodeGen_Specification { $this->getPrimaryKey($tableXML->primaryKey, $fields, $table); } - // some kind of refresh? - CRM_Core_Config::singleton(FALSE); if ($this->value('index', $tableXML)) { $index = array(); foreach ($tableXML->index as $indexXML) { diff --git a/civicrm/CRM/Core/CodeGen/Version.php b/civicrm/CRM/Core/CodeGen/Version.php index eb7272eddef34d9f53fc4f1e6007a0f2370229c2..e98e38e888143e3d374df0c2bed91dbc1569fcae 100644 --- a/civicrm/CRM/Core/CodeGen/Version.php +++ b/civicrm/CRM/Core/CodeGen/Version.php @@ -7,8 +7,6 @@ class CRM_Core_CodeGen_Version extends CRM_Core_CodeGen_BaseTask { public function run() { echo "Generating civicrm-version file\n"; - file_put_contents($this->config->tplCodePath . "/CRM/common/version.tpl", $this->config->db_version); - $template = new CRM_Core_CodeGen_Util_Template('php'); $template->assign('db_version', $this->config->db_version); $template->assign('cms', ucwords($this->config->cms)); diff --git a/civicrm/CRM/Core/CommunityMessages.php b/civicrm/CRM/Core/CommunityMessages.php index c35ff7f1dbe139c3163c135f15e016f23c21cce7..87359a2afa76121da51df63624855771844c84a1 100644 --- a/civicrm/CRM/Core/CommunityMessages.php +++ b/civicrm/CRM/Core/CommunityMessages.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Component.php b/civicrm/CRM/Core/Component.php index 988a7059f1b3e75aa646182fa515d96f0662d3f0..2ca887901743d68afbf18d3b48c605254d326f02 100644 --- a/civicrm/CRM/Core/Component.php +++ b/civicrm/CRM/Core/Component.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * CiviCRM components * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -405,21 +405,6 @@ class CRM_Core_Component { return CRM_Core_DAO::$_nullObject; } - /** - * FIXME: This function does not appear to do anything. The is_array() check runs on a bunch of objects and (always?) returns false - */ - public static function &taskList() { - $info = self::_info(); - - $tasks = array(); - foreach ($info as $name => $value) { - if (is_array($info[$name]) && isset($info[$name]['task'])) { - $tasks += $info[$name]['task']; - } - } - return $tasks; - } - /** * Handle table dependencies of components. * diff --git a/civicrm/CRM/Core/Component/Info.php b/civicrm/CRM/Core/Component/Info.php index d8b448a05b80a97fecba05fa0a61eb5aaa8f2777..b978145e96c579e42e838aec9116daa60dec118d 100644 --- a/civicrm/CRM/Core/Component/Info.php +++ b/civicrm/CRM/Core/Component/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * for a component to introduce itself to the system. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Config.php b/civicrm/CRM/Core/Config.php index 2127dbfe1c23f5243c5bf40632cdbfeadebb72e1..940b8a272dd487e6abc3ec4ceef356dc4e47d17d 100644 --- a/civicrm/CRM/Core/Config.php +++ b/civicrm/CRM/Core/Config.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ * The default values in general, should reflect production values (minimizes chances of screwing up) * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Log.php'; diff --git a/civicrm/CRM/Core/Config/MagicMerge.php b/civicrm/CRM/Core/Config/MagicMerge.php index ee4531f7450c1cd866cfd3390a92c206f89dd9b1..6fb845ceb1830a89860943e2158914a1b89e6808 100644 --- a/civicrm/CRM/Core/Config/MagicMerge.php +++ b/civicrm/CRM/Core/Config/MagicMerge.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Config/Runtime.php b/civicrm/CRM/Core/Config/Runtime.php index 3282de2d81bdc794dd590fbd62c91f4f8135becf..88220f44889f57d28311623c36780bcd6013f02f 100644 --- a/civicrm/CRM/Core/Config/Runtime.php +++ b/civicrm/CRM/Core/Config/Runtime.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Controller.php b/civicrm/CRM/Core/Controller.php index 7e9d64f0ea290ba321d2c51c86db26294b7a7aa7..e5e7022e986cf0f01b2c2ab3dfb33c5f51e0374c 100644 --- a/civicrm/CRM/Core/Controller.php +++ b/civicrm/CRM/Core/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -38,7 +38,7 @@ * for other useful tips and suggestions * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'HTML/QuickForm/Controller.php'; diff --git a/civicrm/CRM/Core/Controller/Simple.php b/civicrm/CRM/Core/Controller/Simple.php index 28220778e95a37b83f20858b3c77790bfa1dc84b..59856f634208177153f22f5cd463c635f74fcd0a 100644 --- a/civicrm/CRM/Core/Controller/Simple.php +++ b/civicrm/CRM/Core/Controller/Simple.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ * process * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ class CRM_Core_Controller_Simple extends CRM_Core_Controller { diff --git a/civicrm/CRM/Core/DAO.php b/civicrm/CRM/Core/DAO.php index f821036b16ede366710ea4cb12a4222fffc9e101..565a84ad1a6bdcd222583e9acbf8a11a8612a03b 100644 --- a/civicrm/CRM/Core/DAO.php +++ b/civicrm/CRM/Core/DAO.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * All DAO classes should inherit from this class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ if (!defined('DB_DSN_MODE')) { @@ -1662,10 +1662,10 @@ FROM civicrm_domain * * @param $componentIDs * @param string $tableName - * + * @param string $idField * @return array */ - public static function &getContactIDsFromComponent(&$componentIDs, $tableName) { + public static function getContactIDsFromComponent($componentIDs, $tableName, $idField = 'id') { $contactIDs = array(); if (empty($componentIDs)) { @@ -1676,7 +1676,7 @@ FROM civicrm_domain $query = " SELECT contact_id FROM $tableName - WHERE id IN ( $IDs ) + WHERE $idField IN ( $IDs ) "; $dao = CRM_Core_DAO::executeQuery($query); diff --git a/civicrm/CRM/Core/DAO/ActionLog.php b/civicrm/CRM/Core/DAO/ActionLog.php index 9b3caefb5e2f4ffd2b0745e894c3eac8409a2376..671e1542f8c7572b4d3827a7759fb46657978093 100644 --- a/civicrm/CRM/Core/DAO/ActionLog.php +++ b/civicrm/CRM/Core/DAO/ActionLog.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/ActionLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/ActionMapping.php b/civicrm/CRM/Core/DAO/ActionMapping.php index c45168dca9a4683f64384e8522b38418b18873ca..f7fe97914b5636b2d0ca0d15bafca0d47e3c32f8 100644 --- a/civicrm/CRM/Core/DAO/ActionMapping.php +++ b/civicrm/CRM/Core/DAO/ActionMapping.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/ActionMapping.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/ActionSchedule.php b/civicrm/CRM/Core/DAO/ActionSchedule.php index e2a8df42484f39eb11eaa4eae31b18a5cb29914d..20d7fde9d3b6ec14baf395a8b8b04f42520cd919 100644 --- a/civicrm/CRM/Core/DAO/ActionSchedule.php +++ b/civicrm/CRM/Core/DAO/ActionSchedule.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/ActionSchedule.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Address.php b/civicrm/CRM/Core/DAO/Address.php index 462cb832a887b9e465b0aa155ded90a0a76b522b..de15258fbf23a758abd3620459d8febb68a2f14e 100644 --- a/civicrm/CRM/Core/DAO/Address.php +++ b/civicrm/CRM/Core/DAO/Address.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Address.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/AddressFormat.php b/civicrm/CRM/Core/DAO/AddressFormat.php index 3689bbca190dd4013ded9a72549f685a76f3b714..f77df5b91cfe44bbb6da31b72a5691a91658dedb 100644 --- a/civicrm/CRM/Core/DAO/AddressFormat.php +++ b/civicrm/CRM/Core/DAO/AddressFormat.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/AddressFormat.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/AllCoreTables.data.php b/civicrm/CRM/Core/DAO/AllCoreTables.data.php index 4ff6ec99853ce299c6eab757e52cd2aba25c6a3e..2b49bc6691a94d4f01b18b773bef3bb0702d6448 100644 --- a/civicrm/CRM/Core/DAO/AllCoreTables.data.php +++ b/civicrm/CRM/Core/DAO/AllCoreTables.data.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/DAO/AllCoreTables.php b/civicrm/CRM/Core/DAO/AllCoreTables.php index f70d2a5bedf091e67a22e2c05fba705d3af063f2..80a5747771c7b1fcc3acad480a54d7e10e551ecc 100644 --- a/civicrm/CRM/Core/DAO/AllCoreTables.php +++ b/civicrm/CRM/Core/DAO/AllCoreTables.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_DAO_AllCoreTables { diff --git a/civicrm/CRM/Core/DAO/Cache.php b/civicrm/CRM/Core/DAO/Cache.php index 2845d05342dcaf890198c7726326349c7574f8db..55d33594ff7af83e72244fec5f1874cd94f80ba5 100644 --- a/civicrm/CRM/Core/DAO/Cache.php +++ b/civicrm/CRM/Core/DAO/Cache.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Cache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Component.php b/civicrm/CRM/Core/DAO/Component.php index f5ac34bcc74c377ab3f32b9f98b3d3f2ca20e47b..a4823bf1180a0e499f213047ae0d42b27e06c8e6 100644 --- a/civicrm/CRM/Core/DAO/Component.php +++ b/civicrm/CRM/Core/DAO/Component.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Component.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Country.php b/civicrm/CRM/Core/DAO/Country.php index a837062a55df1666e79389753e5d7319f78829bd..5823935f092fc4e10379665c191116591803dd84 100644 --- a/civicrm/CRM/Core/DAO/Country.php +++ b/civicrm/CRM/Core/DAO/Country.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Country.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/County.php b/civicrm/CRM/Core/DAO/County.php index e1e686db8f27f9817a573c2d9874eca8c9ad0722..b431cf166ad628f431c25261c8d72b49e50abeda 100644 --- a/civicrm/CRM/Core/DAO/County.php +++ b/civicrm/CRM/Core/DAO/County.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/County.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/CustomField.php b/civicrm/CRM/Core/DAO/CustomField.php index 42f04e959fca5255f939669c642320d8a6b0cc9f..23114402d1ac68039999d758a95ebd9b2f4a5cfb 100644 --- a/civicrm/CRM/Core/DAO/CustomField.php +++ b/civicrm/CRM/Core/DAO/CustomField.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/CustomField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/CustomGroup.php b/civicrm/CRM/Core/DAO/CustomGroup.php index 671d4d635006fe808123a3440133892d785aa67e..839c61fb9cf003e2752401952d132537e445f4b5 100644 --- a/civicrm/CRM/Core/DAO/CustomGroup.php +++ b/civicrm/CRM/Core/DAO/CustomGroup.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/CustomGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Dashboard.php b/civicrm/CRM/Core/DAO/Dashboard.php index fe618862a4a421cff9b659162c97a34ba4f6ee96..3974eab19e40d3595328a08a19f7b5592b7f3c1e 100644 --- a/civicrm/CRM/Core/DAO/Dashboard.php +++ b/civicrm/CRM/Core/DAO/Dashboard.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Dashboard.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Discount.php b/civicrm/CRM/Core/DAO/Discount.php index b35720a11b44a21dc3d47b064cecbf118ce5dd55..c8f421f16d97b27b0d822e3eaa1fba45c77782fb 100644 --- a/civicrm/CRM/Core/DAO/Discount.php +++ b/civicrm/CRM/Core/DAO/Discount.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Discount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Domain.php b/civicrm/CRM/Core/DAO/Domain.php index a85742e93211653999466318f380ba563a7c5ea4..7047fa630e7d06d4f650aa3f2387b0e62d6b4776 100644 --- a/civicrm/CRM/Core/DAO/Domain.php +++ b/civicrm/CRM/Core/DAO/Domain.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Domain.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Email.php b/civicrm/CRM/Core/DAO/Email.php index 45d97d1b90f4835059a5f62fc3be527b64d6281c..7abc05f434d1eb33d0c22641a7f4f6e593a6b0d9 100644 --- a/civicrm/CRM/Core/DAO/Email.php +++ b/civicrm/CRM/Core/DAO/Email.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Email.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/EntityFile.php b/civicrm/CRM/Core/DAO/EntityFile.php index 5423d59386d45953ba6e6f94343c60e8aaccf4bd..818b94e3addd022ed3ac2da5f91bd704495debfb 100644 --- a/civicrm/CRM/Core/DAO/EntityFile.php +++ b/civicrm/CRM/Core/DAO/EntityFile.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/EntityFile.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/EntityTag.php b/civicrm/CRM/Core/DAO/EntityTag.php index 717ad3e63975aaa75b4504fb5b19b7ff26f128ce..43fe3f5b763d47fb8f7bfdf32f73012e805c8161 100644 --- a/civicrm/CRM/Core/DAO/EntityTag.php +++ b/civicrm/CRM/Core/DAO/EntityTag.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/EntityTag.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Extension.php b/civicrm/CRM/Core/DAO/Extension.php index e6c97ea258175e385f7a2c6cd5a9c8feab57b0ba..300ee740e24866e8ee7b4cecc2df5d59bacc2e6e 100644 --- a/civicrm/CRM/Core/DAO/Extension.php +++ b/civicrm/CRM/Core/DAO/Extension.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Extension.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/File.php b/civicrm/CRM/Core/DAO/File.php index b948be0b5878f7cc07149998b881aae50c14b000..fda3bc4e97775a6a787f8e648c31cf500abe0c01 100644 --- a/civicrm/CRM/Core/DAO/File.php +++ b/civicrm/CRM/Core/DAO/File.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/File.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/IM.php b/civicrm/CRM/Core/DAO/IM.php index d1e8289435dea4d9adebd1869a5e42f1947fa44f..dcdf67f176d88b5270a2f140e9dd4f99ffcc5ae1 100644 --- a/civicrm/CRM/Core/DAO/IM.php +++ b/civicrm/CRM/Core/DAO/IM.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/IM.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Job.php b/civicrm/CRM/Core/DAO/Job.php index 2a3abb54f68a9457bf3d5b71a9652781dc734959..464dc959cf6d35a2cd26999f4cc74eb5c044dca2 100644 --- a/civicrm/CRM/Core/DAO/Job.php +++ b/civicrm/CRM/Core/DAO/Job.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Job.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/JobLog.php b/civicrm/CRM/Core/DAO/JobLog.php index f441f19c34b31a8fdb0fb33b4fd9f31e2f999cb7..55ea6a015b1bbe5c3fdba2c29ec7582f9015a333 100644 --- a/civicrm/CRM/Core/DAO/JobLog.php +++ b/civicrm/CRM/Core/DAO/JobLog.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/JobLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/LocBlock.php b/civicrm/CRM/Core/DAO/LocBlock.php index e6edb4d73c3901fa5a4aa7d9faa53e4970c1c7e2..2953cc979780b6bfdfafe780201368316e8bc804 100644 --- a/civicrm/CRM/Core/DAO/LocBlock.php +++ b/civicrm/CRM/Core/DAO/LocBlock.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/LocBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/LocationType.php b/civicrm/CRM/Core/DAO/LocationType.php index fedb851cc357c79e21d93e89bb78fc966aef0ff5..f96aa3d60d07806603682a93f219bf6c85b5e042 100644 --- a/civicrm/CRM/Core/DAO/LocationType.php +++ b/civicrm/CRM/Core/DAO/LocationType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/LocationType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Log.php b/civicrm/CRM/Core/DAO/Log.php index 9c265e4747b4220136894080f9d2ffc53f9e28f7..65a1d5ea1984367ab48ad7e0f86e04a622f99194 100644 --- a/civicrm/CRM/Core/DAO/Log.php +++ b/civicrm/CRM/Core/DAO/Log.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Log.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/MailSettings.php b/civicrm/CRM/Core/DAO/MailSettings.php index 3b1964d6fe5a47d6b2bd4979436c71e1f6969092..5f5ba19f2094ef3d605651075cf6c116b968de88 100644 --- a/civicrm/CRM/Core/DAO/MailSettings.php +++ b/civicrm/CRM/Core/DAO/MailSettings.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/MailSettings.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Managed.php b/civicrm/CRM/Core/DAO/Managed.php index 3349673c529927dde38e76689a26856103102e20..a764c6a79ebffffc95a5d790aad1f6aebb8ad987 100644 --- a/civicrm/CRM/Core/DAO/Managed.php +++ b/civicrm/CRM/Core/DAO/Managed.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Managed.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Mapping.php b/civicrm/CRM/Core/DAO/Mapping.php index 80d1edda9aa46012a3083205a37d6763d44d739a..a3973f0678a7e468f09e0f52105e12610128a6dc 100644 --- a/civicrm/CRM/Core/DAO/Mapping.php +++ b/civicrm/CRM/Core/DAO/Mapping.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Mapping.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/MappingField.php b/civicrm/CRM/Core/DAO/MappingField.php index 6216bb9398d7f052a10a60f28dfab270c893fad1..8572fd5032c2c4f968a4fbed560a913516c72b9a 100644 --- a/civicrm/CRM/Core/DAO/MappingField.php +++ b/civicrm/CRM/Core/DAO/MappingField.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/MappingField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Menu.php b/civicrm/CRM/Core/DAO/Menu.php index ab2eb48eff7d24bc7328e9b93589e6f401fc5db6..f9f8087dfae95a83baf0c6eabab34f518ad84980 100644 --- a/civicrm/CRM/Core/DAO/Menu.php +++ b/civicrm/CRM/Core/DAO/Menu.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Menu.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/MessageTemplate.php b/civicrm/CRM/Core/DAO/MessageTemplate.php index af00820f91011180b6765a3d15befe4e7417835a..93d2b0ec7ec3c55dcc5cd78689b601a5f737b31c 100644 --- a/civicrm/CRM/Core/DAO/MessageTemplate.php +++ b/civicrm/CRM/Core/DAO/MessageTemplate.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/MessageTemplate.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Navigation.php b/civicrm/CRM/Core/DAO/Navigation.php index 8bc617a6248fd845cb9d47ca182b5e414ef7d6e8..491afef73f189905279b583c80eaea8b8a363e90 100644 --- a/civicrm/CRM/Core/DAO/Navigation.php +++ b/civicrm/CRM/Core/DAO/Navigation.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Navigation.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Note.php b/civicrm/CRM/Core/DAO/Note.php index 70ce136ff38b981d444c7e282b6cd4e39a3d0621..de88dcb39058694c45834475e248d40aa9ccb804 100644 --- a/civicrm/CRM/Core/DAO/Note.php +++ b/civicrm/CRM/Core/DAO/Note.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Note.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/OpenID.php b/civicrm/CRM/Core/DAO/OpenID.php index b995ace61d09b8f8ba32544c3218bf69a894dc1a..90569e58f06923a2295c4503919ce202bde6ed9e 100644 --- a/civicrm/CRM/Core/DAO/OpenID.php +++ b/civicrm/CRM/Core/DAO/OpenID.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/OpenID.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/OptionGroup.php b/civicrm/CRM/Core/DAO/OptionGroup.php index 6bc57c52852c970b51912f4e0d45def63830a0f5..aed6b23167534ad79eac467bc43f4df40c0ee90e 100644 --- a/civicrm/CRM/Core/DAO/OptionGroup.php +++ b/civicrm/CRM/Core/DAO/OptionGroup.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/OptionGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/OptionValue.php b/civicrm/CRM/Core/DAO/OptionValue.php index ea930c63e8844f8fb71db01e745f11c6ae258f77..1875c7521312e24b5942404f12628c997a3cbc9c 100644 --- a/civicrm/CRM/Core/DAO/OptionValue.php +++ b/civicrm/CRM/Core/DAO/OptionValue.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/OptionValue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Persistent.php b/civicrm/CRM/Core/DAO/Persistent.php index 1fcf034a2e142bcf2c75c51c11715f58e7172bb0..b6cdf47d6d46edada2895688dd04b8305ed4fa33 100644 --- a/civicrm/CRM/Core/DAO/Persistent.php +++ b/civicrm/CRM/Core/DAO/Persistent.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Persistent.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Phone.php b/civicrm/CRM/Core/DAO/Phone.php index 28ab1b174ccd31c327b0a8d1872a3d64b9d23846..013b416c940596d29224a4a594dd486785291805 100644 --- a/civicrm/CRM/Core/DAO/Phone.php +++ b/civicrm/CRM/Core/DAO/Phone.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Phone.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/PreferencesDate.php b/civicrm/CRM/Core/DAO/PreferencesDate.php index 8d395e56acc4dfdfd3d21ea05433b14ecc3f5452..a7bd2ad93c4962755c839d436f58e28aabc270e6 100644 --- a/civicrm/CRM/Core/DAO/PreferencesDate.php +++ b/civicrm/CRM/Core/DAO/PreferencesDate.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/PreferencesDate.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/PrevNextCache.php b/civicrm/CRM/Core/DAO/PrevNextCache.php index a68699984b41e5996492d9a3fbb40bd670c79eae..26a8d9196069417d0150eefa5860b143dc29f433 100644 --- a/civicrm/CRM/Core/DAO/PrevNextCache.php +++ b/civicrm/CRM/Core/DAO/PrevNextCache.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/PrevNextCache.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/PrintLabel.php b/civicrm/CRM/Core/DAO/PrintLabel.php index 49367c294735aab91d133102bff6435da1fe9ec7..6ac6ceb2871a4b483351806bff1ea9c469813f89 100644 --- a/civicrm/CRM/Core/DAO/PrintLabel.php +++ b/civicrm/CRM/Core/DAO/PrintLabel.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/PrintLabel.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/RecurringEntity.php b/civicrm/CRM/Core/DAO/RecurringEntity.php index 9452995999c8100fbbb587dc6e22e44023bd8cc7..bf3393c78d3ee8b86ed040cdd75b653c583ffadd 100644 --- a/civicrm/CRM/Core/DAO/RecurringEntity.php +++ b/civicrm/CRM/Core/DAO/RecurringEntity.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/RecurringEntity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Setting.php b/civicrm/CRM/Core/DAO/Setting.php index a16972205d7be52221a57d651c1d8441b43ec696..b7c425834472348f755a5816c70bf409d2de8958 100644 --- a/civicrm/CRM/Core/DAO/Setting.php +++ b/civicrm/CRM/Core/DAO/Setting.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Setting.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/StateProvince.php b/civicrm/CRM/Core/DAO/StateProvince.php index ed6482e652eb2216f7a71f14933dfc5d8b4c7543..eecaa677ca018a33e1eb0c44634e490502b186a9 100644 --- a/civicrm/CRM/Core/DAO/StateProvince.php +++ b/civicrm/CRM/Core/DAO/StateProvince.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/StateProvince.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/StatusPreference.php b/civicrm/CRM/Core/DAO/StatusPreference.php index 5dc85d39c2c7afca9ec20e65eeca42b1a499227e..c7a8694361fa3774b585e4c5c5a447300df6705d 100644 --- a/civicrm/CRM/Core/DAO/StatusPreference.php +++ b/civicrm/CRM/Core/DAO/StatusPreference.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/StatusPreference.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/SystemLog.php b/civicrm/CRM/Core/DAO/SystemLog.php index 32df379c04b9a9882bdad2d9a559a2e84d68cf6e..6667427e449a64e952a016cbfdae820e45a7eb5f 100644 --- a/civicrm/CRM/Core/DAO/SystemLog.php +++ b/civicrm/CRM/Core/DAO/SystemLog.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/SystemLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Tag.php b/civicrm/CRM/Core/DAO/Tag.php index 1ccdcc9cc2948f9079dc4d7d2b311440a4208f47..df103628dad0611ecbc682594389cd188d960440 100644 --- a/civicrm/CRM/Core/DAO/Tag.php +++ b/civicrm/CRM/Core/DAO/Tag.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Tag.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Timezone.php b/civicrm/CRM/Core/DAO/Timezone.php index 820a77146a2fe4171208345fbe3d98974627ddbe..f3e73a11d78aea15a064019b0f55f3b5ed09b147 100644 --- a/civicrm/CRM/Core/DAO/Timezone.php +++ b/civicrm/CRM/Core/DAO/Timezone.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Timezone.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/UFField.php b/civicrm/CRM/Core/DAO/UFField.php index c59199760e64e1cb282cf8e387d112d24580641e..bd5a61dab55b74c64325cd439f7650c9ba4b81cc 100644 --- a/civicrm/CRM/Core/DAO/UFField.php +++ b/civicrm/CRM/Core/DAO/UFField.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/UFField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/UFGroup.php b/civicrm/CRM/Core/DAO/UFGroup.php index b596ab0de4d2eca6bc30845e23b9f7c24c63e3cb..c0b5d43b477e224aa73e76e9d0eb439f28e0fca0 100644 --- a/civicrm/CRM/Core/DAO/UFGroup.php +++ b/civicrm/CRM/Core/DAO/UFGroup.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/UFGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/UFJoin.php b/civicrm/CRM/Core/DAO/UFJoin.php index 59c2a7d1b6c4dc294bb3af9685e229b1fb8e01c9..52c86d7623ff7f393a97befcb9710bb7737a1609 100644 --- a/civicrm/CRM/Core/DAO/UFJoin.php +++ b/civicrm/CRM/Core/DAO/UFJoin.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/UFJoin.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/UFMatch.php b/civicrm/CRM/Core/DAO/UFMatch.php index d3e8ddc839b77ca57081995aedd7dca12bec14f3..e5ca6b4db4b1410f7b8e99ce464db4d6a32925e0 100644 --- a/civicrm/CRM/Core/DAO/UFMatch.php +++ b/civicrm/CRM/Core/DAO/UFMatch.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/UFMatch.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Website.php b/civicrm/CRM/Core/DAO/Website.php index a6df26b94cf2fc7a72f7d5892dd9a27eaac646a3..633703e323beea09240e46a30dd11750198e1478 100644 --- a/civicrm/CRM/Core/DAO/Website.php +++ b/civicrm/CRM/Core/DAO/Website.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Website.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/WordReplacement.php b/civicrm/CRM/Core/DAO/WordReplacement.php index d3a2910bb4a8d1f0c4f0e76fddd09e514a849d77..de23dbb0bcf0dfdfcedcd9ed0d01a41fecb8af25 100644 --- a/civicrm/CRM/Core/DAO/WordReplacement.php +++ b/civicrm/CRM/Core/DAO/WordReplacement.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/WordReplacement.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/Worldregion.php b/civicrm/CRM/Core/DAO/Worldregion.php index bd1ab119140cda9d78e6e66a5d7ea4070fbfacbd..7f6f1eeacd82f0a87746641a4b8840caee5aa276 100644 --- a/civicrm/CRM/Core/DAO/Worldregion.php +++ b/civicrm/CRM/Core/DAO/Worldregion.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Core/Worldregion.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/DAO/permissions.php b/civicrm/CRM/Core/DAO/permissions.php index e74ff526e568e86a67febda28bd807635f9685b2..2ab41a7d2333a1355c4e7200194f7e164587ec1f 100644 --- a/civicrm/CRM/Core/DAO/permissions.php +++ b/civicrm/CRM/Core/DAO/permissions.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Error.php b/civicrm/CRM/Core/Error.php index 88bb83505ddc450217d258cd1332297e02c7a94d..a32df209640f523f957c6236db59c63459caf9db 100644 --- a/civicrm/CRM/Core/Error.php +++ b/civicrm/CRM/Core/Error.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * PEAR_ErrorStack and use that framework * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'PEAR/ErrorStack.php'; diff --git a/civicrm/CRM/Core/Error/Log.php b/civicrm/CRM/Core/Error/Log.php index a9803952079b266a48fff6a109ecf930637aeba9..17d7043175fd572e9f79c19a0477b56d289e7de4 100644 --- a/civicrm/CRM/Core/Error/Log.php +++ b/civicrm/CRM/Core/Error/Log.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Exception.php b/civicrm/CRM/Core/Exception.php index f1cd1a66d83d65639af9a6f71af6fbfdcedb14e4..f538f9aa3a9700dc7a94c36bcfbdbb0f6e31c8fc 100644 --- a/civicrm/CRM/Core/Exception.php +++ b/civicrm/CRM/Core/Exception.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Form.php b/civicrm/CRM/Core/Form.php index 6303dc5e3aebe9bb98313526cf1ce4c4b3400c56..3d52eb9b7b25e78dcf2a8ec71eb95bc019d0ba67 100644 --- a/civicrm/CRM/Core/Form.php +++ b/civicrm/CRM/Core/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * machine. Each form can also operate in various modes * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'HTML/QuickForm/Page.php'; @@ -1804,6 +1804,10 @@ class CRM_Core_Form extends HTML_QuickForm_Page { $setDefaultCurrency = TRUE ) { $currencies = CRM_Core_OptionGroup::values('currencies_enabled'); + if (!array_key_exists($defaultCurrency, $currencies)) { + Civi::log()->warning('addCurrency: Currency ' . $defaultCurrency . ' is disabled but still in use!'); + $currencies[$defaultCurrency] = $defaultCurrency; + } $options = array('class' => 'crm-select2 eight'); if (!$required) { $currencies = array('' => '') + $currencies; diff --git a/civicrm/CRM/Core/Form/Date.php b/civicrm/CRM/Core/Form/Date.php index e5f22414a77e3ccec12ceafd99bbce7d05662b8f..7e292f8b5aa20a483c5c333c48b6de0d7bcf7926 100644 --- a/civicrm/CRM/Core/Form/Date.php +++ b/civicrm/CRM/Core/Form/Date.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_Form_Date { diff --git a/civicrm/CRM/Core/Form/RecurringEntity.php b/civicrm/CRM/Core/Form/RecurringEntity.php index d720636a13e9814b3de8c16c2b5bc2a87d1fec75..77d5d62c04a2f2eb073d5853a05120952b52b280 100644 --- a/civicrm/CRM/Core/Form/RecurringEntity.php +++ b/civicrm/CRM/Core/Form/RecurringEntity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/Form/Renderer.php b/civicrm/CRM/Core/Form/Renderer.php index d1be3d7bcca3050a5386eac1160d05dbfb552178..293935923d07fe9f5f3e115c25e83eaea25ebeaf 100644 --- a/civicrm/CRM/Core/Form/Renderer.php +++ b/civicrm/CRM/Core/Form/Renderer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Form/Search.php b/civicrm/CRM/Core/Form/Search.php index 3b3dcda18b6f8d32856cada1508c8b78d3796317..3fe18e72722521f1ed5c07bd1d7bf8c2d96c4c94 100644 --- a/civicrm/CRM/Core/Form/Search.php +++ b/civicrm/CRM/Core/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Form/ShortCode.php b/civicrm/CRM/Core/Form/ShortCode.php index 6bed85cfdcc42884eca05435bc4796755de468b7..cab80329167d51c2d813cb676a5bebf5bef94110 100644 --- a/civicrm/CRM/Core/Form/ShortCode.php +++ b/civicrm/CRM/Core/Form/ShortCode.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/Form/Tag.php b/civicrm/CRM/Core/Form/Tag.php index 9f5aab67ee7dcdf9cf0631cdaa559d70a46be8b8..386ecab64e601a6a16b8d2fddf0057ba04d87c21 100644 --- a/civicrm/CRM/Core/Form/Tag.php +++ b/civicrm/CRM/Core/Form/Tag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/Form/Task.php b/civicrm/CRM/Core/Form/Task.php new file mode 100644 index 0000000000000000000000000000000000000000..46094fe3880f34c49191ca243c3f4200561d54b0 --- /dev/null +++ b/civicrm/CRM/Core/Form/Task.php @@ -0,0 +1,180 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2018 + */ + +/** + * This is a shared parent class for form task actions. + */ +abstract class CRM_Core_Form_Task extends CRM_Core_Form { + + /** + * The task being performed + * + * @var int + */ + protected $_task; + + /** + * The additional clause that we restrict the search with + * + * @var string + */ + protected $_componentClause = NULL; + + /** + * The array that holds all the component ids + * + * @var array + */ + protected $_componentIds; + + /** + * The array that holds all the case ids + * + * @var array + */ + public $_entityIds; + + /** + * The array that holds all the contact ids + * + * @var array + */ + public $_contactIds; + + // Must be set to entity table name (eg. civicrm_participant) by child class + static $tableName = NULL; + // Must be set to entity shortname (eg. event) + static $entityShortname = NULL; + + /** + * Build all the data structures needed to build the form. + */ + public function preProcess() { + $this->_entityIds = array(); + + $values = $this->controller->exportValues($this->get('searchFormName')); + + $this->_task = $values['task']; + $className = 'CRM_' . ucfirst($this::$entityShortname) . '_Task'; + $entityTasks = $className::tasks(); + $this->assign('taskName', $entityTasks[$this->_task]); + + $ids = array(); + if ($values['radio_ts'] == 'ts_sel') { + foreach ($values as $name => $value) { + if (substr($name, 0, CRM_Core_Form::CB_PREFIX_LEN) == CRM_Core_Form::CB_PREFIX) { + $ids[] = substr($name, CRM_Core_Form::CB_PREFIX_LEN); + } + } + } + else { + $queryParams = $this->get('queryParams'); + $sortOrder = NULL; + if ($this->get(CRM_Utils_Sort::SORT_ORDER)) { + $sortOrder = $this->get(CRM_Utils_Sort::SORT_ORDER); + } + + $query = new CRM_Contact_BAO_Query($queryParams, NULL, NULL, FALSE, FALSE, + CRM_Contact_BAO_Query::MODE_CASE + ); + $query->_distinctComponentClause = " ( " . $this::$tableName . ".id )"; + $query->_groupByComponentClause = " GROUP BY " . $this::$tableName . ".id "; + $result = $query->searchQuery(0, 0, $sortOrder); + $selector = $this::$entityShortname . '_id'; + while ($result->fetch()) { + $ids[] = $result->$selector; + } + } + + if (!empty($ids)) { + $this->_componentClause = ' ' . $this::$tableName . '.id IN ( ' . implode(',', $ids) . ' ) '; + $this->assign('totalSelected' . ucfirst($this::$entityShortname) . 's', count($ids)); + } + + $this->_entityIds = $this->_componentIds = $ids; + + //set the context for redirection for any task actions + $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); + $urlParams = 'force=1'; + if (CRM_Utils_Rule::qfKey($qfKey)) { + $urlParams .= "&qfKey=$qfKey"; + } + + $session = CRM_Core_Session::singleton(); + $searchFormName = strtolower($this->get('searchFormName')); + if ($searchFormName == 'search') { + $session->replaceUserContext(CRM_Utils_System::url('civicrm/' . $this::$entityShortname . '/search', $urlParams)); + } + else { + $session->replaceUserContext(CRM_Utils_System::url("civicrm/contact/search/$searchFormName", + $urlParams + )); + } + } + + /** + * Given the signer id, compute the contact id + * since its used for things like send email + */ + public function setContactIDs() { + $this->_contactIds = &CRM_Core_DAO::getContactIDsFromComponent($this->_entityIds, + $this::$tableName + ); + } + + /** + * Simple shell that derived classes can call to add buttons to + * the form with a customized title for the main Submit + * + * @param string $title + * Title of the main button. + * @param string $nextType + * Button type for the form after processing. + * @param string $backType + * @param bool $submitOnce + */ + public function addDefaultButtons($title, $nextType = 'next', $backType = 'back', $submitOnce = FALSE) { + $this->addButtons(array( + array( + 'type' => $nextType, + 'name' => $title, + 'isDefault' => TRUE, + ), + array( + 'type' => $backType, + 'name' => ts('Cancel'), + ), + ) + ); + } + +} diff --git a/civicrm/CRM/Core/Form/Task/Batch.php b/civicrm/CRM/Core/Form/Task/Batch.php new file mode 100644 index 0000000000000000000000000000000000000000..034439838b921ff3dfed97aec822c4105c44754b --- /dev/null +++ b/civicrm/CRM/Core/Form/Task/Batch.php @@ -0,0 +1,212 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2018 + */ + +/** + * This class provides the functionality for batch profile update + */ +class CRM_Core_Form_Task_Batch extends CRM_Core_Form_Task { + + /** + * The title of the group. + * + * @var string + */ + protected $_title; + + /** + * Maximum profile fields that will be displayed. + */ + protected $_maxFields = 9; + + /** + * @var array Fields that belong to this UF Group + */ + protected $_fields; + + // Must be set to entity table name (eg. civicrm_participant) by child class + static $tableName = NULL; + // Must be set to entity shortname (eg. event) + static $entityShortname = NULL; + + /** + * Build all the data structures needed to build the form. + * + * @return void + */ + public function preProcess() { + // initialize the task and row fields + parent::preProcess(); + + // get the contact read only fields to display. + $readOnlyFields = array_merge(array('sort_name' => ts('Name')), + CRM_Core_BAO_Setting::valueOptions(CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME, + 'contact_autocomplete_options', + TRUE, NULL, FALSE, 'name', TRUE + ) + ); + // get the read only field data. + $returnProperties = array_fill_keys(array_keys($readOnlyFields), 1); + $contactDetails = CRM_Contact_BAO_Contact_Utils::contactDetails($this->_entityIds, + 'Civi' . ucfirst($this::$entityShortname), $returnProperties + ); + + $this->assign('contactDetails', $contactDetails); + $this->assign('readOnlyFields', $readOnlyFields); + } + + /** + * Build the form object. + * + * + * @return void + */ + public function buildQuickForm() { + $ufGroupId = $this->get('ufGroupId'); + + if (!$ufGroupId) { + throw new InvalidArgumentException('ufGroupId is missing'); + } + $this->_title = ts("Update multiple %1s", array(1 => $this::$entityShortname)) . ' - ' . CRM_Core_BAO_UFGroup::getTitle($ufGroupId); + CRM_Utils_System::setTitle($this->_title); + + $this->addDefaultButtons(ts('Save')); + $this->_fields = CRM_Core_BAO_UFGroup::getFields($ufGroupId, FALSE, CRM_Core_Action::VIEW); + + // remove file type field and then limit fields + $suppressFields = FALSE; + $removeHtmlTypes = array('File'); + foreach ($this->_fields as $name => $field) { + if ($cfID = CRM_Core_BAO_CustomField::getKeyID($name) && + in_array($this->_fields[$name]['html_type'], $removeHtmlTypes) + ) { + $suppressFields = TRUE; + unset($this->_fields[$name]); + } + + //fix to reduce size as we are using this field in grid + if (is_array($field['attributes']) && !empty($this->_fields[$name]['attributes']['size']) && $this->_fields[$name]['attributes']['size'] > 19) { + //shrink class to "form-text-medium" + $this->_fields[$name]['attributes']['size'] = 19; + } + } + + $this->_fields = array_slice($this->_fields, 0, $this->_maxFields); + + $this->addButtons(array( + array( + 'type' => 'submit', + 'name' => ts('Update ' . ucfirst($this::$entityShortname) . 's)'), + 'isDefault' => TRUE, + ), + array( + 'type' => 'cancel', + 'name' => ts('Cancel'), + ), + )); + + $this->assign('profileTitle', $this->_title); + $this->assign('componentIds', $this->_entityIds); + + $customFields = CRM_Core_BAO_CustomField::getFields(ucfirst($this::$entityShortname)); + foreach ($this->_entityIds as $entityId) { + $typeId = CRM_Core_DAO::getFieldValue('CRM_' . ucfirst($this::$entityShortname) . '_DAO_' . ucfirst($this::$entityShortname), $entityId, $this::$entityShortname . '_type_id'); + foreach ($this->_fields as $name => $field) { + if ($customFieldID = CRM_Core_BAO_CustomField::getKeyID($name)) { + $customValue = CRM_Utils_Array::value($customFieldID, $customFields); + $entityColumnValue = array(); + if (!empty($customValue['extends_entity_column_value'])) { + $entityColumnValue = explode(CRM_Core_DAO::VALUE_SEPARATOR, + $customValue['extends_entity_column_value'] + ); + } + if ((CRM_Utils_Array::value($typeId, $entityColumnValue)) || + CRM_Utils_System::isNull($entityColumnValue[$typeId]) + ) { + CRM_Core_BAO_UFGroup::buildProfile($this, $field, NULL, $entityId); + } + } + else { + // handle non custom fields + CRM_Core_BAO_UFGroup::buildProfile($this, $field, NULL, $entityId); + } + } + } + + $this->assign('fields', $this->_fields); + + // don't set the status message when form is submitted. + $buttonName = $this->controller->getButtonName('submit'); + if ($suppressFields && $buttonName != '_qf_Batch_next') { + CRM_Core_Session::setStatus(ts("File type field(s) in the selected profile are not supported for Update multiple %1s", array(1 => $this::$entityShortname)), ts('Unsupported Field Type'), 'error'); + } + + $this->addDefaultButtons(ts('Update ' . ucfirst($this::$entityShortname) . 's')); + + $taskComponent['lc'] = $this::$entityShortname; + $taskComponent['ucfirst'] = ucfirst($this::$entityShortname); + $this->assign('taskComponent', $taskComponent); + } + + /** + * Set default values for the form. + * + * @return array $defaults + */ + public function setDefaultValues() { + if (empty($this->_fields)) { + return array(); + } + + $defaults = array(); + foreach ($this->_entityIds as $entityId) { + CRM_Core_BAO_UFGroup::setProfileDefaults(NULL, $this->_fields, $defaults, FALSE, $entityId, ucfirst($this::$entityShortname)); + } + + return $defaults; + } + + /** + * Process the form after the input has been submitted and validated. + * Normally the child class will override this + * + * @return void + */ + public function postProcess() { + $params = $this->exportValues(); + + if (!isset($params['field'])) { + CRM_Core_Session::setStatus(ts("No updates have been saved."), ts('Not Saved'), 'alert'); + return; + } + } + +} diff --git a/civicrm/CRM/Core/Form/Task/PickProfile.php b/civicrm/CRM/Core/Form/Task/PickProfile.php new file mode 100644 index 0000000000000000000000000000000000000000..a749fd4a10ee0d4f8b643adcf7cacc55d7ac4c8d --- /dev/null +++ b/civicrm/CRM/Core/Form/Task/PickProfile.php @@ -0,0 +1,170 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2018 + */ + +/** + * This class provides the functionality for batch profile update for case + */ +abstract class CRM_Core_Form_Task_PickProfile extends CRM_Core_Form_Task { + + /** + * The title of the group + * + * @var string + */ + protected $_title; + + /** + * Maximum entities that should be allowed to update + * + * @var int + */ + protected $_maxEntities = 100; + + /** + * Variable to store redirect path + * + * @var string + */ + protected $_userContext; + + /** + * Must be set to entity table name (eg. civicrm_participant) by child class + * + * @var string + */ + static $tableName = NULL; + + /** + * Must be set to entity shortname (eg. event) + * + * @var string + */ + static $entityShortname = NULL; + + /** + * Build all the data structures needed to build the form. + * + * @return void + */ + public function preProcess() { + // initialize the task and row fields + parent::preProcess(); + $session = CRM_Core_Session::singleton(); + $this->_userContext = $session->readUserContext(); + + CRM_Utils_System::setTitle(ts('Update multiple ' . $this::$entityShortname . 's')); + + // validations + if (count($this->_entityIds) > $this->_maxEntities) { + CRM_Core_Session::setStatus(ts("The maximum number of %3 you can select for Update multiple %3 is %1. You have selected %2. Please select fewer %3 from your search results and try again.", array( + 1 => $this->_maxEntities, + 2 => count($this->_entityIds), + 3 => $this::$entityShortname . 's', + )), ts('Update multiple records error'), 'error'); + CRM_Utils_System::redirect($this->_userContext); + } + } + + /** + * Build the form object. + * + * @return void + */ + public function buildQuickForm() { + $types = array(ucfirst($this::$entityShortname)); + $profiles = CRM_Core_BAO_UFGroup::getProfiles($types, TRUE); + + if (empty($profiles)) { + CRM_Core_Session::setStatus( + ts("You will need to create a Profile containing the %1 fields you want to edit before you can use Update multiple %2. Navigate to Administer > Customize Data and Screens > Profiles to configure a Profile. Consult the online Administrator documentation for more information.", + array( + 1 => $types[0], + 2 => $this::$entityShortname . 's', + )), + ts('Update multiple records error'), + 'error' + ); + CRM_Utils_System::redirect($this->_userContext); + } + + $this->add('select', + 'uf_group_id', + ts('Select Profile'), + array( + '' => ts('- select profile -'), + ) + $profiles, + TRUE + ); + $this->addDefaultButtons(ts('Continue')); + + $taskComponent['lc'] = $this::$entityShortname; + $taskComponent['ucfirst'] = ucfirst($this::$entityShortname); + $this->assign('taskComponent', $taskComponent); + } + + /** + * Add local and global form rules. + * + * @return void + */ + public function addRules() { + $this->addFormRule(array('CRM_' . ucfirst($this::$entityShortname) . '_Form_Task_PickProfile', 'formRule')); + } + + /** + * Global validation rules for the form. + * + * @param array $fields + * Posted values of the form. + * + * @return bool|array + * true if no errors, else array of errors + */ + public static function formRule($fields) { + return TRUE; + } + + /** + * Process the form after the input has been submitted and validated. + * + * @return void + */ + public function postProcess() { + $params = $this->exportValues(); + + $this->set('ufGroupId', $params['uf_group_id']); + + // also reset the batch page so it gets new values from the db + $this->controller->resetPage('Batch'); + } + +} diff --git a/civicrm/CRM/Core/HTMLInputCoder.php b/civicrm/CRM/Core/HTMLInputCoder.php index 15aaa3575f6df7550ab00b1ecb8585fb5390e6b2..695a9969733237dff274db57607f3af8e0ac5b33 100644 --- a/civicrm/CRM/Core/HTMLInputCoder.php +++ b/civicrm/CRM/Core/HTMLInputCoder.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/I18n.php b/civicrm/CRM/Core/I18n.php index 9e20536dfe3854345203734dca639356d89a4872..e54ee44e8186dedafc8291e00633658d435b417d 100644 --- a/civicrm/CRM/Core/I18n.php +++ b/civicrm/CRM/Core/I18n.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_I18n { @@ -39,6 +39,34 @@ class CRM_Core_I18n { */ const NONE = 'none', AUTO = 'auto'; + /** + * @var callable|NULL + * A callback function which handles SQL string encoding. + * Set NULL to use the default, CRM_Core_DAO::escapeString(). + * This is used by `ts(..., [escape=>sql])`. + * + * This option is not intended for general consumption. It is only intended + * for certain pre-boot/pre-install contexts. + * + * You might ask, "Why on Earth does string-translation have an opinion on + * SQL escaping?" Good question! + */ + public static $SQL_ESCAPER = NULL; + + /** + * Encode a string for use in SQL. + * + * @param string $text + * @return string + */ + protected static function escapeSql($text) { + if (self::$SQL_ESCAPER == NULL) { + return CRM_Core_DAO::escapeString($text); + } + else { + return call_user_func(self::$SQL_ESCAPER, $text); + } + } /** * A PHP-gettext instance for string translation; @@ -289,7 +317,7 @@ class CRM_Core_I18n { // in such cases we return early, only doing SQL/JS escaping if (isset($params['skip']) and $params['skip']) { if (isset($escape) and ($escape == 'sql')) { - $text = CRM_Core_DAO::escapeString($text); + $text = self::escapeSql($text); } if (isset($escape) and ($escape == 'js')) { $text = addcslashes($text, "'"); @@ -351,7 +379,7 @@ class CRM_Core_I18n { // escape SQL if we were asked for it if (isset($escape) and ($escape == 'sql')) { - $text = CRM_Core_DAO::escapeString($text); + $text = self::escapeSql($text); } // escape for JavaScript (if requested) @@ -709,8 +737,8 @@ class CRM_Core_I18n { * the translated string */ function ts($text, $params = array()) { - static $config = NULL; - static $locale = NULL; + static $areSettingsAvailable = FALSE; + static $lastLocale = NULL; static $i18n = NULL; static $function = NULL; @@ -718,17 +746,21 @@ function ts($text, $params = array()) { return ''; } - if (!$config) { - $config = CRM_Core_Config::singleton(); + // When the settings become available, lookup customTranslateFunction. + if (!$areSettingsAvailable) { + $areSettingsAvailable = (bool) \Civi\Core\Container::getBootService('settings_manager'); + if ($areSettingsAvailable) { + $config = CRM_Core_Config::singleton(); + if (isset($config->customTranslateFunction) and function_exists($config->customTranslateFunction)) { + $function = $config->customTranslateFunction; + } + } } - $tsLocale = CRM_Core_I18n::getLocale(); - if (!$i18n or $locale != $tsLocale) { + $activeLocale = CRM_Core_I18n::getLocale(); + if (!$i18n or $lastLocale != $activeLocale) { $i18n = CRM_Core_I18n::singleton(); - $locale = $tsLocale; - if (isset($config->customTranslateFunction) and function_exists($config->customTranslateFunction)) { - $function = $config->customTranslateFunction; - } + $lastLocale = $activeLocale; } if ($function) { diff --git a/civicrm/CRM/Core/I18n/Form.php b/civicrm/CRM/Core/I18n/Form.php index 98391172fd2d4c97dc1a10a9d11333f69300219e..5fe809fdc0cf72491a266d845a6241a5c2927b53 100644 --- a/civicrm/CRM/Core/I18n/Form.php +++ b/civicrm/CRM/Core/I18n/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/NativeGettext.php b/civicrm/CRM/Core/I18n/NativeGettext.php index 84acac2bfc376209f84bcd09d55192c7e1b2c4ea..16e80fd223b299f07f2ea9d0d0ed8ac3e353aff6 100644 --- a/civicrm/CRM/Core/I18n/NativeGettext.php +++ b/civicrm/CRM/Core/I18n/NativeGettext.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * * Convenience class for PHP-Gettext compatibility. diff --git a/civicrm/CRM/Core/I18n/PseudoConstant.php b/civicrm/CRM/Core/I18n/PseudoConstant.php index dfc44cb445cd4c1146915d5274d1b5f25878f97f..699f945b29de2d98cf09bfefc45656bda0318bb7 100644 --- a/civicrm/CRM/Core/I18n/PseudoConstant.php +++ b/civicrm/CRM/Core/I18n/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/Schema.php b/civicrm/CRM/Core/I18n/Schema.php index b795deacabd08f531e1caed4cd459381370951d9..d1117d080fde28f39bcaa6fdf5343579c5af6424 100644 --- a/civicrm/CRM/Core/I18n/Schema.php +++ b/civicrm/CRM/Core/I18n/Schema.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_I18n_Schema { diff --git a/civicrm/CRM/Core/I18n/SchemaStructure.php b/civicrm/CRM/Core/I18n/SchemaStructure.php old mode 100644 new mode 100755 index 85f8baf93454239ffe060661cb59796fecf9fd65..a5cd8d6e63a1fecf4815b2f440d85976101dbf8f --- a/civicrm/CRM/Core/I18n/SchemaStructure.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from schema_structure.tpl * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_2_2_0.php b/civicrm/CRM/Core/I18n/SchemaStructure_2_2_0.php index 99b88c54e631b0145b4fb5b82cce2cc045b7d1a1..9652264a83859193b7f0b07cebc856f2bdc43f9b 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_2_2_0.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_2_2_0.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_0_alpha1.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_0_alpha1.php index 45e69cbe5727ec14183473eef7972f495fc9a320..4a8a6485ceed112100b89f72139165aaa27765e7 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_0_alpha1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_0_alpha1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_0_beta1.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_0_beta1.php index 0bfc6f557a4de0f560c09122bfaa1a19eec67201..7a3d298a30a2b6588576e88a5e01ee4472493411 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_0_beta1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_0_beta1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_0_beta4.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_0_beta4.php index e82dc11c83356e96c4b1cdeeb7816174298d72c8..458d02946108f02f6e60681ce92afad8e3c2c507 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_0_beta4.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_0_beta4.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_1_alpha1.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_1_alpha1.php index b3b8e66a8e5f14a2e2153c20f5f13691df8b72b3..95582b8a1e1850c6eb6d82c34fa5027a26a19e55 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_1_alpha1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_1_alpha1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_1_beta2.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_1_beta2.php index 6c696b2da95eadab008f4072458e567b5fea395a..1d3acb2aa2e0c3ba8a7333fe85b7408623ea3615 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_1_beta2.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_1_beta2.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_2_beta4.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_2_beta4.php index 593d38753781ea7e6756d2985e6ea4cec39bb2b9..16ee40660c73374b6657ddcf7bf6ecc1d7678a2f 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_2_beta4.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_2_beta4.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_3_beta1.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_3_beta1.php index 15c0cb0899574a23621ebb8b8aa95dd40d0fe80a..5eced3dd9d8baee77d07f90d266556b7c48f0a47 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_3_beta1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_3_beta1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_4_0.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_4_0.php index dfe93e2484ed6e5ce66c94eef7e3d594431f68bc..7a601c0d62cfff96bee29baee529dafce6d3c0ef 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_4_0.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_4_0.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_4_beta2.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_4_beta2.php index 749a474d1b4d9ee1bfcaf6a5448e520ac7a4be59..1ae3955613a3d3906d14ed148e4fe76fe1140e4a 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_4_beta2.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_4_beta2.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_3_4_beta3.php b/civicrm/CRM/Core/I18n/SchemaStructure_3_4_beta3.php index a8e92ac2b52118c6a33235db364932da0166cd72..289ddcc721eabd34402db7219340b97966f25208 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_3_4_beta3.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_3_4_beta3.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_4_1_0.php b/civicrm/CRM/Core/I18n/SchemaStructure_4_1_0.php index 8df3b758776d75b1f93bb922e4575d8c62982633..dfc317228008fef3a622f3cdfc96a4155027af77 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_4_1_0.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_4_1_0.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_4_1_alpha1.php b/civicrm/CRM/Core/I18n/SchemaStructure_4_1_alpha1.php index 91cc13cb011565833ec0e476fd2253ddca266ce3..1545d5de32748ff32f3c25ec8753ec35eb5b77c4 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_4_1_alpha1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_4_1_alpha1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_4_2_alpha1.php b/civicrm/CRM/Core/I18n/SchemaStructure_4_2_alpha1.php index 4f337d98f54722476834629e8cc3b2efa9698c8b..194c73e76ea4326a473fc5197e3e4122a02d906b 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_4_2_alpha1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_4_2_alpha1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_4_3_1.php b/civicrm/CRM/Core/I18n/SchemaStructure_4_3_1.php index 75fa35014c95a7acbf49b137fec0e75427002297..dc519f0ea95570a7362ac4b7b1871b6e8217eb8f 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_4_3_1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_4_3_1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_4_5_alpha1.php b/civicrm/CRM/Core/I18n/SchemaStructure_4_5_alpha1.php index 75975af423b6fa8919f67f2faa609819c1171f7f..ed7ca438e5e3b8bd706d97ca07fa24a23573bcf7 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_4_5_alpha1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_4_5_alpha1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from schema_structure.tpl * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_4_5_beta2.php b/civicrm/CRM/Core/I18n/SchemaStructure_4_5_beta2.php index 67c9edaa6315e787cd80d72514b1425f3709339f..47981b496f81f8d4e26225485d2e20e74e886894 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_4_5_beta2.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_4_5_beta2.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from schema_structure.tpl * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/I18n/SchemaStructure_4_7_alpha1.php b/civicrm/CRM/Core/I18n/SchemaStructure_4_7_alpha1.php index 4115169ea74b5995607be971dc381ef75b2cd0e8..a10b96db02d3b9af538bef6f3e57c9aaca751d00 100644 --- a/civicrm/CRM/Core/I18n/SchemaStructure_4_7_alpha1.php +++ b/civicrm/CRM/Core/I18n/SchemaStructure_4_7_alpha1.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from schema_structure.tpl * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Core/IDS.php b/civicrm/CRM/Core/IDS.php index 606b14bee04a5fe377db47963712818f57217372..361682a6f7da43259d5ff4dc9f20463c0aae4d01 100644 --- a/civicrm/CRM/Core/IDS.php +++ b/civicrm/CRM/Core/IDS.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_IDS { diff --git a/civicrm/CRM/Core/InnoDBIndexer.php b/civicrm/CRM/Core/InnoDBIndexer.php index 6d7ae283d4b84f9db76df5b4e47a927b9550ef37..733372ad7843048ab23e67744c74a0b955f8a9e4 100644 --- a/civicrm/CRM/Core/InnoDBIndexer.php +++ b/civicrm/CRM/Core/InnoDBIndexer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Invoke.php b/civicrm/CRM/Core/Invoke.php index 69724fbdcf883b857247f3825a1883f207f1d595..0bd0ed2d310eb3ac5c0e04d737ef9f452462a9d5 100644 --- a/civicrm/CRM/Core/Invoke.php +++ b/civicrm/CRM/Core/Invoke.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * Serves as a wrapper between the UserFrameWork and Core CRM * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_Invoke { diff --git a/civicrm/CRM/Core/JobManager.php b/civicrm/CRM/Core/JobManager.php index 4cfdb87456afd9f97c1c53091e54ea4ea58dcd80..a85ce48f0ee98e1e05dbd1ad14c5e9e0e98a4681 100644 --- a/civicrm/CRM/Core/JobManager.php +++ b/civicrm/CRM/Core/JobManager.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * by every scheduled job (cron task) in CiviCRM. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_JobManager { diff --git a/civicrm/CRM/Core/Joomla.php b/civicrm/CRM/Core/Joomla.php index 74e53abe9c261dda452f5e042a2489b6a759b828..1f03bfa9ea27429916443ebc6f5b20c0334f6122 100644 --- a/civicrm/CRM/Core/Joomla.php +++ b/civicrm/CRM/Core/Joomla.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/Key.php b/civicrm/CRM/Core/Key.php index 62c45626e93685444209d8be7631421bc00b65b5..7c73a2177b7923b1826326bb7478445781b54598 100644 --- a/civicrm/CRM/Core/Key.php +++ b/civicrm/CRM/Core/Key.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Lock.php b/civicrm/CRM/Core/Lock.php index 1a92a7665dc2a25b9211e9ffa0d4648a125b5646..0d175ce6fa0d7067f0fc3d8067774d170cb2f445 100644 --- a/civicrm/CRM/Core/Lock.php +++ b/civicrm/CRM/Core/Lock.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Menu.php b/civicrm/CRM/Core/Menu.php index 66a4cf593bf92981ca34b1e9d2c3e6a360dd6fb9..8bdf2371e682ec2bd339b2866563f7886e197ffa 100644 --- a/civicrm/CRM/Core/Menu.php +++ b/civicrm/CRM/Core/Menu.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This file contains the various menus of the CiviCRM module * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'CRM/Core/I18n.php'; @@ -307,7 +307,6 @@ class CRM_Core_Menu { self::build($menuArray); - $config = CRM_Core_Config::singleton(); $daoFields = CRM_Core_DAO_Menu::fields(); foreach ($menuArray as $path => $item) { @@ -673,8 +672,6 @@ class CRM_Core_Menu { // return null if menu rebuild $config = CRM_Core_Config::singleton(); - $params = array(); - $args = explode('/', $path); $elements = array(); @@ -687,22 +684,13 @@ class CRM_Core_Menu { $queryString = implode(', ', $elements); $domainID = CRM_Core_Config::domainID(); - $domainWhereClause = " AND domain_id = $domainID "; - if ($config->isUpgradeMode() && - !CRM_Core_DAO::checkFieldExists('civicrm_menu', 'domain_id') - ) { - //domain_id wouldn't be available for earlier version of - //3.0 and therefore can't be used as part of query for - //upgrade case - $domainWhereClause = ""; - } $query = " ( SELECT * FROM civicrm_menu WHERE path in ( $queryString ) - $domainWhereClause + AND domain_id = $domainID ORDER BY length(path) DESC LIMIT 1 ) @@ -714,7 +702,7 @@ UNION ( SELECT * FROM civicrm_menu WHERE path IN ( 'navigation' ) - $domainWhereClause + AND domain_id = $domainID ) "; } @@ -752,12 +740,6 @@ UNION ( } } - // *FIXME* : hack for 2.1 -> 2.2 upgrades. - if ($path == 'civicrm/upgrade') { - $menuPath['page_callback'] = 'CRM_Upgrade_Page_Upgrade'; - $menuPath['access_arguments'][0][] = 'administer CiviCRM'; - $menuPath['access_callback'] = array('CRM_Core_Permission', 'checkMenu'); - } // *FIXME* : hack for 4.1 -> 4.2 upgrades. if (preg_match('/^civicrm\/(upgrade\/)?queue\//', $path)) { CRM_Queue_Menu::alter($path, $menuPath); diff --git a/civicrm/CRM/Core/Module.php b/civicrm/CRM/Core/Module.php index cc5072107fde84a3ffd936ed1cd6b85d8f996bcc..e792e686525c55800b7c76a7880395469a1a69f8 100644 --- a/civicrm/CRM/Core/Module.php +++ b/civicrm/CRM/Core/Module.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * a Joomla Plugin. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/OptionGroup.php b/civicrm/CRM/Core/OptionGroup.php index 250c93cff309723831aec292d907c1066d97aec0..a6fdb677f80745f83f16c7794faa9b56c2c030cd 100644 --- a/civicrm/CRM/Core/OptionGroup.php +++ b/civicrm/CRM/Core/OptionGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_OptionGroup { static $_values = array(); diff --git a/civicrm/CRM/Core/OptionValue.php b/civicrm/CRM/Core/OptionValue.php index 2e7417b6a9948d456907e0f6f459971da920ea5b..33860b52c802018d3a808d51460205163eafe156 100644 --- a/civicrm/CRM/Core/OptionValue.php +++ b/civicrm/CRM/Core/OptionValue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_OptionValue { diff --git a/civicrm/CRM/Core/Page.php b/civicrm/CRM/Core/Page.php index fe0f2b0732727357f70dfae760109868e3fa81cd..234d9fa85c86d41c6939f2c33ec5bfb6813f3997 100644 --- a/civicrm/CRM/Core/Page.php +++ b/civicrm/CRM/Core/Page.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/Page/AJAX.php b/civicrm/CRM/Core/Page/AJAX.php index 2035feafa4e49bd0cde83d7b20995f3339e67332..76a6f7ef0e79d098863fa29d615d5cac530bffc5 100644 --- a/civicrm/CRM/Core/Page/AJAX.php +++ b/civicrm/CRM/Core/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Page/AJAX/Attachment.php b/civicrm/CRM/Core/Page/AJAX/Attachment.php index 73d57b4f3cbd61e589d34dfd4fa6fc9a0f2519cf..6c973b899971eac3372c72308ccac78b2399f542 100644 --- a/civicrm/CRM/Core/Page/AJAX/Attachment.php +++ b/civicrm/CRM/Core/Page/AJAX/Attachment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Page/AJAX/Location.php b/civicrm/CRM/Core/Page/AJAX/Location.php index e22e4209ae8a6c1eb071a111d9d7750a10d0f387..1ac3f1029b5a9477b44a0e8a1ad5fb0e269ba4ea 100644 --- a/civicrm/CRM/Core/Page/AJAX/Location.php +++ b/civicrm/CRM/Core/Page/AJAX/Location.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Core/Page/AJAX/RecurringEntity.php b/civicrm/CRM/Core/Page/AJAX/RecurringEntity.php index 9fe6b84f713b93e7a4271ef14b45bee5812659c5..f091bf4795087f3ef5e33feadd7d0e85a7defbf8 100644 --- a/civicrm/CRM/Core/Page/AJAX/RecurringEntity.php +++ b/civicrm/CRM/Core/Page/AJAX/RecurringEntity.php @@ -14,12 +14,21 @@ class CRM_Core_Page_AJAX_RecurringEntity { public static function updateMode() { $finalResult = array(); - if (CRM_Utils_Array::value('mode', $_REQUEST) && CRM_Utils_Array::value('entityId', $_REQUEST) && CRM_Utils_Array::value('entityTable', $_REQUEST) && CRM_Utils_Array::value('priceSet', $_REQUEST)) { - + if (CRM_Utils_Array::value('mode', $_REQUEST) && CRM_Utils_Array::value('entityId', $_REQUEST) && CRM_Utils_Array::value('entityTable', $_REQUEST)) { $mode = CRM_Utils_Type::escape($_REQUEST['mode'], 'Integer'); $entityId = CRM_Utils_Type::escape($_REQUEST['entityId'], 'Integer'); $entityTable = CRM_Utils_Type::escape($_REQUEST['entityTable'], 'String'); $priceSet = CRM_Utils_Type::escape($_REQUEST['priceSet'], 'String'); + + // CRM-21764 fix + // Retrieving existing priceset if price set id is not passed + if ($priceSet == "") { + $priceSetEntity = new CRM_Price_DAO_PriceSetEntity(); + $priceSetEntity->entity_id = $entityId; + $priceSetEntity->entity_table = $entityTable; + $priceSetEntity->find(TRUE); + $priceSet = $priceSetEntity->price_set_id; + } $linkedEntityTable = $_REQUEST['linkedEntityTable']; $finalResult = CRM_Core_BAO_RecurringEntity::updateModeAndPriceSet($entityId, $entityTable, $mode, $linkedEntityTable, $priceSet); } diff --git a/civicrm/CRM/Core/Page/Basic.php b/civicrm/CRM/Core/Page/Basic.php index b0b7934adbdbd372ca4961c10c4c7e5af3390dff..89b63d0e345d9283ed4f3dbe68c08d1a3113a375 100644 --- a/civicrm/CRM/Core/Page/Basic.php +++ b/civicrm/CRM/Core/Page/Basic.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_Core_Page_Basic extends CRM_Core_Page { diff --git a/civicrm/CRM/Core/Page/File.php b/civicrm/CRM/Core/Page/File.php index 63010854af1f83e5379bd3fb31f7e0330ab4a143..08e169f8f1b4c8154c10b4f5123127bf238e699e 100644 --- a/civicrm/CRM/Core/Page/File.php +++ b/civicrm/CRM/Core/Page/File.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Page/Inline/Help.php b/civicrm/CRM/Core/Page/Inline/Help.php index 43762b969936a5c7387affc35b05542e0cb50e2b..7ee79b60953b88cd4b1d295526fe7961b51f155a 100644 --- a/civicrm/CRM/Core/Page/Inline/Help.php +++ b/civicrm/CRM/Core/Page/Inline/Help.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Page/RecurringEntityPreview.php b/civicrm/CRM/Core/Page/RecurringEntityPreview.php index 62b0d8e638b99dda0270a30865a9a1729562b10c..8add4beb3e692addea82f74dab7e6be2c7a3cbfa 100644 --- a/civicrm/CRM/Core/Page/RecurringEntityPreview.php +++ b/civicrm/CRM/Core/Page/RecurringEntityPreview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_Page_RecurringEntityPreview extends CRM_Core_Page { diff --git a/civicrm/CRM/Core/Payment.php b/civicrm/CRM/Core/Payment.php index faf05f510a04d3f212ec6ae5169ea0c075dc9ae8..f16e6b48ee50331e9f80648abec4c380909aff76 100644 --- a/civicrm/CRM/Core/Payment.php +++ b/civicrm/CRM/Core/Payment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -489,10 +489,10 @@ abstract class CRM_Core_Payment { if (array_keys($params) == array('is_recur_installments', 'is_email_receipt')) { $gotText = ts('Your recurring contribution will be processed automatically.'); if ($params['is_recur_installments']) { - $gotText .= ts(' You can specify the number of installments, or you can leave the number of installments blank if you want to make an open-ended commitment. In either case, you can choose to cancel at any time.'); + $gotText .= ' ' . ts('You can specify the number of installments, or you can leave the number of installments blank if you want to make an open-ended commitment. In either case, you can choose to cancel at any time.'); } if ($params['is_email_receipt']) { - $gotText .= ts(' You will receive an email receipt for each recurring contribution.'); + $gotText .= ' ' . ts('You will receive an email receipt for each recurring contribution.'); } } break; diff --git a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php index 966cffa7ecc63adc417507a98423228016be1e5b..621ebde1eedabacb269827fd85fa8cb581ba85bd 100644 --- a/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php +++ b/civicrm/CRM/Core/Payment/AuthorizeNetIPN.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { @@ -146,6 +146,7 @@ class CRM_Core_Payment_AuthorizeNetIPN extends CRM_Core_Payment_BaseIPN { $contribution->amount_level = $objects['contribution']->amount_level; $contribution->address_id = $objects['contribution']->address_id; $contribution->campaign_id = $objects['contribution']->campaign_id; + $contribution->_relatedObjects = $objects['contribution']->_relatedObjects; $objects['contribution'] = &$contribution; } diff --git a/civicrm/CRM/Core/Payment/BaseIPN.php b/civicrm/CRM/Core/Payment/BaseIPN.php index 822d7482380782a63101443d0563cb643eb0de02..e77761484bb8585fe15aea2c915cde64fc335542 100644 --- a/civicrm/CRM/Core/Payment/BaseIPN.php +++ b/civicrm/CRM/Core/Payment/BaseIPN.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Payment/Form.php b/civicrm/CRM/Core/Payment/Form.php index 4988ee531c79c4308f889b06b4692c41e5411ee1..58b95a84d8e28d09fb5f9cd1882c047d12a67d52 100644 --- a/civicrm/CRM/Core/Payment/Form.php +++ b/civicrm/CRM/Core/Payment/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Class for constructing the payment processor block. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_Payment_Form { diff --git a/civicrm/CRM/Core/Payment/Manual.php b/civicrm/CRM/Core/Payment/Manual.php index 833609ad53e78b8400b67c06256e42b01d94c7e0..5fd1353916e48ec80ba6090f9a77ff9f96631033 100644 --- a/civicrm/CRM/Core/Payment/Manual.php +++ b/civicrm/CRM/Core/Payment/Manual.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_Payment_Manual extends CRM_Core_Payment { diff --git a/civicrm/CRM/Core/Payment/PayPalIPN.php b/civicrm/CRM/Core/Payment/PayPalIPN.php index 9aa58748696ecd29312f9e9baa135792d548de83..0ff4161ca804001de0f696e62b2711d997537fda 100644 --- a/civicrm/CRM/Core/Payment/PayPalIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalIPN.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Payment/PayPalImpl.php b/civicrm/CRM/Core/Payment/PayPalImpl.php index 07e0130eec024c3762c951cb82844973c5448f87..80b01dba5788ff0394039e691cdd896a89619c97 100644 --- a/civicrm/CRM/Core/Payment/PayPalImpl.php +++ b/civicrm/CRM/Core/Payment/PayPalImpl.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ use Civi\Payment\Exception\PaymentProcessorException; /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -702,15 +702,33 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment { if (is_numeric($lastParam)) { $params['processor_id'] = $lastParam; } - if (civicrm_api3('PaymentProcessor', 'getvalue', array( - 'id' => $params['processor_id'], - 'return' => 'class_name') - ) == 'Payment_PayPalImpl') { - $paypalIPN = new CRM_Core_Payment_PayPalIPN($params); + $result = civicrm_api3('PaymentProcessor', 'get', array( + 'sequential' => 1, + 'id' => $params['processor_id'], + 'api.PaymentProcessorType.getvalue' => array('return' => "name"), + )); + if (!$result['count']) { + throw new CRM_Core_Exception("Could not find a processor with the given processor_id value '{$params['processor_id']}'."); } - else { - $paypalIPN = new CRM_Core_Payment_PayPalProIPN($params); + + $paymentProcessorType = CRM_Utils_Array::value('api.PaymentProcessorType.getvalue', $result['values'][0]); + switch ($paymentProcessorType) { + case 'PayPal': + // "PayPal - Website Payments Pro" + $paypalIPN = new CRM_Core_Payment_PayPalProIPN($params); + break; + + case 'PayPal_Standard': + // "PayPal - Website Payments Standard" + $paypalIPN = new CRM_Core_Payment_PayPalIPN($params); + break; + + default: + // If we don't have PayPal Standard or PayPal Pro, something's wrong. + // Log an error and exit. + throw new CRM_Core_Exception("The processor_id value '{$params['processor_id']}' is for a processor of type '{$paymentProcessorType}', which is invalid in this context."); } + $paypalIPN->main(); } diff --git a/civicrm/CRM/Core/Payment/PayPalProIPN.php b/civicrm/CRM/Core/Payment/PayPalProIPN.php index 3cfd93d2a532796718fc3be497579b1a2036859e..26bf9b38cced62681daf838e8686310f27849b12 100644 --- a/civicrm/CRM/Core/Payment/PayPalProIPN.php +++ b/civicrm/CRM/Core/Payment/PayPalProIPN.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_Payment_PayPalProIPN extends CRM_Core_Payment_BaseIPN { diff --git a/civicrm/CRM/Core/Payment/ProcessorForm.php b/civicrm/CRM/Core/Payment/ProcessorForm.php index 81e0273c6f7dae62e38df3c2f3cd51926092ff64..7c924ef88aba0d123e5ae4689d2a87267629b2e0 100644 --- a/civicrm/CRM/Core/Payment/ProcessorForm.php +++ b/civicrm/CRM/Core/Payment/ProcessorForm.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ use Civi\Payment\System; /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ diff --git a/civicrm/CRM/Core/Permission.php b/civicrm/CRM/Core/Permission.php index e7be11b4a6d5415a24abc5de8d1e02ebde5b7fc8..b9f344975fc4d8455499001883a2af992762c074 100644 --- a/civicrm/CRM/Core/Permission.php +++ b/civicrm/CRM/Core/Permission.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -889,6 +889,10 @@ class CRM_Core_Permission { $prefix . ts('edit own api keys'), ts('Edit user\'s own API keys'), ), + 'send SMS' => array( + $prefix . ts('send SMS'), + ts('Send an SMS'), + ), ); return $permissions; diff --git a/civicrm/CRM/Core/Permission/Backdrop.php b/civicrm/CRM/Core/Permission/Backdrop.php index 2c1f7e399967b3b486b9d21c948dfae333cef503..aab5d15f519fcad5eab652bccc00f2d70b2322de 100644 --- a/civicrm/CRM/Core/Permission/Backdrop.php +++ b/civicrm/CRM/Core/Permission/Backdrop.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/Base.php b/civicrm/CRM/Core/Permission/Base.php index 5a56ef14353008b8d0120e37ba271c6c85645833..e8ddd3ad75c6d336fbefadadc9c4e2dbbefd13fe 100644 --- a/civicrm/CRM/Core/Permission/Base.php +++ b/civicrm/CRM/Core/Permission/Base.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/Drupal.php b/civicrm/CRM/Core/Permission/Drupal.php index d83d795af5e906cef2bf8271011badd8bdb8312d..814fed6f659fdfdcfa090d5fb17a2e0b684da65a 100644 --- a/civicrm/CRM/Core/Permission/Drupal.php +++ b/civicrm/CRM/Core/Permission/Drupal.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/Drupal6.php b/civicrm/CRM/Core/Permission/Drupal6.php index 131663af091ee717c9fb528a7938fe35a0604319..dd29bdac69e2dba58ffe9d4719f2fb55a7b72ab5 100644 --- a/civicrm/CRM/Core/Permission/Drupal6.php +++ b/civicrm/CRM/Core/Permission/Drupal6.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/Drupal8.php b/civicrm/CRM/Core/Permission/Drupal8.php index 34fb06212f6a997e25acc60824ce3c48f4f8e300..a37dcfcbc2eedeca44cf6b552b6d3bc271fa1d05 100644 --- a/civicrm/CRM/Core/Permission/Drupal8.php +++ b/civicrm/CRM/Core/Permission/Drupal8.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/DrupalBase.php b/civicrm/CRM/Core/Permission/DrupalBase.php index bfcfe96848c5f4178e19a59176220b652d00af01..37ca28008eed218cc2b0101f0457bc45bd8264f9 100644 --- a/civicrm/CRM/Core/Permission/DrupalBase.php +++ b/civicrm/CRM/Core/Permission/DrupalBase.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/Joomla.php b/civicrm/CRM/Core/Permission/Joomla.php index 17a768770bf2de25d416cea23a5848745b39e1c9..d3c9e947a4197cf1299814766a5b3bf8eeb8b8c9 100644 --- a/civicrm/CRM/Core/Permission/Joomla.php +++ b/civicrm/CRM/Core/Permission/Joomla.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/Soap.php b/civicrm/CRM/Core/Permission/Soap.php index fcb87791b2d07bc58aea805c554bc947c30a86c7..7bf7def981a09343743cecb1a1e1bd002ce8c5b0 100644 --- a/civicrm/CRM/Core/Permission/Soap.php +++ b/civicrm/CRM/Core/Permission/Soap.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/Temp.php b/civicrm/CRM/Core/Permission/Temp.php index 91dd5345e3b1e118c55f0e3d22a1550043105a05..dc74563960051975c34040ce40bd35b67291e7ac 100644 --- a/civicrm/CRM/Core/Permission/Temp.php +++ b/civicrm/CRM/Core/Permission/Temp.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/UnitTests.php b/civicrm/CRM/Core/Permission/UnitTests.php index 86b199bff6909910f0d1e7f1b74ab0e7f905c817..b8dc30c0809c6bd8494a70b890e543110d64c1dc 100644 --- a/civicrm/CRM/Core/Permission/UnitTests.php +++ b/civicrm/CRM/Core/Permission/UnitTests.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Permission/WordPress.php b/civicrm/CRM/Core/Permission/WordPress.php index e86cd908156c45a6bfd71ab881125f4cf308f188..bd289c18b76683eba52eef7ec9108527c259ab3c 100644 --- a/civicrm/CRM/Core/Permission/WordPress.php +++ b/civicrm/CRM/Core/Permission/WordPress.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/PseudoConstant.php b/civicrm/CRM/Core/PseudoConstant.php index f67c23a2b0ba918256d98b1e6e1ae4214bad8b36..5794c97b5786a1d02625f80eab036407df4ae1dc 100644 --- a/civicrm/CRM/Core/PseudoConstant.php +++ b/civicrm/CRM/Core/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -43,7 +43,7 @@ * This provides greater consistency/predictability after flushing. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_PseudoConstant { diff --git a/civicrm/CRM/Core/QuickForm/Action.php b/civicrm/CRM/Core/QuickForm/Action.php index e8b88b0f587a4a81dc4c5aefeca35f0a0335c0dd..b2b427040c7b46316b0d4c7d368b0b4c1d8e4ab6 100644 --- a/civicrm/CRM/Core/QuickForm/Action.php +++ b/civicrm/CRM/Core/QuickForm/Action.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * integrated with the StateMachine, Controller and State objects * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'HTML/QuickForm/Action.php'; diff --git a/civicrm/CRM/Core/QuickForm/Action/Back.php b/civicrm/CRM/Core/QuickForm/Action/Back.php index 2b0a0639be767d91a11d7df9db32379ce7f7440a..95786fe73dab128131053d927c00ef6cdba656e8 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Back.php +++ b/civicrm/CRM/Core/QuickForm/Action/Back.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the back action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_QuickForm_Action_Back extends CRM_Core_QuickForm_Action { diff --git a/civicrm/CRM/Core/QuickForm/Action/Cancel.php b/civicrm/CRM/Core/QuickForm/Action/Cancel.php index e51ddbcdf10f084ca9968ba22c9cc72189b49766..5e057b6a9a5901e05488f2654ea76ae2a9bc66ae 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Cancel.php +++ b/civicrm/CRM/Core/QuickForm/Action/Cancel.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the cancel action * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_QuickForm_Action_Cancel extends CRM_Core_QuickForm_Action { diff --git a/civicrm/CRM/Core/QuickForm/Action/Display.php b/civicrm/CRM/Core/QuickForm/Action/Display.php index f2a2967d19074643de9c26d4587ff0801fb928d0..8bde85d132e6b18f01dc42586e4ca20e4e8c920c 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Display.php +++ b/civicrm/CRM/Core/QuickForm/Action/Display.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the display action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_QuickForm_Action_Display extends CRM_Core_QuickForm_Action { diff --git a/civicrm/CRM/Core/QuickForm/Action/Done.php b/civicrm/CRM/Core/QuickForm/Action/Done.php index 234b25379b69a045089d9a1ee4522f7347b1e3f4..d70eb55b021ce63cb625e3c40e7b99d21bd3f00f 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Done.php +++ b/civicrm/CRM/Core/QuickForm/Action/Done.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the back action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_QuickForm_Action_Done extends CRM_Core_QuickForm_Action { diff --git a/civicrm/CRM/Core/QuickForm/Action/Jump.php b/civicrm/CRM/Core/QuickForm/Action/Jump.php index 4bc3921ab1b6240d7f7b8ca6b74110ab073981e9..342823087966cacd5065d144a1017e9df81a76c4 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Jump.php +++ b/civicrm/CRM/Core/QuickForm/Action/Jump.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the jump action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/QuickForm/Action/Next.php b/civicrm/CRM/Core/QuickForm/Action/Next.php index 90767f9f4e873148e64b2b50779840087a1955b4..9167fd08771dab8a4567fda6a4f218586690c1c6 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Next.php +++ b/civicrm/CRM/Core/QuickForm/Action/Next.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the next action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/QuickForm/Action/Process.php b/civicrm/CRM/Core/QuickForm/Action/Process.php index 6a55390dbb8e2d344ae0da5a000f6c2cc24080a8..756100875939686e624478f535942c9ecbbf2ed1 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Process.php +++ b/civicrm/CRM/Core/QuickForm/Action/Process.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the process action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/QuickForm/Action/Refresh.php b/civicrm/CRM/Core/QuickForm/Action/Refresh.php index 488fb08559110f94c09b52896b365e3a09d41ece..902f5e84ff5583a995dc42f4ffeaeab8b27acff4 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Refresh.php +++ b/civicrm/CRM/Core/QuickForm/Action/Refresh.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the refresh action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/QuickForm/Action/Reload.php b/civicrm/CRM/Core/QuickForm/Action/Reload.php index ee8ba8d94d8e730498a70a683e9a30bcc8972ffc..674e411b6b3be89ec809fa77832b4216dc918003 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Reload.php +++ b/civicrm/CRM/Core/QuickForm/Action/Reload.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ * module integration. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_QuickForm_Action_Reload extends CRM_Core_QuickForm_Action { diff --git a/civicrm/CRM/Core/QuickForm/Action/Submit.php b/civicrm/CRM/Core/QuickForm/Action/Submit.php index 77c825e33de90c5c1f38d124a4235ee0e40f935d..6a6dd240c057c4641f21a5398a931069fec3c7d1 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Submit.php +++ b/civicrm/CRM/Core/QuickForm/Action/Submit.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the submit action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/QuickForm/Action/Upload.php b/civicrm/CRM/Core/QuickForm/Action/Upload.php index f77106480a8f5837aefd1eca94005c4cc9298762..865a4669a74288645001d43a25f5b8f3e23956e8 100644 --- a/civicrm/CRM/Core/QuickForm/Action/Upload.php +++ b/civicrm/CRM/Core/QuickForm/Action/Upload.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Redefine the upload action. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ class CRM_Core_QuickForm_Action_Upload extends CRM_Core_QuickForm_Action { diff --git a/civicrm/CRM/Core/Report/Excel.php b/civicrm/CRM/Core/Report/Excel.php index a2a35da9467848373fd2a1d0c56d62aea18dd4b5..79c73ebe3a9fee2745e7ad6c97d4a515b0369d93 100644 --- a/civicrm/CRM/Core/Report/Excel.php +++ b/civicrm/CRM/Core/Report/Excel.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Resources.php b/civicrm/CRM/Core/Resources.php index 87cb3c79c92f81d78928b904af78bf69290df8dd..1472ea4510ca8e19ef91fa389c929bff02bede29 100644 --- a/civicrm/CRM/Core/Resources.php +++ b/civicrm/CRM/Core/Resources.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -37,7 +37,7 @@ * should incorporte services for aggregation, minimization, etc. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Resources/Strings.php b/civicrm/CRM/Core/Resources/Strings.php index b7398eab7f77026ad9b33951be80f21b8cd1dac2..4ae59705003ab7694ec60bc7fed13c65671575e8 100644 --- a/civicrm/CRM/Core/Resources/Strings.php +++ b/civicrm/CRM/Core/Resources/Strings.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Manage translatable strings on behalf of resource files. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ class CRM_Core_Resources_Strings { diff --git a/civicrm/CRM/Core/ScheduledJob.php b/civicrm/CRM/Core/ScheduledJob.php index 55aa94dc2c228069d02a562de4159be8dee1936a..83104896aaf3646edd8dc18e90a6d943e1b26b70 100644 --- a/civicrm/CRM/Core/ScheduledJob.php +++ b/civicrm/CRM/Core/ScheduledJob.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * by every scheduled job (cron task) in CiviCRM. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/SelectValues.php b/civicrm/CRM/Core/SelectValues.php index ece069395cb36d36fde903825157bbab0de8c88a..5b770e9a9a564bdb53de4f18393ecf2e54dbb702 100644 --- a/civicrm/CRM/Core/SelectValues.php +++ b/civicrm/CRM/Core/SelectValues.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * smart caching scheme on a per domain basis * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Selector/API.php b/civicrm/CRM/Core/Selector/API.php index 2f38c2d653312ea02228d1cc0f6fbc7f3db7ea23..e125128ee686ea6236596c4c35c8058f6449e31b 100644 --- a/civicrm/CRM/Core/Selector/API.php +++ b/civicrm/CRM/Core/Selector/API.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -34,7 +34,7 @@ * supported right now, XML support will be added as and when needed * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ interface CRM_Core_Selector_API { diff --git a/civicrm/CRM/Core/Selector/Base.php b/civicrm/CRM/Core/Selector/Base.php index d8bc4cc1aa555e2c167cb66c1c956b6cece60b81..66ddd220a0242ad5c2e1792d922e87703c213c0b 100644 --- a/civicrm/CRM/Core/Selector/Base.php +++ b/civicrm/CRM/Core/Selector/Base.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ * and display names * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Selector/Controller.php b/civicrm/CRM/Core/Selector/Controller.php index 7de6ad443ac3bd38cf0607f410c2831280667359..ed40e2b6ad0dbc8519a6287e39d72a11377c4acd 100644 --- a/civicrm/CRM/Core/Selector/Controller.php +++ b/civicrm/CRM/Core/Selector/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -35,7 +35,7 @@ * implement the Selector/Api.interface.php class * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Session.php b/civicrm/CRM/Core/Session.php index 8514c5a80dd1cf6bf0841c93de26ea775ae44e2e..6ac85ac820c5b769d52bff0bb6ae2a95bddd3aa0 100644 --- a/civicrm/CRM/Core/Session.php +++ b/civicrm/CRM/Core/Session.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/ShowHideBlocks.php b/civicrm/CRM/Core/ShowHideBlocks.php index f0ef493e4589fbf75142a5a3d8c8304798bda6af..7eabad7c0815ab77dd1ea54b5f18c798a4d955e9 100644 --- a/civicrm/CRM/Core/ShowHideBlocks.php +++ b/civicrm/CRM/Core/ShowHideBlocks.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_ShowHideBlocks { diff --git a/civicrm/CRM/Core/Smarty.php b/civicrm/CRM/Core/Smarty.php index 258f1abb472d44c02766a4a97b6ce7cfe2f652f1..d7538fb12bea38a3fc5b9a6bace3d2e9b36e6656 100644 --- a/civicrm/CRM/Core/Smarty.php +++ b/civicrm/CRM/Core/Smarty.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/block.crmButton.php b/civicrm/CRM/Core/Smarty/plugins/block.crmButton.php index 91b747854c259a2104cb4889d014b3dc84895ecb..3fc36a2e8a28ab1cf7ca9d9d89173091deeb86df 100644 --- a/civicrm/CRM/Core/Smarty/plugins/block.crmButton.php +++ b/civicrm/CRM/Core/Smarty/plugins/block.crmButton.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/block.edit.php b/civicrm/CRM/Core/Smarty/plugins/block.edit.php index e847debc1cf181211fe26b4ea57640bc8c782241..4ac39cf572c503ec079be71263081ce21e332340 100644 --- a/civicrm/CRM/Core/Smarty/plugins/block.edit.php +++ b/civicrm/CRM/Core/Smarty/plugins/block.edit.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -34,7 +34,7 @@ * @package CRM * @author Piotr Szotkowski <shot@caltha.pl> * @author Michal Mach <mover@artnet.org> - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ diff --git a/civicrm/CRM/Core/Smarty/plugins/block.htxt.php b/civicrm/CRM/Core/Smarty/plugins/block.htxt.php index 0107d8d792daebd0833f2981123cb9a5afb5c816..8556ffc553b3d8f1f60556520b9eb788695c5b12 100644 --- a/civicrm/CRM/Core/Smarty/plugins/block.htxt.php +++ b/civicrm/CRM/Core/Smarty/plugins/block.htxt.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * CiviCRM's Smarty gettext plugin * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ diff --git a/civicrm/CRM/Core/Smarty/plugins/block.localize.php b/civicrm/CRM/Core/Smarty/plugins/block.localize.php index 6070a3c4a697a45139202050df34d3d8cb5a60b6..8d2bddbd4ff02b1aca5f2d09ecf5be7824ebc6cb 100644 --- a/civicrm/CRM/Core/Smarty/plugins/block.localize.php +++ b/civicrm/CRM/Core/Smarty/plugins/block.localize.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/block.serialize.php b/civicrm/CRM/Core/Smarty/plugins/block.serialize.php index d2559683fc02d556305d8be6fa73374d45bd443e..bfa1b61acdc1c3bd532ee61051095a59686d62f2 100644 --- a/civicrm/CRM/Core/Smarty/plugins/block.serialize.php +++ b/civicrm/CRM/Core/Smarty/plugins/block.serialize.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * * @package CRM * @author Donald Lobo <lobo@civicrm.org> - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ diff --git a/civicrm/CRM/Core/Smarty/plugins/block.ts.php b/civicrm/CRM/Core/Smarty/plugins/block.ts.php index 4dda02f5104d1f994f65e38370a2088469b3bf3b..7355190865dd3adf5920c00e149caf430b1a8770 100644 --- a/civicrm/CRM/Core/Smarty/plugins/block.ts.php +++ b/civicrm/CRM/Core/Smarty/plugins/block.ts.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * @package CRM * @author Piotr Szotkowski <shot@caltha.pl> * @author Michal Mach <mover@artnet.org> - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmAPI.php b/civicrm/CRM/Core/Smarty/plugins/function.crmAPI.php index c8bd8889375c7bf7212e2d2b2a14410b179e2390..75fb7e2163ba519ed01d863579f080b3593cc7c1 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmAPI.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmAPI.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmAttributes.php b/civicrm/CRM/Core/Smarty/plugins/function.crmAttributes.php index 100936b5bb4a647c4fc54234c47d8dabef085afa..5843e19c2199d1f72156a3fafeab72582978ba1e 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmAttributes.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmAttributes.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmCrudLink.php b/civicrm/CRM/Core/Smarty/plugins/function.crmCrudLink.php index 5abf1ec37f0a08709d97caeb6263afa8e1b35dfa..e9ddca479d91297b2c945fbb40434aecc6278ddf 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmCrudLink.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmCrudLink.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmDBTpl.php b/civicrm/CRM/Core/Smarty/plugins/function.crmDBTpl.php index 3ee41bda847ed94779a2a024977bd8f83dd3d00b..a91d85e6512a03ae650efe071cd201741202d032 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmDBTpl.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmDBTpl.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmGetAttribute.php b/civicrm/CRM/Core/Smarty/plugins/function.crmGetAttribute.php index 3d0e852be620acf115441329be12714a9bf68f09..bad02518fb8e931a36f6cfcda4dd9cb543f78f61 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmGetAttribute.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmGetAttribute.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmKey.php b/civicrm/CRM/Core/Smarty/plugins/function.crmKey.php index 8bfa30bebfafd4ef1781129b97845d32e3df977c..3339604d6efdb43c996fef0d399ed579ec92887e 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmKey.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmKey.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmNavigationMenu.php b/civicrm/CRM/Core/Smarty/plugins/function.crmNavigationMenu.php index ebc3c4beb142bcbbaa980f72e3144211d613de84..ed8e9ddd9783def914e9284c7e01e3f58f4cfa94 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmNavigationMenu.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmNavigationMenu.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmResPath.php b/civicrm/CRM/Core/Smarty/plugins/function.crmResPath.php index 139d4300a04e6e0487424670fcaa215bc3746b39..19d5ff606ac9d11ca880d8cf6156ec7520a3afd9 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmResPath.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmResPath.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php b/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php index ce4b9ba0ed6d97aee5ce1e36fda8eb1bb9023dda..e1457b7dfa6a073c1eaaa76928d964a997a3e44c 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmResURL.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmScript.php b/civicrm/CRM/Core/Smarty/plugins/function.crmScript.php index 30c889960e372ccd9597c4b94aaf75025d4d4239..2374f4a7a4613cf73a114a20219a6e673875e0b0 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmScript.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmScript.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmSetting.php b/civicrm/CRM/Core/Smarty/plugins/function.crmSetting.php index 1c704844f28eaedf14a7aa2b8bac20349c673914..ccb7d8ae72c034b3851314136a36c5b513514b16 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmSetting.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmSetting.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmSigner.php b/civicrm/CRM/Core/Smarty/plugins/function.crmSigner.php index d9736ae44aadaa27eaf7aac3f8cd9c94dc073160..713f051be6f87df43312370f13552ab036f41c7d 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmSigner.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmSigner.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmStyle.php b/civicrm/CRM/Core/Smarty/plugins/function.crmStyle.php index 3f5f6b6fb8b02c778c89283119ee205c2d50b97f..164f9d8fb61d58e5c51665a5bb79b9fcf398d8d8 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmStyle.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmStyle.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.crmVersion.php b/civicrm/CRM/Core/Smarty/plugins/function.crmVersion.php index 9b997a392874fe81e0a8da7d24c7391e46b16d08..338c5ec57f165e775f693f0ea29e1147d7817f3f 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.crmVersion.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.crmVersion.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Core/Smarty/plugins/function.docURL.php b/civicrm/CRM/Core/Smarty/plugins/function.docURL.php index dc9caae71f7a851368cd90f8dcf1640e71688818..0e9ec43638765ae32891670ee8302fed9270ddaf 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.docURL.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.docURL.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/function.help.php b/civicrm/CRM/Core/Smarty/plugins/function.help.php index 8cabba0378a45d47298b6e9a11f34240b14d829e..9f989cbaeb5de70a389c575b73244c8aa61f3f16 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.help.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.help.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/function.isValueChange.php b/civicrm/CRM/Core/Smarty/plugins/function.isValueChange.php index 07ba0a688b6a72a687b92e05200fa940ac8431d7..10d92b574ed33c9bc119ff63eddb9d4d9e8d5551 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.isValueChange.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.isValueChange.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ * * @package CRM * @author Allen Shaw <allen@nswebsolutions.com> - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ diff --git a/civicrm/CRM/Core/Smarty/plugins/function.sectionTotal.php b/civicrm/CRM/Core/Smarty/plugins/function.sectionTotal.php index 222471218255b49657937a72c231233e7038db0d..36b0c9776a3c225f9bbbc5a98c3187c9e83e27a2 100644 --- a/civicrm/CRM/Core/Smarty/plugins/function.sectionTotal.php +++ b/civicrm/CRM/Core/Smarty/plugins/function.sectionTotal.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ * * @package CRM * @author Allen Shaw <allen@nswebsolutions.com> - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.colorContrast.php b/civicrm/CRM/Core/Smarty/plugins/modifier.colorContrast.php index 5e7c8b178fe3c5f8f1c29aa830c38f9682d77845..3f5b3a1c717bfcc5f7e7fc1d67818107b8a8bc3f 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.colorContrast.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.colorContrast.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmAddClass.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmAddClass.php index 274487ba9f416f2d019e96bb7335cb6e6f865e7f..ab4f4a5b77205a6c663b50f63cec0b300e12f66b 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmAddClass.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmAddClass.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmBtnType.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmBtnType.php index e0da15e3a0644696e4e1b2e784d2c3b3010a7429..ce43182c89580f03e61b7b6d895e59ab7b9c0e6a 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmBtnType.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmBtnType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php index 11b001abd7592f069447f9a1db86e588b58ff821..f25187afbca725610da1f5193042e723954c38e3 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmDate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmDelete.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmDelete.php index 467d48439905a451cac6597560c39f4e12af6112..938ba213905358096ba495e9d5218cdce8b2ae14 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmDelete.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmDelete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmFirstWord.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmFirstWord.php index 18809939688a722924d94cbf99da80bea494bae0..e2ac20ac704ce0fd0912ec1acbc80ad359365175 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmFirstWord.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmFirstWord.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalDate.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalDate.php index 6e8b4f2e095b863d83a190ad61838502d118eb65..a79e951abffcf7ab2b2ce51bc5377e5c326b0a9d 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalDate.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalDate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: modifier.crmICalDate.php 45499 2013-02-08 12:31:05Z kurund $ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalText.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalText.php index 9bebd8c096364a299e20b59da50fc789b02ac1a5..060540337618353a98fd74dc51a5778e52559e7d 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalText.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmICalText.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: modifier.crmICalText.php 45499 2013-02-08 12:31:05Z kurund $ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmInsert.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmInsert.php index a72fde09ef765df28edd58637b3aee309425dd88..41a6bba50606a100e9605575807d561ec8fd8c32 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmInsert.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmInsert.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmMoney.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmMoney.php index a8b030d92ea2ceb5b26335eaa9aa8a2061174c6f..95562bf149182d93e143a920551fe2abdeb009ef 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmMoney.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmMoney.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmNumberFormat.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmNumberFormat.php index f839fac2bb6c5a6497191cf6b1feb2c78ec756aa..2cec64c283b94a31a9b19027f8d46b688795bc4b 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmNumberFormat.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmNumberFormat.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmReplace.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmReplace.php index 405e59896c79df9509dac4b07f69093ebd250b4c..9834bedce9f622a2897b5aab6908f625b42c7bf2 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmReplace.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmReplace.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.crmStripAlternatives.php b/civicrm/CRM/Core/Smarty/plugins/modifier.crmStripAlternatives.php index 45ef417f66982cf0955b00c4928788b0f731c82d..1cb555ac5ce3e9c0f84009282140adfd943a10ea 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.crmStripAlternatives.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.crmStripAlternatives.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.htmlize.php b/civicrm/CRM/Core/Smarty/plugins/modifier.htmlize.php index 5aa2e49de1ef351091eec50c7f17263cf9f701ac..5bb137e965d5b58ff484d6932c0d3b023ab85449 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.htmlize.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.htmlize.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.json.php b/civicrm/CRM/Core/Smarty/plugins/modifier.json.php index cf9a0b86ef14d9fd98f77572653968483521f139..4924582e0b333f9ac82df80bc2eda8d28249a7ed 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.json.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.json.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.mb_truncate.php b/civicrm/CRM/Core/Smarty/plugins/modifier.mb_truncate.php index 45dedaadf063e6986b62bd8aa5773be981dfb053..3e320060693c7c0d833253935df12f71ab384bb8 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.mb_truncate.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.mb_truncate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/plugins/modifier.substring.php b/civicrm/CRM/Core/Smarty/plugins/modifier.substring.php index 8cccdbcda77e5aa47851b04050899d159aa6d6bc..3314434a2e7fcc0c6c4764525aae21586f928fd4 100644 --- a/civicrm/CRM/Core/Smarty/plugins/modifier.substring.php +++ b/civicrm/CRM/Core/Smarty/plugins/modifier.substring.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Smarty/resources/String.php b/civicrm/CRM/Core/Smarty/resources/String.php index 84577325548b3f4713c257aba1be77fdaa0c867f..f6069669a151fe27ab543936692021d4ba27144f 100644 --- a/civicrm/CRM/Core/Smarty/resources/String.php +++ b/civicrm/CRM/Core/Smarty/resources/String.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * * @param $tpl_name diff --git a/civicrm/CRM/Core/State.php b/civicrm/CRM/Core/State.php index 2c6194b1acd88b197cf88be09b2449430bade72a..5c99b0aaded6c74878539f202c872b52a9a7f6f9 100644 --- a/civicrm/CRM/Core/State.php +++ b/civicrm/CRM/Core/State.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ * things like going back / stepping forward / process etc * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Core_State { diff --git a/civicrm/CRM/Core/StateMachine.php b/civicrm/CRM/Core/StateMachine.php index 033367705a52ef964696d9b661242f2bdbb94ba6..73ac21ae5e7df014b6e77768882c23d58f7840ce 100644 --- a/civicrm/CRM/Core/StateMachine.php +++ b/civicrm/CRM/Core/StateMachine.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Core/TableHierarchy.php b/civicrm/CRM/Core/TableHierarchy.php index 43ad03333ec3ead056b28fe9bdc4b30672373b0f..66cc644744b59b937642d01c97f8bfcc33ac1060 100644 --- a/civicrm/CRM/Core/TableHierarchy.php +++ b/civicrm/CRM/Core/TableHierarchy.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Class representing the table relationships * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Core/Task.php b/civicrm/CRM/Core/Task.php index 96a64e8a56e3595b199718d3f6b82036afda1973..f9b7ef95330778b4422b5db417e68c00e2784554 100644 --- a/civicrm/CRM/Core/Task.php +++ b/civicrm/CRM/Core/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -82,7 +82,7 @@ abstract class CRM_Core_Task { * ] */ public static function tasks() { - CRM_Utils_Hook::searchTasks(self::$objectType, self::$_tasks); + CRM_Utils_Hook::searchTasks(static::$objectType, self::$_tasks); asort(self::$_tasks); return self::$_tasks; @@ -120,7 +120,7 @@ abstract class CRM_Core_Task { /** * Show tasks selectively based on the permission level * of the user - * This function should be call parent::corePermissionedTaskTitles + * This function should be overridden by the child class which would normally call parent::corePermissionedTaskTitles * * @param int $permission * @param array $params @@ -129,7 +129,9 @@ abstract class CRM_Core_Task { * @return array * set of tasks that are valid for the user */ - abstract public static function permissionedTaskTitles($permission, $params); + public static function permissionedTaskTitles($permission, $params) { + return self::corePermissionedTaskTitles(self::tasks(), $permission, $params); + } /** * Show tasks selectively based on the permission level @@ -170,8 +172,8 @@ abstract class CRM_Core_Task { static::tasks(); if (!CRM_Utils_Array::value($value, self::$_tasks)) { - // Children can specify a default task (eg. print), we don't here - return array(); + // Children can specify a default task (eg. print), pick another if it is not valid. + $value = key(self::$_tasks); } return array( CRM_Utils_Array::value('class', self::$_tasks[$value]), diff --git a/civicrm/CRM/Core/Transaction.php b/civicrm/CRM/Core/Transaction.php index d8d60153e72d3e16f376804f707976cf43b2612e..8f9afb30f54c365e4ba311befedb9ab6f6d3e79f 100644 --- a/civicrm/CRM/Core/Transaction.php +++ b/civicrm/CRM/Core/Transaction.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * @copyright David Strauss <david@fourkitchens.com> (c) 2007 * $Id$ * diff --git a/civicrm/CRM/Core/xml/Menu/Admin.xml b/civicrm/CRM/Core/xml/Menu/Admin.xml index f6dcf0c614c2c5bb7dc67bd21f51a9e47b0b962e..23f09219a19654f889373ea8205c2a6229cb3c83 100644 --- a/civicrm/CRM/Core/xml/Menu/Admin.xml +++ b/civicrm/CRM/Core/xml/Menu/Admin.xml @@ -711,7 +711,7 @@ <path>civicrm/sms/send</path> <title>New Mass SMS</title> <page_callback>CRM_SMS_Controller_Send</page_callback> - <access_arguments>administer CiviCRM</access_arguments> + <access_arguments>send SMS</access_arguments> <page_type>1</page_type> <weight>610</weight> </item> diff --git a/civicrm/CRM/Core/xml/Menu/Contact.xml b/civicrm/CRM/Core/xml/Menu/Contact.xml index 092a67924b4469337f454e4193f27070c6241caf..26bf51d30c0fa5c619ef270daa1c44e91a70a689 100644 --- a/civicrm/CRM/Core/xml/Menu/Contact.xml +++ b/civicrm/CRM/Core/xml/Menu/Contact.xml @@ -401,6 +401,7 @@ <path_arguments>action=add</path_arguments> <title>Activities</title> <page_callback>CRM_Contact_Form_Task_SMS</page_callback> + <access_arguments>send SMS</access_arguments> </item> <item> <path>civicrm/ajax/contactrelationships</path> diff --git a/civicrm/CRM/Custom/Form/ChangeFieldType.php b/civicrm/CRM/Custom/Form/ChangeFieldType.php index 95c2eec22a0bb8c07946dc04d229e61c412702d9..364abec1c9ae91197deaf22c9076cc78d50e2f59 100644 --- a/civicrm/CRM/Custom/Form/ChangeFieldType.php +++ b/civicrm/CRM/Custom/Form/ChangeFieldType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Form/CustomData.php b/civicrm/CRM/Custom/Form/CustomData.php index 83eaacb5c771a2d2312f4115deeccb0f96a4b47a..876f595e3b0bf78b3c720fe7a693373fe6d195e8 100644 --- a/civicrm/CRM/Custom/Form/CustomData.php +++ b/civicrm/CRM/Custom/Form/CustomData.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Form/CustomDataByType.php b/civicrm/CRM/Custom/Form/CustomDataByType.php index 811daa557351ffac5eafe4974bde857b8969fb54..34fd321e41a7ffc76ca4df2241cf62e0a0c4e0fd 100644 --- a/civicrm/CRM/Custom/Form/CustomDataByType.php +++ b/civicrm/CRM/Custom/Form/CustomDataByType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Custom/Form/DeleteField.php b/civicrm/CRM/Custom/Form/DeleteField.php index d9031b9797e72de3e89889a9cf74a8b17bdedbb2..7a717906a9b4d5fe07e2068257d8868b485fdd46 100644 --- a/civicrm/CRM/Custom/Form/DeleteField.php +++ b/civicrm/CRM/Custom/Form/DeleteField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Form/DeleteGroup.php b/civicrm/CRM/Custom/Form/DeleteGroup.php index c763befdd1f7b32eb375a444ba30649581debde3..6daad09f21640637fa5dc42c511cc61be21e6dc8 100644 --- a/civicrm/CRM/Custom/Form/DeleteGroup.php +++ b/civicrm/CRM/Custom/Form/DeleteGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Form/Field.php b/civicrm/CRM/Custom/Form/Field.php index 602e87d12910c45621fa06d0d743060c5021c2a2..c0b374cc74917cce5e7682d86ad09d733442b8cd 100644 --- a/civicrm/CRM/Custom/Form/Field.php +++ b/civicrm/CRM/Custom/Form/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Form/Group.php b/civicrm/CRM/Custom/Form/Group.php index 8f1c23a38867a92f6c16c0dc8f588336f0afecb3..bedee2eaa2f5412e9776045b354328145cf514f0 100644 --- a/civicrm/CRM/Custom/Form/Group.php +++ b/civicrm/CRM/Custom/Form/Group.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Form/MoveField.php b/civicrm/CRM/Custom/Form/MoveField.php index cc86d6face79a8a2acf65549bbea94807fac83b6..4725d4ca1749eb9efd5fef5104ec0dc4fb701794 100644 --- a/civicrm/CRM/Custom/Form/MoveField.php +++ b/civicrm/CRM/Custom/Form/MoveField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Form/Option.php b/civicrm/CRM/Custom/Form/Option.php index 00b4507744317bb7e795080e6a432d68d110fdeb..7426b98b313062c4f8091806cc4d54b93a37a14b 100644 --- a/civicrm/CRM/Custom/Form/Option.php +++ b/civicrm/CRM/Custom/Form/Option.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Form/Preview.php b/civicrm/CRM/Custom/Form/Preview.php index 22e9bc0409cd4b4cf1e7ac2fb2e78874efb437ae..22c3c0490bf9064b68aafe086cb6897017224361 100644 --- a/civicrm/CRM/Custom/Form/Preview.php +++ b/civicrm/CRM/Custom/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Import/Field.php b/civicrm/CRM/Custom/Import/Field.php index 844fdef56fbc83122a6b9878dc9d5519d31a6536..4934f65a15dd0b727b14407602242d2436ea2d3e 100644 --- a/civicrm/CRM/Custom/Import/Field.php +++ b/civicrm/CRM/Custom/Import/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Custom/Import/Form/DataSource.php b/civicrm/CRM/Custom/Import/Form/DataSource.php index 4c8f46858f389882d56e232ce2e48c8675bea797..a4a2fdd67993a64750b3312a62a7177f29dc5f62 100644 --- a/civicrm/CRM/Custom/Import/Form/DataSource.php +++ b/civicrm/CRM/Custom/Import/Form/DataSource.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Import/Parser.php b/civicrm/CRM/Custom/Import/Parser.php index 3d40b6292885f71543f3644fe6c9401fdf9a2317..9a43a680701cf469ccadabf9cfff98ad82b9aafe 100644 --- a/civicrm/CRM/Custom/Import/Parser.php +++ b/civicrm/CRM/Custom/Import/Parser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Page/AJAX.php b/civicrm/CRM/Custom/Page/AJAX.php index ef99f073b5beccba38975cf4fb89c16b99e50c4b..fba5e2b10821363ab1106d81eb8e216b08d4a5d6 100644 --- a/civicrm/CRM/Custom/Page/AJAX.php +++ b/civicrm/CRM/Custom/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Custom/Page/Field.php b/civicrm/CRM/Custom/Page/Field.php index 5e856cb3118589368e6ad18b6f98cd233c39e7a5..0c8969ed94a08f85bd015c465f6a2f46b9e6c88a 100644 --- a/civicrm/CRM/Custom/Page/Field.php +++ b/civicrm/CRM/Custom/Page/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Page/Group.php b/civicrm/CRM/Custom/Page/Group.php index 5cc8e1293bc1b33add7bcf7cb5f510a9cc0e42e0..e5cc05135f699f56f749a38e3f28adf2c1ca55f4 100644 --- a/civicrm/CRM/Custom/Page/Group.php +++ b/civicrm/CRM/Custom/Page/Group.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Custom/Page/Option.php b/civicrm/CRM/Custom/Page/Option.php index 23b9f9ae3476bb56790c6608ddffacec02656842..6e4b6e8ec059b738962759015dfb183428edac1d 100644 --- a/civicrm/CRM/Custom/Page/Option.php +++ b/civicrm/CRM/Custom/Page/Option.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Cxn/ApiRouter.php b/civicrm/CRM/Cxn/ApiRouter.php index 63a1a7572bd47b5ac9fe5d596dbb935035a65619..e61dea7513e5d570e49a2b2749bf652025584d4c 100644 --- a/civicrm/CRM/Cxn/ApiRouter.php +++ b/civicrm/CRM/Cxn/ApiRouter.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Cxn/BAO/Cxn.php b/civicrm/CRM/Cxn/BAO/Cxn.php index abc5b4c3ef6b3c28c578493ae8aa1da89abc416b..50b784cfc50986fa82e995728b83ae19a17932a0 100644 --- a/civicrm/CRM/Cxn/BAO/Cxn.php +++ b/civicrm/CRM/Cxn/BAO/Cxn.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ use Civi\Cxn\Rpc\DefaultCertificateValidator; /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Cxn/DAO/Cxn.php b/civicrm/CRM/Cxn/DAO/Cxn.php index 679858f8a20d1e6058a6717c64d721786e0118fa..ee0d33a7914f8b58cd8165264a42773497e45794 100644 --- a/civicrm/CRM/Cxn/DAO/Cxn.php +++ b/civicrm/CRM/Cxn/DAO/Cxn.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Cxn/Cxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Dashlet/Page/Activity.php b/civicrm/CRM/Dashlet/Page/Activity.php index a48deb4ee7a05bb2b44dea902c7eff0151b1ed49..fb633e58c80d45fdb0544b49f8de52ca8707f06d 100644 --- a/civicrm/CRM/Dashlet/Page/Activity.php +++ b/civicrm/CRM/Dashlet/Page/Activity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dashlet/Page/AllCases.php b/civicrm/CRM/Dashlet/Page/AllCases.php index 733cfcf6fcbf42dec13b64cae7fc54bb4a4dd29c..a8196d0fb872d51974cbd91e75930b56e1421427 100644 --- a/civicrm/CRM/Dashlet/Page/AllCases.php +++ b/civicrm/CRM/Dashlet/Page/AllCases.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dashlet/Page/Blog.php b/civicrm/CRM/Dashlet/Page/Blog.php index 6e3efc9cac56fa52895267c5895aafa2de4c7fad..1eb8025c7f8883a3efa680d0a39b1ce3bda06298 100644 --- a/civicrm/CRM/Dashlet/Page/Blog.php +++ b/civicrm/CRM/Dashlet/Page/Blog.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dashlet/Page/CaseDashboard.php b/civicrm/CRM/Dashlet/Page/CaseDashboard.php index 79627fd5f5665525ab56bd7214588b1737dc8aa8..911079b4bf837eefe55ce20eb7e69c4ab0581a4f 100644 --- a/civicrm/CRM/Dashlet/Page/CaseDashboard.php +++ b/civicrm/CRM/Dashlet/Page/CaseDashboard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dashlet/Page/GettingStarted.php b/civicrm/CRM/Dashlet/Page/GettingStarted.php index 775726b06d946afe9a94770ee6d86242bef7c6ac..c6d3ebb42e48016bdb45f3af65e3c17b1f0a7ec8 100644 --- a/civicrm/CRM/Dashlet/Page/GettingStarted.php +++ b/civicrm/CRM/Dashlet/Page/GettingStarted.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dashlet/Page/MyCases.php b/civicrm/CRM/Dashlet/Page/MyCases.php index 234e4c6d56e79a97dbd6a2797d69ec9d933e7457..1b2e3bbc80f4d6905112cb13aead82e301134673 100644 --- a/civicrm/CRM/Dashlet/Page/MyCases.php +++ b/civicrm/CRM/Dashlet/Page/MyCases.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dedupe/BAO/QueryBuilder/IndividualUnsupervised.php b/civicrm/CRM/Dedupe/BAO/QueryBuilder/IndividualUnsupervised.php index 60858b7dc6d00fa32372e54860d55bf193052ef8..38bea2a76d3bb5c250ebe5fe0544267f452f204c 100644 --- a/civicrm/CRM/Dedupe/BAO/QueryBuilder/IndividualUnsupervised.php +++ b/civicrm/CRM/Dedupe/BAO/QueryBuilder/IndividualUnsupervised.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Dedupe/BAO/Rule.php b/civicrm/CRM/Dedupe/BAO/Rule.php index 6484e934a639a37c50c8ffef36601a1f8d7fe48d..9cb7bb4d4c98d73d023c97cf483106bdb1d66213 100644 --- a/civicrm/CRM/Dedupe/BAO/Rule.php +++ b/civicrm/CRM/Dedupe/BAO/Rule.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dedupe/BAO/RuleGroup.php b/civicrm/CRM/Dedupe/BAO/RuleGroup.php index 7bd63eec8f24ce879d0662d886e60353c3528d58..0437983151059ae6b959895a02db44d00c8b3ced 100644 --- a/civicrm/CRM/Dedupe/BAO/RuleGroup.php +++ b/civicrm/CRM/Dedupe/BAO/RuleGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dedupe/DAO/Exception.php b/civicrm/CRM/Dedupe/DAO/Exception.php index ecf939fba341f46093c1ff41325095d4fb4fac9f..fd471444980d1a5b3d1666a388837b19b150a39a 100644 --- a/civicrm/CRM/Dedupe/DAO/Exception.php +++ b/civicrm/CRM/Dedupe/DAO/Exception.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Dedupe/Exception.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Dedupe/DAO/Rule.php b/civicrm/CRM/Dedupe/DAO/Rule.php index 49d3356f4fe009d27901d94fe37acc9247553c7a..39e9d18ba364262b0668a3ea87624541215ab3dc 100644 --- a/civicrm/CRM/Dedupe/DAO/Rule.php +++ b/civicrm/CRM/Dedupe/DAO/Rule.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Dedupe/Rule.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Dedupe/DAO/RuleGroup.php b/civicrm/CRM/Dedupe/DAO/RuleGroup.php index 924b83400ee7841496b359281a0525fce44f9a18..0854b68828d2dd9878bfc3cb5e8c1d25e51eefc4 100644 --- a/civicrm/CRM/Dedupe/DAO/RuleGroup.php +++ b/civicrm/CRM/Dedupe/DAO/RuleGroup.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Dedupe/RuleGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Dedupe/Finder.php b/civicrm/CRM/Dedupe/Finder.php index 3b61672bf22654671fa3619502e9358ac9251526..f3baeee76f6b3f54181ee7c7afc3f7c9ba0cbdd5 100644 --- a/civicrm/CRM/Dedupe/Finder.php +++ b/civicrm/CRM/Dedupe/Finder.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Dedupe/Merger.php b/civicrm/CRM/Dedupe/Merger.php index 381488563baef9312af9e6f66ed997a7cb179516..3a6eba7f6d0fb426e6b8ef360af1fdfbe81fd1eb 100644 --- a/civicrm/CRM/Dedupe/Merger.php +++ b/civicrm/CRM/Dedupe/Merger.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Dedupe_Merger { @@ -39,25 +39,25 @@ class CRM_Dedupe_Merger { * @return array */ public static function relTables() { - static $relTables; - // Setting these merely prevents enotices - but it may be more appropriate not to add the user table below - // if the url can't be retrieved. A more standardised way to retrieve them is. - // CRM_Core_Config::singleton()->userSystem->getUserRecordUrl() - however that function takes a contact_id & - // we may need a different function when it is not known. - $title = $userRecordUrl = ''; + if (!isset(Civi::$statics[__CLASS__]['relTables'])) { - $config = CRM_Core_Config::singleton(); - if ($config->userSystem->is_drupal) { - $userRecordUrl = CRM_Utils_System::url('user/%ufid'); - $title = ts('%1 User: %2; user id: %3', array(1 => $config->userFramework, 2 => '$ufname', 3 => '$ufid')); - } - elseif ($config->userFramework == 'Joomla') { - $userRecordUrl = $config->userSystem->getVersion() > 1.5 ? $config->userFrameworkBaseURL . "index.php?option=com_users&view=user&task=user.edit&id=" . '%ufid' : $config->userFrameworkBaseURL . "index2.php?option=com_users&view=user&task=edit&id[]=" . '%ufid'; - $title = ts('%1 User: %2; user id: %3', array(1 => $config->userFramework, 2 => '$ufname', 3 => '$ufid')); - } + // Setting these merely prevents enotices - but it may be more appropriate not to add the user table below + // if the url can't be retrieved. A more standardised way to retrieve them is. + // CRM_Core_Config::singleton()->userSystem->getUserRecordUrl() - however that function takes a contact_id & + // we may need a different function when it is not known. + $title = $userRecordUrl = ''; + + $config = CRM_Core_Config::singleton(); + if ($config->userSystem->is_drupal) { + $userRecordUrl = CRM_Utils_System::url('user/%ufid'); + $title = ts('%1 User: %2; user id: %3', array(1 => $config->userFramework, 2 => '$ufname', 3 => '$ufid')); + } + elseif ($config->userFramework == 'Joomla') { + $userRecordUrl = $config->userSystem->getVersion() > 1.5 ? $config->userFrameworkBaseURL . "index.php?option=com_users&view=user&task=user.edit&id=" . '%ufid' : $config->userFrameworkBaseURL . "index2.php?option=com_users&view=user&task=edit&id[]=" . '%ufid'; + $title = ts('%1 User: %2; user id: %3', array(1 => $config->userFramework, 2 => '$ufname', 3 => '$ufid')); + } - if (!$relTables) { $relTables = array( 'rel_table_contributions' => array( 'title' => ts('Contributions'), @@ -155,8 +155,12 @@ class CRM_Dedupe_Merger { // Allow hook_civicrm_merge() to adjust $relTables CRM_Utils_Hook::merge('relTables', $relTables); + + // Cache the results in a static variable + Civi::$statics[__CLASS__]['relTables'] = $relTables; } - return $relTables; + + return Civi::$statics[__CLASS__]['relTables']; } /** @@ -273,11 +277,12 @@ class CRM_Dedupe_Merger { * We treat multi-valued custom sets as "related tables" similar to activities, contributions, etc. * @param string $request * 'relTables' or 'cidRefs'. + * @return array * @see CRM-13836 */ public static function getMultiValueCustomSets($request) { - static $data = NULL; - if ($data === NULL) { + + if (!isset(Civi::$statics[__CLASS__]['multiValueCustomSets'])) { $data = array( 'relTables' => array(), 'cidRefs' => array(), @@ -296,8 +301,12 @@ class CRM_Dedupe_Merger { 'url' => CRM_Utils_System::url('civicrm/contact/view', 'reset=1&force=1&cid=$cid' . $urlSuffix), ); } + + // Store the result in a static variable cache + Civi::$statics[__CLASS__]['multiValueCustomSets'] = $data; } - return $data[$request]; + + return Civi::$statics[__CLASS__]['multiValueCustomSets'][$request]; } /** @@ -429,6 +438,34 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m return $sqls; } + /** + * Based on the provided two contact_ids and a set of tables, remove the + * belongings of the other contact and of their relations. + * + * @param int $otherID + * @param bool $tables + */ + public static function removeContactBelongings($otherID, $tables) { + // CRM-20421: Removing Inherited memberships when memberships of parent are not migrated to new contact. + if (in_array("civicrm_membership", $tables)) { + $membershipIDs = CRM_Utils_Array::collect('id', + CRM_Utils_Array::value('values', + civicrm_api3("Membership", "get", array( + "contact_id" => $otherID, + "return" => "id", + ) + ) + )); + + if (!empty($membershipIDs)) { + civicrm_api3("Membership", "get", array( + 'owner_membership_id' => array('IN' => $membershipIDs), + 'api.Membership.delete' => array('id' => '$value.id'), + )); + } + } + } + /** * Based on the provided two contact_ids and a set of tables, move the * belongings of the other contact to the main one. @@ -467,12 +504,15 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $mainId = (int) $mainId; $otherId = (int) $otherId; + $multi_value_tables = array_keys(CRM_Dedupe_Merger::getMultiValueCustomSets('cidRefs')); $sqls = array(); foreach ($affected as $table) { - // skipping non selected custom table's value migration - if ($customTableToCopyFrom !== NULL && in_array($table, $customTables) && !in_array($table, $customTableToCopyFrom)) { - continue; + // skipping non selected single-value custom table's value migration + if (!in_array($table, $multi_value_tables)) { + if ($customTableToCopyFrom !== NULL && in_array($table, $customTables) && !in_array($table, $customTableToCopyFrom)) { + continue; + } } // Call custom processing function for objects that require it @@ -1481,7 +1521,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $qfZeroBug = 'e8cddb72-a257-11dc-b9cc-0016d3330ee9'; $relTables = CRM_Dedupe_Merger::relTables(); - $submittedCustomFields = $moveTables = $locationMigrationInfo = $tableOperations = array(); + $submittedCustomFields = $moveTables = $locationMigrationInfo = $tableOperations = $removeTables = array(); foreach ($migrationInfo as $key => $value) { if ($value == $qfZeroBug) { @@ -1509,6 +1549,9 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } } } + elseif (substr($key, 0, 15) == 'move_rel_table_' and $value == '0') { + $removeTables = array_merge($moveTables, $relTables[substr($key, 5)]['tables']); + } } self::mergeLocations($mainId, $otherId, $locationMigrationInfo, $migrationInfo); @@ -1517,6 +1560,13 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m CRM_Dedupe_Merger::moveContactBelongings($mainId, $otherId, $moveTables, $tableOperations, $customTablesToCopyValues); unset($moveTables, $tableOperations); + // **** Do table related removals + if (!empty($removeTables)) { + // **** CRM-20421 + CRM_Dedupe_Merger::removeContactBelongings($otherId, $removeTables); + $removeTables = array(); + } + // FIXME: fix gender, prefix and postfix, so they're edible by createProfileContact() $names['gender'] = array('newName' => 'gender_id', 'groupName' => 'gender'); $names['individual_prefix'] = array('newName' => 'prefix_id', 'groupName' => 'individual_prefix'); diff --git a/civicrm/CRM/Event/ActionMapping.php b/civicrm/CRM/Event/ActionMapping.php index c1a314a662e56a9ceabff8b5655f51b9b097a179..b0425ebc16826ed58b268cd62ce6988e2ba2259b 100644 --- a/civicrm/CRM/Event/ActionMapping.php +++ b/civicrm/CRM/Event/ActionMapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Event/BAO/Event.php b/civicrm/CRM/Event/BAO/Event.php index 48bbebed69b70f9ab56f1023e59ff251f1741f56..e7d430cceaece17638b8320255796ccd765df8ef 100644 --- a/civicrm/CRM/Event/BAO/Event.php +++ b/civicrm/CRM/Event/BAO/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Event_BAO_Event extends CRM_Event_DAO_Event { diff --git a/civicrm/CRM/Event/BAO/Participant.php b/civicrm/CRM/Event/BAO/Participant.php index 29ee23386594138f694202a49d2e9509adad6ea7..1a8edcc2a9f2e7b97cf51262790009187b35707c 100644 --- a/civicrm/CRM/Event/BAO/Participant.php +++ b/civicrm/CRM/Event/BAO/Participant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { @@ -1845,7 +1845,7 @@ WHERE civicrm_participant.contact_id = {$contactID} AND * @param int $discountedPriceFieldOptionID * ID of the civicrm_price_field_value field for the discount id. */ - public static function createDiscountTrxn($eventID, $contributionParams, $feeLevel, $discountedPriceFieldOptionID) { + public static function createDiscountTrxn($eventID, $contributionParams, $feeLevel, $discountedPriceFieldOptionID = NULL) { $financialTypeID = $contributionParams['contribution']->financial_type_id; $total_amount = $contributionParams['total_amount']; diff --git a/civicrm/CRM/Event/BAO/ParticipantPayment.php b/civicrm/CRM/Event/BAO/ParticipantPayment.php index 40cba7d8a4c882245e0765b3bb32e25edfc82a9b..dc9dcfd12cc3aa93566e07ae0f5e28e8f15ea494 100644 --- a/civicrm/CRM/Event/BAO/ParticipantPayment.php +++ b/civicrm/CRM/Event/BAO/ParticipantPayment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -41,14 +41,15 @@ class CRM_Event_BAO_ParticipantPayment extends CRM_Event_DAO_ParticipantPayment * @param array $params * of values to initialize the record with. * @param array $ids - * with one values of id for this participantPayment record (for update). + * deprecated array. * * @return object * the partcipant payment record */ - public static function create(&$params, &$ids) { - if (isset($ids['id'])) { - CRM_Utils_Hook::pre('edit', 'ParticipantPayment', $ids['id'], $params); + public static function create(&$params, $ids = []) { + $id = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('id', $ids)); + if ($id) { + CRM_Utils_Hook::pre('edit', 'ParticipantPayment', $id, $params); } else { CRM_Utils_Hook::pre('create', 'ParticipantPayment', NULL, $params); @@ -56,16 +57,21 @@ class CRM_Event_BAO_ParticipantPayment extends CRM_Event_DAO_ParticipantPayment $participantPayment = new CRM_Event_BAO_ParticipantPayment(); $participantPayment->copyValues($params); - if (isset($ids['id'])) { - $participantPayment->id = CRM_Utils_Array::value('id', $ids); + if ($id) { + $participantPayment->id = $id; } else { $participantPayment->find(TRUE); } $participantPayment->save(); - if (isset($ids['id'])) { - CRM_Utils_Hook::post('edit', 'ParticipantPayment', $ids['id'], $participantPayment); + if (empty($participantPayment->contribution_id)) { + // For an id update contribution_id may be unknown. We want it + // further down so perhaps get it before the hooks. + $participantPayment->find(TRUE); + } + if ($id) { + CRM_Utils_Hook::post('edit', 'ParticipantPayment', $id, $participantPayment); } else { CRM_Utils_Hook::post('create', 'ParticipantPayment', NULL, $participantPayment); diff --git a/civicrm/CRM/Event/BAO/ParticipantStatusType.php b/civicrm/CRM/Event/BAO/ParticipantStatusType.php index 434e02762dfe7b3d3cbf72b6fe42f817d0bf752e..73790bac2a80a27cd2e4e28b1d6a26ba796da03c 100644 --- a/civicrm/CRM/Event/BAO/ParticipantStatusType.php +++ b/civicrm/CRM/Event/BAO/ParticipantStatusType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/BAO/Query.php b/civicrm/CRM/Event/BAO/Query.php index c542cff51d344d9ad09181fc095d52a2c3deb041..ef04f00564094324af153d0cf66dd7650c6b4bd0 100644 --- a/civicrm/CRM/Event/BAO/Query.php +++ b/civicrm/CRM/Event/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Badge.php b/civicrm/CRM/Event/Badge.php index 5791e72e392e23226a2fe7c62e6766e69b15339f..c9ef8a6ef006eee3ae1b170cebe8109c564d9045 100644 --- a/civicrm/CRM/Event/Badge.php +++ b/civicrm/CRM/Event/Badge.php @@ -32,7 +32,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Badge/NameTent.php b/civicrm/CRM/Event/Badge/NameTent.php index ee38f5848a30f836ce513f6e50c65bbf3d35b6f4..c7ee776a036a55bccd66af9e636581a0a4009314 100644 --- a/civicrm/CRM/Event/Badge/NameTent.php +++ b/civicrm/CRM/Event/Badge/NameTent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Event/Badge/Simple.php b/civicrm/CRM/Event/Badge/Simple.php index 8a5825b1a246a1cdd5438013e23e1818cbe5beac..c4705804c0102b258910bb6c18dcf397ef03b213 100644 --- a/civicrm/CRM/Event/Badge/Simple.php +++ b/civicrm/CRM/Event/Badge/Simple.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Event/Cart/BAO/MerParticipant.php b/civicrm/CRM/Event/Cart/BAO/MerParticipant.php index e0385666d9b6021973207f02eecf674c1f069a9e..67586325940bcf6c6e9b4c0fcd60eb8731462498 100644 --- a/civicrm/CRM/Event/Cart/BAO/MerParticipant.php +++ b/civicrm/CRM/Event/Cart/BAO/MerParticipant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Event/Cart/DAO/Cart.php b/civicrm/CRM/Event/Cart/DAO/Cart.php index 9fc151b89541a24d8515feee6b256b52dd8fb6f1..a5c2202e5200fe1faa7180471d3e02e5dbf859d1 100644 --- a/civicrm/CRM/Event/Cart/DAO/Cart.php +++ b/civicrm/CRM/Event/Cart/DAO/Cart.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Event/Cart/Cart.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Event/Cart/DAO/EventInCart.php b/civicrm/CRM/Event/Cart/DAO/EventInCart.php index a10b01c195b0c81118d4851d6a8d187230532661..c66281eeab3d5606d9d962594670a5c75d8c9267 100644 --- a/civicrm/CRM/Event/Cart/DAO/EventInCart.php +++ b/civicrm/CRM/Event/Cart/DAO/EventInCart.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Event/Cart/EventInCart.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Event/Cart/Form/Checkout/Payment.php b/civicrm/CRM/Event/Cart/Form/Checkout/Payment.php index 51f9126b9da5238dd0980a2dbf466bd33106a182..a4e4a5f1ee5ea4cbafc646ffd93d38443a17c55f 100644 --- a/civicrm/CRM/Event/Cart/Form/Checkout/Payment.php +++ b/civicrm/CRM/Event/Cart/Form/Checkout/Payment.php @@ -86,8 +86,7 @@ class CRM_Event_Cart_Form_Checkout_Payment extends CRM_Event_Cart_Form_Cart { 'participant_id' => $participant->id, 'contribution_id' => $params['contributionID'], ); - $ids = array(); - CRM_Event_BAO_ParticipantPayment::create($payment_params, $ids); + CRM_Event_BAO_ParticipantPayment::create($payment_params); } $transaction->commit(); @@ -670,10 +669,7 @@ class CRM_Event_Cart_Form_Checkout_Payment extends CRM_Event_Cart_Form_Cart { $contribParams['payment_processor'] = $this->_paymentProcessor['id']; } - $contribution = &CRM_Contribute_BAO_Contribution::add($contribParams); - if (is_a($contribution, 'CRM_Core_Error')) { - CRM_Core_Error::fatal(ts("There was an error creating a contribution record for your event. Please report this error to the webmaster. Details: %1", array(1 => $contribution->getMessages($contribution)))); - } + $contribution = CRM_Contribute_BAO_Contribution::add($contribParams); $mer_participant->contribution_id = $contribution->id; $params['contributionID'] = $contribution->id; diff --git a/civicrm/CRM/Event/Controller/Registration.php b/civicrm/CRM/Event/Controller/Registration.php index 7d0d9cded48d10769f3cb6c0a1aa9b81ceca23f0..46e89c3a3ed4ac6a6cc0a92f47ea878dd328f71d 100644 --- a/civicrm/CRM/Event/Controller/Registration.php +++ b/civicrm/CRM/Event/Controller/Registration.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Controller/Search.php b/civicrm/CRM/Event/Controller/Search.php index f33cfdce1f36d3f9e6b58ef2f7c79be3ca88efbb..f158f08345c9bdaa894596a7bb67ca4579f8d5ac 100644 --- a/civicrm/CRM/Event/Controller/Search.php +++ b/civicrm/CRM/Event/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/DAO/Event.php b/civicrm/CRM/Event/DAO/Event.php index e132610e1e2189d8c878410ac6f0ace37f9a8a3e..caa4b866f95feed0959945b451176cbdde7cd330 100644 --- a/civicrm/CRM/Event/DAO/Event.php +++ b/civicrm/CRM/Event/DAO/Event.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Event/Event.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Event/DAO/Participant.php b/civicrm/CRM/Event/DAO/Participant.php index f67959c5b4586227c51b7eda9354ec048676176b..0b7a3c25efbe337f6116bdd4b267013b02745826 100644 --- a/civicrm/CRM/Event/DAO/Participant.php +++ b/civicrm/CRM/Event/DAO/Participant.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Event/Participant.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Event/DAO/ParticipantPayment.php b/civicrm/CRM/Event/DAO/ParticipantPayment.php index 477459d7c175ac9b35688a41f7a60e24b7bfa3fa..feb8889ecd73d96bf37e970a0d7d7a0983f81f2c 100644 --- a/civicrm/CRM/Event/DAO/ParticipantPayment.php +++ b/civicrm/CRM/Event/DAO/ParticipantPayment.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Event/ParticipantPayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Event/DAO/ParticipantStatusType.php b/civicrm/CRM/Event/DAO/ParticipantStatusType.php index a0bff1b197e12aa14248a5297a2344b8de86b797..f86e49eec6f4d73b8db910ce2779a438d2fe43b9 100644 --- a/civicrm/CRM/Event/DAO/ParticipantStatusType.php +++ b/civicrm/CRM/Event/DAO/ParticipantStatusType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Event/ParticipantStatusType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Event/Form/EventFees.php b/civicrm/CRM/Event/Form/EventFees.php index 216f97ce258d100188b8ed5a6fb08e2c673e073b..618f82baba03f688ad53cd513f06fa7a359f81a2 100644 --- a/civicrm/CRM/Event/Form/EventFees.php +++ b/civicrm/CRM/Event/Form/EventFees.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/ManageEvent.php b/civicrm/CRM/Event/Form/ManageEvent.php index d285a74cc704701ff98d86ab7eeb1842c37e1206..94c41be19eecb433f1428cf450c317a87aebbaf8 100644 --- a/civicrm/CRM/Event/Form/ManageEvent.php +++ b/civicrm/CRM/Event/Form/ManageEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/ManageEvent/Conference.php b/civicrm/CRM/Event/Form/ManageEvent/Conference.php index f15b66cb4b4e83ad59a3b9266b43c73bc0d3d6e8..e0fa8d2c2f8eb29e8ca242d95d22758d044090b2 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Conference.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Conference.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/ManageEvent/Delete.php b/civicrm/CRM/Event/Form/ManageEvent/Delete.php index e74c31f70ffed04d75c35078b4763aa2d8cd5fb1..4703816c6e9b150fafd9ed4e91d953cf5a859a97 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Delete.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php b/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php index 4c665a3d2972ce537ad1c25000aad4fe89fef52b..463541fbdd5b6c86bb174f3788edd543dcd5d408 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php +++ b/civicrm/CRM/Event/Form/ManageEvent/EventInfo.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/ManageEvent/Fee.php b/civicrm/CRM/Event/Form/ManageEvent/Fee.php index 8b024d73e202f0c54ff3eaa21547c9f1250fa49a..86f406c622e0988c8de47d3d7e01c973565172fe 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Fee.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Fee.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/ManageEvent/Location.php b/civicrm/CRM/Event/Form/ManageEvent/Location.php index 9fccb5fa41bdec975993532d8cabd4afefe704b7..d8d148416ce348bbd70370fc53585efe6e94de6a 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Location.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Location.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/ManageEvent/Registration.php b/civicrm/CRM/Event/Form/ManageEvent/Registration.php index 9634feef78f841ecd4ad9669c82059e9c247d948..ca54320d9c14988f71e614f2a85fc5cb71f157b7 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/Registration.php +++ b/civicrm/CRM/Event/Form/ManageEvent/Registration.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/ManageEvent/ScheduleReminders.php b/civicrm/CRM/Event/Form/ManageEvent/ScheduleReminders.php index aa8e69182bd011f13cefd023a5e784c32547744e..46e115efcccd700c54805130b1d1455dd35087af 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/ScheduleReminders.php +++ b/civicrm/CRM/Event/Form/ManageEvent/ScheduleReminders.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/ManageEvent/TabHeader.php b/civicrm/CRM/Event/Form/ManageEvent/TabHeader.php index a818a54e481ff291b22c928902db699ca684218f..15f42eb4723668359f4f52e841206ccdcd05c663 100644 --- a/civicrm/CRM/Event/Form/ManageEvent/TabHeader.php +++ b/civicrm/CRM/Event/Form/ManageEvent/TabHeader.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Participant.php b/civicrm/CRM/Event/Form/Participant.php index b7958bb4a0780a42cf064a0aaecbd47ae2f7f78e..05596f1f06f4381dd08cb7c9831bb4d7e0c85e4c 100644 --- a/civicrm/CRM/Event/Form/Participant.php +++ b/civicrm/CRM/Event/Form/Participant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -1308,9 +1308,8 @@ class CRM_Event_Form_Participant extends CRM_Contribute_Form_AbstractEditPayment 'participant_id' => $participants[0]->id, 'contribution_id' => $contribution->id, ); - $ids = array(); - CRM_Event_BAO_ParticipantPayment::create($paymentParticipant, $ids); + CRM_Event_BAO_ParticipantPayment::create($paymentParticipant); $this->_contactIds[] = $this->_contactId; } else { diff --git a/civicrm/CRM/Event/Form/ParticipantFeeSelection.php b/civicrm/CRM/Event/Form/ParticipantFeeSelection.php index e4ec1597137ad52edb6a4fa4137109e099bc3974..626b906ab33bbd753b749cea0e2bc1e72a25ee6e 100644 --- a/civicrm/CRM/Event/Form/ParticipantFeeSelection.php +++ b/civicrm/CRM/Event/Form/ParticipantFeeSelection.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/ParticipantView.php b/civicrm/CRM/Event/Form/ParticipantView.php index c7d22619a65cebfafcda7f1c47cd2b493c2e6baf..ea7f269b4075c617eca80c40617057a75f3b0335 100644 --- a/civicrm/CRM/Event/Form/ParticipantView.php +++ b/civicrm/CRM/Event/Form/ParticipantView.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Registration.php b/civicrm/CRM/Event/Form/Registration.php index 34d840bd2187f7bdc8bdfba5debf5dda23fcb813..67d25120ea35743a2670cd32ca03eb710bc06f0b 100644 --- a/civicrm/CRM/Event/Form/Registration.php +++ b/civicrm/CRM/Event/Form/Registration.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -761,8 +761,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form { 'participant_id' => $participant->id, 'contribution_id' => $contribution->id, ); - $ids = array(); - $paymentPartcipant = CRM_Event_BAO_ParticipantPayment::create($paymentParams, $ids); + $paymentPartcipant = CRM_Event_BAO_ParticipantPayment::create($paymentParams); } //set only primary participant's params for transfer checkout. diff --git a/civicrm/CRM/Event/Form/Registration/AdditionalParticipant.php b/civicrm/CRM/Event/Form/Registration/AdditionalParticipant.php index f23867627d110d7c4ae1dd3137fa1f697a581392..ce698260f1e62064e12c7313a4d6350c8262864b 100644 --- a/civicrm/CRM/Event/Form/Registration/AdditionalParticipant.php +++ b/civicrm/CRM/Event/Form/Registration/AdditionalParticipant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/Registration/Confirm.php b/civicrm/CRM/Event/Form/Registration/Confirm.php index 43ed2923d26874acc4f48814bde32646ab212c4f..9780f397e8998440562998b52f5ce04426ec1a5c 100644 --- a/civicrm/CRM/Event/Form/Registration/Confirm.php +++ b/civicrm/CRM/Event/Form/Registration/Confirm.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php b/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php index 2d134f3950dcf30a5f0f8660a61b0f020b8d6ae1..dd9db82e18a6cab5d9137e3405779a3d037587e0 100644 --- a/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php +++ b/civicrm/CRM/Event/Form/Registration/ParticipantConfirm.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Registration/Register.php b/civicrm/CRM/Event/Form/Registration/Register.php index 109e1ba28997d0e758c7be60f52841fd1e13c0fd..8d75931212da22d17bc56831d3ce560023eece66 100644 --- a/civicrm/CRM/Event/Form/Registration/Register.php +++ b/civicrm/CRM/Event/Form/Registration/Register.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/Registration/ThankYou.php b/civicrm/CRM/Event/Form/Registration/ThankYou.php index 3a29a96eeaef102d46d4e3c24bfd3f9f617aaaf6..47eb9929b0bc9192f96f475742db87f5d8818cf0 100644 --- a/civicrm/CRM/Event/Form/Registration/ThankYou.php +++ b/civicrm/CRM/Event/Form/Registration/ThankYou.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Search.php b/civicrm/CRM/Event/Form/Search.php index 282ae87d8220701377fe7a1ee3f477723d3626c6..2243780d321bd722a6ca69ed51128daf16ce4b31 100644 --- a/civicrm/CRM/Event/Form/Search.php +++ b/civicrm/CRM/Event/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/SearchEvent.php b/civicrm/CRM/Event/Form/SearchEvent.php index 4b59a7b0e9d957af6779d19d13d92387566068e5..24e4ac1dfe0688aa5a7dc82351498c24ab816e8f 100644 --- a/civicrm/CRM/Event/Form/SearchEvent.php +++ b/civicrm/CRM/Event/Form/SearchEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/SelfSvcTransfer.php b/civicrm/CRM/Event/Form/SelfSvcTransfer.php index 4469b0ef4ed69fa106d244b90d8734070ab451dc..a81ad6469f23f3ebf15c7b1b18a479294fe104fb 100644 --- a/civicrm/CRM/Event/Form/SelfSvcTransfer.php +++ b/civicrm/CRM/Event/Form/SelfSvcTransfer.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/SelfSvcUpdate.php b/civicrm/CRM/Event/Form/SelfSvcUpdate.php index 693c53f19908d92aabeae3e1140e196a2e67342b..72a1374cb25b9430cc74a6f339038ae3ea11c61e 100644 --- a/civicrm/CRM/Event/Form/SelfSvcUpdate.php +++ b/civicrm/CRM/Event/Form/SelfSvcUpdate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task.php b/civicrm/CRM/Event/Form/Task.php index 3bc742a451d1ce6c77c2033d54a9fa760f3e25a4..5c5eb7aa4a330bbb9fa5c347f5f8a591b1bc37ba 100644 --- a/civicrm/CRM/Event/Form/Task.php +++ b/civicrm/CRM/Event/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/AddToGroup.php b/civicrm/CRM/Event/Form/Task/AddToGroup.php index 10b3034a722a60c2947844121ecf21887fb1276a..55e9cde4645693b0762e5d391efc85745d842704 100644 --- a/civicrm/CRM/Event/Form/Task/AddToGroup.php +++ b/civicrm/CRM/Event/Form/Task/AddToGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/Badge.php b/civicrm/CRM/Event/Form/Task/Badge.php index 49c19de16e2f62208034f4c094d706c1e7610df3..f803648a4cdb3368a5ea69172598f36948c2ce0f 100644 --- a/civicrm/CRM/Event/Form/Task/Badge.php +++ b/civicrm/CRM/Event/Form/Task/Badge.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Event/Form/Task/Batch.php b/civicrm/CRM/Event/Form/Task/Batch.php index 1e00bff6203fab373f152212f63da368b85e1412..15ef815a84bce6c65d6b17eefe4bedddb2f7b9ac 100644 --- a/civicrm/CRM/Event/Form/Task/Batch.php +++ b/civicrm/CRM/Event/Form/Task/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/Cancel.php b/civicrm/CRM/Event/Form/Task/Cancel.php index baf747583ccc2a8840301a627a0e85cd4ed18ac7..32347a5994795fc8770cd28be726fee05061712a 100644 --- a/civicrm/CRM/Event/Form/Task/Cancel.php +++ b/civicrm/CRM/Event/Form/Task/Cancel.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/Delete.php b/civicrm/CRM/Event/Form/Task/Delete.php index 275f77032de39c8c8f93f484ae604acc853bd011..92c24ccf437e07d6d9b1d0a13a1683194b020cde 100644 --- a/civicrm/CRM/Event/Form/Task/Delete.php +++ b/civicrm/CRM/Event/Form/Task/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/Email.php b/civicrm/CRM/Event/Form/Task/Email.php index 712a88aa7680a89333fffb79b34106d5d0d59620..47d6c093b8f54a5d43636cfaef35dea65b47ccb9 100644 --- a/civicrm/CRM/Event/Form/Task/Email.php +++ b/civicrm/CRM/Event/Form/Task/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: Email.php 45499 2013-02-08 12:31:05Z kurund $ */ diff --git a/civicrm/CRM/Event/Form/Task/PDF.php b/civicrm/CRM/Event/Form/Task/PDF.php index 9ba928aefb7473930629aa4ae1da341414affe2e..cf29285e24f91ac29399ea475a69b21400b8e7d0 100644 --- a/civicrm/CRM/Event/Form/Task/PDF.php +++ b/civicrm/CRM/Event/Form/Task/PDF.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: PDF.php 45499 2013-02-08 12:31:05Z kurund $ */ diff --git a/civicrm/CRM/Event/Form/Task/ParticipantStatus.php b/civicrm/CRM/Event/Form/Task/ParticipantStatus.php index c78339b9f3a431b2b0c7e58bc5a130f802c4db31..93606e48000e698846d00718d2dff126179ab602 100644 --- a/civicrm/CRM/Event/Form/Task/ParticipantStatus.php +++ b/civicrm/CRM/Event/Form/Task/ParticipantStatus.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/PickProfile.php b/civicrm/CRM/Event/Form/Task/PickProfile.php index a9bef04f9cd0ffe1fdd662eb93ae918a91e2c784..7b53793e8940f0cbb371f37407ce2a139e27ff96 100644 --- a/civicrm/CRM/Event/Form/Task/PickProfile.php +++ b/civicrm/CRM/Event/Form/Task/PickProfile.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/Print.php b/civicrm/CRM/Event/Form/Task/Print.php index da18e47b9741a238ee41d6779503c0b418eda1d5..a1fee215a3c7e5916d186ae6bacdc7b2d8f966d4 100644 --- a/civicrm/CRM/Event/Form/Task/Print.php +++ b/civicrm/CRM/Event/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/Result.php b/civicrm/CRM/Event/Form/Task/Result.php index 0c9c8734b1d58471948199b8b1a18f34044aae59..40d724191125d5179c8b8d242bbd6ab8c1bab136 100644 --- a/civicrm/CRM/Event/Form/Task/Result.php +++ b/civicrm/CRM/Event/Form/Task/Result.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/SaveSearch.php b/civicrm/CRM/Event/Form/Task/SaveSearch.php index b3f193a27d74d08ceda2005bfb167667c107f2cf..7caf2b57b9517f5bc2e52201025678ce64966a50 100644 --- a/civicrm/CRM/Event/Form/Task/SaveSearch.php +++ b/civicrm/CRM/Event/Form/Task/SaveSearch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/SaveSearch/Update.php b/civicrm/CRM/Event/Form/Task/SaveSearch/Update.php index 1687c84798b01526aa3d6b67340863834617eb0c..3ecaf9f49f513ecf102fc4fdf685df1509d8181a 100644 --- a/civicrm/CRM/Event/Form/Task/SaveSearch/Update.php +++ b/civicrm/CRM/Event/Form/Task/SaveSearch/Update.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Form/Task/SearchTaskHookSample.php b/civicrm/CRM/Event/Form/Task/SearchTaskHookSample.php index e18c84f08929486522d66ff5cd22d49cdcb300d0..ae9d0d35cc903ef6ec866245d22b68db5a171b8c 100644 --- a/civicrm/CRM/Event/Form/Task/SearchTaskHookSample.php +++ b/civicrm/CRM/Event/Form/Task/SearchTaskHookSample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Import/Controller.php b/civicrm/CRM/Event/Import/Controller.php index 43b355623698f1637e13b0be6e280defb4499503..a792db69f482b5da2d360b380ae64413238e4a82 100644 --- a/civicrm/CRM/Event/Import/Controller.php +++ b/civicrm/CRM/Event/Import/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Import/Field.php b/civicrm/CRM/Event/Import/Field.php index a4ef9799669afff84a0a8d7783fec026fc11c4d5..3284e466dc75742335b0cd55ca97aa245d02bffb 100644 --- a/civicrm/CRM/Event/Import/Field.php +++ b/civicrm/CRM/Event/Import/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Event/Import/Form/DataSource.php b/civicrm/CRM/Event/Import/Form/DataSource.php index f3e17f716197add9b59759574be7c6270efa14ae..a6e5332613988fc799ded885b87f36ba536752bc 100644 --- a/civicrm/CRM/Event/Import/Form/DataSource.php +++ b/civicrm/CRM/Event/Import/Form/DataSource.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Import/Form/MapField.php b/civicrm/CRM/Event/Import/Form/MapField.php index 0751cbe0a60dc30a3e8be6eee9b87e8fb56f70cd..6cb388d59692611a6d96dcb7ac9705e7d0ae6af5 100644 --- a/civicrm/CRM/Event/Import/Form/MapField.php +++ b/civicrm/CRM/Event/Import/Form/MapField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Import/Form/Preview.php b/civicrm/CRM/Event/Import/Form/Preview.php index b42db7026fee208a0878df1daeec2ca65acb376b..1e97c841ec3c164b62bf52996f78497310acee74 100644 --- a/civicrm/CRM/Event/Import/Form/Preview.php +++ b/civicrm/CRM/Event/Import/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Import/Form/Summary.php b/civicrm/CRM/Event/Import/Form/Summary.php index 1a9abaef1ac61b1da8c86ebb8d61f87c374c6324..9c257f31b5c3fd0b10bcb8cf5315523d61aecdbb 100644 --- a/civicrm/CRM/Event/Import/Form/Summary.php +++ b/civicrm/CRM/Event/Import/Form/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Import/Parser.php b/civicrm/CRM/Event/Import/Parser.php index d723ca7f215d9d54d4bff4eabb6fa6a27d107bd7..258c29700f9179ff2f5367aa1ec5c799f907e0ff 100644 --- a/civicrm/CRM/Event/Import/Parser.php +++ b/civicrm/CRM/Event/Import/Parser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Import/Parser/Participant.php b/civicrm/CRM/Event/Import/Parser/Participant.php index 581ce7d95211bf752d540fc017f0f16190506fc1..e7f4fef2a52aa450bfd710f9550e7a51ca8cde6a 100644 --- a/civicrm/CRM/Event/Import/Parser/Participant.php +++ b/civicrm/CRM/Event/Import/Parser/Participant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Info.php b/civicrm/CRM/Event/Info.php index 1c574456b95d37cd502dd9aba9f79f274ab64322..d60578d2c1533a7e43d26c04b7cb2c40f2dca96b 100644 --- a/civicrm/CRM/Event/Info.php +++ b/civicrm/CRM/Event/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * abstract class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/AJAX.php b/civicrm/CRM/Event/Page/AJAX.php index 9f9af28663b5556a7359e8251b2644fdb042334e..0bbb25ff418eda4ed954647c92a975ebc35fe9bb 100644 --- a/civicrm/CRM/Event/Page/AJAX.php +++ b/civicrm/CRM/Event/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/DashBoard.php b/civicrm/CRM/Event/Page/DashBoard.php index 745ac1e70cdb49371228742c3eb77b4c202f7e6a..d116fd7d243a35dc9062c94f72447a0a1ad90580 100644 --- a/civicrm/CRM/Event/Page/DashBoard.php +++ b/civicrm/CRM/Event/Page/DashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/EventInfo.php b/civicrm/CRM/Event/Page/EventInfo.php index 8a7b54aa114e316d09356cf1bdb108ea6ce5def9..2f79010dc916e254dd3e0a47391ae1b518d49d03 100644 --- a/civicrm/CRM/Event/Page/EventInfo.php +++ b/civicrm/CRM/Event/Page/EventInfo.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -80,6 +80,10 @@ class CRM_Event_Page_EventInfo extends CRM_Core_Page { return CRM_Utils_System::permissionDenied(); } + if (!$values['event']['is_public']) { + CRM_Utils_System::addHTMLHead('<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">'); + } + if (!empty($values['event']['is_template'])) { // form is an Event Template CRM_Core_Error::fatal(ts('The page you requested is currently unavailable.')); diff --git a/civicrm/CRM/Event/Page/ICalendar.php b/civicrm/CRM/Event/Page/ICalendar.php index 8cdc8d16dc72249586db3a5e428af81b3b43b6eb..70f2aca5a86c418b6e64adfb3a343b6b07aae83c 100644 --- a/civicrm/CRM/Event/Page/ICalendar.php +++ b/civicrm/CRM/Event/Page/ICalendar.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/ManageEvent.php b/civicrm/CRM/Event/Page/ManageEvent.php index d3b670f960ca9dc7f3ee21081336083e7daa77b9..65f832f0c87c6c9ce690de8262cdf4cee79cf598 100644 --- a/civicrm/CRM/Event/Page/ManageEvent.php +++ b/civicrm/CRM/Event/Page/ManageEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/ParticipantListing.php b/civicrm/CRM/Event/Page/ParticipantListing.php index abaf12c7c625345405e7dfee8a44cdf5cee463fd..51b630e183510e8027e7edad3e385a10513f30c0 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing.php +++ b/civicrm/CRM/Event/Page/ParticipantListing.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/ParticipantListing/Name.php b/civicrm/CRM/Event/Page/ParticipantListing/Name.php index c32386279375b92d7579c72433c3553487cef46b..68fd719074cf38cc14c170085782b4db38b5d57b 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing/Name.php +++ b/civicrm/CRM/Event/Page/ParticipantListing/Name.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/ParticipantListing/NameAndEmail.php b/civicrm/CRM/Event/Page/ParticipantListing/NameAndEmail.php index 4fd01ed5c803cfed8f0f7dbaa04f34f75b511460..dab6f8eb5b9309ca776d4a258089e13dfc67a08c 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing/NameAndEmail.php +++ b/civicrm/CRM/Event/Page/ParticipantListing/NameAndEmail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php b/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php index 585814f2c80fb67f4f30f32c804e804bbb331868..e68a20b3b8aadf64ffd9f4f36b634500f36ca3a8 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php +++ b/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/ParticipantListing/Simple.php b/civicrm/CRM/Event/Page/ParticipantListing/Simple.php index 3f7f75957e2ab4ca49010549c1a66b8371443347..d384f7e415338d3487c223f373fd6e1af0788071 100644 --- a/civicrm/CRM/Event/Page/ParticipantListing/Simple.php +++ b/civicrm/CRM/Event/Page/ParticipantListing/Simple.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/Tab.php b/civicrm/CRM/Event/Page/Tab.php index 7dd25d396afb052a6b0fed6ca4ffc8e6a3ec7dae..b538a16d53bbc9c9f303f2a67e155033188dbb73 100644 --- a/civicrm/CRM/Event/Page/Tab.php +++ b/civicrm/CRM/Event/Page/Tab.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Page/UserDashboard.php b/civicrm/CRM/Event/Page/UserDashboard.php index 23cf548d2675d78bd40fdba92f0c94ba9f8b3920..7837956ba36fd338f6e44f8b9d8371e20c081415 100644 --- a/civicrm/CRM/Event/Page/UserDashboard.php +++ b/civicrm/CRM/Event/Page/UserDashboard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/PseudoConstant.php b/civicrm/CRM/Event/PseudoConstant.php index 50e4e2e2224eb5caac006d6b175d0a6f4f0d8347..5064ae471c3933b996e20399045875e7ddf26191 100644 --- a/civicrm/CRM/Event/PseudoConstant.php +++ b/civicrm/CRM/Event/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Selector/Search.php b/civicrm/CRM/Event/Selector/Search.php index ce7ecfb53037c98e5e30d90ce453ce01a35145e8..015608e563c91bb1bd3ccb16c468823595093072 100644 --- a/civicrm/CRM/Event/Selector/Search.php +++ b/civicrm/CRM/Event/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/StateMachine/Registration.php b/civicrm/CRM/Event/StateMachine/Registration.php index 0df4e4925d2b9ed6f6f8638130aba525f4045889..dc9538a90f4b2415d4bb435d58e89930a88454df 100644 --- a/civicrm/CRM/Event/StateMachine/Registration.php +++ b/civicrm/CRM/Event/StateMachine/Registration.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/StateMachine/Search.php b/civicrm/CRM/Event/StateMachine/Search.php index 6347afed11786d5e2164325f09cb55a4aab58ea3..f2ad1d8e3ba213018a0bc93219d3797cf4d7326a 100644 --- a/civicrm/CRM/Event/StateMachine/Search.php +++ b/civicrm/CRM/Event/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Event/Task.php b/civicrm/CRM/Event/Task.php index 1637e0d9f59ce16ee0227ae3b347e8ec97814b3e..2aed7336deb07d9d2264a32f4aaffb406fd8831e 100644 --- a/civicrm/CRM/Event/Task.php +++ b/civicrm/CRM/Event/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Event/Tokens.php b/civicrm/CRM/Event/Tokens.php index 423dd79a1d7a474014e3227f4abf1c17703fff56..c1b68c8b7899ec6b320aabea88e58fd7386f7dc8 100644 --- a/civicrm/CRM/Event/Tokens.php +++ b/civicrm/CRM/Event/Tokens.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Export/BAO/Export.php b/civicrm/CRM/Export/BAO/Export.php index bf8ade7a92b910d84f0060c33a01ad0e13b776c6..132e9318c17d374dddaf3c13f2834dd7b801ae7f 100644 --- a/civicrm/CRM/Export/BAO/Export.php +++ b/civicrm/CRM/Export/BAO/Export.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Export/Controller/Standalone.php b/civicrm/CRM/Export/Controller/Standalone.php index 0d3590ab6088de1301fb9135211487f9b770f3f3..4bca9bd46eb8503bf74f43bf1bc8453c6e1662f7 100644 --- a/civicrm/CRM/Export/Controller/Standalone.php +++ b/civicrm/CRM/Export/Controller/Standalone.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Export/Form/Map.php b/civicrm/CRM/Export/Form/Map.php index 066401d5680c54176253209c4a95d5dd7f0b758a..b4428e703e5c47873b584f3e8f38f6e1366fa19b 100644 --- a/civicrm/CRM/Export/Form/Map.php +++ b/civicrm/CRM/Export/Form/Map.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Export/Form/Select.php b/civicrm/CRM/Export/Form/Select.php index e5ee25856fc602f3327d9c300acb8a5f6975a31a..732391d6dd76e2f498bb16e8fd682aea4d16ace1 100644 --- a/civicrm/CRM/Export/Form/Select.php +++ b/civicrm/CRM/Export/Form/Select.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -70,8 +70,6 @@ class CRM_Export_Form_Select extends CRM_Core_Form { public $_componentTable; - public $_customSearchID; - /** * Build all the data structures needed to build the form. * @@ -83,7 +81,13 @@ class CRM_Export_Form_Select extends CRM_Core_Form { $this->preventAjaxSubmit(); //special case for custom search, directly give option to download csv file - $this->_customSearchID = $this->get('customSearchID'); + $customSearchID = $this->get('customSearchID'); + if ($customSearchID) { + CRM_Export_BAO_Export::exportCustom($this->get('customSearchClass'), + $this->get('formValues'), + $this->get(CRM_Utils_Sort::SORT_ORDER) + ); + } $this->_selectAll = FALSE; $this->_exportMode = self::CONTACT_EXPORT; @@ -95,11 +99,7 @@ class CRM_Export_Form_Select extends CRM_Core_Form { $isStandalone = $formName == 'CRM_Export_StateMachine_Standalone'; // get the submitted values based on search - if ($this->_customSearchID) { - $values = $this->get('formValues'); - $this->assign('exportCustomSearchField', TRUE); - } - elseif ($this->_action == CRM_Core_Action::ADVANCED) { + if ($this->_action == CRM_Core_Action::ADVANCED) { $values = $this->controller->exportValues('Advanced'); } elseif ($this->_action == CRM_Core_Action::PROFILE) { @@ -231,7 +231,7 @@ FROM {$this->_componentTable} $exportOptions = $mergeOptions = $postalMailing = array(); $exportOptions[] = $this->createElement('radio', NULL, NULL, - ts('Export %1 fields', array(1 => empty($this->_customSearchID) ? 'PRIMARY' : 'custom search')), + ts('Export PRIMARY fields'), self::EXPORT_ALL, array('onClick' => 'showMappingOption( );') ); @@ -396,28 +396,20 @@ FROM {$this->_componentTable} } if ($exportOption == self::EXPORT_ALL) { - if ($this->_customSearchID) { - CRM_Export_BAO_Export::exportCustom($this->get('customSearchClass'), - $this->get('formValues'), - $this->get(CRM_Utils_Sort::SORT_ORDER) - ); - } - else { - CRM_Export_BAO_Export::exportComponents($this->_selectAll, - $this->_componentIds, - (array) $this->get('queryParams'), - $this->get(CRM_Utils_Sort::SORT_ORDER), - NULL, - $this->get('returnProperties'), - $this->_exportMode, - $this->_componentClause, - $this->_componentTable, - $mergeSameAddress, - $mergeSameHousehold, - $exportParams, - $this->get('queryOperator') - ); - } + CRM_Export_BAO_Export::exportComponents($this->_selectAll, + $this->_componentIds, + (array) $this->get('queryParams'), + $this->get(CRM_Utils_Sort::SORT_ORDER), + NULL, + $this->get('returnProperties'), + $this->_exportMode, + $this->_componentClause, + $this->_componentTable, + $mergeSameAddress, + $mergeSameHousehold, + $exportParams, + $this->get('queryOperator') + ); } //reset map page diff --git a/civicrm/CRM/Export/StateMachine/Standalone.php b/civicrm/CRM/Export/StateMachine/Standalone.php index 64d7d1a3c68c4480b18ce49522f3ad8117406b2e..9330c799d2eb2165cdc57687d6dc9aa8723af659 100644 --- a/civicrm/CRM/Export/StateMachine/Standalone.php +++ b/civicrm/CRM/Export/StateMachine/Standalone.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Export_StateMachine_Standalone extends CRM_Core_StateMachine { diff --git a/civicrm/CRM/Extension/Browser.php b/civicrm/CRM/Extension/Browser.php index 82d8f47606baae52228741e5918ca2bf1197c634..cd82c5f00bbf4d41a9e8805540885cf3e468f38d 100644 --- a/civicrm/CRM/Extension/Browser.php +++ b/civicrm/CRM/Extension/Browser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * system. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Browser { diff --git a/civicrm/CRM/Extension/ClassLoader.php b/civicrm/CRM/Extension/ClassLoader.php index 2cfe4c4956b3087886836e2ba8ef725a434a27b6..cd18e0e0b98195bbd01eb6aba6d28b1475358234 100644 --- a/civicrm/CRM/Extension/ClassLoader.php +++ b/civicrm/CRM/Extension/ClassLoader.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Extension/Container/Basic.php b/civicrm/CRM/Extension/Container/Basic.php index 1988de4ad587dbd19120f02a78bd3b36d2962fb2..db230c2772b3698ec053ea05159d790bd95ac83c 100644 --- a/civicrm/CRM/Extension/Container/Basic.php +++ b/civicrm/CRM/Extension/Container/Basic.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Extension/Container/Collection.php b/civicrm/CRM/Extension/Container/Collection.php index 91169296052fe85d8851ca6ed7ad71db5a44dbd4..abc01cbf600bd0b785a90cc80bf1725bcd6fe608 100644 --- a/civicrm/CRM/Extension/Container/Collection.php +++ b/civicrm/CRM/Extension/Container/Collection.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Extension/Container/Default.php b/civicrm/CRM/Extension/Container/Default.php index 4b3f2be9a446f17902b0ecf68445655be797f9db..e902b35d00af3e9aa7e26c997a572cb94ba6e9a1 100644 --- a/civicrm/CRM/Extension/Container/Default.php +++ b/civicrm/CRM/Extension/Container/Default.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Extension/Container/Interface.php b/civicrm/CRM/Extension/Container/Interface.php index c4df7c5ec188249e53c1a1f250737e2f4153ee85..c4380420d6bd9a274c56e6a7e705fa80e3faa5ea 100644 --- a/civicrm/CRM/Extension/Container/Interface.php +++ b/civicrm/CRM/Extension/Container/Interface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Extension/Container/Static.php b/civicrm/CRM/Extension/Container/Static.php index 8958c36ae4f088d24b981b08bf7c8b6561e5b9ea..f8557df44b180f0536d564f4bf86fc011c60a814 100644 --- a/civicrm/CRM/Extension/Container/Static.php +++ b/civicrm/CRM/Extension/Container/Static.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Extension/Downloader.php b/civicrm/CRM/Extension/Downloader.php index e071841ee6f7c7d2a580f2e7b8929b61ad8da513..aaa45877a96c948568ee52a780d39a0f9671db25 100644 --- a/civicrm/CRM/Extension/Downloader.php +++ b/civicrm/CRM/Extension/Downloader.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class handles downloads of remotely-provided extensions * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Downloader { /** diff --git a/civicrm/CRM/Extension/Exception.php b/civicrm/CRM/Extension/Exception.php index e037e810f6db58c24795897324a4ebecfabec1d9..8a69676e292234bb26da16f284cb136ab073030c 100644 --- a/civicrm/CRM/Extension/Exception.php +++ b/civicrm/CRM/Extension/Exception.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Class CRM_Extension_Exception * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Exception extends CRM_Core_Exception { } diff --git a/civicrm/CRM/Extension/Exception/DependencyException.php b/civicrm/CRM/Extension/Exception/DependencyException.php index b6bdb1f573b4c361b03d9693678809bf832e57fc..43bb6b3d99b3a56b2a6dc4735f904ec625fe2662 100644 --- a/civicrm/CRM/Extension/Exception/DependencyException.php +++ b/civicrm/CRM/Extension/Exception/DependencyException.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Extension/Exception/MissingException.php b/civicrm/CRM/Extension/Exception/MissingException.php index a8b9d6a2b5e16130c6a99eb93a211cebf354f0ec..640b1354ed8344bfa6da1c6c93367d5388f94f00 100644 --- a/civicrm/CRM/Extension/Exception/MissingException.php +++ b/civicrm/CRM/Extension/Exception/MissingException.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Extension/Exception/ParseException.php b/civicrm/CRM/Extension/Exception/ParseException.php index 39660414a626fa27b419bd96f7f1069ba1c18020..d90dc723ad98afb1cbaf74fb4b9a6058417b1e44 100644 --- a/civicrm/CRM/Extension/Exception/ParseException.php +++ b/civicrm/CRM/Extension/Exception/ParseException.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Extension/Info.php b/civicrm/CRM/Extension/Info.php index 0f672d33bb0899d49fee17c71062c9e19e9f2a7e..3a68dc69a56f48a762430924d0df332c356fb77e 100644 --- a/civicrm/CRM/Extension/Info.php +++ b/civicrm/CRM/Extension/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Metadata for an extension (e.g. the extension's "info.xml" file) * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Info { diff --git a/civicrm/CRM/Extension/Manager.php b/civicrm/CRM/Extension/Manager.php index 975c88b8e719880fe6e1d51b48ae4f0610a2a181..b7e7e3e0c19bf5604419bcea9f0f311a790a5c2c 100644 --- a/civicrm/CRM/Extension/Manager.php +++ b/civicrm/CRM/Extension/Manager.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * uninstalling extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Manager { /** diff --git a/civicrm/CRM/Extension/Manager/Base.php b/civicrm/CRM/Extension/Manager/Base.php index 6d2509e77b700eb27afe57ffa0c480ddadce5a7a..887cb00b0a2050288eeb11e7339eed9384ae7300 100644 --- a/civicrm/CRM/Extension/Manager/Base.php +++ b/civicrm/CRM/Extension/Manager/Base.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * uninstalling extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Manager_Base implements CRM_Extension_Manager_Interface { diff --git a/civicrm/CRM/Extension/Manager/Interface.php b/civicrm/CRM/Extension/Manager/Interface.php index 673a97fcf8b264c430e9ef5bebc439b077c8a73f..9488ecca9e57dd15351d2e3b32877875377871b2 100644 --- a/civicrm/CRM/Extension/Manager/Interface.php +++ b/civicrm/CRM/Extension/Manager/Interface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * uninstalling extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ interface CRM_Extension_Manager_Interface { /** diff --git a/civicrm/CRM/Extension/Manager/Module.php b/civicrm/CRM/Extension/Manager/Module.php index 0987350dfeafb69180cf25dffafab079a5203d00..abf58bac2e6d1dfe7c083e72f5bea75a9ed0c07e 100644 --- a/civicrm/CRM/Extension/Manager/Module.php +++ b/civicrm/CRM/Extension/Manager/Module.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class stores logic for managing CiviCRM extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Manager_Module extends CRM_Extension_Manager_Base { diff --git a/civicrm/CRM/Extension/Manager/Payment.php b/civicrm/CRM/Extension/Manager/Payment.php index 62adb58b5fba56a3ecff4b3e9e5a298a43ae78f9..f67cefc4c662930f9865adc6cf91b767e3df1cfa 100644 --- a/civicrm/CRM/Extension/Manager/Payment.php +++ b/civicrm/CRM/Extension/Manager/Payment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class stores logic for managing CiviCRM extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Manager_Payment extends CRM_Extension_Manager_Base { diff --git a/civicrm/CRM/Extension/Manager/Report.php b/civicrm/CRM/Extension/Manager/Report.php index 8f92b9a7cdf963cbb289514b70123ef238226ad9..c862ecdbb8b083b44c137361323f94bb3f1d1af4 100644 --- a/civicrm/CRM/Extension/Manager/Report.php +++ b/civicrm/CRM/Extension/Manager/Report.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class stores logic for managing CiviCRM extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Manager_Report extends CRM_Extension_Manager_Base { diff --git a/civicrm/CRM/Extension/Manager/Search.php b/civicrm/CRM/Extension/Manager/Search.php index 684d1027ca38a2ed5875d393a4c3859b03d142e6..697da77a08f4b02685228339108071be929e5cb9 100644 --- a/civicrm/CRM/Extension/Manager/Search.php +++ b/civicrm/CRM/Extension/Manager/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class stores logic for managing CiviCRM extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Manager_Search extends CRM_Extension_Manager_Base { diff --git a/civicrm/CRM/Extension/Mapper.php b/civicrm/CRM/Extension/Mapper.php index 12f624529b6a88902f234382f9280a93799f56fb..20de6eef769a11e0fb91f9069f36059fa8667e02 100644 --- a/civicrm/CRM/Extension/Mapper.php +++ b/civicrm/CRM/Extension/Mapper.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -42,7 +42,7 @@ * module-extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Mapper { diff --git a/civicrm/CRM/Extension/System.php b/civicrm/CRM/Extension/System.php index d83263a5795d6226777c45c4cd9e6f16704bdc9e..de312be0130c962e28a4ec102ad2b8962a4ed4b4 100644 --- a/civicrm/CRM/Extension/System.php +++ b/civicrm/CRM/Extension/System.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * system. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_System { private static $singleton; diff --git a/civicrm/CRM/Extension/Upgrades.php b/civicrm/CRM/Extension/Upgrades.php index 7e020578cbe5f77aeaada8debe24485607c4f816..9ac22074745bb761803d1d31e550b5662e64d4dd 100644 --- a/civicrm/CRM/Extension/Upgrades.php +++ b/civicrm/CRM/Extension/Upgrades.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class stores logic for managing schema upgrades in CiviCRM extensions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Extension_Upgrades { diff --git a/civicrm/CRM/Financial/BAO/ExportFormat.php b/civicrm/CRM/Financial/BAO/ExportFormat.php index cea6a3998663aaaa0f601f94c7a3a619a4c1bd00..77b66d0bc8f233681737e7940a92eabec6a8df0d 100644 --- a/civicrm/CRM/Financial/BAO/ExportFormat.php +++ b/civicrm/CRM/Financial/BAO/ExportFormat.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/BAO/ExportFormat/CSV.php b/civicrm/CRM/Financial/BAO/ExportFormat/CSV.php index bcb6768655cdc9e183ad73b0c9347eea4f508db1..ce9f0b7af6d99e224ea825a3efb8eace24e13eb0 100644 --- a/civicrm/CRM/Financial/BAO/ExportFormat/CSV.php +++ b/civicrm/CRM/Financial/BAO/ExportFormat/CSV.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/BAO/ExportFormat/IIF.php b/civicrm/CRM/Financial/BAO/ExportFormat/IIF.php index b6ab465cf8894bf47de23289cc9dcf7ce1c5337c..9b962ad6b3d3b4193b3c8f91caa449af932fc663 100644 --- a/civicrm/CRM/Financial/BAO/ExportFormat/IIF.php +++ b/civicrm/CRM/Financial/BAO/ExportFormat/IIF.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/BAO/FinancialAccount.php b/civicrm/CRM/Financial/BAO/FinancialAccount.php index 5b321634d8ce5c3e92f0e6421ba7fcc8792da87d..d439be5498a612b1e6062634b91f3cf45420a8d4 100644 --- a/civicrm/CRM/Financial/BAO/FinancialAccount.php +++ b/civicrm/CRM/Financial/BAO/FinancialAccount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Financial_BAO_FinancialAccount extends CRM_Financial_DAO_FinancialAccount { diff --git a/civicrm/CRM/Financial/BAO/FinancialItem.php b/civicrm/CRM/Financial/BAO/FinancialItem.php index 47fff81976c655875ca69d63e72c7dc289d416ae..0de2cf4d1668682602c1550806a7d3d00bb7671a 100644 --- a/civicrm/CRM/Financial/BAO/FinancialItem.php +++ b/civicrm/CRM/Financial/BAO/FinancialItem.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem { diff --git a/civicrm/CRM/Financial/BAO/FinancialType.php b/civicrm/CRM/Financial/BAO/FinancialType.php index 9b24f0381d1b985b52bc09303d8aeb34d4c8931d..78fe35bd30690977d5b90d680b9a16935fdfd0b6 100644 --- a/civicrm/CRM/Financial/BAO/FinancialType.php +++ b/civicrm/CRM/Financial/BAO/FinancialType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Financial_BAO_FinancialType extends CRM_Financial_DAO_FinancialType { diff --git a/civicrm/CRM/Financial/BAO/FinancialTypeAccount.php b/civicrm/CRM/Financial/BAO/FinancialTypeAccount.php index f26a3d9351d234decb0f024e12bf4a11bff5dfae..ffc641bee094e1381b450f963973e20955eff751 100644 --- a/civicrm/CRM/Financial/BAO/FinancialTypeAccount.php +++ b/civicrm/CRM/Financial/BAO/FinancialTypeAccount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Financial_BAO_FinancialTypeAccount extends CRM_Financial_DAO_EntityFinancialAccount { diff --git a/civicrm/CRM/Financial/BAO/PaymentProcessor.php b/civicrm/CRM/Financial/BAO/PaymentProcessor.php index c3312c6f674b2ee072190e72aa73874774d8d506..ad04284ad11c3202ab97e10d00d11ee9da171eb2 100644 --- a/civicrm/CRM/Financial/BAO/PaymentProcessor.php +++ b/civicrm/CRM/Financial/BAO/PaymentProcessor.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -447,7 +447,7 @@ class CRM_Financial_BAO_PaymentProcessor extends CRM_Financial_DAO_PaymentProces $capabilitiesString = implode('', $capabilities); if (!isset(\Civi::$statics[__CLASS__]['supported_capabilities'][$capabilitiesString])) { $result = self::getPaymentProcessors($capabilities); - \Civi::$statics[__CLASS__]['supported_capabilities'][$capabilitiesString] = (!empty($result)) ? TRUE : FALSE; + \Civi::$statics[__CLASS__]['supported_capabilities'][$capabilitiesString] = (!empty($result) && array_keys($result) !== array(0)) ? TRUE : FALSE; } return \Civi::$statics[__CLASS__]['supported_capabilities'][$capabilitiesString]; } diff --git a/civicrm/CRM/Financial/BAO/PaymentProcessorType.php b/civicrm/CRM/Financial/BAO/PaymentProcessorType.php index 2afcc0f8a65e13ef54d74675ffec0a0c0f3a86a3..c29cbcbeae94ac067605bfc59c089f18b981f781 100644 --- a/civicrm/CRM/Financial/BAO/PaymentProcessorType.php +++ b/civicrm/CRM/Financial/BAO/PaymentProcessorType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Financial_BAO_PaymentProcessorType extends CRM_Financial_DAO_PaymentProcessorType { diff --git a/civicrm/CRM/Financial/DAO/Currency.php b/civicrm/CRM/Financial/DAO/Currency.php index a119e49882603ae7779bf10c318235e6e25e49b4..3dd5bc37650d9b80ae17063f71eed4b56c3e7b5b 100644 --- a/civicrm/CRM/Financial/DAO/Currency.php +++ b/civicrm/CRM/Financial/DAO/Currency.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/Currency.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php index 6264a9238861096f55432e3c710261034651aa17..666eaba210281c903d988cf60a9ce1484d4917f5 100644 --- a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php +++ b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/EntityFinancialAccount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php index 5bf7545ab578df8c74d1dd5fe2d1ed86bff2ab91..7b5bc1fb268b2132d29230dc5f3a6954ceed5db0 100644 --- a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php +++ b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/EntityFinancialTrxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/FinancialAccount.php b/civicrm/CRM/Financial/DAO/FinancialAccount.php index cb3ec660748a2e145e0fe8bfa4a19a38a2d3e1ed..4d7f073092b74d2bddc06cb5b560022ccbccb4f5 100644 --- a/civicrm/CRM/Financial/DAO/FinancialAccount.php +++ b/civicrm/CRM/Financial/DAO/FinancialAccount.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/FinancialAccount.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/FinancialItem.php b/civicrm/CRM/Financial/DAO/FinancialItem.php index 154ff57456c99a2bc528d6fe13e5738ae10bb59a..480b78afdcafe462c2012be27cbb88cb255248d2 100644 --- a/civicrm/CRM/Financial/DAO/FinancialItem.php +++ b/civicrm/CRM/Financial/DAO/FinancialItem.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/FinancialItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/FinancialTrxn.php b/civicrm/CRM/Financial/DAO/FinancialTrxn.php index 78e557943d4d59452eaedb1726b736a7d48b77b7..6ac9060720c923806ed7dce7a15ccec4012f0f55 100644 --- a/civicrm/CRM/Financial/DAO/FinancialTrxn.php +++ b/civicrm/CRM/Financial/DAO/FinancialTrxn.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/FinancialTrxn.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/FinancialType.php b/civicrm/CRM/Financial/DAO/FinancialType.php index fc8d2924e24f0092e7d45f7338b26a787adeda2b..7ee17ac490c300af78f7ad786b04a69222e5a4d9 100644 --- a/civicrm/CRM/Financial/DAO/FinancialType.php +++ b/civicrm/CRM/Financial/DAO/FinancialType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/FinancialType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessor.php b/civicrm/CRM/Financial/DAO/PaymentProcessor.php index a0568b18c8820affd262460553ce14f9da69a1d3..5720108715d1a8af8388b6d60de96bc0f3a80e93 100644 --- a/civicrm/CRM/Financial/DAO/PaymentProcessor.php +++ b/civicrm/CRM/Financial/DAO/PaymentProcessor.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/PaymentProcessor.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php index 316051d01e66dd1d3f5de15a2747d21d30083078..2fe0baeb581f4bd61c200cb232bb37979509ac02 100644 --- a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php +++ b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/PaymentProcessorType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/DAO/PaymentToken.php b/civicrm/CRM/Financial/DAO/PaymentToken.php index c8fb590e070cdc83098121dbc59a51a52ef17817..aafe8bef3464d0731b173488af2f61f9450d955b 100644 --- a/civicrm/CRM/Financial/DAO/PaymentToken.php +++ b/civicrm/CRM/Financial/DAO/PaymentToken.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Financial/PaymentToken.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Financial/Form/BatchTransaction.php b/civicrm/CRM/Financial/Form/BatchTransaction.php index e43e5573356f094d5dc39a896ca6aa56f8e61e1e..d7ed1d2ddf38194435bf9e7a58539ffbf36a7a44 100644 --- a/civicrm/CRM/Financial/Form/BatchTransaction.php +++ b/civicrm/CRM/Financial/Form/BatchTransaction.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Form/Export.php b/civicrm/CRM/Financial/Form/Export.php index b58e57bba3eab172740927ff72fb38f0ec4d4764..639813397bf4c9bfe17b90957f32dadbb37792ad 100644 --- a/civicrm/CRM/Financial/Form/Export.php +++ b/civicrm/CRM/Financial/Form/Export.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Form/FinancialAccount.php b/civicrm/CRM/Financial/Form/FinancialAccount.php index eff3122f638d895c210e1cae1010c5f2cd137ab8..91a2aa7db2e660a7fcfa0fd6d3d75e856a3fd312 100644 --- a/civicrm/CRM/Financial/Form/FinancialAccount.php +++ b/civicrm/CRM/Financial/Form/FinancialAccount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Form/FinancialBatch.php b/civicrm/CRM/Financial/Form/FinancialBatch.php index 7ae2fc505a86fe1863733becfb2186381cdb10fc..b8e336ab4eac6d95bb5dba60093b1d94acbe24f5 100644 --- a/civicrm/CRM/Financial/Form/FinancialBatch.php +++ b/civicrm/CRM/Financial/Form/FinancialBatch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Form/FinancialType.php b/civicrm/CRM/Financial/Form/FinancialType.php index caa7f7eaae325c419ddeb0c46fba038aca6812a0..dcdaa3e9195142d5ceba8cb8400f736311fa800f 100644 --- a/civicrm/CRM/Financial/Form/FinancialType.php +++ b/civicrm/CRM/Financial/Form/FinancialType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Form/FinancialTypeAccount.php b/civicrm/CRM/Financial/Form/FinancialTypeAccount.php index 2055f500797538f969b3ad327e3518381eeae60b..a7d68c9f47ee5d5ec60e54e6a8de8b6a086c7f24 100644 --- a/civicrm/CRM/Financial/Form/FinancialTypeAccount.php +++ b/civicrm/CRM/Financial/Form/FinancialTypeAccount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Form/Payment.php b/civicrm/CRM/Financial/Form/Payment.php index 4863f5848be048e93c601745f83f29fd8767289c..55dd4d783cc1611c69a8cc09078c2e3311c69492 100644 --- a/civicrm/CRM/Financial/Form/Payment.php +++ b/civicrm/CRM/Financial/Form/Payment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Financial_Form_Payment extends CRM_Core_Form { diff --git a/civicrm/CRM/Financial/Form/PaymentEdit.php b/civicrm/CRM/Financial/Form/PaymentEdit.php index 72e97e7eb2803a36a977420a3f9a6460378a7c4f..1a439aa03b4d0143009c9f7755f6aab9e1e0456c 100644 --- a/civicrm/CRM/Financial/Form/PaymentEdit.php +++ b/civicrm/CRM/Financial/Form/PaymentEdit.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { @@ -71,7 +71,7 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { $this->_values = civicrm_api3('FinancialTrxn', 'getsingle', array('id' => $this->_id)); if (!empty($this->_values['payment_processor_id'])) { - CRM_Core_Error::statusBounce(ts('You cannot update this payment')); + CRM_Core_Error::statusBounce(ts('You cannot update this payment as it is tied to a payment processor')); } } diff --git a/civicrm/CRM/Financial/Form/Search.php b/civicrm/CRM/Financial/Form/Search.php index 742c886d3b0c39c6efbac78dc45cdcea7ea083f0..13df4825427e5fd09d6ea5be5ca3f109478f5aa2 100644 --- a/civicrm/CRM/Financial/Form/Search.php +++ b/civicrm/CRM/Financial/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Page/AJAX.php b/civicrm/CRM/Financial/Page/AJAX.php index 0a5b4ae6e813066fd0c7ee0bcfdc8ee82b762574..767bc42fdd27acb7c9fad8d1775903707054969f 100644 --- a/civicrm/CRM/Financial/Page/AJAX.php +++ b/civicrm/CRM/Financial/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Page/Batch.php b/civicrm/CRM/Financial/Page/Batch.php index 58126d73d6fb0e6175e5b326711ac10ea49aaf95..0c78a1cca88bd153d52dc5d83f487eca2fd78721 100644 --- a/civicrm/CRM/Financial/Page/Batch.php +++ b/civicrm/CRM/Financial/Page/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Page/BatchTransaction.php b/civicrm/CRM/Financial/Page/BatchTransaction.php index 7ea60f07b307817b50215bf471be0224dbae39c1..e744d7345507a83872e604dc186f314a187543c7 100644 --- a/civicrm/CRM/Financial/Page/BatchTransaction.php +++ b/civicrm/CRM/Financial/Page/BatchTransaction.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ diff --git a/civicrm/CRM/Financial/Page/FinancialAccount.php b/civicrm/CRM/Financial/Page/FinancialAccount.php index 0d4718b6e2883fcd7a447f70f42e04be935b436b..75976c785603bbdebb7bd84ee1973e497ce655a5 100644 --- a/civicrm/CRM/Financial/Page/FinancialAccount.php +++ b/civicrm/CRM/Financial/Page/FinancialAccount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Page/FinancialBatch.php b/civicrm/CRM/Financial/Page/FinancialBatch.php index 6ce5833a5fc23eaeb9dbc98465cd82e193814521..6ea6e657054db407c113324a636d92fb71ac5bbc 100644 --- a/civicrm/CRM/Financial/Page/FinancialBatch.php +++ b/civicrm/CRM/Financial/Page/FinancialBatch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Page/FinancialType.php b/civicrm/CRM/Financial/Page/FinancialType.php index 53d31b84b674e10358f93af7889d12e866cd350d..b8a5d76eed651ed0a531f0ef60f5eaa83bff35d4 100644 --- a/civicrm/CRM/Financial/Page/FinancialType.php +++ b/civicrm/CRM/Financial/Page/FinancialType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Financial/Page/FinancialTypeAccount.php b/civicrm/CRM/Financial/Page/FinancialTypeAccount.php index 5f20b5f2b22b5525b5c0b3385b3c0731ec53c917..4f6ca262c46232f5f3f972b79f97d8ce1c4da64e 100644 --- a/civicrm/CRM/Financial/Page/FinancialTypeAccount.php +++ b/civicrm/CRM/Financial/Page/FinancialTypeAccount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Friend/BAO/Friend.php b/civicrm/CRM/Friend/BAO/Friend.php index b79126f6ace92fd984d8e30788006e724034328d..57b8de219643fa11a545daf980a944cc4e14d09b 100644 --- a/civicrm/CRM/Friend/BAO/Friend.php +++ b/civicrm/CRM/Friend/BAO/Friend.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Friend/DAO/Friend.php b/civicrm/CRM/Friend/DAO/Friend.php index c98623ee74a8b06aeff0295c78cd3f0ead198905..0fefde6aa9a3a71531a3e9ef4ccade02d4d452e4 100644 --- a/civicrm/CRM/Friend/DAO/Friend.php +++ b/civicrm/CRM/Friend/DAO/Friend.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Friend/Friend.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Friend/Form.php b/civicrm/CRM/Friend/Form.php index ecd589234ac89ca4e81d372ebbfa0bed369189e2..02ab539bd6500131564a372874d230cd80155117 100644 --- a/civicrm/CRM/Friend/Form.php +++ b/civicrm/CRM/Friend/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Friend/Form/Contribute.php b/civicrm/CRM/Friend/Form/Contribute.php index e59f94074f82eea4f383eec28468c386a1c39a9e..f26d83c2ee8f43c00010f101aa83694949f25b00 100644 --- a/civicrm/CRM/Friend/Form/Contribute.php +++ b/civicrm/CRM/Friend/Form/Contribute.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Friend/Form/Event.php b/civicrm/CRM/Friend/Form/Event.php index 86f2a1d9a5623fbabd1e4d3fec95c0a58fdb84e0..530b61117d10e008afc5b97f34ab9ae82bf7cde7 100644 --- a/civicrm/CRM/Friend/Form/Event.php +++ b/civicrm/CRM/Friend/Form/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/BAO/Grant.php b/civicrm/CRM/Grant/BAO/Grant.php index 5fe5e2b1c9c62c71d5d8254b4e6d0f2b7062d649..9354c2f7fe219c1d2aee1e7076b0c497dbb6e0f9 100644 --- a/civicrm/CRM/Grant/BAO/Grant.php +++ b/civicrm/CRM/Grant/BAO/Grant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/BAO/Query.php b/civicrm/CRM/Grant/BAO/Query.php index d10acbe418d664240142002051b199ece275224f..54ed50e608b361ce8a166979de81d03a104bf017 100644 --- a/civicrm/CRM/Grant/BAO/Query.php +++ b/civicrm/CRM/Grant/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -320,22 +320,22 @@ class CRM_Grant_BAO_Query extends CRM_Core_BAO_Query { $form->addDate('grant_application_received_date_low', ts('App. Received Date - From'), FALSE, array('formatType' => 'searchDate')); $form->addDate('grant_application_received_date_high', ts('To'), FALSE, array('formatType' => 'searchDate')); - $form->addElement('checkbox', 'grant_application_received_notset', '', NULL); + $form->addElement('checkbox', 'grant_application_received_notset', ts('Date is not set'), NULL); $form->addDate('grant_money_transfer_date_low', ts('Money Sent Date - From'), FALSE, array('formatType' => 'searchDate')); $form->addDate('grant_money_transfer_date_high', ts('To'), FALSE, array('formatType' => 'searchDate')); - $form->addElement('checkbox', 'grant_money_transfer_date_notset', '', NULL); + $form->addElement('checkbox', 'grant_money_transfer_date_notset', ts('Date is not set'), NULL); $form->addDate('grant_due_date_low', ts('Report Due Date - From'), FALSE, array('formatType' => 'searchDate')); $form->addDate('grant_due_date_high', ts('To'), FALSE, array('formatType' => 'searchDate')); - $form->addElement('checkbox', 'grant_due_date_notset', '', NULL); + $form->addElement('checkbox', 'grant_due_date_notset', ts('Date is not set'), NULL); $form->addDate('grant_decision_date_low', ts('Grant Decision Date - From'), FALSE, array('formatType' => 'searchDate')); $form->addDate('grant_decision_date_high', ts('To'), FALSE, array('formatType' => 'searchDate')); - $form->addElement('checkbox', 'grant_decision_date_notset', '', NULL); + $form->addElement('checkbox', 'grant_decision_date_notset', ts('Date is not set'), NULL); $form->addYesNo('grant_report_received', ts('Grant report received?'), TRUE); diff --git a/civicrm/CRM/Grant/Controller/Search.php b/civicrm/CRM/Grant/Controller/Search.php index c04784ab45b02531510b66bc9e88e186fb615fbc..b823353956fe946ec1f57cb877bb40470bf426ee 100644 --- a/civicrm/CRM/Grant/Controller/Search.php +++ b/civicrm/CRM/Grant/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/DAO/Grant.php b/civicrm/CRM/Grant/DAO/Grant.php index 329a05259b717f65bbc66b048978f4b5b7575e47..9a4c0f861c222e9931e476569e5462dd27f6416a 100644 --- a/civicrm/CRM/Grant/DAO/Grant.php +++ b/civicrm/CRM/Grant/DAO/Grant.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Grant/Grant.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Grant/Form/Grant.php b/civicrm/CRM/Grant/Form/Grant.php index fd477e6848ac9304b8fbb7e2b4796f8a2ce14a6c..8912eb98a566b68dfb8996221a1f7c3e0d646249 100644 --- a/civicrm/CRM/Grant/Form/Grant.php +++ b/civicrm/CRM/Grant/Form/Grant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Form/GrantView.php b/civicrm/CRM/Grant/Form/GrantView.php index a0e872b7688fbcaeca6e0d5538a9ed35fa657985..444f9c0d762403eac49920480587a72f753f24e5 100644 --- a/civicrm/CRM/Grant/Form/GrantView.php +++ b/civicrm/CRM/Grant/Form/GrantView.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Form/Search.php b/civicrm/CRM/Grant/Form/Search.php index 3a1400ad7565e6bda33548c969071e3b83e09690..2a7d84beca5e858700206d897616eab4f197c7a0 100644 --- a/civicrm/CRM/Grant/Form/Search.php +++ b/civicrm/CRM/Grant/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -170,9 +170,7 @@ class CRM_Grant_Form_Search extends CRM_Core_Form_Search { $this->addRowSelectors($rows); } - $permission = CRM_Core_Permission::getPermission(); - - $this->addTaskMenu(CRM_Grant_Task::permissionedTaskTitles($permission)); + $this->addTaskMenu(CRM_Grant_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission())); } } diff --git a/civicrm/CRM/Grant/Form/Task.php b/civicrm/CRM/Grant/Form/Task.php index c7700b34b94efb07b0ae462b99955208b131bebe..55abfd143bd6af5b92d3e528ddc3bf7f98fb605f 100644 --- a/civicrm/CRM/Grant/Form/Task.php +++ b/civicrm/CRM/Grant/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -88,8 +88,11 @@ class CRM_Grant_Form_Task extends CRM_Core_Form { $values = $form->controller->exportValues('Search'); $form->_task = $values['task']; - $grantTasks = CRM_Grant_Task::tasks(); - $form->assign('taskName', $grantTasks[$form->_task]); + $tasks = CRM_Grant_Task::tasks(); + if (!array_key_exists($form->_task, $tasks)) { + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); + } + $form->assign('taskName', $tasks[$form->_task]); $ids = array(); if ($values['radio_ts'] == 'ts_sel') { diff --git a/civicrm/CRM/Grant/Form/Task/Delete.php b/civicrm/CRM/Grant/Form/Task/Delete.php index 6c6eb1cd6709b2d4698eb72eca4b67c9394e84ca..64596522842711c7af1ac63b3055df44186fdfda 100644 --- a/civicrm/CRM/Grant/Form/Task/Delete.php +++ b/civicrm/CRM/Grant/Form/Task/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Form/Task/Print.php b/civicrm/CRM/Grant/Form/Task/Print.php index dc4c429abb5da50d3d151aa0425a451e756ed3ec..970789ed4389e8b6fe48d52267dd463ecf98f235 100644 --- a/civicrm/CRM/Grant/Form/Task/Print.php +++ b/civicrm/CRM/Grant/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Form/Task/Result.php b/civicrm/CRM/Grant/Form/Task/Result.php index 099beb47f142bbf3fc1f2c72bfba0fbf23fbf47d..8ad55e694000870d72bce53ef92e87c0df954f53 100644 --- a/civicrm/CRM/Grant/Form/Task/Result.php +++ b/civicrm/CRM/Grant/Form/Task/Result.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Form/Task/SearchTaskHookSample.php b/civicrm/CRM/Grant/Form/Task/SearchTaskHookSample.php index 86708453827df455438ff0a0a77c964efe61581f..94a31a3e5d1c384243e8fcc8c59f35e96a69ab2e 100644 --- a/civicrm/CRM/Grant/Form/Task/SearchTaskHookSample.php +++ b/civicrm/CRM/Grant/Form/Task/SearchTaskHookSample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Form/Task/Update.php b/civicrm/CRM/Grant/Form/Task/Update.php index 552e7dc15fede7cde4605ed59e2b903030544fe9..59995dcd6d2777e1a248e4ad22d01a79e585386a 100644 --- a/civicrm/CRM/Grant/Form/Task/Update.php +++ b/civicrm/CRM/Grant/Form/Task/Update.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Info.php b/civicrm/CRM/Grant/Info.php index 5addd46e102caa6d9717e9f0cda7960096bda258..1bd9f8383c55f0edd767b1f29b90da00c61e177e 100644 --- a/civicrm/CRM/Grant/Info.php +++ b/civicrm/CRM/Grant/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * abstract class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Page/DashBoard.php b/civicrm/CRM/Grant/Page/DashBoard.php index 0a6bb61fe8850d733f746fa8b434b816eae30285..cab30ed85747335c81a9143695991e161f615469 100644 --- a/civicrm/CRM/Grant/Page/DashBoard.php +++ b/civicrm/CRM/Grant/Page/DashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Page/Tab.php b/civicrm/CRM/Grant/Page/Tab.php index ca999c60fb470d93494801c871162f665d675572..d0ed428afb117cc8fabad558ceaaa233d5707c70 100644 --- a/civicrm/CRM/Grant/Page/Tab.php +++ b/civicrm/CRM/Grant/Page/Tab.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Selector/Search.php b/civicrm/CRM/Grant/Selector/Search.php index 49e957623c19bfca0c870d98b69a44d03c88e70f..dcce3d7c31bc1df4a2bac507aab4b1c72eedd01a 100644 --- a/civicrm/CRM/Grant/Selector/Search.php +++ b/civicrm/CRM/Grant/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/StateMachine/Search.php b/civicrm/CRM/Grant/StateMachine/Search.php index 549db4e654677a87bfe2d855db544919d9530a94..f4ecc2418de791c38c739e656b9b091431bd5360 100644 --- a/civicrm/CRM/Grant/StateMachine/Search.php +++ b/civicrm/CRM/Grant/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Grant/Task.php b/civicrm/CRM/Grant/Task.php index 290f52ab78f21bedc19a1b66b4b69fa8d82cd907..bbc1d41dc12ff5ed67ef54dd3242b0bae46ea42b 100644 --- a/civicrm/CRM/Grant/Task.php +++ b/civicrm/CRM/Grant/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -38,22 +38,13 @@ * used by the search forms * */ -class CRM_Grant_Task { - const DELETE_GRANTS = 1, PRINT_GRANTS = 2, EXPORT_GRANTS = 3, UPDATE_GRANTS = 4; +class CRM_Grant_Task extends CRM_Core_Task { - /** - * The task array - * - * @var array - */ - static $_tasks = NULL; + const + // Grant Tasks + UPDATE_GRANTS = 701; - /** - * The optional task array - * - * @var array - */ - static $_optionalTasks = NULL; + static $objectType = 'grant'; /** * These tasks are the core set of tasks that the user can perform @@ -62,20 +53,20 @@ class CRM_Grant_Task { * @return array * the set of tasks for a group of contacts */ - public static function &tasks() { + public static function tasks() { if (!(self::$_tasks)) { self::$_tasks = array( - 1 => array( + self::TASK_DELETE => array( 'title' => ts('Delete grants'), 'class' => 'CRM_Grant_Form_Task_Delete', 'result' => FALSE, ), - 2 => array( + self::TASK_PRINT => array( 'title' => ts('Print selected rows'), 'class' => 'CRM_Grant_Form_Task_Print', 'result' => FALSE, ), - 3 => array( + self::TASK_EXPORT => array( 'title' => ts('Export grants'), 'class' => array( 'CRM_Export_Form_Select', @@ -83,7 +74,7 @@ class CRM_Grant_Task { ), 'result' => FALSE, ), - 4 => array( + self::UPDATE_GRANTS => array( 'title' => ts('Update grants'), 'class' => 'CRM_Grant_Form_Task_Update', 'result' => FALSE, @@ -91,42 +82,26 @@ class CRM_Grant_Task { ); if (!CRM_Core_Permission::check('delete in CiviGrant')) { - unset(self::$_tasks[1]); + unset(self::$_tasks[self::TASK_DELETE]); } - CRM_Utils_Hook::searchTasks('grant', self::$_tasks); - asort(self::$_tasks); + parent::tasks(); } return self::$_tasks; } - /** - * These tasks are the core set of task titles - * - * @return array - * the set of task titles - */ - public static function &taskTitles() { - self::tasks(); - $titles = array(); - foreach (self::$_tasks as $id => $value) { - $titles[$id] = $value['title']; - } - return $titles; - } - /** * Show tasks selectively based on the permission level * of the user * * @param int $permission + * @param array $params * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission) { - $tasks = array(); + public static function permissionedTaskTitles($permission, $params = array()) { if (($permission == CRM_Core_Permission::EDIT) || CRM_Core_Permission::check('edit grants') ) { @@ -134,13 +109,15 @@ class CRM_Grant_Task { } else { $tasks = array( - 3 => self::$_tasks[3]['title'], + self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'], ); //CRM-4418, if (CRM_Core_Permission::check('delete in CiviGrant')) { - $tasks[1] = self::$_tasks[1]['title']; + $tasks[self::TASK_DELETE] = self::$_tasks[self::TASK_DELETE]['title']; } } + + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); return $tasks; } @@ -154,14 +131,12 @@ class CRM_Grant_Task { */ public static function getTask($value) { self::tasks(); - if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) { - // make the print task by default - $value = 2; + + if (!CRM_Utils_Array::value($value, self::$_tasks)) { + // make it the print task by default + $value = self::TASK_PRINT; } - return array( - self::$_tasks[$value]['class'], - self::$_tasks[$value]['result'], - ); + return parent::getTask($value); } } diff --git a/civicrm/CRM/Group/Controller.php b/civicrm/CRM/Group/Controller.php index b97e1030393ebb5c87ee1326c6f08051517ce798..d18958e99c3fe14fa7880e0515178787735d636f 100644 --- a/civicrm/CRM/Group/Controller.php +++ b/civicrm/CRM/Group/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Group/Form/Edit.php b/civicrm/CRM/Group/Form/Edit.php index e9635dd90d9fdea0a70edd06273eed9da58a1071..0ef2b90b1f6fbf252522847f6f5b1b2760dc4181 100644 --- a/civicrm/CRM/Group/Form/Edit.php +++ b/civicrm/CRM/Group/Form/Edit.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Group/Form/Search.php b/civicrm/CRM/Group/Form/Search.php index 6922d218dfb6d7ecfbb6bb25ca9c46172ac65c0a..22696f447717742129d55cac81ea224d79b8b54a 100644 --- a/civicrm/CRM/Group/Form/Search.php +++ b/civicrm/CRM/Group/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Group/Page/AJAX.php b/civicrm/CRM/Group/Page/AJAX.php index 9210ddbead21e3b56560d56cfe172146d311bef8..69359281d3a8e248517e628f244760bc8f2736aa 100644 --- a/civicrm/CRM/Group/Page/AJAX.php +++ b/civicrm/CRM/Group/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Group/Page/Group.php b/civicrm/CRM/Group/Page/Group.php index c371fe56bc765014cf49adcc5f42536929b70501..a1a11da4900e4617bd12cac6395c08ebb605cde5 100644 --- a/civicrm/CRM/Group/Page/Group.php +++ b/civicrm/CRM/Group/Page/Group.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Group_Page_Group extends CRM_Core_Page_Basic { protected $_sortByCharacter; diff --git a/civicrm/CRM/Group/StateMachine.php b/civicrm/CRM/Group/StateMachine.php index 56dc8c8b14e94296868810ba0b5c2f140beb9d45..1155727afa7baa3184763f7006774642fab24406 100644 --- a/civicrm/CRM/Group/StateMachine.php +++ b/civicrm/CRM/Group/StateMachine.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Import/DataSource.php b/civicrm/CRM/Import/DataSource.php index 9091e3f647a102ed124fe2b0df6a1d274f7e2488..9fdea4a2b306c5366c68f8d87cb265dd60133004 100644 --- a/civicrm/CRM/Import/DataSource.php +++ b/civicrm/CRM/Import/DataSource.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Import/DataSource/CSV.php b/civicrm/CRM/Import/DataSource/CSV.php index c11b0aeb6a6ae94ea33b256acb6f93e78ab9e6fc..692939763c5b9cab4723e01a15178c00097cf9c1 100644 --- a/civicrm/CRM/Import/DataSource/CSV.php +++ b/civicrm/CRM/Import/DataSource/CSV.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Import_DataSource_CSV extends CRM_Import_DataSource { const diff --git a/civicrm/CRM/Import/DataSource/SQL.php b/civicrm/CRM/Import/DataSource/SQL.php index 5223d2e8032c11e9317a44fcae7f4d9a26ec69d3..b9f552dffcef8ba12f804528cf5588b6a56eb13d 100644 --- a/civicrm/CRM/Import/DataSource/SQL.php +++ b/civicrm/CRM/Import/DataSource/SQL.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Import/Form/DataSource.php b/civicrm/CRM/Import/Form/DataSource.php index 6a7ba2ab9322112fdf151cacbea0367fe0075390..7cc19f01425b58461fa5cbcab7e32eeec71f9816 100644 --- a/civicrm/CRM/Import/Form/DataSource.php +++ b/civicrm/CRM/Import/Form/DataSource.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Import/Form/MapField.php b/civicrm/CRM/Import/Form/MapField.php index 08ca4fbd34e2b45c3014c2f3afd8daf90cc4dc90..9bdbcc6460cefdf876194ab3c7884eeecc6fb1a7 100644 --- a/civicrm/CRM/Import/Form/MapField.php +++ b/civicrm/CRM/Import/Form/MapField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Import/Form/Preview.php b/civicrm/CRM/Import/Form/Preview.php index 0d08e83592f63a1a201c05f1d19e750bb865032f..2d6f8c159ffc6ca0a19ada18030932e32fedb94e 100644 --- a/civicrm/CRM/Import/Form/Preview.php +++ b/civicrm/CRM/Import/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Import/Form/Summary.php b/civicrm/CRM/Import/Form/Summary.php index 32639f8cb8a41ec8461ca8d5843142e81f58e692..9490c5416931c17232f57911243adf82ce691215 100644 --- a/civicrm/CRM/Import/Form/Summary.php +++ b/civicrm/CRM/Import/Form/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Import/Parser.php b/civicrm/CRM/Import/Parser.php index f21515f63f04757ac1d5b8630f9a79b2ee32a302..cec34cacfa53e772364c872101f471fab33fc34c 100644 --- a/civicrm/CRM/Import/Parser.php +++ b/civicrm/CRM/Import/Parser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_Import_Parser { /** diff --git a/civicrm/CRM/Import/StateMachine.php b/civicrm/CRM/Import/StateMachine.php index 1aa4ac08757d411ad5956c57796dd8f8cacaf716..5c0a2b8faa944efea9004b84babc4b7070e84303 100644 --- a/civicrm/CRM/Import/StateMachine.php +++ b/civicrm/CRM/Import/StateMachine.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Logging/Differ.php b/civicrm/CRM/Logging/Differ.php index ccb55027125265067f6309a7556a7958360a74b8..a57a0447c335375d099321638ed03ab33ff3ae5a 100644 --- a/civicrm/CRM/Logging/Differ.php +++ b/civicrm/CRM/Logging/Differ.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Logging/ReportDetail.php b/civicrm/CRM/Logging/ReportDetail.php index 4c2a04255b50e59054dc03de43346ed52f26cee5..7196dd8ce3191e6ccd382a9f61703ab8982dfb72 100644 --- a/civicrm/CRM/Logging/ReportDetail.php +++ b/civicrm/CRM/Logging/ReportDetail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Logging_ReportDetail extends CRM_Report_Form { protected $cid; diff --git a/civicrm/CRM/Logging/ReportSummary.php b/civicrm/CRM/Logging/ReportSummary.php index 7cee3df17cd866fbbe0b2e571a4b811ea23e9cd0..874f9922c7efbe80e9384b38c99029ec8add64e4 100644 --- a/civicrm/CRM/Logging/ReportSummary.php +++ b/civicrm/CRM/Logging/ReportSummary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ */ class CRM_Logging_ReportSummary extends CRM_Report_Form { diff --git a/civicrm/CRM/Logging/Reverter.php b/civicrm/CRM/Logging/Reverter.php index 4e9310ff03ed9452e2503b63277b0fa829aece49..aee980f30867856d91ebd39896b137ebb0794fe0 100644 --- a/civicrm/CRM/Logging/Reverter.php +++ b/civicrm/CRM/Logging/Reverter.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Logging_Reverter { private $db; diff --git a/civicrm/CRM/Logging/Schema.php b/civicrm/CRM/Logging/Schema.php index e91f02d52ffb889ad654b28bea34813233fe3aaa..de3f13bcccea9755b77c25230815a9f49cf99fec 100644 --- a/civicrm/CRM/Logging/Schema.php +++ b/civicrm/CRM/Logging/Schema.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Logging_Schema { private $logs = array(); diff --git a/civicrm/CRM/Mailing/ActionTokens.php b/civicrm/CRM/Mailing/ActionTokens.php index 28158cbbe63227aa4e4f0bea956b01736c1262e1..37dc78a5970c0f0aaefd731aeb6fc2f882c82eb2 100644 --- a/civicrm/CRM/Mailing/ActionTokens.php +++ b/civicrm/CRM/Mailing/ActionTokens.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Mailing/BAO/BouncePattern.php b/civicrm/CRM/Mailing/BAO/BouncePattern.php index 2cedbb008e7c3b38c7dfb1b252efd7c118aaf572..03c894fd66e7f050f6cb090dbff1f9ecb1d3c709 100644 --- a/civicrm/CRM/Mailing/BAO/BouncePattern.php +++ b/civicrm/CRM/Mailing/BAO/BouncePattern.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_BAO_BouncePattern extends CRM_Mailing_DAO_BouncePattern { diff --git a/civicrm/CRM/Mailing/BAO/Component.php b/civicrm/CRM/Mailing/BAO/Component.php index 1a27d9ee7acd6a6ed53966fce39f8e24649f4ad1..e70de4228c34ec7d0834a2ef54e9c00386e4f186 100644 --- a/civicrm/CRM/Mailing/BAO/Component.php +++ b/civicrm/CRM/Mailing/BAO/Component.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_BAO_Component extends CRM_Mailing_DAO_Component { diff --git a/civicrm/CRM/Mailing/BAO/Mailing.php b/civicrm/CRM/Mailing/BAO/Mailing.php index 5d954fdfb0ce1a598a625176625eff7ab4b4c81a..3a0f08048c52f006681fa93e006e980558bd8a9c 100644 --- a/civicrm/CRM/Mailing/BAO/Mailing.php +++ b/civicrm/CRM/Mailing/BAO/Mailing.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Mail/mime.php'; @@ -128,8 +128,9 @@ class CRM_Mailing_BAO_Mailing extends CRM_Mailing_DAO_Mailing { $recipientsGroup = $excludeSmartGroupIDs = $includeSmartGroupIDs = $priorMailingIDs = array(); $dao = CRM_Utils_SQL_Select::from('civicrm_mailing_group') ->select('GROUP_CONCAT(entity_id SEPARATOR ",") as group_ids, group_type, entity_table') - ->where('mailing_id = #mailing_id AND entity_table IN ("civicrm_group", "civicrm_mailing")') + ->where('mailing_id = #mailing_id AND entity_table RLIKE "^civicrm_(group.*|mailing)$" ') ->groupBy(array('group_type', 'entity_table')) + ->param('!groupTableName', CRM_Contact_BAO_Group::getTableName()) ->param('#mailing_id', $mailingID) ->execute(); while ($dao->fetch()) { @@ -137,7 +138,7 @@ class CRM_Mailing_BAO_Mailing extends CRM_Mailing_DAO_Mailing { $priorMailingIDs[$dao->group_type] = explode(',', $dao->group_ids); } else { - $recipientsGroup[$dao->group_type] = explode(',', $dao->group_ids); + $recipientsGroup[$dao->group_type] = empty($recipientsGroup[$dao->group_type]) ? explode(',', $dao->group_ids) : array_merge($recipientsGroup[$dao->group_type], explode(',', $dao->group_ids)); } } @@ -249,6 +250,7 @@ class CRM_Mailing_BAO_Mailing extends CRM_Mailing_DAO_Mailing { $location_filter, "$entityTable.email IS NOT NULL", "$entityTable.email != ''", + "$entityTable.on_hold = 0", "mg.mailing_id = #mailingID", 'temp.contact_id IS NULL', ); @@ -1430,7 +1432,11 @@ ORDER BY civicrm_email.is_bulkmail DESC * @return CRM_Mailing_DAO_Mailing */ public static function add(&$params, $ids = array()) { - $id = CRM_Utils_Array::value('mailing_id', $ids, CRM_Utils_Array::value('id', $params)); + $id = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('mailing_id', $ids)); + + if (empty($params['id']) && !empty($ids)) { + \Civi::log('Parameter $ids is no longer used by Mailing::add. Use the api or just pass $params', ['civi.tag' => 'deprecated']); + } if ($id) { CRM_Utils_Hook::pre('edit', 'Mailing', $id, $params); @@ -1464,7 +1470,7 @@ ORDER BY civicrm_email.is_bulkmail DESC $result->modified_date = $mailing->modified_date; } - if (!empty($ids['mailing'])) { + if ($id) { CRM_Utils_Hook::post('edit', 'Mailing', $mailing->id, $mailing); } else { @@ -1503,15 +1509,16 @@ ORDER BY civicrm_email.is_bulkmail DESC * @throws \Exception */ public static function create(&$params, $ids = array()) { - // WTH $ids - if (empty($ids) && isset($params['id'])) { - $ids['mailing_id'] = $ids['id'] = $params['id']; + + if (empty($params['id']) && (array_filter($ids) !== [])) { + $params['id'] = isset($ids['mailing_id']) ? $ids['mailing_id'] : $ids['id']; + \Civi::log('Parameter $ids is no longer used by Mailing::create. Use the api or just pass $params', ['civi.tag' => 'deprecated']); } // CRM-12430 // Do the below only for an insert // for an update, we should not set the defaults - if (!isset($ids['id']) && !isset($ids['mailing_id'])) { + if (!isset($params['id'])) { // Retrieve domain email and name for default sender $domain = civicrm_api( 'Domain', @@ -1580,7 +1587,7 @@ ORDER BY civicrm_email.is_bulkmail DESC $transaction = new CRM_Core_Transaction(); - $mailing = self::add($params, $ids); + $mailing = self::add($params); if (is_a($mailing, 'CRM_Core_Error')) { $transaction->rollback(); @@ -2872,25 +2879,6 @@ ORDER BY civicrm_mailing.name"; return $list; } - /** - * @param int $mid - * - * @return null|string - */ - public static function hiddenMailingGroup($mid) { - $sql = " -SELECT g.id -FROM civicrm_mailing m -INNER JOIN civicrm_mailing_group mg ON mg.mailing_id = m.id -INNER JOIN civicrm_group g ON mg.entity_id = g.id AND mg.entity_table = 'civicrm_group' -WHERE g.is_hidden = 1 -AND mg.group_type = 'Include' -AND m.id = %1 -"; - $params = array(1 => array($mid, 'Integer')); - return CRM_Core_DAO::singleValueQuery($sql, $params); - } - /** * wrapper for ajax activity selector. * diff --git a/civicrm/CRM/Mailing/BAO/MailingAB.php b/civicrm/CRM/Mailing/BAO/MailingAB.php index 535593646ce0426bbf735e18633e54275e5b1fa1..a16f024f8c012a96bdcf355ad6223b6c568d954b 100644 --- a/civicrm/CRM/Mailing/BAO/MailingAB.php +++ b/civicrm/CRM/Mailing/BAO/MailingAB.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/BAO/MailingJob.php b/civicrm/CRM/Mailing/BAO/MailingJob.php index 3fe82a511b76a2ec455f10718f572eeb4671846e..0d49819d64081e86dbc641a570675dc0f3c1a3de 100644 --- a/civicrm/CRM/Mailing/BAO/MailingJob.php +++ b/civicrm/CRM/Mailing/BAO/MailingJob.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Mail.php'; diff --git a/civicrm/CRM/Mailing/BAO/Query.php b/civicrm/CRM/Mailing/BAO/Query.php index 974d1c275f96dae52de4074e1817a37f3830b849..4e34541fd2f1682dcc0e6f52199b84213fae2119 100644 --- a/civicrm/CRM/Mailing/BAO/Query.php +++ b/civicrm/CRM/Mailing/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_BAO_Query { diff --git a/civicrm/CRM/Mailing/BAO/Recipients.php b/civicrm/CRM/Mailing/BAO/Recipients.php index 27e39180333b8f4a88d44c714445f4ad91754acb..fb38df97638eb745e9a61899627efc88cff52992 100644 --- a/civicrm/CRM/Mailing/BAO/Recipients.php +++ b/civicrm/CRM/Mailing/BAO/Recipients.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_BAO_Recipients extends CRM_Mailing_DAO_Recipients { diff --git a/civicrm/CRM/Mailing/BAO/Spool.php b/civicrm/CRM/Mailing/BAO/Spool.php index b12ed227dfb7b269a37c5d6d3256175c3e341d4b..80dce934bf124fcf605bc6cbb399007921e6eee8 100644 --- a/civicrm/CRM/Mailing/BAO/Spool.php +++ b/civicrm/CRM/Mailing/BAO/Spool.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_BAO_Spool extends CRM_Mailing_DAO_Spool { diff --git a/civicrm/CRM/Mailing/BAO/TrackableURL.php b/civicrm/CRM/Mailing/BAO/TrackableURL.php index 09307993b91c9f00b230a38569677f200479926b..5768674a99390e5dfe1ca7384a0dd223496eaef8 100644 --- a/civicrm/CRM/Mailing/BAO/TrackableURL.php +++ b/civicrm/CRM/Mailing/BAO/TrackableURL.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_BAO_TrackableURL extends CRM_Mailing_DAO_TrackableURL { diff --git a/civicrm/CRM/Mailing/Config.php b/civicrm/CRM/Mailing/Config.php index c0a1e1c6cd39e1679fdec5d0ad2438d546559c0c..442356d2c126cb8a9f73d421f315b06e2d8cc89f 100644 --- a/civicrm/CRM/Mailing/Config.php +++ b/civicrm/CRM/Mailing/Config.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Config { diff --git a/civicrm/CRM/Mailing/Controller/Send.php b/civicrm/CRM/Mailing/Controller/Send.php index 87095e312d7f15036095f23ce4748f87339ef178..4aca468f32b1a2a300dc569d8f09ffd32a1f2686 100644 --- a/civicrm/CRM/Mailing/Controller/Send.php +++ b/civicrm/CRM/Mailing/Controller/Send.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Controller_Send extends CRM_Core_Controller { diff --git a/civicrm/CRM/Mailing/DAO/BouncePattern.php b/civicrm/CRM/Mailing/DAO/BouncePattern.php index 597200636e34ca8ad793064f0ffa3e9c36a4c57a..c0356203d4b50ae2f4429b82b8504ec907c1612f 100644 --- a/civicrm/CRM/Mailing/DAO/BouncePattern.php +++ b/civicrm/CRM/Mailing/DAO/BouncePattern.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/BouncePattern.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/BounceType.php b/civicrm/CRM/Mailing/DAO/BounceType.php index 458121ddb5e81a9a8b4cd2e599b70d8b5248decd..c49c51391b61723415b72713454e011d57e33ebb 100644 --- a/civicrm/CRM/Mailing/DAO/BounceType.php +++ b/civicrm/CRM/Mailing/DAO/BounceType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/BounceType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/Component.php b/civicrm/CRM/Mailing/DAO/Component.php index 636a754aea3e8ff082518d7a6072a64847b70f71..d0c861594b640c4389bc51431c12aae9e6165a56 100644 --- a/civicrm/CRM/Mailing/DAO/Component.php +++ b/civicrm/CRM/Mailing/DAO/Component.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Component.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/Mailing.php b/civicrm/CRM/Mailing/DAO/Mailing.php index 9f1f31356e9a779f2b1a123ef5966d67bb96eb47..aafeb0090d3618317f75eb2f655ea5c18c9e4cde 100644 --- a/civicrm/CRM/Mailing/DAO/Mailing.php +++ b/civicrm/CRM/Mailing/DAO/Mailing.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Mailing.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/MailingAB.php b/civicrm/CRM/Mailing/DAO/MailingAB.php index 64028865d21c497f5ddbfae18410c2a99e2330bb..724fcc80ca265d51a3a3da9b082d525b525ca2c2 100644 --- a/civicrm/CRM/Mailing/DAO/MailingAB.php +++ b/civicrm/CRM/Mailing/DAO/MailingAB.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/MailingAB.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/MailingGroup.php b/civicrm/CRM/Mailing/DAO/MailingGroup.php index 2468ba601ac957bcbdb3a04ccdc5365b7f33fc7d..a550b9acec2ae3d47322c4ccb6f1e2ef091a9898 100644 --- a/civicrm/CRM/Mailing/DAO/MailingGroup.php +++ b/civicrm/CRM/Mailing/DAO/MailingGroup.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/MailingGroup.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/MailingJob.php b/civicrm/CRM/Mailing/DAO/MailingJob.php index 4e2c3e3b8ccabe301dc662e5ad44235856edbd00..93cd68194865f737a7a13bb507b1196a42ee5ee4 100644 --- a/civicrm/CRM/Mailing/DAO/MailingJob.php +++ b/civicrm/CRM/Mailing/DAO/MailingJob.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/MailingJob.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/Recipients.php b/civicrm/CRM/Mailing/DAO/Recipients.php index 679ab342c182f3ff84fe96240fb2119a904803cb..18b89a0431398ee4aa1aa4652d3c31fa33d15189 100644 --- a/civicrm/CRM/Mailing/DAO/Recipients.php +++ b/civicrm/CRM/Mailing/DAO/Recipients.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Recipients.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/Spool.php b/civicrm/CRM/Mailing/DAO/Spool.php index d3ee6281c86fc9841d023dadc6a557827d4d168c..2c91bf9384915160813a893c1c77e0a7e55b4670 100644 --- a/civicrm/CRM/Mailing/DAO/Spool.php +++ b/civicrm/CRM/Mailing/DAO/Spool.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Spool.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/DAO/TrackableURL.php b/civicrm/CRM/Mailing/DAO/TrackableURL.php index 16eeadff8b2755c3cddbdb26d89f1bbe040478aa..7a9b71d1399275b0f27404c64680eab94bac3b5d 100644 --- a/civicrm/CRM/Mailing/DAO/TrackableURL.php +++ b/civicrm/CRM/Mailing/DAO/TrackableURL.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/TrackableURL.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/BAO/Bounce.php b/civicrm/CRM/Mailing/Event/BAO/Bounce.php index ac5d8735e3f97a9de84e2825a6038b7852bc80c6..dd9ec4b1e964918482efbd0b76c25e090ce8c2f9 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Bounce.php +++ b/civicrm/CRM/Mailing/Event/BAO/Bounce.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Event_BAO_Bounce extends CRM_Mailing_Event_DAO_Bounce { diff --git a/civicrm/CRM/Mailing/Event/BAO/Confirm.php b/civicrm/CRM/Mailing/Event/BAO/Confirm.php index 63f03d69567fac32de0da5f74d4144ae246df443..d0dca9fbbedb41f2abc7131cf5b198a7ba0f72ed 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Confirm.php +++ b/civicrm/CRM/Mailing/Event/BAO/Confirm.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Mail/mime.php'; diff --git a/civicrm/CRM/Mailing/Event/BAO/Delivered.php b/civicrm/CRM/Mailing/Event/BAO/Delivered.php index a0d9ecdc0688d48473cc40aa15904be011b4ffcc..0f1681bc795ad58603e74c1a5ce826c93f177513 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Delivered.php +++ b/civicrm/CRM/Mailing/Event/BAO/Delivered.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Event_BAO_Delivered extends CRM_Mailing_Event_DAO_Delivered { diff --git a/civicrm/CRM/Mailing/Event/BAO/Forward.php b/civicrm/CRM/Mailing/Event/BAO/Forward.php index 738dd6ae52940c78e395d349095c75984df935a9..fc9be9e198e8398a54c63fc29a500a9f04283109 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Forward.php +++ b/civicrm/CRM/Mailing/Event/BAO/Forward.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Event_BAO_Forward extends CRM_Mailing_Event_DAO_Forward { diff --git a/civicrm/CRM/Mailing/Event/BAO/Opened.php b/civicrm/CRM/Mailing/Event/BAO/Opened.php index a1f63b4ec89dfd5034390c06f168544efdddc8d2..5dc1605daba0a33c9da01b3d7dff6cd90d6721d4 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Opened.php +++ b/civicrm/CRM/Mailing/Event/BAO/Opened.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Event_BAO_Opened extends CRM_Mailing_Event_DAO_Opened { diff --git a/civicrm/CRM/Mailing/Event/BAO/Queue.php b/civicrm/CRM/Mailing/Event/BAO/Queue.php index 225961686e147e4bbef4df6d59ea6f6f7785dd58..9657e247f3c7d4e9877311e849cea15e0f1c791d 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Queue.php +++ b/civicrm/CRM/Mailing/Event/BAO/Queue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Event_BAO_Queue extends CRM_Mailing_Event_DAO_Queue { diff --git a/civicrm/CRM/Mailing/Event/BAO/Reply.php b/civicrm/CRM/Mailing/Event/BAO/Reply.php index c1ad732743593ca80a11cb26495c9848e2ac51b1..ae116a5f57cae0553f2f44182f3b57f60efb4c33 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Reply.php +++ b/civicrm/CRM/Mailing/Event/BAO/Reply.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Mail/mime.php'; diff --git a/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php b/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php index ac361de23c9ab0a532d17b044a8a558093fd0be2..a2c18166d2c8172edf1d78c0b91b88c19af3aad6 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php +++ b/civicrm/CRM/Mailing/Event/BAO/Resubscribe.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Mail/mime.php'; diff --git a/civicrm/CRM/Mailing/Event/BAO/Subscribe.php b/civicrm/CRM/Mailing/Event/BAO/Subscribe.php index 28eb3c0e60ca78f0f53bfd27edaaa2fd00a8c6e0..08116ab8e535e799bc3282fce4fe62e65050cddd 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Subscribe.php +++ b/civicrm/CRM/Mailing/Event/BAO/Subscribe.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ diff --git a/civicrm/CRM/Mailing/Event/BAO/TrackableURLOpen.php b/civicrm/CRM/Mailing/Event/BAO/TrackableURLOpen.php index b681113e5eaf33d3f0b1060b120c433c62862d64..992a57852203bf4ba4f03b4424e23833de41841f 100644 --- a/civicrm/CRM/Mailing/Event/BAO/TrackableURLOpen.php +++ b/civicrm/CRM/Mailing/Event/BAO/TrackableURLOpen.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Event_BAO_TrackableURLOpen extends CRM_Mailing_Event_DAO_TrackableURLOpen { diff --git a/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php b/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php index fb79d689bce360e071d03f97ff1d9dcef5a92759..e59305752dcc01d683888499f48f291a78e1b032 100644 --- a/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Event/BAO/Unsubscribe.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'Mail/mime.php'; diff --git a/civicrm/CRM/Mailing/Event/DAO/Bounce.php b/civicrm/CRM/Mailing/Event/DAO/Bounce.php index 23f11839d9736483a4d2fc889f694cdb21f4e295..c4e46d7cd34b93631e003e9994495e3e484e73a4 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Bounce.php +++ b/civicrm/CRM/Mailing/Event/DAO/Bounce.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Bounce.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/Confirm.php b/civicrm/CRM/Mailing/Event/DAO/Confirm.php index 27bf841717766084d0f51871e39179ba426f7762..11b1b764f2c788aad12c9222b7dee6f228a4d62d 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Confirm.php +++ b/civicrm/CRM/Mailing/Event/DAO/Confirm.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Confirm.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/Delivered.php b/civicrm/CRM/Mailing/Event/DAO/Delivered.php index 6c6f7674e2d64c6c7fbf7eb69106782b59d252a9..d8c21b3ef0210fc8efd4fb0146f04eb6a8c13092 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Delivered.php +++ b/civicrm/CRM/Mailing/Event/DAO/Delivered.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Delivered.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/Forward.php b/civicrm/CRM/Mailing/Event/DAO/Forward.php index 04b9153f8a7a8c807ca68f0c7f6805936fecd459..cca87706d25a5b59d8ac67b8b48c28ec6968b112 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Forward.php +++ b/civicrm/CRM/Mailing/Event/DAO/Forward.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Forward.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/Opened.php b/civicrm/CRM/Mailing/Event/DAO/Opened.php index 84ba084a5d80f8d4e5feba3b8cb1742039c12d47..8afbe0881d659a45ce067ad38fbd9934b4b6bf9a 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Opened.php +++ b/civicrm/CRM/Mailing/Event/DAO/Opened.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Opened.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/Queue.php b/civicrm/CRM/Mailing/Event/DAO/Queue.php index e4da32e6669793440663ca945d51b14817e6b83c..371402c625345ceeaabbd1501b096658b773fa45 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Queue.php +++ b/civicrm/CRM/Mailing/Event/DAO/Queue.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Queue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/Reply.php b/civicrm/CRM/Mailing/Event/DAO/Reply.php index 7b3286e265f72b3e167c489735008b6b5feb4ddb..42cdad508218cd06c81970e9e2361142831e2939 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Reply.php +++ b/civicrm/CRM/Mailing/Event/DAO/Reply.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Reply.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/Subscribe.php b/civicrm/CRM/Mailing/Event/DAO/Subscribe.php index 1d019cfb4fea61675940180b3ae9afc6a87dae5e..ee44c51ee114842e6eafaf8aceef1d47087ce480 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Subscribe.php +++ b/civicrm/CRM/Mailing/Event/DAO/Subscribe.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Subscribe.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php b/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php index b96efc392a460d074b1024678b648770c96193d8..d1303ded6e5bca68c7c7b324f9c38dce0197bd16 100644 --- a/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php +++ b/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/TrackableURLOpen.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php b/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php index 7e953d6f0ae127a77db5edc2110c5c0421067dd2..232dd895585bba34fd5ee8a7986c1b54b4b4bd5d 100644 --- a/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Mailing/Event/Unsubscribe.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Mailing/Form/Approve.php b/civicrm/CRM/Mailing/Form/Approve.php index a26449b12ca7fa1cd5a9c04930b85c9ff37b66e9..7c68d0f5c762bc4cf32e5538b924ecbed242a4c3 100644 --- a/civicrm/CRM/Mailing/Form/Approve.php +++ b/civicrm/CRM/Mailing/Form/Approve.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Form_Approve extends CRM_Core_Form { diff --git a/civicrm/CRM/Mailing/Form/Browse.php b/civicrm/CRM/Mailing/Form/Browse.php index 1add63eb216d42aad87138c62349801979243d9c..4eb65919c7ed6a1e872491a6d0c48226869df227 100644 --- a/civicrm/CRM/Mailing/Form/Browse.php +++ b/civicrm/CRM/Mailing/Form/Browse.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Form/Component.php b/civicrm/CRM/Mailing/Form/Component.php index ab3d3ed22bdd76ec104654580119158fc6af5a24..2e133450158dbf432a50cae5eccdfd0bf528cf59 100644 --- a/civicrm/CRM/Mailing/Form/Component.php +++ b/civicrm/CRM/Mailing/Form/Component.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Form/ForwardMailing.php b/civicrm/CRM/Mailing/Form/ForwardMailing.php index 83c212b7e438b6459a804b1b3b77783efff225ed..8d12dbcf831068de329e282869ff137b308364e8 100644 --- a/civicrm/CRM/Mailing/Form/ForwardMailing.php +++ b/civicrm/CRM/Mailing/Form/ForwardMailing.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Form_ForwardMailing extends CRM_Core_Form { public function preProcess() { diff --git a/civicrm/CRM/Mailing/Form/Optout.php b/civicrm/CRM/Mailing/Form/Optout.php index 7fe3d2b2aecb5d8e2df42300f1755e7cbb57fb75..d5f1867d65383c17e7a393ab656751a7c3e834fa 100644 --- a/civicrm/CRM/Mailing/Form/Optout.php +++ b/civicrm/CRM/Mailing/Form/Optout.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Form_Optout extends CRM_Core_Form { diff --git a/civicrm/CRM/Mailing/Form/Search.php b/civicrm/CRM/Mailing/Form/Search.php index 3c9b6b0fa0831927bbd4b4bbe45e303fb15ab4b9..9c7a5c0d56b2ea61c357a493c31406fb8c468df4 100644 --- a/civicrm/CRM/Mailing/Form/Search.php +++ b/civicrm/CRM/Mailing/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Form_Search extends CRM_Core_Form { diff --git a/civicrm/CRM/Mailing/Form/Subscribe.php b/civicrm/CRM/Mailing/Form/Subscribe.php index dbe9ad5a4f06aa3247293b08f686887accf3509c..221687db700ec34f4b42c7961b41b46a47fc6517 100644 --- a/civicrm/CRM/Mailing/Form/Subscribe.php +++ b/civicrm/CRM/Mailing/Form/Subscribe.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Form_Subscribe extends CRM_Core_Form { protected $_groupID = NULL; diff --git a/civicrm/CRM/Mailing/Form/Task.php b/civicrm/CRM/Mailing/Form/Task.php index 3b0f9acf240ef9063772b0ce099db7b95feeddd3..638b0873f6bc534e0b5f0d1ee4b32a3f15afcc9e 100644 --- a/civicrm/CRM/Mailing/Form/Task.php +++ b/civicrm/CRM/Mailing/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Form/Task/AdhocMailing.php b/civicrm/CRM/Mailing/Form/Task/AdhocMailing.php index 6a06b30e867fe064a73dc694870049b6ac35c80d..6b9734374c559c8df4a4fea1c96c1ef22266eca1 100644 --- a/civicrm/CRM/Mailing/Form/Task/AdhocMailing.php +++ b/civicrm/CRM/Mailing/Form/Task/AdhocMailing.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Form/Task/Print.php b/civicrm/CRM/Mailing/Form/Task/Print.php index 206b92f1a289bb357e77c78cecd36bdf0c03823b..40d4ee7439fe3d1312fdfe530937568dd635b671 100644 --- a/civicrm/CRM/Mailing/Form/Task/Print.php +++ b/civicrm/CRM/Mailing/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Form/Unsubscribe.php b/civicrm/CRM/Mailing/Form/Unsubscribe.php index a638a2f70fa5f4ef6d04c78696b1ae1cfe11cdc3..f6fa91c72a061e5abbebdfb42924b8c63b921c90 100644 --- a/civicrm/CRM/Mailing/Form/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Form/Unsubscribe.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Form_Unsubscribe extends CRM_Core_Form { diff --git a/civicrm/CRM/Mailing/Info.php b/civicrm/CRM/Mailing/Info.php index 6494010931801853cfd3bebf7d1844ab8f3f6c7b..c15d89630635badae9e9d0010f4d3b7e31018576 100644 --- a/civicrm/CRM/Mailing/Info.php +++ b/civicrm/CRM/Mailing/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * abstract class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Info extends CRM_Core_Component_Info { diff --git a/civicrm/CRM/Mailing/MailStore.php b/civicrm/CRM/Mailing/MailStore.php index 3bec5d9aec45b5dfc5ac686c5f2ec5676d48b921..ee9c1bf71d7f621e8ecdb45461c8ba44c0e0a505 100644 --- a/civicrm/CRM/Mailing/MailStore.php +++ b/civicrm/CRM/Mailing/MailStore.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_MailStore { // flag to decide whether to print debug messages diff --git a/civicrm/CRM/Mailing/MailStore/Imap.php b/civicrm/CRM/Mailing/MailStore/Imap.php index dc918f1d6df77f2d285ebd21735e9ac8c2e33749..48c4a79ce1346b4b27b675e410c93c348e5dbd93 100644 --- a/civicrm/CRM/Mailing/MailStore/Imap.php +++ b/civicrm/CRM/Mailing/MailStore/Imap.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/MailStore/Localdir.php b/civicrm/CRM/Mailing/MailStore/Localdir.php index c00cf3adeaf97b0bed23e0b57f68ecaae28725a1..5abc4de08a926cd0e2aab6748e0fe8ee7de95561 100644 --- a/civicrm/CRM/Mailing/MailStore/Localdir.php +++ b/civicrm/CRM/Mailing/MailStore/Localdir.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/MailStore/Maildir.php b/civicrm/CRM/Mailing/MailStore/Maildir.php index 7a1aeef4f4fad8b91c0b6ca7d0f2ef826a56222c..c4f73c1e9c39d827b52a078c307fc61532fafc48 100644 --- a/civicrm/CRM/Mailing/MailStore/Maildir.php +++ b/civicrm/CRM/Mailing/MailStore/Maildir.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/MailStore/Mbox.php b/civicrm/CRM/Mailing/MailStore/Mbox.php index cda2dc234ea85e0d33d1b8bee40ee54d9d71a7f4..e09e80073a9c818d0c62d93ec738d16062053d6f 100644 --- a/civicrm/CRM/Mailing/MailStore/Mbox.php +++ b/civicrm/CRM/Mailing/MailStore/Mbox.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/MailStore/Pop3.php b/civicrm/CRM/Mailing/MailStore/Pop3.php index c0a8b98a1c40983e4e0587bb7585f93b351c5411..23ab1c83aae0a7ff2f5f9c334df67a3204182f2e 100644 --- a/civicrm/CRM/Mailing/MailStore/Pop3.php +++ b/civicrm/CRM/Mailing/MailStore/Pop3.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Page/AJAX.php b/civicrm/CRM/Mailing/Page/AJAX.php index 0b493a6c08b437834e83a4935af9e55f7c541e0d..a62f0e69bd36a9478768f63a5cab111b9688b99c 100644 --- a/civicrm/CRM/Mailing/Page/AJAX.php +++ b/civicrm/CRM/Mailing/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Page/Browse.php b/civicrm/CRM/Mailing/Page/Browse.php index d9b59a46510c8675becc63eb49b03c18eb698cfd..f2afb009d5e377944444311f21821caac46fa379 100644 --- a/civicrm/CRM/Mailing/Page/Browse.php +++ b/civicrm/CRM/Mailing/Page/Browse.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -83,6 +83,22 @@ class CRM_Mailing_Page_Browse extends CRM_Core_Page { $this->_unscheduled = $this->_archived = $archiveLinks = FALSE; $this->_mailingId = CRM_Utils_Request::retrieve('mid', 'Positive', $this); $this->_sms = CRM_Utils_Request::retrieve('sms', 'Positive', $this); + + if ($this->_sms) { + // if this is an SMS page, check that the user has permission to browse SMS + if (!CRM_Core_Permission::check('send SMS')) { + CRM_Core_Error::fatal(ts('You do not have permission to send SMS')); + } + } + else { + // If this is not an SMS page, check that the user has an appropriate + // permission (specific permissions have been copied from + // CRM/Mailing/xml/Menu/Mailing.xml) + if (!CRM_Core_Permission::check(array(array('access CiviMail', 'approve mailings', 'create mailings', 'schedule mailings')))) { + CRM_Core_Error::fatal(ts('You do not have permission to view this page.')); + } + } + $this->assign('sms', $this->_sms); // check that the user has permission to access mailing id CRM_Mailing_BAO_Mailing::checkPermission($this->_mailingId); diff --git a/civicrm/CRM/Mailing/Page/Common.php b/civicrm/CRM/Mailing/Page/Common.php index 51fa8b2661f1967b3b4162514b3605bee7fc7d53..b71b8e978dba732dd525250648dcce9d48f6ef73 100644 --- a/civicrm/CRM/Mailing/Page/Common.php +++ b/civicrm/CRM/Mailing/Page/Common.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Page_Common extends CRM_Core_Page { protected $_type = NULL; diff --git a/civicrm/CRM/Mailing/Page/Component.php b/civicrm/CRM/Mailing/Page/Component.php index 72e01ad4fb5f3aa9c25c414f2bdaaa6eb831d01f..9d3787b61a3d181dc6ae6ad6c3c0620bae57150e 100644 --- a/civicrm/CRM/Mailing/Page/Component.php +++ b/civicrm/CRM/Mailing/Page/Component.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Page/Confirm.php b/civicrm/CRM/Mailing/Page/Confirm.php index b58fbc9028de8b20251787483e689a8b0774f41c..134b141d991bfb436a4de3d97787a0bf07a18d12 100644 --- a/civicrm/CRM/Mailing/Page/Confirm.php +++ b/civicrm/CRM/Mailing/Page/Confirm.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Page_Confirm extends CRM_Core_Page { /** diff --git a/civicrm/CRM/Mailing/Page/Event.php b/civicrm/CRM/Mailing/Page/Event.php index 8b0290a4eb236c99d857571a4a21b8e9ba7a5c7f..a74aa059fa826024b3219f5603fe359023e9cf00 100644 --- a/civicrm/CRM/Mailing/Page/Event.php +++ b/civicrm/CRM/Mailing/Page/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Page/Optout.php b/civicrm/CRM/Mailing/Page/Optout.php index bb746eaeb138c02f2341fce8ecce2963fb9a4299..08137c832665667ef1cc32beffdb8b49262099ae 100644 --- a/civicrm/CRM/Mailing/Page/Optout.php +++ b/civicrm/CRM/Mailing/Page/Optout.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Page_Optout extends CRM_Mailing_Page_Common { /** diff --git a/civicrm/CRM/Mailing/Page/Preview.php b/civicrm/CRM/Mailing/Page/Preview.php index 68e300f398ad0bf9ce998d73d49166bb958e6490..4049125ac42588deaacea590fbf4415e938ffdde 100644 --- a/civicrm/CRM/Mailing/Page/Preview.php +++ b/civicrm/CRM/Mailing/Page/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Page/Report.php b/civicrm/CRM/Mailing/Page/Report.php index 8c01fed87b60fcc201b5cd4bbe1daac04a71617f..501bc07d05ac1d29ee06619cf8a06e2ae5c382c4 100644 --- a/civicrm/CRM/Mailing/Page/Report.php +++ b/civicrm/CRM/Mailing/Page/Report.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Page/Resubscribe.php b/civicrm/CRM/Mailing/Page/Resubscribe.php index d950dd84f12c0af1f0da1d984586b560ecd950b4..bbd57fff27e5db54f8bd91e7b022cb096ed37c58 100644 --- a/civicrm/CRM/Mailing/Page/Resubscribe.php +++ b/civicrm/CRM/Mailing/Page/Resubscribe.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Page_Resubscribe extends CRM_Mailing_Page_Common { /** diff --git a/civicrm/CRM/Mailing/Page/Tab.php b/civicrm/CRM/Mailing/Page/Tab.php index 60d47177071e403d4327a773d746e0cd7aad6f20..1384e8a361ea62f8bc0c49a9fb638efa84c94be8 100644 --- a/civicrm/CRM/Mailing/Page/Tab.php +++ b/civicrm/CRM/Mailing/Page/Tab.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Page/Unsubscribe.php b/civicrm/CRM/Mailing/Page/Unsubscribe.php index 61be1a0672ac522620c552003a070ad76decd786..f86ec5cbe5c2fe09c03a5b6e6aab174859c544d7 100644 --- a/civicrm/CRM/Mailing/Page/Unsubscribe.php +++ b/civicrm/CRM/Mailing/Page/Unsubscribe.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Mailing_Page_Unsubscribe extends CRM_Mailing_Page_Common { diff --git a/civicrm/CRM/Mailing/Page/View.php b/civicrm/CRM/Mailing/Page/View.php index 8b21dc9a1a7eb17270e03ce2c5737680395c4bf7..c1436edf84ff87a1972cae44d2b5db145eda4b1d 100644 --- a/civicrm/CRM/Mailing/Page/View.php +++ b/civicrm/CRM/Mailing/Page/View.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/PseudoConstant.php b/civicrm/CRM/Mailing/PseudoConstant.php index 9a4c25f44b20c9305c0e9dfe9669ec7b7f784766..0fcf1dfab53e96cbbd76d31743dd4afe932a20fb 100644 --- a/civicrm/CRM/Mailing/PseudoConstant.php +++ b/civicrm/CRM/Mailing/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Selector/Browse.php b/civicrm/CRM/Mailing/Selector/Browse.php index 40a282090d532115b255caa2da11a6f9d63c8914..99eea7f50c3c297d832008435c237d2651836b8c 100644 --- a/civicrm/CRM/Mailing/Selector/Browse.php +++ b/civicrm/CRM/Mailing/Selector/Browse.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Selector/Event.php b/civicrm/CRM/Mailing/Selector/Event.php index c7db96ca4c0eb150d5abf1e27241375fa0c898c8..e7cc88a07410f41b555d80aa6c14d8cc3ec63435 100644 --- a/civicrm/CRM/Mailing/Selector/Event.php +++ b/civicrm/CRM/Mailing/Selector/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Selector/Search.php b/civicrm/CRM/Mailing/Selector/Search.php index 8558f17c5f00552927e47e265e2d87239d76a222..2e279a09e136445399c6eb0febaf32e3d1352fdd 100644 --- a/civicrm/CRM/Mailing/Selector/Search.php +++ b/civicrm/CRM/Mailing/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Mailing/Task.php b/civicrm/CRM/Mailing/Task.php index 6bdec4b22a42ad1d41a9bea2bb38c59b040520ba..0ea28bac63181f0baca15148c51e38c9057ff934 100644 --- a/civicrm/CRM/Mailing/Task.php +++ b/civicrm/CRM/Mailing/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -36,20 +36,9 @@ * used by the search forms. * */ -class CRM_Mailing_Task { - /** - * The task array. - * - * @var array - */ - static $_tasks = NULL; +class CRM_Mailing_Task extends CRM_Core_Task { - /** - * The optional task array. - * - * @var array - */ - static $_optionalTasks = NULL; + static $objectType = 'mailing'; /** * These tasks are the core set of tasks that the user can perform @@ -58,46 +47,37 @@ class CRM_Mailing_Task { * @return array * the set of tasks for a group of contacts. */ - public static function &tasks() { + public static function tasks() { if (!(self::$_tasks)) { self::$_tasks = array( - 1 => array( + self::TASK_PRINT => array( 'title' => ts('Print Mailing Recipients'), 'class' => 'CRM_Mailing_Form_Task_Print', 'result' => FALSE, ), ); - CRM_Utils_Hook::searchTasks('mailing', self::$_tasks); - asort(self::$_tasks); + parent::tasks(); } return self::$_tasks; } - /** - * These tasks are the core set of task titles - * on mailing recipients. - * - * @return array - * the set of task titles. - */ - public static function &taskTitles() { - return array(); - } - /** * Show tasks selectively based on the permission level * of the user. * * @param int $permission + * @param array $params * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission) { - $task = array(); - return $task; + public static function permissionedTaskTitles($permission, $params = array()) { + $tasks = array(); + + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); + return $tasks; } /** @@ -113,8 +93,9 @@ class CRM_Mailing_Task { self::tasks(); if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) { // make the print task by default - $value = 1; + $value = self::TASK_PRINT; } + return array( self::$_tasks[$value]['class'], self::$_tasks[$value]['result'], diff --git a/civicrm/CRM/Mailing/Tokens.php b/civicrm/CRM/Mailing/Tokens.php index 53271bc3ef629737e40d7528e2aecbd6b451c1a6..febf8fe45bbdcc0e63ba5f57df5b6fc0970684ec 100644 --- a/civicrm/CRM/Mailing/Tokens.php +++ b/civicrm/CRM/Mailing/Tokens.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Mailing/xml/Menu/Mailing.xml b/civicrm/CRM/Mailing/xml/Menu/Mailing.xml index 33b9e501ea8c45e9156fcc453d50d6ca308e81c5..639406b8af87326734ec140498bdc722289d2082 100644 --- a/civicrm/CRM/Mailing/xml/Menu/Mailing.xml +++ b/civicrm/CRM/Mailing/xml/Menu/Mailing.xml @@ -5,7 +5,7 @@ <path>civicrm/mailing</path> <title>CiviMail</title> <page_callback>CRM_Mailing_Page_Browse</page_callback> - <access_arguments>access CiviMail;create mailings</access_arguments> + <access_arguments>access CiviMail;create mailings;send SMS</access_arguments> <page_type>1</page_type> <weight>600</weight> <component>CiviMail</component> @@ -71,7 +71,7 @@ <title>Find Mailings</title> <path_arguments>scheduled=true</path_arguments> <page_callback>CRM_Mailing_Page_Browse</page_callback> - <access_arguments>access CiviMail;approve mailings;create mailings;schedule mailings</access_arguments> + <access_arguments>access CiviMail;approve mailings;create mailings;schedule mailings;send SMS</access_arguments> <page_type>1</page_type> <weight>620</weight> </item> diff --git a/civicrm/CRM/Member/ActionMapping.php b/civicrm/CRM/Member/ActionMapping.php index 9645ebcd0612fcc505df4527718c166728607c51..88c91348c01715f63c1b6af517786388c6e4a238 100644 --- a/civicrm/CRM/Member/ActionMapping.php +++ b/civicrm/CRM/Member/ActionMapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Member/BAO/Membership.php b/civicrm/CRM/Member/BAO/Membership.php index 00361ca217c6d4767e14cc15c961cc4e9c68efce..c7dc3262934774a8011beb00e911dd6fccce09cd 100644 --- a/civicrm/CRM/Member/BAO/Membership.php +++ b/civicrm/CRM/Member/BAO/Membership.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { @@ -2244,6 +2244,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND $baseQuery = " SELECT civicrm_membership.id as membership_id, civicrm_membership.is_override as is_override, + civicrm_membership.status_override_end_date as status_override_end_date, civicrm_membership.membership_type_id as membership_type_id, civicrm_membership.status_id as status_id, civicrm_membership.join_date as join_date, @@ -2285,6 +2286,8 @@ WHERE civicrm_membership.is_test = 0"; continue; } + self::processOverriddenUntilDateMembership($dao); + //update membership records where status is NOT - Pending OR Cancelled. //as well as membership is not override. //skipping Expired membership records -> reduced extra processing( kiran ) @@ -2348,6 +2351,38 @@ WHERE civicrm_membership.is_test = 0"; return $result; } + /** + * Set is_override for the 'overridden until date' membership to + * False and clears the 'until date' field in case the 'until date' + * is equal or after today date. + * + * @param CRM_Core_DAO $membership + * The membership to be processed + */ + private static function processOverriddenUntilDateMembership($membership) { + $isOverriddenUntilDate = !empty($membership->is_override) && !empty($membership->status_override_end_date); + if (!$isOverriddenUntilDate) { + return; + } + + $todayDate = new DateTime(); + $todayDate->setTime(0, 0); + + $overrideEndDate = new DateTime($membership->status_override_end_date); + $overrideEndDate->setTime(0, 0); + + $datesDifference = $todayDate->diff($overrideEndDate); + $daysDifference = (int) $datesDifference->format('%R%a'); + if ($daysDifference <= 0) { + $params = array( + 'id' => $membership->membership_id, + 'is_override' => FALSE, + 'status_override_end_date' => 'null', + ); + civicrm_api3('membership', 'create', $params); + } + } + /** * Returns the membership types for a particular contact * who has lifetime membership without end date. diff --git a/civicrm/CRM/Member/BAO/MembershipBlock.php b/civicrm/CRM/Member/BAO/MembershipBlock.php index eb32779f7b564d62f703d6308982106c7e7f4328..7614df769ac54d3a123b57b739eddb2eff714100 100644 --- a/civicrm/CRM/Member/BAO/MembershipBlock.php +++ b/civicrm/CRM/Member/BAO/MembershipBlock.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/BAO/MembershipLog.php b/civicrm/CRM/Member/BAO/MembershipLog.php index 17d8a11e00cfec23da867ec2fdc7c65868c3af5a..7787f0ffa353d2c3f1edb78c04cf05fd1da464c2 100644 --- a/civicrm/CRM/Member/BAO/MembershipLog.php +++ b/civicrm/CRM/Member/BAO/MembershipLog.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/BAO/MembershipPayment.php b/civicrm/CRM/Member/BAO/MembershipPayment.php index 1853b23d557861c56c5860d3093c42d14d8f83e6..9050d3ae74e65c321b9ffe403803684cb37a37e6 100644 --- a/civicrm/CRM/Member/BAO/MembershipPayment.php +++ b/civicrm/CRM/Member/BAO/MembershipPayment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/BAO/MembershipStatus.php b/civicrm/CRM/Member/BAO/MembershipStatus.php index d06590ece831189d5189d37ea85c93ba8a23f3b6..c118c7cc29be614d5aa455b82f2a65c1bdee5a5d 100644 --- a/civicrm/CRM/Member/BAO/MembershipStatus.php +++ b/civicrm/CRM/Member/BAO/MembershipStatus.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/BAO/MembershipType.php b/civicrm/CRM/Member/BAO/MembershipType.php index f53c67175fb58c64163ccb54ad55851d1f2b8ece..0b141d8ac95a6e932094ac2cb2407606a31511d0 100644 --- a/civicrm/CRM/Member/BAO/MembershipType.php +++ b/civicrm/CRM/Member/BAO/MembershipType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/BAO/Query.php b/civicrm/CRM/Member/BAO/Query.php index b2993e379aff8b1e71040d8d8cab451ce6c4e379..363281ec0b02c5d8013848f6278167485e7c6e21 100644 --- a/civicrm/CRM/Member/BAO/Query.php +++ b/civicrm/CRM/Member/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Member_BAO_Query extends CRM_Core_BAO_Query { diff --git a/civicrm/CRM/Member/Controller/Search.php b/civicrm/CRM/Member/Controller/Search.php index c72c64293ca77d1d8ee9d6fc747fc35b19e4f169..4e96853a088f14e14f10b576d6e886c0d375d092 100644 --- a/civicrm/CRM/Member/Controller/Search.php +++ b/civicrm/CRM/Member/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/DAO/Membership.php b/civicrm/CRM/Member/DAO/Membership.php index 7a378b086a76cf9a4252b265c03e6a917a5edabd..969b243937fab433a6a62c3bf96285b8d204908b 100644 --- a/civicrm/CRM/Member/DAO/Membership.php +++ b/civicrm/CRM/Member/DAO/Membership.php @@ -2,11 +2,11 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Member/Membership.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen - * (GenCodeChecksum:1a9ebe9e0d3ab9247f2a3dda32bab22a) + * (GenCodeChecksum:643f191c50bbd0244e93745a929ba499) */ /** @@ -89,6 +89,13 @@ class CRM_Member_DAO_Membership extends CRM_Core_DAO { */ public $is_override; + /** + * Then end date of membership status override if 'Override until selected date' override type is selected. + * + * @var date + */ + public $status_override_end_date; + /** * Optional FK to Parent Membership. * @@ -343,6 +350,25 @@ class CRM_Member_DAO_Membership extends CRM_Core_DAO { 'type' => 'CheckBox', ], ], + 'status_override_end_date' => [ + 'name' => 'status_override_end_date', + 'type' => CRM_Utils_Type::T_DATE, + 'title' => ts('Status Override End Date'), + 'description' => 'Then end date of membership status override if \'Override until selected date\' override type is selected.', + 'import' => TRUE, + 'where' => 'civicrm_membership.status_override_end_date', + 'headerPattern' => '', + 'dataPattern' => '', + 'export' => TRUE, + 'default' => 'NULL', + 'table_name' => 'civicrm_membership', + 'entity' => 'Membership', + 'bao' => 'CRM_Member_BAO_Membership', + 'localizable' => 0, + 'html' => [ + 'type' => 'Select Date', + ], + ], 'owner_membership_id' => [ 'name' => 'owner_membership_id', 'type' => CRM_Utils_Type::T_INT, diff --git a/civicrm/CRM/Member/DAO/MembershipBlock.php b/civicrm/CRM/Member/DAO/MembershipBlock.php index 084c706f8129199382e32b4cbb502154063f454c..cba09a6af55a9f7ac2c720c74993a3fcde20f7b4 100644 --- a/civicrm/CRM/Member/DAO/MembershipBlock.php +++ b/civicrm/CRM/Member/DAO/MembershipBlock.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Member/MembershipBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Member/DAO/MembershipLog.php b/civicrm/CRM/Member/DAO/MembershipLog.php index 3b6310bd57d46ce37798289f0e95f5e1bf42f4b5..9cd01bfebeb6d133d8ce11028349c6e39df12e44 100644 --- a/civicrm/CRM/Member/DAO/MembershipLog.php +++ b/civicrm/CRM/Member/DAO/MembershipLog.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Member/MembershipLog.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Member/DAO/MembershipPayment.php b/civicrm/CRM/Member/DAO/MembershipPayment.php index 6d7ea99b97f8d18716e8a2abce975cbd51f020b0..5f59d38536af653884fc1b97cc9324d4b4b2bbdf 100644 --- a/civicrm/CRM/Member/DAO/MembershipPayment.php +++ b/civicrm/CRM/Member/DAO/MembershipPayment.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Member/MembershipPayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Member/DAO/MembershipStatus.php b/civicrm/CRM/Member/DAO/MembershipStatus.php index b40573e63745a8ef7f7703cd691f634d6a9d2db7..bf4302c3eb36732e7cbcb98f2871876643683829 100644 --- a/civicrm/CRM/Member/DAO/MembershipStatus.php +++ b/civicrm/CRM/Member/DAO/MembershipStatus.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Member/MembershipStatus.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Member/DAO/MembershipType.php b/civicrm/CRM/Member/DAO/MembershipType.php index 177dcccedc6266d3da78ec4a6070ce5ce832f330..e4f260aa51e9c0d5e81cc65fb892e9bbc9ed49f3 100644 --- a/civicrm/CRM/Member/DAO/MembershipType.php +++ b/civicrm/CRM/Member/DAO/MembershipType.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Member/MembershipType.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Member/Form.php b/civicrm/CRM/Member/Form.php index 29f91b26abe798240dbc86bfe71dcb79a60a261d..cf109871cd36e3ea93718462424f919b78fc814e 100644 --- a/civicrm/CRM/Member/Form.php +++ b/civicrm/CRM/Member/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -140,6 +140,13 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment { if (isset($defaults['status'])) { $this->assign('membershipStatus', $defaults['status']); } + + if (!empty($defaults['is_override'])) { + $defaults['is_override'] = CRM_Member_StatusOverrideTypes::PERMANENT; + } + if (!empty($defaults['status_override_end_date'])) { + $defaults['is_override'] = CRM_Member_StatusOverrideTypes::UNTIL_DATE; + } } if ($this->_action & CRM_Core_Action::ADD) { diff --git a/civicrm/CRM/Member/Form/Membership.php b/civicrm/CRM/Member/Form/Membership.php index 210368387295580013a1c7103b73b6f689d63747..fa30cf4e67e353a16b446b495c543d597d078007 100644 --- a/civicrm/CRM/Member/Form/Membership.php +++ b/civicrm/CRM/Member/Form/Membership.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -596,14 +596,16 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $this->add('select', 'status_id', ts('Membership Status'), array('' => ts('- select -')) + CRM_Member_PseudoConstant::membershipStatus(NULL, NULL, 'label') ); - $statusOverride = $this->addElement('checkbox', 'is_override', - ts('Status Override?'), NULL, - array('onClick' => 'showHideMemberStatus()') + + $statusOverride = $this->addElement('select', 'is_override', ts('Status Override?'), + CRM_Member_StatusOverrideTypes::getSelectOptions() ); if ($statusOverride) { $elements[] = $statusOverride; } + $this->add('datepicker', 'status_override_end_date', ts('Status Override End Date'), '', FALSE, array('minDate' => time(), 'time' => FALSE)); + $this->addElement('checkbox', 'record_contribution', ts('Record Membership Payment?')); $this->add('text', 'total_amount', ts('Amount')); @@ -821,9 +823,13 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { foreach ($tmp_statuses as $cur_stat) { $status_ids[] = $cur_stat['id']; } + if (empty($params['status_id']) || in_array($params['status_id'], $status_ids) == FALSE) { $errors['status_id'] = ts('Please enter a status that does NOT represent a current membership status.'); - $errors['is_override'] = ts('This must be checked because you set an End Date for a lifetime membership'); + } + + if (!empty($params['is_override']) && !CRM_Member_StatusOverrideTypes::isPermanent($params['is_override'])) { + $errors['is_override'] = ts('Because you set an End Date for a lifetime membership, This must be set to "Override Permanently"'); } } else { @@ -855,7 +861,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { } //CRM-3724, check for availability of valid membership status. - if (empty($params['is_override']) && !isset($errors['_qf_default'])) { + if ((empty($params['is_override']) || CRM_Member_StatusOverrideTypes::isNo($params['is_override'])) && !isset($errors['_qf_default'])) { $calcStatus = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate($startDate, $endDate, $joinDate, @@ -869,7 +875,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $errors['_qf_default'] = ts('There is no valid Membership Status available for selected membership dates.'); $status = ts('Oops, it looks like there is no valid membership status available for the given membership dates. You can <a href="%1">Configure Membership Status Rules</a>.', array(1 => $url)); if (!$self->_mode) { - $status .= ' ' . ts('OR You can sign up by setting Status Override? to true.'); + $status .= ' ' . ts('OR You can sign up by setting Status Override? to something other than "NO".'); } CRM_Core_Session::setStatus($status, ts('Membership Status Error'), 'error'); } @@ -880,10 +886,14 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { $errors['join_date'] = ts('Please enter the Member Since.'); } - if (isset($params['is_override']) && - $params['is_override'] && empty($params['status_id']) - ) { - $errors['status_id'] = ts('Please enter the status.'); + if (!empty($params['is_override']) && CRM_Member_StatusOverrideTypes::isOverridden($params['is_override']) && empty($params['status_id'])) { + $errors['status_id'] = ts('Please enter the Membership status.'); + } + + if (!empty($params['is_override']) && CRM_Member_StatusOverrideTypes::isUntilDate($params['is_override'])) { + if (empty($params['status_override_end_date'])) { + $errors['status_override_end_date'] = ts('Please enter the Membership override end date.'); + } } //total amount condition arise when membership type having no @@ -916,12 +926,40 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { } // get the submitted form values. $this->_params = $this->controller->exportValues($this->_name); + $this->prepareStatusOverrideValues(); $this->submit(); $this->setUserContext(); } + /** + * Prepares the values related to status override. + */ + private function prepareStatusOverrideValues() { + $this->setOverrideDateValue(); + $this->convertIsOverrideValue(); + } + + /** + * Sets status override end date to empty value if + * the selected override option is not 'until date'. + */ + private function setOverrideDateValue() { + if (!CRM_Member_StatusOverrideTypes::isUntilDate($this->_params['is_override'])) { + $this->_params['status_override_end_date'] = ''; + } + } + + /** + * Convert the value of selected (status override?) + * option to TRUE if it indicate an overridden status + * or FALSE otherwise. + */ + private function convertIsOverrideValue() { + $this->_params['is_override'] = CRM_Member_StatusOverrideTypes::isOverridden($this->_params['is_override']); + } + /** * Send email receipt. * @@ -1181,6 +1219,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form { 'status_id', 'source', 'is_override', + 'status_override_end_date', 'campaign_id', ); diff --git a/civicrm/CRM/Member/Form/MembershipBlock.php b/civicrm/CRM/Member/Form/MembershipBlock.php index 25a2751268eb4e13bb265840f2c608ebf2ca39fd..089e8fe17b491f4c8dea2ddb87a87a16038e7c8f 100644 --- a/civicrm/CRM/Member/Form/MembershipBlock.php +++ b/civicrm/CRM/Member/Form/MembershipBlock.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/MembershipConfig.php b/civicrm/CRM/Member/Form/MembershipConfig.php index e3f2df0ba71db0f00f660b624edd4b5d3a64e53b..14473fc1ef2bc425f1460cbb4354c62217622b9f 100644 --- a/civicrm/CRM/Member/Form/MembershipConfig.php +++ b/civicrm/CRM/Member/Form/MembershipConfig.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/MembershipRenewal.php b/civicrm/CRM/Member/Form/MembershipRenewal.php index 5a0c2c2c0592648fb628da18eb081c530ab97480..03c918093531dc60894217fb1b014087ea991061 100644 --- a/civicrm/CRM/Member/Form/MembershipRenewal.php +++ b/civicrm/CRM/Member/Form/MembershipRenewal.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -238,7 +238,8 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form { $allMembershipInfo = array(); - if (is_array($defaults['membership_type_id'])) { //CRM-21485 + // CRM-21485 + if (is_array($defaults['membership_type_id'])) { $defaults['membership_type_id'] = $defaults['membership_type_id'][1]; } diff --git a/civicrm/CRM/Member/Form/MembershipStatus.php b/civicrm/CRM/Member/Form/MembershipStatus.php index e20ec7f86cf6e648914eb2272283659662e16308..918b60a500c2c067ac71b8b27bacba55bc20e4ba 100644 --- a/civicrm/CRM/Member/Form/MembershipStatus.php +++ b/civicrm/CRM/Member/Form/MembershipStatus.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/MembershipType.php b/civicrm/CRM/Member/Form/MembershipType.php index 62788066985c76bd46d628074367a85065e7a0ac..1a22b0cd8eb4956c4470ef3763df5215cd51b68b 100644 --- a/civicrm/CRM/Member/Form/MembershipType.php +++ b/civicrm/CRM/Member/Form/MembershipType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/MembershipView.php b/civicrm/CRM/Member/Form/MembershipView.php index 4f3f201715e85663ad7bc6ef084de6fb6f50b98c..de45ee6cdbc50533d9e7c4effab0db574d151c4a 100644 --- a/civicrm/CRM/Member/Form/MembershipView.php +++ b/civicrm/CRM/Member/Form/MembershipView.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/Search.php b/civicrm/CRM/Member/Form/Search.php index 0890a4bcce00283a69c303d33b9262d32521f7fd..33450a5e7abeee6d72011c84f7b0730bc66d4952 100644 --- a/civicrm/CRM/Member/Form/Search.php +++ b/civicrm/CRM/Member/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -163,9 +163,7 @@ class CRM_Member_Form_Search extends CRM_Core_Form_Search { $this->addRowSelectors($rows); } - $permission = CRM_Core_Permission::getPermission(); - - $this->addTaskMenu(CRM_Member_Task::permissionedTaskTitles($permission)); + $this->addTaskMenu(CRM_Member_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission())); } } diff --git a/civicrm/CRM/Member/Form/Task.php b/civicrm/CRM/Member/Form/Task.php index 7624334c19e54c59508f8b9c6ca69c610c6feb5c..1e3943ec210ff5f45411100fda5dbf998751793b 100644 --- a/civicrm/CRM/Member/Form/Task.php +++ b/civicrm/CRM/Member/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -95,8 +95,11 @@ class CRM_Member_Form_Task extends CRM_Core_Form { $values = $form->controller->exportValues($form->get('searchFormName')); $form->_task = $values['task']; - $memberTasks = CRM_Member_Task::tasks(); - $form->assign('taskName', $memberTasks[$form->_task]); + $tasks = CRM_Member_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission()); + if (!array_key_exists($form->_task, $tasks)) { + CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.')); + } + $form->assign('taskName', $tasks[$form->_task]); $ids = array(); if ($values['radio_ts'] == 'ts_sel') { diff --git a/civicrm/CRM/Member/Form/Task/Batch.php b/civicrm/CRM/Member/Form/Task/Batch.php index 9f79594945dbdbe5aae095bbd96fd2597b343f4b..be22704f44123a7b1b5bccbba639013fd5403953 100644 --- a/civicrm/CRM/Member/Form/Task/Batch.php +++ b/civicrm/CRM/Member/Form/Task/Batch.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/Task/Delete.php b/civicrm/CRM/Member/Form/Task/Delete.php index 21efb65d0b2cef7610d440d36a570c997410109c..334c07b38a610426b88774e2807b8dc8826b9005 100644 --- a/civicrm/CRM/Member/Form/Task/Delete.php +++ b/civicrm/CRM/Member/Form/Task/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/Task/Email.php b/civicrm/CRM/Member/Form/Task/Email.php index 2efd8140ec923c25b0451a228c66ac736a749bc4..fdff9b1c2abcc6470c974731bd32d79ff92d5308 100644 --- a/civicrm/CRM/Member/Form/Task/Email.php +++ b/civicrm/CRM/Member/Form/Task/Email.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id: Email.php 45499 2013-02-08 12:31:05Z kurund $ * */ diff --git a/civicrm/CRM/Member/Form/Task/Label.php b/civicrm/CRM/Member/Form/Task/Label.php index 0bb7f0129cacd8796f611232e804174e5836dc33..db0c24b94e7e0e5fbe65537d8116e108e5fc2aff 100644 --- a/civicrm/CRM/Member/Form/Task/Label.php +++ b/civicrm/CRM/Member/Form/Task/Label.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/Task/PDFLetter.php b/civicrm/CRM/Member/Form/Task/PDFLetter.php index 04176fc47d37dba625c79f5a2c90c0f3944a46b1..c5c96e6d442aeb8fbe0d818ab7da92d7239e78e7 100644 --- a/civicrm/CRM/Member/Form/Task/PDFLetter.php +++ b/civicrm/CRM/Member/Form/Task/PDFLetter.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/Task/PickProfile.php b/civicrm/CRM/Member/Form/Task/PickProfile.php index 1f5aefb07d30241fc7729a26ddbdfeeb1eb694bb..063cd9187c16d98de75d3666d0b5df9e23b9eb24 100644 --- a/civicrm/CRM/Member/Form/Task/PickProfile.php +++ b/civicrm/CRM/Member/Form/Task/PickProfile.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/Task/Print.php b/civicrm/CRM/Member/Form/Task/Print.php index 7c89789747eb53cbe13f48a155dfa6551504cc31..7d1b1442b044815cd1673e00aa7215ff72ab8af2 100644 --- a/civicrm/CRM/Member/Form/Task/Print.php +++ b/civicrm/CRM/Member/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/Task/Result.php b/civicrm/CRM/Member/Form/Task/Result.php index 3f2e3dc30dccd8ae09ba89e65aafd7db3d464dd7..dee1051cad6bfc4733315d52b093b1986c5163e3 100644 --- a/civicrm/CRM/Member/Form/Task/Result.php +++ b/civicrm/CRM/Member/Form/Task/Result.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Form/Task/SearchTaskHookSample.php b/civicrm/CRM/Member/Form/Task/SearchTaskHookSample.php index bccbea6f5e91a0b29a590f0c599f605c360bab35..ad1536dce00071014771c9da4a08c569b6bfcda9 100644 --- a/civicrm/CRM/Member/Form/Task/SearchTaskHookSample.php +++ b/civicrm/CRM/Member/Form/Task/SearchTaskHookSample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Import/Controller.php b/civicrm/CRM/Member/Import/Controller.php index 5148f9643c438b304cda32c800b3e4d4c03141e7..1e84e74d36c41022ba5dac6ee4ebb513e0818595 100644 --- a/civicrm/CRM/Member/Import/Controller.php +++ b/civicrm/CRM/Member/Import/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Import/Field.php b/civicrm/CRM/Member/Import/Field.php index 5be748109877b3a03d4c51133107928f9c83feb0..7ca0a33c08f262b5746073d286fc7c4921a52634 100644 --- a/civicrm/CRM/Member/Import/Field.php +++ b/civicrm/CRM/Member/Import/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Import/Form/DataSource.php b/civicrm/CRM/Member/Import/Form/DataSource.php index 11eb187608b3a67369b31a4978ce847067b08304..5aa7eed44764405e7a7b0df6fedd50a2a3ff8e1a 100644 --- a/civicrm/CRM/Member/Import/Form/DataSource.php +++ b/civicrm/CRM/Member/Import/Form/DataSource.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Import/Form/MapField.php b/civicrm/CRM/Member/Import/Form/MapField.php index a48eb207002979b196d36ae2de61786cec939370..f4d4e63415f798282462b82df16ea263fed672a3 100644 --- a/civicrm/CRM/Member/Import/Form/MapField.php +++ b/civicrm/CRM/Member/Import/Form/MapField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Import/Form/Preview.php b/civicrm/CRM/Member/Import/Form/Preview.php index 3114d0271f471b58f54ccf1dafddd8bc076bbf2c..9190ff622500dcb2de49d5fe2c991e8f17cef185 100644 --- a/civicrm/CRM/Member/Import/Form/Preview.php +++ b/civicrm/CRM/Member/Import/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Import/Form/Summary.php b/civicrm/CRM/Member/Import/Form/Summary.php index ebd8345710f7c37095424245e0b1403ab5f6b551..8b7970ed24abc9300159d7ac41515b7946a263d2 100644 --- a/civicrm/CRM/Member/Import/Form/Summary.php +++ b/civicrm/CRM/Member/Import/Form/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Import/Parser.php b/civicrm/CRM/Member/Import/Parser.php index b8ffc0f91ee0773b80bd32631af61ccfccb82014..edc0e6db7e684534e1f42775147ad047cd5221f3 100644 --- a/civicrm/CRM/Member/Import/Parser.php +++ b/civicrm/CRM/Member/Import/Parser.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Import/Parser/Membership.php b/civicrm/CRM/Member/Import/Parser/Membership.php index a66d1f2816e810ec15715551a4bb6e9761428942..df78ef77fcc8498ea401817d7116729ebd492d65 100644 --- a/civicrm/CRM/Member/Import/Parser/Membership.php +++ b/civicrm/CRM/Member/Import/Parser/Membership.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -211,6 +211,17 @@ class CRM_Member_Import_Parser_Membership extends CRM_Member_Import_Parser { } break; + case 'status_override_end_date': + if (CRM_Utils_Date::convertToDefaultDate($params, $dateType, $key)) { + if (!CRM_Utils_Rule::date($params[$key])) { + CRM_Contact_Import_Parser_Contact::addToErrorMsg('Status Override End Date', $errorMessage); + } + } + else { + CRM_Contact_Import_Parser_Contact::addToErrorMsg('Status Override End Date', $errorMessage); + } + break; + case 'membership_type_id': $membershipTypes = CRM_Member_PseudoConstant::membershipType(); if (!CRM_Utils_Array::crmInArray($val, $membershipTypes) && diff --git a/civicrm/CRM/Member/Info.php b/civicrm/CRM/Member/Info.php index 4d7e6d594fd09e2c34ae350dcbd0adc3f8717eb4..a718b547461d853b129a798d20ab36619ae6e715 100644 --- a/civicrm/CRM/Member/Info.php +++ b/civicrm/CRM/Member/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * abstract class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Page/AJAX.php b/civicrm/CRM/Member/Page/AJAX.php index 5e364ded053ee11fb2dc6f19e2245f280fd0ec5f..655f4e70330a92a5e33782c7f197ac695aa5a59c 100644 --- a/civicrm/CRM/Member/Page/AJAX.php +++ b/civicrm/CRM/Member/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Page/DashBoard.php b/civicrm/CRM/Member/Page/DashBoard.php index 84ace2eba77cc4795a31675dc5a9cd41f9d24c8d..1a2423ae7071c7a9320761aa9edd56cb5d83a3d9 100644 --- a/civicrm/CRM/Member/Page/DashBoard.php +++ b/civicrm/CRM/Member/Page/DashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Page/MembershipStatus.php b/civicrm/CRM/Member/Page/MembershipStatus.php index aa9732200190165d8ba19654cf1eb8894e803fa0..29a3555f18bb5a271bafd9e40e73e13726c00bea 100644 --- a/civicrm/CRM/Member/Page/MembershipStatus.php +++ b/civicrm/CRM/Member/Page/MembershipStatus.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Page/MembershipType.php b/civicrm/CRM/Member/Page/MembershipType.php index 7c83f7e6356e8cbbd64ab8f7e51035ad766f1d7d..16bb1e80db7f14e5a90950a031c0e9210f1e5844 100644 --- a/civicrm/CRM/Member/Page/MembershipType.php +++ b/civicrm/CRM/Member/Page/MembershipType.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Page/Tab.php b/civicrm/CRM/Member/Page/Tab.php index 789bbf1f63d2f04969466112f8402fd95cad5080..8bfeacacf7842e5b0d858a05bee1aede33fb4175 100644 --- a/civicrm/CRM/Member/Page/Tab.php +++ b/civicrm/CRM/Member/Page/Tab.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Page/UserDashboard.php b/civicrm/CRM/Member/Page/UserDashboard.php index c83c4ce73e0fadc7997359805b01175f74fde35d..76dbf3fdf5486d4fc448255f6beb5dc5920b96af 100644 --- a/civicrm/CRM/Member/Page/UserDashboard.php +++ b/civicrm/CRM/Member/Page/UserDashboard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/PseudoConstant.php b/civicrm/CRM/Member/PseudoConstant.php index e51bf25bfac6b978d85fb9da9cf73fa93d866949..b346b3e1ac2350684c9c3526b0c55e700d0daa2d 100644 --- a/civicrm/CRM/Member/PseudoConstant.php +++ b/civicrm/CRM/Member/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/Selector/Search.php b/civicrm/CRM/Member/Selector/Search.php index 36cda3a4d53642060b9d48d3b38b770b296a37ba..a59bae27e90bbb2bf56a1a824f8b80a6b915dd10 100644 --- a/civicrm/CRM/Member/Selector/Search.php +++ b/civicrm/CRM/Member/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Member/StateMachine/Search.php b/civicrm/CRM/Member/StateMachine/Search.php index a4521ea16378a89852611c0b4f366223f00add96..9e4e8a2f5574944be5c185120a8e538daf24aca0 100644 --- a/civicrm/CRM/Member/StateMachine/Search.php +++ b/civicrm/CRM/Member/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Member/StatusOverrideTypes.php b/civicrm/CRM/Member/StatusOverrideTypes.php new file mode 100644 index 0000000000000000000000000000000000000000..4b47ee4f16df6b470543ce39ad3d38e78973f7c1 --- /dev/null +++ b/civicrm/CRM/Member/StatusOverrideTypes.php @@ -0,0 +1,116 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Membership status override types. + * + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2018 + * + */ +class CRM_Member_StatusOverrideTypes { + /** + * The membership status is not overridden + * and its is subject to membership status rules. + */ + const NO = 0; + + /** + * The membership will stay at the selected status + * and its status is NOT subject to membership + * status rules. + */ + const PERMANENT = 1; + + /** + * The membership status will stay at the + * selected status and it is NOT subject to membership status rules. + * However, on the selected date(status_override_end_date), + * the status override type will automatically change to "NO" thus then + * the membership becomes subject to membership status rules. + */ + const UNTIL_DATE = 2; + + /** + * Gets the list of override types + * as a list of options to be used + * for select input. + * + * @return array + * In ['Type 1 Value' => 'Type 1 Label'] format + */ + public static function getSelectOptions() { + return array( + self::NO => ts('No'), + self::PERMANENT => ts('Override Permanently'), + self::UNTIL_DATE => ts('Override Until Selected Date'), + ); + } + + /** + * Determines if the override type means + * that the membership is overridden or not. + * For now, only "NO" type means that the membership + * status is not overridden. + * + * @param $overrideType + * + * @return bool + */ + public static function isOverridden($overrideType) { + if ($overrideType == self::NO) { + return FALSE; + } + + return TRUE; + } + + public static function isNo($overrideType) { + if ($overrideType != self::NO) { + return FALSE; + } + + return TRUE; + } + + public static function isPermanent($overrideType) { + if ($overrideType != self::PERMANENT) { + return FALSE; + } + + return TRUE; + } + + public static function isUntilDate($overrideType) { + if ($overrideType != self::UNTIL_DATE) { + return FALSE; + } + + return TRUE; + } + +} diff --git a/civicrm/CRM/Member/Task.php b/civicrm/CRM/Member/Task.php index d20859a8850d4fa186a190b302765f6bf318118f..d93726a3a8b3f4b25a23ee0283defbcd730306e4 100644 --- a/civicrm/CRM/Member/Task.php +++ b/civicrm/CRM/Member/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -39,22 +39,12 @@ * used by the search forms * */ -class CRM_Member_Task { - const DELETE_MEMBERS = 1, PRINT_MEMBERS = 2, EXPORT_MEMBERS = 3, EMAIL_CONTACTS = 4, BATCH_MEMBERS = 5; +class CRM_Member_Task extends CRM_Core_Task { + const + // Member tasks + LABEL_MEMBERS = 201; - /** - * The task array - * - * @var array - */ - static $_tasks = NULL; - - /** - * The optional task array - * - * @var array - */ - static $_optionalTasks = NULL; + static $objectType = 'membership'; /** * These tasks are the core set of tasks that the user can perform @@ -63,20 +53,20 @@ class CRM_Member_Task { * @return array * the set of tasks for a group of contacts */ - public static function &tasks() { - if (!(self::$_tasks)) { + public static function tasks() { + if (!self::$_tasks) { self::$_tasks = array( - 1 => array( + self::TASK_DELETE => array( 'title' => ts('Delete memberships'), 'class' => 'CRM_Member_Form_Task_Delete', 'result' => FALSE, ), - 2 => array( + self::TASK_PRINT => array( 'title' => ts('Print selected rows'), 'class' => 'CRM_Member_Form_Task_Print', 'result' => FALSE, ), - 3 => array( + self::TASK_EXPORT => array( 'title' => ts('Export members'), 'class' => array( 'CRM_Export_Form_Select', @@ -84,7 +74,7 @@ class CRM_Member_Task { ), 'result' => FALSE, ), - 4 => array( + self::TASK_EMAIL => array( 'title' => ts('Email - send now (to %1 or less)', array( 1 => Civi::settings() ->get('simple_mail_limit'), @@ -92,7 +82,7 @@ class CRM_Member_Task { 'class' => 'CRM_Member_Form_Task_Email', 'result' => TRUE, ), - 5 => array( + self::BATCH_UPDATE => array( 'title' => ts('Update multiple memberships'), 'class' => array( 'CRM_Member_Form_Task_PickProfile', @@ -100,14 +90,14 @@ class CRM_Member_Task { ), 'result' => TRUE, ), - 6 => array( + self::LABEL_MEMBERS => array( 'title' => ts('Mailing labels - print'), 'class' => array( 'CRM_Member_Form_Task_Label', ), 'result' => TRUE, ), - 7 => array( + self::PDF_LETTER => array( 'title' => ts('Print/merge document for memberships'), 'class' => 'CRM_Member_Form_Task_PDFLetter', 'result' => FALSE, @@ -116,15 +106,14 @@ class CRM_Member_Task { //CRM-4418, check for delete if (!CRM_Core_Permission::check('delete in CiviMember')) { - unset(self::$_tasks[1]); + unset(self::$_tasks[self::TASK_DELETE]); } //CRM-12920 - check for edit permission if (!CRM_Core_Permission::check('edit memberships')) { - unset(self::$_tasks[5]); + unset(self::$_tasks[self::BATCH_UPDATE]); } - CRM_Utils_Hook::searchTasks('membership', self::$_tasks); - asort(self::$_tasks); + parent::tasks(); } return self::$_tasks; @@ -137,13 +126,8 @@ class CRM_Member_Task { * @return array * the set of task titles */ - public static function &taskTitles() { - self::tasks(); - $titles = array(); - foreach (self::$_tasks as $id => $value) { - $titles[$id] = $value['title']; - } - return $titles; + public static function taskTitles() { + return parent::taskTitles(); } /** @@ -151,12 +135,12 @@ class CRM_Member_Task { * of the user * * @param int $permission + * @param array $params * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission) { - $tasks = array(); + public static function permissionedTaskTitles($permission, $params = array()) { if (($permission == CRM_Core_Permission::EDIT) || CRM_Core_Permission::check('edit memberships') ) { @@ -164,14 +148,16 @@ class CRM_Member_Task { } else { $tasks = array( - 3 => self::$_tasks[3]['title'], - 4 => self::$_tasks[4]['title'], + self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'], + self::TASK_EMAIL => self::$_tasks[self::TASK_EMAIL]['title'], ); //CRM-4418, if (CRM_Core_Permission::check('delete in CiviMember')) { - $tasks[1] = self::$_tasks[1]['title']; + $tasks[self::TASK_DELETE] = self::$_tasks[self::TASK_DELETE]['title']; } } + + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); return $tasks; } @@ -187,13 +173,10 @@ class CRM_Member_Task { public static function getTask($value) { self::tasks(); if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) { - // make the print task by default - $value = 2; + // Make the print task the default + $value = self::TASK_PRINT; } - return array( - self::$_tasks[$value]['class'], - self::$_tasks[$value]['result'], - ); + return parent::getTask($value); } } diff --git a/civicrm/CRM/Member/Tokens.php b/civicrm/CRM/Member/Tokens.php index cc664cfec4a707754e57f0192d97c9722f6d00b7..f7392bce1aaa2ece279334532ad3acd8f912a147 100644 --- a/civicrm/CRM/Member/Tokens.php +++ b/civicrm/CRM/Member/Tokens.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Note/Form/Note.php b/civicrm/CRM/Note/Form/Note.php index be20ded1b99e20c11392bd462aed18ff30758071..be7d803456215025e3298f6415bcecee6cdab232 100644 --- a/civicrm/CRM/Note/Form/Note.php +++ b/civicrm/CRM/Note/Form/Note.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/PCP/BAO/PCP.php b/civicrm/CRM/PCP/BAO/PCP.php index 16f38739c335e7d0dcaf5b39039e76d37451455a..f2ebbe8b5f26f63fe9f7343da7c316fb4e5ec7c6 100644 --- a/civicrm/CRM/PCP/BAO/PCP.php +++ b/civicrm/CRM/PCP/BAO/PCP.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_PCP_BAO_PCP extends CRM_PCP_DAO_PCP { diff --git a/civicrm/CRM/PCP/BAO/PCPBlock.php b/civicrm/CRM/PCP/BAO/PCPBlock.php index c30976e8b90750ef629beb4e753af38f1fbf4baa..e9d53855fd433755e0146d69c7d5d58e6d2325e8 100644 --- a/civicrm/CRM/PCP/BAO/PCPBlock.php +++ b/civicrm/CRM/PCP/BAO/PCPBlock.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_PCP_BAO_PCPBlock extends CRM_PCP_DAO_PCPBlock { diff --git a/civicrm/CRM/PCP/Controller/PCP.php b/civicrm/CRM/PCP/Controller/PCP.php index 02bf0048900c008948ec5464c59803a7b12c6c64..8f456dae90723c64c5b37a92e6293fa98ac075f7 100644 --- a/civicrm/CRM/PCP/Controller/PCP.php +++ b/civicrm/CRM/PCP/Controller/PCP.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/PCP/DAO/PCP.php b/civicrm/CRM/PCP/DAO/PCP.php index 623651863cba083952da33d7ef9eae184c080766..09371761b8bfb2cfe034c88164a7c45cc133bfe5 100644 --- a/civicrm/CRM/PCP/DAO/PCP.php +++ b/civicrm/CRM/PCP/DAO/PCP.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/PCP/PCP.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/PCP/DAO/PCPBlock.php b/civicrm/CRM/PCP/DAO/PCPBlock.php index b68880302e84638d396f561bb0fef7f3568b1193..c1f007d56403e3232fec8fcdcc426b9232823928 100644 --- a/civicrm/CRM/PCP/DAO/PCPBlock.php +++ b/civicrm/CRM/PCP/DAO/PCPBlock.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/PCP/PCPBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/PCP/Form/Campaign.php b/civicrm/CRM/PCP/Form/Campaign.php index 4245978bfdd5b1e59212b1cf8b3df2adb159b829..efeb41b332650b42e5d2b60d081a23c1514d49ab 100644 --- a/civicrm/CRM/PCP/Form/Campaign.php +++ b/civicrm/CRM/PCP/Form/Campaign.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/PCP/Form/Contribute.php b/civicrm/CRM/PCP/Form/Contribute.php index 4a5dd93ddf624c56be5d4712e7efbaa6316e362b..09d8e501c2bccf2e8132a4aa575709566ad152f6 100644 --- a/civicrm/CRM/PCP/Form/Contribute.php +++ b/civicrm/CRM/PCP/Form/Contribute.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/PCP/Form/Event.php b/civicrm/CRM/PCP/Form/Event.php index 2059006add5a291a95fb42eff41bf73874378ed4..330f584417db267d876d794118ae1f7295057a5c 100644 --- a/civicrm/CRM/PCP/Form/Event.php +++ b/civicrm/CRM/PCP/Form/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -54,12 +54,9 @@ class CRM_PCP_Form_Event extends CRM_Event_Form_ManageEvent { /** * Set default values for the form. * - * - * @return void + * @return array */ public function setDefaultValues() { - $defaults = array(); - $defaults = array(); if (isset($this->_id)) { $title = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_Event', $this->_id, 'title'); @@ -177,7 +174,6 @@ class CRM_PCP_Form_Event extends CRM_Event_Form_ManageEvent { /** * Process the form submission. * - * * @return void */ public function postProcess() { diff --git a/civicrm/CRM/PCP/Form/PCP.php b/civicrm/CRM/PCP/Form/PCP.php index 89a0caaecb539f02b688294f6ccec558f91f053b..a8a80e0f069e5c607e373ecc575a7c4e91143fc3 100644 --- a/civicrm/CRM/PCP/Form/PCP.php +++ b/civicrm/CRM/PCP/Form/PCP.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/PCP/Form/PCPAccount.php b/civicrm/CRM/PCP/Form/PCPAccount.php index d62abf8640f0f2aea96e992f82b4a3b85907d4d4..087052418524fefeaf42706b0d62672f18b8a310 100644 --- a/civicrm/CRM/PCP/Form/PCPAccount.php +++ b/civicrm/CRM/PCP/Form/PCPAccount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/PCP/Page/PCP.php b/civicrm/CRM/PCP/Page/PCP.php index e3512ee7c353f5106fea89fa5f7ac1483d0ef30c..03da83870b82558a37187c33ad528265f8dc0df2 100644 --- a/civicrm/CRM/PCP/Page/PCP.php +++ b/civicrm/CRM/PCP/Page/PCP.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/PCP/Page/PCPInfo.php b/civicrm/CRM/PCP/Page/PCPInfo.php index 3a0cd2800737143a8c2afcba7bf21e7562e08b8c..aa1790f06581d30c92b91b054e08ba5530244566 100644 --- a/civicrm/CRM/PCP/Page/PCPInfo.php +++ b/civicrm/CRM/PCP/Page/PCPInfo.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/PCP/StateMachine/PCP.php b/civicrm/CRM/PCP/StateMachine/PCP.php index 34f81e92c27a6f37357a0239f0d904987332e717..1feb8b4bdcb11c0a18ec24f68999fe771fd468cc 100644 --- a/civicrm/CRM/PCP/StateMachine/PCP.php +++ b/civicrm/CRM/PCP/StateMachine/PCP.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Pledge/BAO/Pledge.php b/civicrm/CRM/Pledge/BAO/Pledge.php index 540b659fa17ba05383929cea2cf217375fb1e605..346a9d8f20c78e4f28e8fe39acff25d46d7de2e4 100644 --- a/civicrm/CRM/Pledge/BAO/Pledge.php +++ b/civicrm/CRM/Pledge/BAO/Pledge.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_BAO_Pledge extends CRM_Pledge_DAO_Pledge { diff --git a/civicrm/CRM/Pledge/BAO/PledgeBlock.php b/civicrm/CRM/Pledge/BAO/PledgeBlock.php index 11367eeebc6fcebe42dd2ba158b3efa7696b066e..e8ef7d41ab778a99529fa5b9ed5345e8c53d108c 100644 --- a/civicrm/CRM/Pledge/BAO/PledgeBlock.php +++ b/civicrm/CRM/Pledge/BAO/PledgeBlock.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_BAO_PledgeBlock extends CRM_Pledge_DAO_PledgeBlock { diff --git a/civicrm/CRM/Pledge/BAO/PledgePayment.php b/civicrm/CRM/Pledge/BAO/PledgePayment.php index ed1900f8ac03c5005024af75f89da2d66fd0c062..efb1e96bb9856036ff403d9c2f871c65b5b1346b 100644 --- a/civicrm/CRM/Pledge/BAO/PledgePayment.php +++ b/civicrm/CRM/Pledge/BAO/PledgePayment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_BAO_PledgePayment extends CRM_Pledge_DAO_PledgePayment { diff --git a/civicrm/CRM/Pledge/BAO/Query.php b/civicrm/CRM/Pledge/BAO/Query.php index dc4965ab274789c263f1d0b509bf08f95bfc4056..c16e1b2a20c683e12dee9585dda4d7fc8e0d620c 100644 --- a/civicrm/CRM/Pledge/BAO/Query.php +++ b/civicrm/CRM/Pledge/BAO/Query.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_BAO_Query extends CRM_Core_BAO_Query { /** diff --git a/civicrm/CRM/Pledge/Controller/Search.php b/civicrm/CRM/Pledge/Controller/Search.php index c7c6a582a190cdc6f4a6c22240dbebbedd9dfcd6..f7b252f395de21974dd913ab288147b24674f362 100644 --- a/civicrm/CRM/Pledge/Controller/Search.php +++ b/civicrm/CRM/Pledge/Controller/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/DAO/Pledge.php b/civicrm/CRM/Pledge/DAO/Pledge.php index 3badb084b992bc1eb437f8f034c23bfdbcfb6af3..21d857a3d9f9c5ecc487036ee20f4614a8f0bcdd 100644 --- a/civicrm/CRM/Pledge/DAO/Pledge.php +++ b/civicrm/CRM/Pledge/DAO/Pledge.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Pledge/Pledge.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Pledge/DAO/PledgeBlock.php b/civicrm/CRM/Pledge/DAO/PledgeBlock.php index 794bbc04a7f21be5a722ded2f718ad6539ef94cd..19ee593688d03517fc2f87a6a4f3a25959fa5391 100644 --- a/civicrm/CRM/Pledge/DAO/PledgeBlock.php +++ b/civicrm/CRM/Pledge/DAO/PledgeBlock.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Pledge/PledgeBlock.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Pledge/DAO/PledgePayment.php b/civicrm/CRM/Pledge/DAO/PledgePayment.php index 120177e5238e6adcfd2981c46818b2337db9ce4c..d3f05e4656b9844cdc5326e5d1df7af97f43b4fb 100644 --- a/civicrm/CRM/Pledge/DAO/PledgePayment.php +++ b/civicrm/CRM/Pledge/DAO/PledgePayment.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Pledge/PledgePayment.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Pledge/Form/Payment.php b/civicrm/CRM/Pledge/Form/Payment.php index 71038395ec57210ab14ab14d7cdc68e60c7c8475..c8959cf3d0ed1697d26cf0b9ea79e127d247edfb 100644 --- a/civicrm/CRM/Pledge/Form/Payment.php +++ b/civicrm/CRM/Pledge/Form/Payment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Form/Pledge.php b/civicrm/CRM/Pledge/Form/Pledge.php index 612aac95b07d5c295a72416c5d73ecc39a607681..33774f6b42c850f77155cefcde8bdf500b9a527a 100644 --- a/civicrm/CRM/Pledge/Form/Pledge.php +++ b/civicrm/CRM/Pledge/Form/Pledge.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Form/PledgeView.php b/civicrm/CRM/Pledge/Form/PledgeView.php index 899c00a59f5584849825c51e110e61080862f090..2ef336bb3d1e182910e8263cac6529d6c95921cd 100644 --- a/civicrm/CRM/Pledge/Form/PledgeView.php +++ b/civicrm/CRM/Pledge/Form/PledgeView.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Form/Search.php b/civicrm/CRM/Pledge/Form/Search.php index 6859f79545b96ab067ddd95de1e29f8a3c33623f..e3aeb072e3db595e58a77da6610c978ef62f5d1b 100644 --- a/civicrm/CRM/Pledge/Form/Search.php +++ b/civicrm/CRM/Pledge/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -155,9 +155,7 @@ class CRM_Pledge_Form_Search extends CRM_Core_Form_Search { $this->addRowSelectors($rows); } - $permission = CRM_Core_Permission::getPermission(); - - $this->addTaskMenu(CRM_Pledge_Task::permissionedTaskTitles($permission)); + $this->addTaskMenu(CRM_Pledge_Task::permissionedTaskTitles(CRM_Core_Permission::getPermission())); } } diff --git a/civicrm/CRM/Pledge/Form/Task.php b/civicrm/CRM/Pledge/Form/Task.php index 218da6c3a8e30b778ca7197a1ae56f0976f5757a..d3dd096983f8f9ba3cc54a8eecc040d055ef048d 100644 --- a/civicrm/CRM/Pledge/Form/Task.php +++ b/civicrm/CRM/Pledge/Form/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Form/Task/Delete.php b/civicrm/CRM/Pledge/Form/Task/Delete.php index 2c924ff17c96241838a9674f55ac7a65baa3d990..626cb9573ff895fc66f2a9979677e5a1118eba54 100644 --- a/civicrm/CRM/Pledge/Form/Task/Delete.php +++ b/civicrm/CRM/Pledge/Form/Task/Delete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Form/Task/Print.php b/civicrm/CRM/Pledge/Form/Task/Print.php index 5dee67b7536f78b1318ecc80726f5a6e22f0db35..d57c70b27d74a9f26f7e03acbcb789c5b2a80d79 100644 --- a/civicrm/CRM/Pledge/Form/Task/Print.php +++ b/civicrm/CRM/Pledge/Form/Task/Print.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Form/Task/Result.php b/civicrm/CRM/Pledge/Form/Task/Result.php index 5e838317a6a294f11880aca2f3372a67f5a453da..cde64bed6fc52eee39d1e5a0a6d939a8b662d733 100644 --- a/civicrm/CRM/Pledge/Form/Task/Result.php +++ b/civicrm/CRM/Pledge/Form/Task/Result.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Form/Task/SearchTaskHookSample.php b/civicrm/CRM/Pledge/Form/Task/SearchTaskHookSample.php index 9cc917aa50576c20ee955dfa22c9e6da0e7a4ba2..caf9fb30a80440ce3f70b70d0170579d5777324c 100644 --- a/civicrm/CRM/Pledge/Form/Task/SearchTaskHookSample.php +++ b/civicrm/CRM/Pledge/Form/Task/SearchTaskHookSample.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Info.php b/civicrm/CRM/Pledge/Info.php index 56f445a4edc7444919e2edd04761f1152eab535c..24fac097166c43cdbb03cbda57cc36cc6fe133e9 100644 --- a/civicrm/CRM/Pledge/Info.php +++ b/civicrm/CRM/Pledge/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * abstract class. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_Info extends CRM_Core_Component_Info { diff --git a/civicrm/CRM/Pledge/Page/AJAX.php b/civicrm/CRM/Pledge/Page/AJAX.php index 6a68cf132e014ca71d4727a533c842edf401611d..4e827d02f130ee18ef4f8cd5a39402e5f04787f2 100644 --- a/civicrm/CRM/Pledge/Page/AJAX.php +++ b/civicrm/CRM/Pledge/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Page/DashBoard.php b/civicrm/CRM/Pledge/Page/DashBoard.php index 22369bc11647fcf3dd5903d4de233700e5449629..71296b2020e7c76e7010fb179e849afca7aa0070 100644 --- a/civicrm/CRM/Pledge/Page/DashBoard.php +++ b/civicrm/CRM/Pledge/Page/DashBoard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/Page/Payment.php b/civicrm/CRM/Pledge/Page/Payment.php index 16f352b34955eeeb97f602ae8248a1b9227188aa..07de09ecc4fac8bad674390ca0f79741cf93a0c1 100644 --- a/civicrm/CRM/Pledge/Page/Payment.php +++ b/civicrm/CRM/Pledge/Page/Payment.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_Page_Payment extends CRM_Core_Page { diff --git a/civicrm/CRM/Pledge/Page/Tab.php b/civicrm/CRM/Pledge/Page/Tab.php index 601f61ec6b03de461767b9d9ea8dc63ef6a8a36c..955fbac05757f764f559bc8ae2bca3fb7bd18f77 100644 --- a/civicrm/CRM/Pledge/Page/Tab.php +++ b/civicrm/CRM/Pledge/Page/Tab.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_Page_Tab extends CRM_Core_Page { public $_permission = NULL; diff --git a/civicrm/CRM/Pledge/Page/UserDashboard.php b/civicrm/CRM/Pledge/Page/UserDashboard.php index 447286349dcaa75d3b51cc6a6aa81f0268c841e6..8f81fa9e818304bb236eed990532e7fc5abb29e1 100644 --- a/civicrm/CRM/Pledge/Page/UserDashboard.php +++ b/civicrm/CRM/Pledge/Page/UserDashboard.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_Page_UserDashboard extends CRM_Contact_Page_View_UserDashBoard { diff --git a/civicrm/CRM/Pledge/Selector/Search.php b/civicrm/CRM/Pledge/Selector/Search.php index e5f253180cac68608aa69c28516e9c12f683cc9c..c20f9a178eff28643b249bd1e9ac9275fbb5a578 100644 --- a/civicrm/CRM/Pledge/Selector/Search.php +++ b/civicrm/CRM/Pledge/Selector/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Pledge/StateMachine/Search.php b/civicrm/CRM/Pledge/StateMachine/Search.php index 653ee39d113fc879a57c73a9617fa7d54ce9fca1..bf1d347b6c8f3268c80a755a31ae79a6d72c442e 100644 --- a/civicrm/CRM/Pledge/StateMachine/Search.php +++ b/civicrm/CRM/Pledge/StateMachine/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Pledge_StateMachine_Search extends CRM_Core_StateMachine { diff --git a/civicrm/CRM/Pledge/Task.php b/civicrm/CRM/Pledge/Task.php index feeaf10734499f590e2642281d327a5126618678..e620845db7f7ae30517c13df7eb2092c61cedd69 100644 --- a/civicrm/CRM/Pledge/Task.php +++ b/civicrm/CRM/Pledge/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,29 +27,16 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** * class to represent the actions that can be performed on a group of contacts * used by the search forms. */ -class CRM_Pledge_Task { - const DELETE_PLEDGES = 1, PRINT_PLEDGES = 2, EXPORT_PLEDGES = 3; +class CRM_Pledge_Task extends CRM_Core_Task { - /** - * The task array - * - * @var array - */ - static $_tasks = NULL; - - /** - * The optional task array - * - * @var array - */ - static $_optionalTasks = NULL; + static $objectType = 'pledge'; /** * These tasks are the core set of tasks that the user can perform @@ -58,20 +45,20 @@ class CRM_Pledge_Task { * @return array * the set of tasks for a group of contacts */ - public static function &tasks() { + public static function tasks() { if (!self::$_tasks) { self::$_tasks = array( - 1 => array( + self::TASK_DELETE => array( 'title' => ts('Delete pledges'), 'class' => 'CRM_Pledge_Form_Task_Delete', 'result' => FALSE, ), - 2 => array( + self::TASK_PRINT => array( 'title' => ts('Print selected rows'), 'class' => 'CRM_Pledge_Form_Task_Print', 'result' => FALSE, ), - 3 => array( + self::TASK_EXPORT => array( 'title' => ts('Export pledges'), 'class' => array( 'CRM_Export_Form_Select', @@ -83,53 +70,26 @@ class CRM_Pledge_Task { // CRM-4418, check for delete if (!CRM_Core_Permission::check('delete in CiviPledge')) { - unset(self::$_tasks[1]); + unset(self::$_tasks[self::TASK_DELETE]); } - CRM_Utils_Hook::searchTasks('pledge', self::$_tasks); - asort(self::$_tasks); + parent::tasks(); } return self::$_tasks; } - /** - * These tasks are the core set of task titles. - * - * @return array - * the set of task titles - */ - public static function &taskTitles() { - self::tasks(); - $titles = array(); - foreach (self::$_tasks as $id => $value) { - $titles[$id] = $value['title']; - } - return $titles; - } - - /** - * These tasks get added based on the context the user is in. - * - * @return array - * the set of optional tasks for a group of contacts - */ - public static function &optionalTaskTitle() { - $tasks = array(); - return $tasks; - } - /** * Show tasks selectively based on the permission level * of the user * * @param int $permission + * @param array $params * * @return array * set of tasks that are valid for the user */ - public static function &permissionedTaskTitles($permission) { - $tasks = array(); + public static function permissionedTaskTitles($permission, $params = array()) { if (($permission == CRM_Core_Permission::EDIT) || CRM_Core_Permission::check('edit pledges') ) { @@ -137,13 +97,15 @@ class CRM_Pledge_Task { } else { $tasks = array( - 3 => self::$_tasks[3]['title'], + self::TASK_EXPORT => self::$_tasks[self::TASK_EXPORT]['title'], ); //CRM-4418, if (CRM_Core_Permission::check('delete in CiviPledge')) { - $tasks[1] = self::$_tasks[1]['title']; + $tasks[self::TASK_DELETE] = self::$_tasks[self::TASK_DELETE]['title']; } } + + $tasks = parent::corePermissionedTaskTitles($tasks, $permission, $params); return $tasks; } @@ -158,14 +120,12 @@ class CRM_Pledge_Task { */ public static function getTask($value) { self::tasks(); - if (!$value || !CRM_Utils_Array::value($value, self::$_tasks)) { - // make the print task by default - $value = 2; + + if (!CRM_Utils_Array::value($value, self::$_tasks)) { + // make it the print task by default + $value = self::TASK_PRINT; } - return array( - self::$_tasks[$value]['class'], - self::$_tasks[$value]['result'], - ); + return parent::getTask($value); } } diff --git a/civicrm/CRM/Price/BAO/LineItem.php b/civicrm/CRM/Price/BAO/LineItem.php index 8296e384703d79ada9740966a05792765f33d325..e85866fd61bc8dd7f116c66c8befae493050aadf 100644 --- a/civicrm/CRM/Price/BAO/LineItem.php +++ b/civicrm/CRM/Price/BAO/LineItem.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Price/BAO/PriceField.php b/civicrm/CRM/Price/BAO/PriceField.php index 04d3f39f3948c78a7c04b8889341e75bea07051a..4b884abccf76fcbe57406e36a766b7e5357febd7 100644 --- a/civicrm/CRM/Price/BAO/PriceField.php +++ b/civicrm/CRM/Price/BAO/PriceField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Price/BAO/PriceFieldValue.php b/civicrm/CRM/Price/BAO/PriceFieldValue.php index 186c4326c89552f65a36e86f319625074e1727c2..4411bf0436148ae2502fd530a4a195c63075e321 100644 --- a/civicrm/CRM/Price/BAO/PriceFieldValue.php +++ b/civicrm/CRM/Price/BAO/PriceFieldValue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Price/BAO/PriceSet.php b/civicrm/CRM/Price/BAO/PriceSet.php index d7f09f480c4944d39353efa9480d084b60094265..e913d3604f442bafe61b769ca3a43727b7e2879d 100644 --- a/civicrm/CRM/Price/BAO/PriceSet.php +++ b/civicrm/CRM/Price/BAO/PriceSet.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Price/DAO/LineItem.php b/civicrm/CRM/Price/DAO/LineItem.php index 905b47099ffde6ed8286ddde0bc063a30662ccc2..23f11bb5f537b19370d6462be543c529754a6a9c 100644 --- a/civicrm/CRM/Price/DAO/LineItem.php +++ b/civicrm/CRM/Price/DAO/LineItem.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Price/LineItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Price/DAO/PriceField.php b/civicrm/CRM/Price/DAO/PriceField.php index f3749ea0522f18b9f28d2e57297d8fb9672043d4..9cfe9768066ece4fd7b0f413496214288e5c103b 100644 --- a/civicrm/CRM/Price/DAO/PriceField.php +++ b/civicrm/CRM/Price/DAO/PriceField.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Price/PriceField.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Price/DAO/PriceFieldValue.php b/civicrm/CRM/Price/DAO/PriceFieldValue.php index 3526b30c3235282220c1f80a5395593fe072777c..e656e0ed28e5ed0e691b60b3cdc9cd87067b001d 100644 --- a/civicrm/CRM/Price/DAO/PriceFieldValue.php +++ b/civicrm/CRM/Price/DAO/PriceFieldValue.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Price/PriceFieldValue.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Price/DAO/PriceSet.php b/civicrm/CRM/Price/DAO/PriceSet.php index 5f9e11726c519bfcf067f8630ebc8e92e1e22fcb..3abf87d17f27c56f032b8a09c5c037fb262748d7 100644 --- a/civicrm/CRM/Price/DAO/PriceSet.php +++ b/civicrm/CRM/Price/DAO/PriceSet.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Price/PriceSet.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Price/DAO/PriceSetEntity.php b/civicrm/CRM/Price/DAO/PriceSetEntity.php index 4ce06aaef12574467147a58178afe79328030e5a..d70e76fa3568a55e9ab48c6682bf696bbdec5f32 100644 --- a/civicrm/CRM/Price/DAO/PriceSetEntity.php +++ b/civicrm/CRM/Price/DAO/PriceSetEntity.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Price/PriceSetEntity.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Price/Form/DeleteField.php b/civicrm/CRM/Price/Form/DeleteField.php index 20319b8591cf3e03b95d0732e578a294c8ad10ed..bdee3216f9383de12c5d8a487af9502c11b4b998 100644 --- a/civicrm/CRM/Price/Form/DeleteField.php +++ b/civicrm/CRM/Price/Form/DeleteField.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Price/Form/DeleteSet.php b/civicrm/CRM/Price/Form/DeleteSet.php index a4bb5a0d8a33870fe157aa9608b1981a4a0fbc3f..a0ccedf10210d105661505a7c016b7565779e838 100644 --- a/civicrm/CRM/Price/Form/DeleteSet.php +++ b/civicrm/CRM/Price/Form/DeleteSet.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Price/Form/Field.php b/civicrm/CRM/Price/Form/Field.php index d61dd371cbf47402e0285fe5cb7e25adc42fdfb7..dfa148634f28deef60ab59a9cf899041e994e077 100644 --- a/civicrm/CRM/Price/Form/Field.php +++ b/civicrm/CRM/Price/Form/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Price/Form/Option.php b/civicrm/CRM/Price/Form/Option.php index 022697a744b4c1cf5e04311cbd345b2e6474e29c..1159864c7e6236d7cc160f55aa3e947a4a62a42a 100644 --- a/civicrm/CRM/Price/Form/Option.php +++ b/civicrm/CRM/Price/Form/Option.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Price/Form/Preview.php b/civicrm/CRM/Price/Form/Preview.php index 70d4b3c986ebab6f0afcfeb4bbe13beec8496f3d..f564b0918ed6a3eddaa906c4fd27e98bf126c21d 100644 --- a/civicrm/CRM/Price/Form/Preview.php +++ b/civicrm/CRM/Price/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Price/Form/Set.php b/civicrm/CRM/Price/Form/Set.php index c6c17e5efb1925c17c5bf4bb2a49ce80c13e1c87..e78d58dddf063a5a425ca43d1c08691815de984b 100644 --- a/civicrm/CRM/Price/Form/Set.php +++ b/civicrm/CRM/Price/Form/Set.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Price/Page/Field.php b/civicrm/CRM/Price/Page/Field.php index 68ebdc7e4a38fa65f43a906fd0d2233a7397c0ff..80c662e10ba5d4453af30fe8e16b85ce5eed0982 100644 --- a/civicrm/CRM/Price/Page/Field.php +++ b/civicrm/CRM/Price/Page/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Price/Page/Option.php b/civicrm/CRM/Price/Page/Option.php index eab7c0c560c070c0196df8065103cb32595dafd3..7685321fe8bc30bae2d00d5494a008015520c795 100644 --- a/civicrm/CRM/Price/Page/Option.php +++ b/civicrm/CRM/Price/Page/Option.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Price/Page/Set.php b/civicrm/CRM/Price/Page/Set.php index c3ec481e7b5fa770b67423f50871ded3de843e0a..53dd8af7f134a5235974742ef7e45954e5cbb27a 100644 --- a/civicrm/CRM/Price/Page/Set.php +++ b/civicrm/CRM/Price/Page/Set.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Profile/Form.php b/civicrm/CRM/Profile/Form.php index 1b57c638070659e4c2e64f4b8100398902b2f725..050bca6d1038d91373cb6e9c890f18b5676bcbe6 100644 --- a/civicrm/CRM/Profile/Form.php +++ b/civicrm/CRM/Profile/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Profile/Form/Dynamic.php b/civicrm/CRM/Profile/Form/Dynamic.php index 67bf3e136021f16e25e91bc3613439e41292eb13..5488d6d87c045c0ca0e072fb3fb7ebf55c9f64b4 100644 --- a/civicrm/CRM/Profile/Form/Dynamic.php +++ b/civicrm/CRM/Profile/Form/Dynamic.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Profile/Form/Edit.php b/civicrm/CRM/Profile/Form/Edit.php index 07a1c225b4e6af323e3c7582ac265b0174e24b72..ffa004a62956ec4d4748659fad776e4f72b0635b 100644 --- a/civicrm/CRM/Profile/Form/Edit.php +++ b/civicrm/CRM/Profile/Form/Edit.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Profile/Form/Search.php b/civicrm/CRM/Profile/Form/Search.php index bb8f0a57b2007e92d995c0e6bf44b1bba5ee66e2..d00fb5966c867d6287eb4ee317f44b0a7bd025e6 100644 --- a/civicrm/CRM/Profile/Form/Search.php +++ b/civicrm/CRM/Profile/Form/Search.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Profile/Page/Dynamic.php b/civicrm/CRM/Profile/Page/Dynamic.php index 4f663608c41410e454fdc2b2955c7490a21701b4..20e760a7ca20ed3a044203a3c975cd1c9b90ec72 100644 --- a/civicrm/CRM/Profile/Page/Dynamic.php +++ b/civicrm/CRM/Profile/Page/Dynamic.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Profile/Page/Listings.php b/civicrm/CRM/Profile/Page/Listings.php index 6cf74ea5eeb3679b3714c11a3e44f61cd0b4bb29..0f22e0f7e6aab05e354adb26b8d8703232a8e31b 100644 --- a/civicrm/CRM/Profile/Page/Listings.php +++ b/civicrm/CRM/Profile/Page/Listings.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Profile/Page/MultipleRecordFieldsListing.php b/civicrm/CRM/Profile/Page/MultipleRecordFieldsListing.php index 49d3a214bf290ea9f128bb1e0de7748efb7a658c..4db419686f9e967f24bf3d4ddf479d1bc7e2b2ca 100644 --- a/civicrm/CRM/Profile/Page/MultipleRecordFieldsListing.php +++ b/civicrm/CRM/Profile/Page/MultipleRecordFieldsListing.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ class CRM_Profile_Page_MultipleRecordFieldsListing extends CRM_Core_Page_Basic { diff --git a/civicrm/CRM/Profile/Page/Router.php b/civicrm/CRM/Profile/Page/Router.php index 58ace32aa72d7779b86e747c9695e5efa0d6cd1e..8dfd9bcf31673a6e761a9454a9afcbf884ea9299 100644 --- a/civicrm/CRM/Profile/Page/Router.php +++ b/civicrm/CRM/Profile/Page/Router.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Profile/Page/View.php b/civicrm/CRM/Profile/Page/View.php index dae13fc7f5b688c9a479d51d7df80845aed07d65..3212e0d692b9bb0159c737c89984e6483f495633 100644 --- a/civicrm/CRM/Profile/Page/View.php +++ b/civicrm/CRM/Profile/Page/View.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/civicrm/CRM/Profile/Selector/Listings.php b/civicrm/CRM/Profile/Selector/Listings.php index 566667537b55ec745b3c5da9b95a9d3f545cb775..ea1a00df5761319fa4b11e1982dadf700decf111 100644 --- a/civicrm/CRM/Profile/Selector/Listings.php +++ b/civicrm/CRM/Profile/Selector/Listings.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Queue/BAO/QueueItem.php b/civicrm/CRM/Queue/BAO/QueueItem.php index c0e75cafbe1d1c00d0b00ec056e866134dd1987c..03cdc0df7d792a56cf9aa0214418e82f7d6b5606 100644 --- a/civicrm/CRM/Queue/BAO/QueueItem.php +++ b/civicrm/CRM/Queue/BAO/QueueItem.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Queue/DAO/QueueItem.php b/civicrm/CRM/Queue/DAO/QueueItem.php index 588b85df99e025230433e1feec1368381957d2ff..cb927dd340b20fb5d44b103a38a61e1f96672fc6 100644 --- a/civicrm/CRM/Queue/DAO/QueueItem.php +++ b/civicrm/CRM/Queue/DAO/QueueItem.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Queue/QueueItem.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Queue/ErrorPolicy.php b/civicrm/CRM/Queue/ErrorPolicy.php index 34a68401206ae0fb8488d6f4b9b806ab1ccd9374..e5e5ace1ea35d6055d0551951d33f6d123927d80 100644 --- a/civicrm/CRM/Queue/ErrorPolicy.php +++ b/civicrm/CRM/Queue/ErrorPolicy.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/Menu.php b/civicrm/CRM/Queue/Menu.php index e14d5b963ddbbbb41f9f026ff5a7b3d498f7ec35..db57c88c25c8a5aedeaf891a34da2f9f44de1e9c 100644 --- a/civicrm/CRM/Queue/Menu.php +++ b/civicrm/CRM/Queue/Menu.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * allows us to use these paths during upgrades. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Queue/Page/AJAX.php b/civicrm/CRM/Queue/Page/AJAX.php index 086269f27a632b48385788e83602b7d5c4131e9c..1998b0c6d68179c72cffa4383a23a51056124655 100644 --- a/civicrm/CRM/Queue/Page/AJAX.php +++ b/civicrm/CRM/Queue/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/Page/Runner.php b/civicrm/CRM/Queue/Page/Runner.php index 4b8c7e9a62c81f48402e147ba9669aee4667eb8c..616cbbbf716dcc99442abbc672607832c59074c8 100644 --- a/civicrm/CRM/Queue/Page/Runner.php +++ b/civicrm/CRM/Queue/Page/Runner.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/Queue.php b/civicrm/CRM/Queue/Queue.php index 5cc6dece19637e667c375a256fe849733a639a25..116a3b52ef28052a6fad1ac791da839995d7ac4b 100644 --- a/civicrm/CRM/Queue/Queue.php +++ b/civicrm/CRM/Queue/Queue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/Queue/Memory.php b/civicrm/CRM/Queue/Queue/Memory.php index 80032918cac34706f77fe72b0db84e12e9df5463..ce487eeadbd63ec6681c253594633c29c11fbb06 100644 --- a/civicrm/CRM/Queue/Queue/Memory.php +++ b/civicrm/CRM/Queue/Queue/Memory.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/Queue/Sql.php b/civicrm/CRM/Queue/Queue/Sql.php index dda9d5a1844e8e52211e12365762cd4f9fbc0eb1..331e42e72048f74e08a398c51e9d03c628f1f4ba 100644 --- a/civicrm/CRM/Queue/Queue/Sql.php +++ b/civicrm/CRM/Queue/Queue/Sql.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/Runner.php b/civicrm/CRM/Queue/Runner.php index 0433f1decb261b40531bc6df33d82c83ae1b4ded..cd246fa448dd3548640c8bf9895e289bf185ff6a 100644 --- a/civicrm/CRM/Queue/Runner.php +++ b/civicrm/CRM/Queue/Runner.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/Service.php b/civicrm/CRM/Queue/Service.php index e855cd6e7575de9690db85da9ff6395755464590..04fa6b8ff407f8cc1c8081f69fc4322f31bf6410 100644 --- a/civicrm/CRM/Queue/Service.php +++ b/civicrm/CRM/Queue/Service.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/Task.php b/civicrm/CRM/Queue/Task.php index b48b81d0ce902d7f5182ac8beef62d508ed51656..527cf7cc2531ddf714c0ba08e3f5f621556bc356 100644 --- a/civicrm/CRM/Queue/Task.php +++ b/civicrm/CRM/Queue/Task.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Queue/TaskContext.php b/civicrm/CRM/Queue/TaskContext.php index c29bbccc6da6eeb64237e55b5f5ba7c3b6ada11f..4d3114e50125838e431d6671c237d3de3a31b457 100644 --- a/civicrm/CRM/Queue/TaskContext.php +++ b/civicrm/CRM/Queue/TaskContext.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Report/BAO/Hook.php b/civicrm/CRM/Report/BAO/Hook.php index 96a85572c82de8051f6b4d59d660dd826385c363..a49123a32ba80f69b05360eb03d1455ab338a7e3 100644 --- a/civicrm/CRM/Report/BAO/Hook.php +++ b/civicrm/CRM/Report/BAO/Hook.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/BAO/HookInterface.php b/civicrm/CRM/Report/BAO/HookInterface.php index f01d63a0c6942b0a576886c8db70fedc33a2461e..6bc730b5439f46a74075abc0e3914908a67150e9 100644 --- a/civicrm/CRM/Report/BAO/HookInterface.php +++ b/civicrm/CRM/Report/BAO/HookInterface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/BAO/ReportInstance.php b/civicrm/CRM/Report/BAO/ReportInstance.php index 33cb7ab1cd6903cc747d1273307f4b20df3c4467..6e382e3b3c6897ea7d229ecace785855bb64df9c 100644 --- a/civicrm/CRM/Report/BAO/ReportInstance.php +++ b/civicrm/CRM/Report/BAO/ReportInstance.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_BAO_ReportInstance extends CRM_Report_DAO_ReportInstance { diff --git a/civicrm/CRM/Report/DAO/ReportInstance.php b/civicrm/CRM/Report/DAO/ReportInstance.php index 4129b584ee51c20d97f928890adb7bbf21c2e7e8..4effadcc03dbcfc620a1e30c4b1574ae89ac66f1 100644 --- a/civicrm/CRM/Report/DAO/ReportInstance.php +++ b/civicrm/CRM/Report/DAO/ReportInstance.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/Report/ReportInstance.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php index 6b83d4ff0df929deba5542523fc0159e0be94859..c95b5dffd2caa612823c04b7c24183c1f94683c6 100644 --- a/civicrm/CRM/Report/Form.php +++ b/civicrm/CRM/Report/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -866,7 +866,7 @@ class CRM_Report_Form extends CRM_Core_Form { if (array_key_exists('fields', $table)) { foreach ($table['fields'] as $fieldName => $field) { if (empty($field['no_display'])) { - if (isset($field['required'])) { + if (!empty($field['required'])) { // set default $this->_defaults['fields'][$fieldName] = 1; @@ -1393,7 +1393,7 @@ class CRM_Report_Form extends CRM_Core_Form { foreach ($this->_columns as $tableName => $table) { if (array_key_exists('group_bys', $table)) { foreach ($table['group_bys'] as $fieldName => $field) { - if (!empty($field)) { + if (!empty($field) && empty($field['no_display'])) { $options[$field['title']] = $fieldName; if (!empty($field['frequency'])) { $freqElements[$field['title']] = $fieldName; @@ -5191,45 +5191,45 @@ LEFT JOIN civicrm_contact {$field['alias']} ON {$field['alias']}.id = {$this->_a */ protected function storeGroupByArray() { - if (CRM_Utils_Array::value('group_bys', $this->_params) && - is_array($this->_params['group_bys']) && - !empty($this->_params['group_bys']) - ) { - foreach ($this->_columns as $tableName => $table) { - $table = $this->_columns[$tableName]; - if (array_key_exists('group_bys', $table)) { - foreach ($table['group_bys'] as $fieldName => $fieldData) { - $field = $this->_columns[$tableName]['metadata'][$fieldName]; - if (!empty($this->_params['group_bys'][$fieldName])) { - if (!empty($field['chart'])) { - $this->assign('chartSupported', TRUE); - } + if (!CRM_Utils_Array::value('group_bys', $this->_params) + || !is_array($this->_params['group_bys'])) { + $this->_params['group_bys'] = []; + } - if (!empty($table['group_bys'][$fieldName]['frequency']) && - !empty($this->_params['group_bys_freq'][$fieldName]) - ) { + foreach ($this->_columns as $tableName => $table) { + $table = $this->_columns[$tableName]; + if (array_key_exists('group_bys', $table)) { + foreach ($table['group_bys'] as $fieldName => $fieldData) { + $field = $this->_columns[$tableName]['metadata'][$fieldName]; + if (!empty($this->_params['group_bys'][$fieldName]) || !empty($fieldData['required'])) { + if (!empty($field['chart'])) { + $this->assign('chartSupported', TRUE); + } - switch ($this->_params['group_bys_freq'][$fieldName]) { - case 'FISCALYEAR': - $this->_groupByArray[$tableName . '_' . $fieldName . '_start'] = self::fiscalYearOffset($field['dbAlias']); + if (!empty($table['group_bys'][$fieldName]['frequency']) && + !empty($this->_params['group_bys_freq'][$fieldName]) + ) { - case 'YEAR': - $this->_groupByArray[$tableName . '_' . $fieldName . '_start'] = " {$this->_params['group_bys_freq'][$fieldName]}({$field['dbAlias']})"; + switch ($this->_params['group_bys_freq'][$fieldName]) { + case 'FISCALYEAR': + $this->_groupByArray[$tableName . '_' . $fieldName . '_start'] = self::fiscalYearOffset($field['dbAlias']); - default: - $this->_groupByArray[$tableName . '_' . $fieldName . '_start'] = "EXTRACT(YEAR_{$this->_params['group_bys_freq'][$fieldName]} FROM {$field['dbAlias']})"; + case 'YEAR': + $this->_groupByArray[$tableName . '_' . $fieldName . '_start'] = " {$this->_params['group_bys_freq'][$fieldName]}({$field['dbAlias']})"; + + default: + $this->_groupByArray[$tableName . '_' . $fieldName . '_start'] = "EXTRACT(YEAR_{$this->_params['group_bys_freq'][$fieldName]} FROM {$field['dbAlias']})"; - } } - else { - if (!in_array($field['dbAlias'], $this->_groupByArray)) { - $this->_groupByArray[$tableName . '_' . $fieldName] = $field['dbAlias']; - } + } + else { + if (!in_array($field['dbAlias'], $this->_groupByArray)) { + $this->_groupByArray[$tableName . '_' . $fieldName] = $field['dbAlias']; } } } - } + } } } diff --git a/civicrm/CRM/Report/Form/Activity.php b/civicrm/CRM/Report/Form/Activity.php index e024ba937e62d54fe21dda9efc3cf828ee55385e..dd52e784aab90854c374c04b508819e2b9ef828f 100644 --- a/civicrm/CRM/Report/Form/Activity.php +++ b/civicrm/CRM/Report/Form/Activity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Activity extends CRM_Report_Form { protected $_selectAliasesTotal = array(); @@ -396,7 +396,7 @@ class CRM_Report_Form_Activity extends CRM_Report_Form { * * @param null $recordType */ - public function select($recordType = NULL) { + public function select($recordType = 'target') { if (!array_key_exists("contact_{$recordType}", $this->_params['fields']) && $recordType != 'final' ) { @@ -499,7 +499,7 @@ class CRM_Report_Form_Activity extends CRM_Report_Form { * * @param string $recordType */ - public function from($recordType) { + public function from($recordType = 'target') { $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate'); $activityTypeId = CRM_Core_DAO::getFieldValue("CRM_Core_DAO_OptionGroup", 'activity_type', 'id', 'name'); $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts); diff --git a/civicrm/CRM/Report/Form/ActivitySummary.php b/civicrm/CRM/Report/Form/ActivitySummary.php index 44e223b7fb464294de055a6463bae5fcc0085a8f..9ce524b30f8f0edcd665443a4720c129f28a3ac7 100644 --- a/civicrm/CRM/Report/Form/ActivitySummary.php +++ b/civicrm/CRM/Report/Form/ActivitySummary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_ActivitySummary extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Campaign/SurveyDetails.php b/civicrm/CRM/Report/Form/Campaign/SurveyDetails.php index aa8e3e6f042b5489957fab7381cc0b989e200873..42a70c3906e493a860b9bebc5c04b16accbb7aa4 100644 --- a/civicrm/CRM/Report/Form/Campaign/SurveyDetails.php +++ b/civicrm/CRM/Report/Form/Campaign/SurveyDetails.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Case/Demographics.php b/civicrm/CRM/Report/Form/Case/Demographics.php index 67a4aa5492aec8c4ba717e58ccd36013bd973fea..e4c838f0c79adec60ff99e3fca7c0fdf9bfb9c87 100644 --- a/civicrm/CRM/Report/Form/Case/Demographics.php +++ b/civicrm/CRM/Report/Form/Case/Demographics.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Case_Demographics extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Case/Detail.php b/civicrm/CRM/Report/Form/Case/Detail.php index 205aa72af433b34011589c33c5aed1dd00aaf92c..50d3f72c07c1139a9c52ccec7ea47797e5f4a1e9 100644 --- a/civicrm/CRM/Report/Form/Case/Detail.php +++ b/civicrm/CRM/Report/Form/Case/Detail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Case/Summary.php b/civicrm/CRM/Report/Form/Case/Summary.php index 521ad4e0736c5bf88bfe2c82c2d06ba43c6ab146..f15117f9fc3aa3f73e17d4b4a5a0201a7ac0d2dc 100644 --- a/civicrm/CRM/Report/Form/Case/Summary.php +++ b/civicrm/CRM/Report/Form/Case/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Case_Summary extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Case/TimeSpent.php b/civicrm/CRM/Report/Form/Case/TimeSpent.php index 6ad89dc01689062801033c9394b8781e03f0fd32..3766329482676bceb86413f4e4582de80d2f1217 100644 --- a/civicrm/CRM/Report/Form/Case/TimeSpent.php +++ b/civicrm/CRM/Report/Form/Case/TimeSpent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Case_TimeSpent extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Contact/CurrentEmployer.php b/civicrm/CRM/Report/Form/Contact/CurrentEmployer.php index d0081f850b439df9adf3405e6daa628adfa39414..050745a50e9a158eb30126cb96b4ed11fb79014a 100644 --- a/civicrm/CRM/Report/Form/Contact/CurrentEmployer.php +++ b/civicrm/CRM/Report/Form/Contact/CurrentEmployer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contact_CurrentEmployer extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Contact/Detail.php b/civicrm/CRM/Report/Form/Contact/Detail.php index c715aea841c16be2e38de0e39daaa4b8f5952e77..8ddef41d967dd645a235a29d90f1e18f20a27d03 100644 --- a/civicrm/CRM/Report/Form/Contact/Detail.php +++ b/civicrm/CRM/Report/Form/Contact/Detail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contact_Detail extends CRM_Report_Form { const ROW_COUNT_LIMIT = 10; diff --git a/civicrm/CRM/Report/Form/Contact/Log.php b/civicrm/CRM/Report/Form/Contact/Log.php index 3c1279207fca9da79fec0d1cb07c758d66730b2e..4a60d96b86f22c9d00771b1727c0f299ed715a14 100644 --- a/civicrm/CRM/Report/Form/Contact/Log.php +++ b/civicrm/CRM/Report/Form/Contact/Log.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contact_Log extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Contact/LoggingDetail.php b/civicrm/CRM/Report/Form/Contact/LoggingDetail.php index f6d7ffe4bf73991937e39d697528893f52c79d9f..3b3d9ffdc75670de33af27e9b89d16ebf3461839 100644 --- a/civicrm/CRM/Report/Form/Contact/LoggingDetail.php +++ b/civicrm/CRM/Report/Form/Contact/LoggingDetail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contact/LoggingSummary.php b/civicrm/CRM/Report/Form/Contact/LoggingSummary.php index 38845457ca84ae85c4edce918cec2713940889cf..07e42abfa54843edd4ccc217bb14464b3329e75b 100644 --- a/civicrm/CRM/Report/Form/Contact/LoggingSummary.php +++ b/civicrm/CRM/Report/Form/Contact/LoggingSummary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contact_LoggingSummary extends CRM_Logging_ReportSummary { /** diff --git a/civicrm/CRM/Report/Form/Contact/Relationship.php b/civicrm/CRM/Report/Form/Contact/Relationship.php index df48628dcccb8538f2b3b87d469d3224e5a21937..000b073f55f3bda4d94341887fbfed976336a4e2 100644 --- a/civicrm/CRM/Report/Form/Contact/Relationship.php +++ b/civicrm/CRM/Report/Form/Contact/Relationship.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contact/Summary.php b/civicrm/CRM/Report/Form/Contact/Summary.php index ad5fe235a831456b83779ee6f2e316eec87e8982..a37ce608d5a3637adb9456b7cbb4a7f794f27817 100644 --- a/civicrm/CRM/Report/Form/Contact/Summary.php +++ b/civicrm/CRM/Report/Form/Contact/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contact_Summary extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Contribute/Bookkeeping.php b/civicrm/CRM/Report/Form/Contribute/Bookkeeping.php index 9b7a5ba41d61d9fd8f1dcb4d33f7fd3f2d10cbd4..05da2d5908e8d050625bf92e384bd4954e1fca4d 100644 --- a/civicrm/CRM/Report/Form/Contribute/Bookkeeping.php +++ b/civicrm/CRM/Report/Form/Contribute/Bookkeeping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contribute_Bookkeeping extends CRM_Report_Form { protected $_addressField = FALSE; diff --git a/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php b/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php index bf1c9ad3d7e40a0da4dfcf222fc46b2d9790fffb..1e06f6d9aa3c967a8e2fc8effd7aa0b269164c33 100644 --- a/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php +++ b/civicrm/CRM/Report/Form/Contribute/DeferredRevenue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contribute/Detail.php b/civicrm/CRM/Report/Form/Contribute/Detail.php index e67e0d0b44248697ad7e00253c121e68e31233c7..6359238334d2105f755e6e08cf32a460acf11fa6 100644 --- a/civicrm/CRM/Report/Form/Contribute/Detail.php +++ b/civicrm/CRM/Report/Form/Contribute/Detail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contribute_Detail extends CRM_Report_Form { protected $_addressField = FALSE; @@ -39,6 +39,8 @@ class CRM_Report_Form_Contribute_Detail extends CRM_Report_Form { protected $_softFrom = NULL; + protected $noDisplayContributionOrSoftColumn = FALSE; + protected $_customGroupExtends = array( 'Contact', 'Individual', @@ -341,10 +343,6 @@ class CRM_Report_Form_Contribute_Detail extends CRM_Report_Form { $this->_columnHeaders = array(); parent::select(); - //total_amount was affected by sum as it is considered as one of the stat field - //so it is been replaced with correct alias, CRM-13833 - $this->_select = str_replace("sum({$this->_aliases['civicrm_contribution']}.total_amount)", "{$this->_aliases['civicrm_contribution']}.total_amount", $this->_select); - $this->_selectClauses = str_replace("sum({$this->_aliases['civicrm_contribution']}.total_amount)", "{$this->_aliases['civicrm_contribution']}.total_amount", $this->_selectClauses); } public function orderBy() { @@ -721,7 +719,7 @@ UNION ALL } // Contribution amount links to viewing contribution - if (($value = CRM_Utils_Array::value('civicrm_contribution_total_amount_sum', $row)) && + if (($value = CRM_Utils_Array::value('civicrm_contribution_total_amount', $row)) && CRM_Core_Permission::check('access CiviContribute') ) { $url = CRM_Utils_System::url("civicrm/contact/view/contribution", @@ -730,8 +728,8 @@ UNION ALL "&action=view&context=contribution&selectedChild=contribute", $this->_absoluteUrl ); - $rows[$rowNum]['civicrm_contribution_total_amount_sum_link'] = $url; - $rows[$rowNum]['civicrm_contribution_total_amount_sum_hover'] = ts("View Details of this Contribution."); + $rows[$rowNum]['civicrm_contribution_total_amount_link'] = $url; + $rows[$rowNum]['civicrm_contribution_total_amount_hover'] = ts("View Details of this Contribution."); $entryFound = TRUE; } @@ -750,7 +748,7 @@ UNION ALL array_key_exists('civicrm_contribution_contribution_id', $row) ) { $query = " -SELECT civicrm_contact_id, civicrm_contact_sort_name, civicrm_contribution_total_amount_sum, civicrm_contribution_currency +SELECT civicrm_contact_id, civicrm_contact_sort_name, civicrm_contribution_total_amount, civicrm_contribution_currency FROM civireport_contribution_detail_temp2 WHERE civicrm_contribution_contribution_id={$row['civicrm_contribution_contribution_id']}"; $dao = CRM_Core_DAO::executeQuery($query); @@ -761,7 +759,7 @@ WHERE civicrm_contribution_contribution_id={$row['civicrm_contribution_contribu $dao->civicrm_contact_id); $string = $string . ($string ? $separator : '') . "<a href='{$url}'>{$dao->civicrm_contact_sort_name}</a> " . - CRM_Utils_Money::format($dao->civicrm_contribution_total_amount_sum, $dao->civicrm_contribution_currency); + CRM_Utils_Money::format($dao->civicrm_contribution_total_amount, $dao->civicrm_contribution_currency); } $rows[$rowNum]['civicrm_contribution_soft_credits'] = $string; } @@ -841,10 +839,10 @@ WHERE civicrm_contribution_contribution_id={$row['civicrm_contribution_contribu $addtotals = ''; - if (array_search("civicrm_contribution_total_amount_sum", $this->_selectAliases) !== + if (array_search("civicrm_contribution_total_amount", $this->_selectAliases) !== FALSE ) { - $addtotals = ", sum(civicrm_contribution_total_amount_sum) as sumcontribs"; + $addtotals = ", sum(civicrm_contribution_total_amount) as sumcontribs"; $showsumcontribs = TRUE; } diff --git a/civicrm/CRM/Report/Form/Contribute/History.php b/civicrm/CRM/Report/Form/Contribute/History.php index 0cb76f1fad74cab4ae3c2659eb562d179ef306e4..f9fbf895d376525f9885842c8bb3fc4ace8f4df9 100644 --- a/civicrm/CRM/Report/Form/Contribute/History.php +++ b/civicrm/CRM/Report/Form/Contribute/History.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contribute/HouseholdSummary.php b/civicrm/CRM/Report/Form/Contribute/HouseholdSummary.php index dd9582e8b21fc509254aebbe648b21e1b7172327..b6f8afac55df61be71f0b7adc6113d0867afa73f 100644 --- a/civicrm/CRM/Report/Form/Contribute/HouseholdSummary.php +++ b/civicrm/CRM/Report/Form/Contribute/HouseholdSummary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contribute/Lybunt.php b/civicrm/CRM/Report/Form/Contribute/Lybunt.php index b19c08116a458b14f7dd112fa02c19ff60527974..d0ac75a6aee988cfc3f7c85cbe365c288f0a79b8 100644 --- a/civicrm/CRM/Report/Form/Contribute/Lybunt.php +++ b/civicrm/CRM/Report/Form/Contribute/Lybunt.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contribute_Lybunt extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Contribute/OrganizationSummary.php b/civicrm/CRM/Report/Form/Contribute/OrganizationSummary.php index 501f3810774ed56e985926510c3d721f2c5eed45..a44d5e63df9cf9fc1d07430b4f678814d946219f 100644 --- a/civicrm/CRM/Report/Form/Contribute/OrganizationSummary.php +++ b/civicrm/CRM/Report/Form/Contribute/OrganizationSummary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contribute_OrganizationSummary extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Contribute/PCP.php b/civicrm/CRM/Report/Form/Contribute/PCP.php index 629ea99ba2db08a949e80dc955bead51d2978588..4e4b683d32833d62edbe7c4fbca71aa846765400 100644 --- a/civicrm/CRM/Report/Form/Contribute/PCP.php +++ b/civicrm/CRM/Report/Form/Contribute/PCP.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contribute/Recur.php b/civicrm/CRM/Report/Form/Contribute/Recur.php index 602b8f5607fbd95774ad6407bae13c28475d85db..d2cf531ef61eb108729061584299896bd7e33194 100644 --- a/civicrm/CRM/Report/Form/Contribute/Recur.php +++ b/civicrm/CRM/Report/Form/Contribute/Recur.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contribute/RecurSummary.php b/civicrm/CRM/Report/Form/Contribute/RecurSummary.php index c976ab2870d4dd91013ded272b974bb6b501e7b9..4e31df8d8a64992913362aee8c7ff922af4b9171 100644 --- a/civicrm/CRM/Report/Form/Contribute/RecurSummary.php +++ b/civicrm/CRM/Report/Form/Contribute/RecurSummary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contribute/Repeat.php b/civicrm/CRM/Report/Form/Contribute/Repeat.php index 900825bdf0ff30163e865d02ef43709aa98b6139..898b7914c6e5b62b247620896bd10edc1cfdaae5 100644 --- a/civicrm/CRM/Report/Form/Contribute/Repeat.php +++ b/civicrm/CRM/Report/Form/Contribute/Repeat.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contribute_Repeat extends CRM_Report_Form { protected $_amountClauseWithAND = NULL; diff --git a/civicrm/CRM/Report/Form/Contribute/SoftCredit.php b/civicrm/CRM/Report/Form/Contribute/SoftCredit.php index e9ef1772b786c48b6a570b2c29bd04687fb2ca36..b347fd9d1fe36f8baa8b15212f738d5c5e370dac 100644 --- a/civicrm/CRM/Report/Form/Contribute/SoftCredit.php +++ b/civicrm/CRM/Report/Form/Contribute/SoftCredit.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Contribute/Summary.php b/civicrm/CRM/Report/Form/Contribute/Summary.php index 32f64a7aa8ede91effd953792fc75b5eb73a4c16..1f95dc45dadd70955f814e4ee6659b654e8a9710 100644 --- a/civicrm/CRM/Report/Form/Contribute/Summary.php +++ b/civicrm/CRM/Report/Form/Contribute/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contribute_Summary extends CRM_Report_Form { protected $_addressField = FALSE; diff --git a/civicrm/CRM/Report/Form/Contribute/Sybunt.php b/civicrm/CRM/Report/Form/Contribute/Sybunt.php index 2299e9d7b8df2159e250da8a8994b98afa5f7397..918965a81db3bb9d396e2074eed777e1bf70b00f 100644 --- a/civicrm/CRM/Report/Form/Contribute/Sybunt.php +++ b/civicrm/CRM/Report/Form/Contribute/Sybunt.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contribute_Sybunt extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Contribute/TopDonor.php b/civicrm/CRM/Report/Form/Contribute/TopDonor.php index 8fe9c8f4d6b481699d9cadd5d20038a8804501ae..4be5c28e8b7c9bdbfcf6c4c8a598db692dbfe3c1 100644 --- a/civicrm/CRM/Report/Form/Contribute/TopDonor.php +++ b/civicrm/CRM/Report/Form/Contribute/TopDonor.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Contribute_TopDonor extends CRM_Report_Form { @@ -104,12 +104,13 @@ class CRM_Report_Form_Contribute_TopDonor extends CRM_Report_Form { ), ), 'filters' => $this->getBasicContactFilters(), + 'group_bys' => ['contact_contact_id' => ['name' => 'id', 'required' => 1, 'no_display' => 1]], ), 'civicrm_line_item' => array( 'dao' => 'CRM_Price_DAO_LineItem', ), ); - $this->_columns += $this->getAddressColumns(); + $this->_columns += $this->getAddressColumns(['group_by' => FALSE]); $this->_columns += array( 'civicrm_contribution' => array( 'dao' => 'CRM_Contribute_DAO_Contribution', @@ -159,6 +160,7 @@ class CRM_Report_Form_Contribute_TopDonor extends CRM_Report_Form { 'default' => array(1), ), ), + 'group_bys' => ['contribution_currency' => ['name' => 'currency', 'required' => 1, 'no_display' => 1]], ), 'civicrm_financial_trxn' => array( 'dao' => 'CRM_Financial_DAO_FinancialTrxn', @@ -208,19 +210,6 @@ class CRM_Report_Form_Contribute_TopDonor extends CRM_Report_Form { parent::__construct(); } - public function preProcess() { - parent::preProcess(); - } - - /** - * Select only contact ID when adding to group. - * - * @todo consider moving that to parent to support AddToGroup in general. - */ - public function select() { - parent::select(); - } - /** * @param $fields * @param $files @@ -319,10 +308,6 @@ class CRM_Report_Form_Contribute_TopDonor extends CRM_Report_Form { } } - public function groupBy() { - $this->_groupBy = CRM_Contact_BAO_Query::getGroupByFromSelectColumns($this->_selectClauses, array("{$this->_aliases['civicrm_contact']}.id", "{$this->_aliases['civicrm_contribution']}.currency")); - } - /** * Build output rows. * diff --git a/civicrm/CRM/Report/Form/Event.php b/civicrm/CRM/Report/Form/Event.php index af9cc2473fb29d1bd8b002ef7ba59ab7874570a1..70518e8192ac8a3874799ab47468132f3dbc1784 100644 --- a/civicrm/CRM/Report/Form/Event.php +++ b/civicrm/CRM/Report/Form/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Event/Income.php b/civicrm/CRM/Report/Form/Event/Income.php index 3787ebbcfe144d7f7f1c6aead679ef5deb98024b..c61915a606cdf8c24eac7116602225fbb9717623 100644 --- a/civicrm/CRM/Report/Form/Event/Income.php +++ b/civicrm/CRM/Report/Form/Event/Income.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Event/IncomeCountSummary.php b/civicrm/CRM/Report/Form/Event/IncomeCountSummary.php index 29891e86b587432c866d7c9e42b10dab97a6dd63..8a53052569e75636f9a090cc2b60d86d4b184a4c 100644 --- a/civicrm/CRM/Report/Form/Event/IncomeCountSummary.php +++ b/civicrm/CRM/Report/Form/Event/IncomeCountSummary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Event_IncomeCountSummary extends CRM_Report_Form_Event { diff --git a/civicrm/CRM/Report/Form/Event/ParticipantListCount.php b/civicrm/CRM/Report/Form/Event/ParticipantListCount.php index 2a6d2bb91e24b55adfc9e62f601d723447781c97..07fcb817f066ebd6350f8fb9ee6cd802975920aa 100644 --- a/civicrm/CRM/Report/Form/Event/ParticipantListCount.php +++ b/civicrm/CRM/Report/Form/Event/ParticipantListCount.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Event_ParticipantListCount extends CRM_Report_Form_Event { diff --git a/civicrm/CRM/Report/Form/Event/ParticipantListing.php b/civicrm/CRM/Report/Form/Event/ParticipantListing.php index a9ded26d422e1a17fd403cda3ea637fee191714c..11e07bdf50ca664e46368b521504e205c82d9fd2 100644 --- a/civicrm/CRM/Report/Form/Event/ParticipantListing.php +++ b/civicrm/CRM/Report/Form/Event/ParticipantListing.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Event_ParticipantListing extends CRM_Report_Form_Event { diff --git a/civicrm/CRM/Report/Form/Event/Summary.php b/civicrm/CRM/Report/Form/Event/Summary.php index e4c8572103b27cbc15e7bd8fa2997abd10f960c7..33f769af19be5f09cde2345bdcfe67f6a05e5e1a 100644 --- a/civicrm/CRM/Report/Form/Event/Summary.php +++ b/civicrm/CRM/Report/Form/Event/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Event_Summary extends CRM_Report_Form_Event { diff --git a/civicrm/CRM/Report/Form/Extended.php b/civicrm/CRM/Report/Form/Extended.php index 90456d561f94ccf6cb9cff6159f2aa750500fba2..43792c7fbafbfd1c5a02531ef17ff5fdb5e2af9e 100644 --- a/civicrm/CRM/Report/Form/Extended.php +++ b/civicrm/CRM/Report/Form/Extended.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Grant/Detail.php b/civicrm/CRM/Report/Form/Grant/Detail.php index 03fec1177944570e435f9d2ede56ebce117ebdd9..4078bb33fc95d1c39d2ea0fcf17f7b16a4da9343 100644 --- a/civicrm/CRM/Report/Form/Grant/Detail.php +++ b/civicrm/CRM/Report/Form/Grant/Detail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Grant_Detail extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Grant/Statistics.php b/civicrm/CRM/Report/Form/Grant/Statistics.php index fa15767cbb3c183af830d51706368dd80aeece09..47d03c5f220910a14df2deb93e3e86de0ac40864 100644 --- a/civicrm/CRM/Report/Form/Grant/Statistics.php +++ b/civicrm/CRM/Report/Form/Grant/Statistics.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Grant_Statistics extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Instance.php b/civicrm/CRM/Report/Form/Instance.php index 4dd547856f601eb92335e38b32a44419f217de5a..c3de435dcb56d007fa257da62c3b8e82ce61206f 100644 --- a/civicrm/CRM/Report/Form/Instance.php +++ b/civicrm/CRM/Report/Form/Instance.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Report/Form/Mailing/Bounce.php b/civicrm/CRM/Report/Form/Mailing/Bounce.php index 2af42955ea5f8fe6f9315aea27071cfe1fab9bca..574d1659f9c8957e58f2e3ddbe12e1c3955685bf 100644 --- a/civicrm/CRM/Report/Form/Mailing/Bounce.php +++ b/civicrm/CRM/Report/Form/Mailing/Bounce.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Mailing_Bounce extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Mailing/Clicks.php b/civicrm/CRM/Report/Form/Mailing/Clicks.php index cec0e2d6f609ed18388f355201ddf4f083f6e89b..31e6429226364e5a00f349251575a9bdc104c087 100644 --- a/civicrm/CRM/Report/Form/Mailing/Clicks.php +++ b/civicrm/CRM/Report/Form/Mailing/Clicks.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Mailing/Detail.php b/civicrm/CRM/Report/Form/Mailing/Detail.php index 371bedd764270396c39430a3bf32fc80fae1e346..f028d236bac7b394b0f747ce4d0cba50168fe0e3 100644 --- a/civicrm/CRM/Report/Form/Mailing/Detail.php +++ b/civicrm/CRM/Report/Form/Mailing/Detail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Mailing_Detail extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Mailing/Opened.php b/civicrm/CRM/Report/Form/Mailing/Opened.php index 62a471db15cfb992aa87ee088d2ae38310384234..08ced58dbc7a089c6c4bedf671419bd88e37268b 100644 --- a/civicrm/CRM/Report/Form/Mailing/Opened.php +++ b/civicrm/CRM/Report/Form/Mailing/Opened.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Mailing_Opened extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Mailing/Summary.php b/civicrm/CRM/Report/Form/Mailing/Summary.php index b7eaa0a91788e75676ac135ed8ad76cd4feb69b8..edc50a7987c083951ea77dc761775837009b6228 100644 --- a/civicrm/CRM/Report/Form/Mailing/Summary.php +++ b/civicrm/CRM/Report/Form/Mailing/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Mailing_Summary extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Member/ContributionDetail.php b/civicrm/CRM/Report/Form/Member/ContributionDetail.php index 779521e8ad74769fce19bd3ff3671223c5abdf90..3bb37c78aa8a262cc00333410b03fbfecdb4eb4d 100644 --- a/civicrm/CRM/Report/Form/Member/ContributionDetail.php +++ b/civicrm/CRM/Report/Form/Member/ContributionDetail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Member_ContributionDetail extends CRM_Report_Form { protected $_addressField = FALSE; diff --git a/civicrm/CRM/Report/Form/Member/Detail.php b/civicrm/CRM/Report/Form/Member/Detail.php index b4a3299e92a7ac8a3303387b53df3183ced783e2..344af45dda3768a8bbf4d4da3f7ed36461ab776c 100644 --- a/civicrm/CRM/Report/Form/Member/Detail.php +++ b/civicrm/CRM/Report/Form/Member/Detail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Member_Detail extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Member/Lapse.php b/civicrm/CRM/Report/Form/Member/Lapse.php index 8d271ff5a9289d50ddb92c3b32608d9b9371b1f6..13782579ace570384e444c6c03c1d66f9c4aa5a6 100644 --- a/civicrm/CRM/Report/Form/Member/Lapse.php +++ b/civicrm/CRM/Report/Form/Member/Lapse.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Member/Summary.php b/civicrm/CRM/Report/Form/Member/Summary.php index a8dfc322e4a9dbfc142adcbe85ee22d116ee2f96..e72f15fd565e8a3d72f61c35612a5020c78a5360 100644 --- a/civicrm/CRM/Report/Form/Member/Summary.php +++ b/civicrm/CRM/Report/Form/Member/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Member_Summary extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Membership/Summary.php b/civicrm/CRM/Report/Form/Membership/Summary.php index 771d635abc2525e2efffb3312b0e169b3b3d6c6e..5e8df23c906b70a321209fae6c77b87bd9e8db4c 100644 --- a/civicrm/CRM/Report/Form/Membership/Summary.php +++ b/civicrm/CRM/Report/Form/Membership/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Membership_Summary extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Pledge/Detail.php b/civicrm/CRM/Report/Form/Pledge/Detail.php index 66423f2643c4483de7a045d0163ff11df3274a5f..85a485caa551b4c2a1d0defadb4baa3b503145ad 100644 --- a/civicrm/CRM/Report/Form/Pledge/Detail.php +++ b/civicrm/CRM/Report/Form/Pledge/Detail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -39,7 +39,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Pledge_Detail extends CRM_Report_Form { diff --git a/civicrm/CRM/Report/Form/Pledge/Pbnp.php b/civicrm/CRM/Report/Form/Pledge/Pbnp.php index 42dcfbe9e4be26a00452a5ada556c9d35df69a6c..596d91dd1b1dfad490bf7573ed8203147fd807a4 100644 --- a/civicrm/CRM/Report/Form/Pledge/Pbnp.php +++ b/civicrm/CRM/Report/Form/Pledge/Pbnp.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Pledge_Pbnp extends CRM_Report_Form { protected $_charts = array( diff --git a/civicrm/CRM/Report/Form/Pledge/Summary.php b/civicrm/CRM/Report/Form/Pledge/Summary.php index 610681ec6d831145dca6abba749c5f36677cdd6c..39749ef8048eeab5172737740d85e85f241a5f43 100644 --- a/civicrm/CRM/Report/Form/Pledge/Summary.php +++ b/civicrm/CRM/Report/Form/Pledge/Summary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Register.php b/civicrm/CRM/Report/Form/Register.php index ea50eda551bcd726899774185038daafe52cc4b1..fcb84b1301b76398ed9f3ce5ea35397e04a2f02e 100644 --- a/civicrm/CRM/Report/Form/Register.php +++ b/civicrm/CRM/Report/Form/Register.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Form/Walklist/Walklist.php b/civicrm/CRM/Report/Form/Walklist/Walklist.php index 6ac324557125f3942c8f8e06bca118935ecc3bf4..98e51413fe419437cbab3f29d520008e78007345 100644 --- a/civicrm/CRM/Report/Form/Walklist/Walklist.php +++ b/civicrm/CRM/Report/Form/Walklist/Walklist.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Report_Form_Walklist_Walklist extends CRM_Report_Form { protected $_addressField = FALSE; diff --git a/civicrm/CRM/Report/Info.php b/civicrm/CRM/Report/Info.php index a38157d18703d4d9373aee25feaad2512101d74a..23cc9a837badf468fcc1c0174cb89ba709fb7500 100644 --- a/civicrm/CRM/Report/Info.php +++ b/civicrm/CRM/Report/Info.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * information about it. It needs to extend CRM_Core_Component_Info * abstract class. * - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Interface.php b/civicrm/CRM/Report/Interface.php index 34920bbbf231e6ce731e52612f84b30cfc1bb7a3..f86bd8013f77bf5a4eb624da7b293d7a29fccb33 100644 --- a/civicrm/CRM/Report/Interface.php +++ b/civicrm/CRM/Report/Interface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ interface CRM_Report_Interface { diff --git a/civicrm/CRM/Report/Page/Instance.php b/civicrm/CRM/Report/Page/Instance.php index 837cf65bbd214ecbfc5ab457f0dafaa4b51f89b6..9d210b2395e684aa6d900ff0f0bc755aa6a2fdfd 100644 --- a/civicrm/CRM/Report/Page/Instance.php +++ b/civicrm/CRM/Report/Page/Instance.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Report/Page/InstanceList.php b/civicrm/CRM/Report/Page/InstanceList.php index 663baa8afe3981437268724b348d89ce5bca3f5d..fa858f34c6ba6d18bf675db3997091798430b4a7 100644 --- a/civicrm/CRM/Report/Page/InstanceList.php +++ b/civicrm/CRM/Report/Page/InstanceList.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Report/Page/Options.php b/civicrm/CRM/Report/Page/Options.php index da31c610a53f732cdaf18cc02eecafe0d9369b5a..cb48958ff496e1fef15d21e2b5e48e52f7d3718f 100644 --- a/civicrm/CRM/Report/Page/Options.php +++ b/civicrm/CRM/Report/Page/Options.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Report/Page/Report.php b/civicrm/CRM/Report/Page/Report.php index a12e275880665afef87c780c75c03b9de44719f4..6c3255c1fa9bac6c690013deaced197182bdf916 100644 --- a/civicrm/CRM/Report/Page/Report.php +++ b/civicrm/CRM/Report/Page/Report.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Report/Page/TemplateList.php b/civicrm/CRM/Report/Page/TemplateList.php index 2083357bd383019d1f3510f0bee21f9603e96f03..9ae552130aabf1f86220d5cb3076dcc1775374f4 100644 --- a/civicrm/CRM/Report/Page/TemplateList.php +++ b/civicrm/CRM/Report/Page/TemplateList.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Report/Utils/Get.php b/civicrm/CRM/Report/Utils/Get.php index caa4361486328816b97df76a0dd73cf3ce7fb1bd..b7f4b01dde1aa8212416921f995feb5c6e165084 100644 --- a/civicrm/CRM/Report/Utils/Get.php +++ b/civicrm/CRM/Report/Utils/Get.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Report/Utils/Report.php b/civicrm/CRM/Report/Utils/Report.php index 14aadb536026b8f4dbaf35c097fe668629e0ac3e..74e1c6308ac2a4845d90680a7ff452e92d65ab4d 100644 --- a/civicrm/CRM/Report/Utils/Report.php +++ b/civicrm/CRM/Report/Utils/Report.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/SMS/BAO/Provider.php b/civicrm/CRM/SMS/BAO/Provider.php index f58f511ad6fa0ccffa2d63687791702e608f903f..228196fa2098a65e5387f352850fa6d6796be004 100644 --- a/civicrm/CRM/SMS/BAO/Provider.php +++ b/civicrm/CRM/SMS/BAO/Provider.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_SMS_BAO_Provider extends CRM_SMS_DAO_Provider { diff --git a/civicrm/CRM/SMS/Controller/Send.php b/civicrm/CRM/SMS/Controller/Send.php index 110e43918b8146bb53dc62bce7dbadf43352db8b..9c7de6ce962fb0b664d01fa5d9a227128c21f410 100644 --- a/civicrm/CRM/SMS/Controller/Send.php +++ b/civicrm/CRM/SMS/Controller/Send.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_SMS_Controller_Send extends CRM_Core_Controller { diff --git a/civicrm/CRM/SMS/DAO/Provider.php b/civicrm/CRM/SMS/DAO/Provider.php index c2c7ebc368b5f8bc3a34fda1c7402cd99d15ac35..990f58c84eaaec82da41a684585d58aa8ca25f2e 100644 --- a/civicrm/CRM/SMS/DAO/Provider.php +++ b/civicrm/CRM/SMS/DAO/Provider.php @@ -2,7 +2,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * Generated from xml/schema/CRM/SMS/Provider.xml * DO NOT EDIT. Generated by CRM_Core_CodeGen diff --git a/civicrm/CRM/SMS/Form/Group.php b/civicrm/CRM/SMS/Form/Group.php index 9aabab10040142b2732e45aeea3eeaebdd1d85fa..fd0cd32a1eaf67a162504ede350e0b5eb14f3fd8 100644 --- a/civicrm/CRM/SMS/Form/Group.php +++ b/civicrm/CRM/SMS/Form/Group.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/SMS/Form/Provider.php b/civicrm/CRM/SMS/Form/Provider.php index 1a94c13d0f866032e81b14321111186c81e583a0..8fb3ffde3ba829917366351f5cdcc25d1fb8fb4c 100644 --- a/civicrm/CRM/SMS/Form/Provider.php +++ b/civicrm/CRM/SMS/Form/Provider.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/SMS/Form/Schedule.php b/civicrm/CRM/SMS/Form/Schedule.php index 7aac205040ea6d97cbae2ef156eb079f632f10e4..a4635a7e8f14edaaceb75c49f0362057c71f88f0 100644 --- a/civicrm/CRM/SMS/Form/Schedule.php +++ b/civicrm/CRM/SMS/Form/Schedule.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_SMS_Form_Schedule extends CRM_Core_Form { diff --git a/civicrm/CRM/SMS/Form/Upload.php b/civicrm/CRM/SMS/Form/Upload.php index 4a52c4052ba9105af08fc82c1429dd30fcb6e921..8c8fd974f4dd2d3c015483c1dcca205df6c15999 100644 --- a/civicrm/CRM/SMS/Form/Upload.php +++ b/civicrm/CRM/SMS/Form/Upload.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/SMS/Message.php b/civicrm/CRM/SMS/Message.php index 0d4289bf699daa9b3d6880323235e2b3ec6b0d61..6892dde8723eb526b74192e58090fd8226d2d366 100644 --- a/civicrm/CRM/SMS/Message.php +++ b/civicrm/CRM/SMS/Message.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/SMS/Page/Callback.php b/civicrm/CRM/SMS/Page/Callback.php index 48e651f25afcc2391e140d33288d1d6ceb011216..3d013263df7e07d4046da48615c681862016dd95 100644 --- a/civicrm/CRM/SMS/Page/Callback.php +++ b/civicrm/CRM/SMS/Page/Callback.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_SMS_Page_Callback { diff --git a/civicrm/CRM/SMS/Page/Provider.php b/civicrm/CRM/SMS/Page/Provider.php index bc43e3f804633274668b54c3e6eec4a07b0fdbd6..61a47bdbca401ce9419f7385f32412f5cc000448 100644 --- a/civicrm/CRM/SMS/Page/Provider.php +++ b/civicrm/CRM/SMS/Page/Provider.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/SMS/Provider.php b/civicrm/CRM/SMS/Provider.php index bc7476766f27ea8dce06c4a86c3cf13a3e6050b4..3ce50e90628052f176350420ade9854c8f8a8653 100644 --- a/civicrm/CRM/SMS/Provider.php +++ b/civicrm/CRM/SMS/Provider.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_SMS_Provider { diff --git a/civicrm/CRM/SMS/StateMachine/Send.php b/civicrm/CRM/SMS/StateMachine/Send.php index 985b078c4f909c8abc6ccf887a6f0f53711cb77d..87b625c7d0c10ec1eb6612211c0733c82b3089c8 100644 --- a/civicrm/CRM/SMS/StateMachine/Send.php +++ b/civicrm/CRM/SMS/StateMachine/Send.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Tag/Form/Edit.php b/civicrm/CRM/Tag/Form/Edit.php index e8afa5838a5a705e2b24a717802a04d9302d6496..b7854eeb336d41f5fc9f76015c44a91c30c200f2 100644 --- a/civicrm/CRM/Tag/Form/Edit.php +++ b/civicrm/CRM/Tag/Form/Edit.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Tag/Form/Merge.php b/civicrm/CRM/Tag/Form/Merge.php index f6778083d0b11d8ff84d9299db03f3778e58a978..065c6576e5d5ccfb93c9897392e0e896cf33e872 100644 --- a/civicrm/CRM/Tag/Form/Merge.php +++ b/civicrm/CRM/Tag/Form/Merge.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Tag/Form/Tag.php b/civicrm/CRM/Tag/Form/Tag.php index 231fb43db0a49d36f794a8d62f39d9bed2be8e90..209a0c12efa12277f869fac6651e7ca43e369630 100644 --- a/civicrm/CRM/Tag/Form/Tag.php +++ b/civicrm/CRM/Tag/Form/Tag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Tag/Page/Tag.php b/civicrm/CRM/Tag/Page/Tag.php index 1c98beca046238513360a5109ce21cad26e40bf1..d4534a30998f4d1e68ebaaee5201c6b90fc58243 100644 --- a/civicrm/CRM/Tag/Page/Tag.php +++ b/civicrm/CRM/Tag/Page/Tag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/UF/Form/AbstractPreview.php b/civicrm/CRM/UF/Form/AbstractPreview.php index 3e41c2c12ac734d03947453beff96c7a9e0d50b7..26afc138a196498f85dc47412ec3183d5d89a6d7 100644 --- a/civicrm/CRM/UF/Form/AbstractPreview.php +++ b/civicrm/CRM/UF/Form/AbstractPreview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/UF/Form/AdvanceSetting.php b/civicrm/CRM/UF/Form/AdvanceSetting.php index 818896e47674a5b2a271db5cad1dcba519c065e6..38f5824729ef1a8ba2c5ad9f229bc7d3594a9070 100644 --- a/civicrm/CRM/UF/Form/AdvanceSetting.php +++ b/civicrm/CRM/UF/Form/AdvanceSetting.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_UF_Form_AdvanceSetting extends CRM_UF_Form_Group { diff --git a/civicrm/CRM/UF/Form/Field.php b/civicrm/CRM/UF/Form/Field.php index 485949e88cb9ba52e2ae1698279a5eac66ada7a8..11fd0d1ce7d093847d979435b96c43dc24a412b1 100644 --- a/civicrm/CRM/UF/Form/Field.php +++ b/civicrm/CRM/UF/Form/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/UF/Form/Group.php b/civicrm/CRM/UF/Form/Group.php index ac78b3ecb5a1aa5533dc8f5382e689382a63e068..ae37ce6a634e31fad211ba90a54db865ca1154e6 100644 --- a/civicrm/CRM/UF/Form/Group.php +++ b/civicrm/CRM/UF/Form/Group.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/UF/Form/Inline/Preview.php b/civicrm/CRM/UF/Form/Inline/Preview.php index 9da6fdd00b99fc167021784d31da12eed926d5be..1ceb32c51f898993108ad1162afa4418be1b99be 100644 --- a/civicrm/CRM/UF/Form/Inline/Preview.php +++ b/civicrm/CRM/UF/Form/Inline/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/UF/Form/Inline/PreviewById.php b/civicrm/CRM/UF/Form/Inline/PreviewById.php index f75046cd766dac5760e85ad0daa73701f9f535b2..2d5b2602dc79bcf1bf6c63f858359f9f095257cd 100644 --- a/civicrm/CRM/UF/Form/Inline/PreviewById.php +++ b/civicrm/CRM/UF/Form/Inline/PreviewById.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/UF/Form/Preview.php b/civicrm/CRM/UF/Form/Preview.php index d2d436bd145f43a37fed187a509bfc5ae4ff3d01..dbebc602cdd83380eac6989c2ffb62fec9faec73 100644 --- a/civicrm/CRM/UF/Form/Preview.php +++ b/civicrm/CRM/UF/Form/Preview.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/UF/Page/AJAX.php b/civicrm/CRM/UF/Page/AJAX.php index 9d7a89d6d0602dd58f2fd7ef7bf9340b60b4b5e2..0fd38514438f619ac8d3f6feaa7a4481824b25f9 100644 --- a/civicrm/CRM/UF/Page/AJAX.php +++ b/civicrm/CRM/UF/Page/AJAX.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/UF/Page/Field.php b/civicrm/CRM/UF/Page/Field.php index e178e417cc2fc0d21da8028208c947f97a92cdd0..5b773fa049bc6c276f44f07cc2b8d8c059bf84e2 100644 --- a/civicrm/CRM/UF/Page/Field.php +++ b/civicrm/CRM/UF/Page/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/UF/Page/Group.php b/civicrm/CRM/UF/Page/Group.php index e4bfb1b2fd404be7bbf73049f7ecc8303f539e3e..f123551d9fad5e05d64a737dcda549459754ba48 100644 --- a/civicrm/CRM/UF/Page/Group.php +++ b/civicrm/CRM/UF/Page/Group.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Controller.php b/civicrm/CRM/Upgrade/Controller.php index 9d1acb09e8fe9a41dbbcf254e1ef0bdc25b5719a..8381353fc89ddd560adb10e01df36649998b8164 100644 --- a/civicrm/CRM/Upgrade/Controller.php +++ b/civicrm/CRM/Upgrade/Controller.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php index 10b87ead2e8b92d3456eac22eac38212162f9d06..e2246c0e04e2fbe76d47e56ae0ab8061f5fd63c1 100644 --- a/civicrm/CRM/Upgrade/Form.php +++ b/civicrm/CRM/Upgrade/Form.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -50,7 +50,7 @@ class CRM_Upgrade_Form extends CRM_Core_Form { /** * Minimum php version required to run (equal to or lower than the minimum install version) */ - const MINIMUM_PHP_VERSION = '5.4'; + const MINIMUM_PHP_VERSION = '5.5'; protected $_config; @@ -68,24 +68,6 @@ class CRM_Upgrade_Form extends CRM_Core_Form { */ public $locales; - /** - * Number to string mapper. - * - * @var array - */ - static $_numberMap = array( - 0 => 'Zero', - 1 => 'One', - 2 => 'Two', - 3 => 'Three', - 4 => 'Four', - 5 => 'Five', - 6 => 'Six', - 7 => 'Seven', - 8 => 'Eight', - 9 => 'Nine', - ); - /** * Constructor for the basic form page. * @@ -137,7 +119,7 @@ class CRM_Upgrade_Form extends CRM_Core_Form { static $incrementalPhpObject = array(); $versionParts = explode('.', $version); - $versionName = self::$_numberMap[$versionParts[0]] . self::$_numberMap[$versionParts[1]]; + $versionName = CRM_Utils_EnglishNumber::toCamelCase($versionParts[0]) . CRM_Utils_EnglishNumber::toCamelCase($versionParts[1]); if (!array_key_exists($versionName, $incrementalPhpObject)) { $className = "CRM_Upgrade_Incremental_php_{$versionName}"; diff --git a/civicrm/CRM/Upgrade/Headless.php b/civicrm/CRM/Upgrade/Headless.php index d663ca74640263a1d33ce9fdface88a3b1817d8d..363e1d0691054a872a635112fe152c1aa33a932c 100644 --- a/civicrm/CRM/Upgrade/Headless.php +++ b/civicrm/CRM/Upgrade/Headless.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Incremental/Base.php b/civicrm/CRM/Upgrade/Incremental/Base.php index 00edb0c1905a9aea93c4899d39238694bf1f8392..253fcbd284bf60512ac621169e9067d9ebc4293e 100644 --- a/civicrm/CRM/Upgrade/Incremental/Base.php +++ b/civicrm/CRM/Upgrade/Incremental/Base.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7.alpha1 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Incremental/General.php b/civicrm/CRM/Upgrade/Incremental/General.php index 56a80610d28ebac6b84f09c9d6f0d3efecb4aca9..132f902098ec39492d5c2bf7ad8a07c79ffcf9a8 100644 --- a/civicrm/CRM/Upgrade/Incremental/General.php +++ b/civicrm/CRM/Upgrade/Incremental/General.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ @@ -53,7 +53,7 @@ class CRM_Upgrade_Incremental_General { * * @see install/index.php */ - const MIN_INSTALL_PHP_VER = '5.4'; + const MIN_INSTALL_PHP_VER = '5.5'; /** * Compute any messages which should be displayed before upgrade. diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveZero.php b/civicrm/CRM/Upgrade/Incremental/php/FiveZero.php new file mode 100644 index 0000000000000000000000000000000000000000..96c4305d2f4ec5c01af285a522de61af5b21ae98 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/FiveZero.php @@ -0,0 +1,97 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2017 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License along with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Upgrade logic for 5.0 + */ +class CRM_Upgrade_Incremental_php_FiveZero extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each upcoming + * revision to the database. + * + * @param string $preUpgradeMessage + * @param string $rev + * a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'. + * @param null $currentVer + */ + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) { + // Example: Generate a pre-upgrade message. + //if ($rev == '5.12.34') { + // $preUpgradeMessage .= '<p>' . ts('A new permission has been added called %1 This Permission is now used to control access to the Manage Tags screen', array(1 => 'manage tags')) . '</p>'; + //} + } + + /** + * Compute any messages which should be displayed after upgrade. + * + * @param string $postUpgradeMessage + * alterable. + * @param string $rev + * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. + */ + public function setPostUpgradeMessage(&$postUpgradeMessage, $rev) { + // Example: Generate a post-upgrade message. + //if ($rev == '5.12.34') { + // $postUpgradeMessage .= '<br /><br />' . ts("By default, CiviCRM now disables the ability to import directly from SQL. To use this feature, you must explicitly grant permission 'import SQL datasource'."); + //} + } + + /** + * Upgrade function. + * + * @param string $rev + */ + public function upgrade_5_0_0($rev) { + $this->addTask(ts('Upgrade DB to %1: SQL', array(1 => $rev)), 'runSql', $rev); + } + + /* + * Important! All upgrade functions MUST add a 'runSql' task. + * Uncomment and use the following template for a new upgrade version + * (change the x in the function name): + */ + + // /** + // * Upgrade function. + // * + // * @param string $rev + // */ + // public function upgrade_4_7_x($rev) { + // $this->addTask(ts('Upgrade DB to %1: SQL', array(1 => $rev)), 'runSql', $rev); + // $this->addTask(ts('Do the foo change'), 'taskFoo', ...); + // // Additional tasks here... + // // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex. + // // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable. + // } + + // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...) { + // return TRUE; + // } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourFive.php b/civicrm/CRM/Upgrade/Incremental/php/FourFive.php index 414f68225e621cf590155a9fcaaf4ec7693a82af..423d54ef7e24edb2a613ec5dfe2b738dfa287f53 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourFive.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourFive.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourFour.php b/civicrm/CRM/Upgrade/Incremental/php/FourFour.php index baea3d8c86882eefeb025439d00f4a6163ce4c55..7a093423135b057eed7fc5bda775318aa928c92a 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourFour.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourFour.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourOne.php b/civicrm/CRM/Upgrade/Incremental/php/FourOne.php index 2a80fc01c7d4aaf37ba0949e591ac14d844c3097..2fe81eedf2a589d2b623a92e2d49acd2eb8fc2c4 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourOne.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourOne.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourSeven.php b/civicrm/CRM/Upgrade/Incremental/php/FourSeven.php index 8a1947e8d8deb1331e7efbac06f243917aea963d..609a2e4465dc79ec464b2b687a84d4004e1b7e59 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourSeven.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourSeven.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -82,6 +82,9 @@ class CRM_Upgrade_Incremental_php_FourSeven extends CRM_Upgrade_Incremental_Base ); $preUpgradeMessage .= '<p>' . ts('A new set of batch permissions has been added called "%1", "%2", "%3" and "%4". These permissions are now used to control access to the Accounting Batches tasks. If your users need to be able to Reopen or Close batches you may need to give them additional permissions. <a href=%5>Read more</a>', $params) . '</p>'; } + if ($rev == '4.7.32') { + $preUpgradeMessage .= '<p>' . ts('A new %1 permission has been added. It is not granted by default. If you use SMS, you may wish to review your permissions.', array(1 => 'send SMS')) . '</p>'; + } } /** @@ -494,6 +497,18 @@ class CRM_Upgrade_Incremental_php_FourSeven extends CRM_Upgrade_Incremental_Base $this->addTask('Rebuild Multilingual Schema', 'rebuildMultilingalSchema'); } + /** + * Upgrade function. + * + * @param string $rev + */ + public function upgrade_4_7_32($rev) { + $this->addTask(ts('Upgrade DB to %1: SQL', array(1 => $rev)), 'runSql', $rev); + + $this->addTask('CRM-21733: Add status_override_end_date field to civicrm_membership table', 'addColumn', 'civicrm_membership', 'status_override_end_date', + "date DEFAULT NULL COMMENT 'The end date of membership status override if (Override until selected date) override type is selected.'"); + } + /* * Important! All upgrade functions MUST add a 'runSql' task. * Uncomment and use the following template for a new upgrade version diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourSix.php b/civicrm/CRM/Upgrade/Incremental/php/FourSix.php index 8777bc824a6fe3c184eb342d45fc31a71696bfc0..670f030321b32f9bad270f0810d630eac33f4067 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourSix.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourSix.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7.alpha1 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourThree.php b/civicrm/CRM/Upgrade/Incremental/php/FourThree.php index 71442572e4e87e48444865ccab8816651d727d5e..2e5fe56eba488dac0b065f2956d1cb5d582c0188 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourThree.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourThree.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Incremental/php/FourTwo.php b/civicrm/CRM/Upgrade/Incremental/php/FourTwo.php index f047bb29fa0a53e71751a95de92c5d04f4d01d03..0ac37b31c78dff5d7fd624a4edec66543c2231d5 100644 --- a/civicrm/CRM/Upgrade/Incremental/php/FourTwo.php +++ b/civicrm/CRM/Upgrade/Incremental/php/FourTwo.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Incremental/php/Template.php b/civicrm/CRM/Upgrade/Incremental/php/Template.php new file mode 100644 index 0000000000000000000000000000000000000000..fcd9708f3fbf9262065dfc8f5883b78b713e2edc --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/php/Template.php @@ -0,0 +1,93 @@ +<?php +if (PHP_SAPI !== 'cli') { + die("This template is only valid on CLI."); +} +echo "<?php\n"; +?> +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2017 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License along with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * Upgrade logic for <?php echo $camelNumber; ?> + */ +class CRM_Upgrade_Incremental_php_<?php echo $camelNumber; ?> extends CRM_Upgrade_Incremental_Base { + + /** + * Compute any messages which should be displayed beforeupgrade. + * + * Note: This function is called iteratively for each upcoming + * revision to the database. + * + * @param string $preUpgradeMessage + * @param string $rev + * a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'. + * @param null $currentVer + */ + public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) { + // Example: Generate a pre-upgrade message. + // if ($rev == '5.12.34') { + // $preUpgradeMessage .= '<p>' . ts('A new permission has been added called %1 This Permission is now used to control access to the Manage Tags screen', array(1 => 'manage tags')) . '</p>'; + // } + } + + /** + * Compute any messages which should be displayed after upgrade. + * + * @param string $postUpgradeMessage + * alterable. + * @param string $rev + * an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs. + */ + public function setPostUpgradeMessage(&$postUpgradeMessage, $rev) { + // Example: Generate a post-upgrade message. + // if ($rev == '5.12.34') { + // $postUpgradeMessage .= '<br /><br />' . ts("By default, CiviCRM now disables the ability to import directly from SQL. To use this feature, you must explicitly grant permission 'import SQL datasource'."); + // } + } + + /* + * Important! All upgrade functions MUST add a 'runSql' task. + * Uncomment and use the following template for a new upgrade version + * (change the x in the function name): + */ + + // /** + // * Upgrade function. + // * + // * @param string $rev + // */ + // public function upgrade_5_0_x($rev) { + // $this->addTask(ts('Upgrade DB to %1: SQL', array(1 => $rev)), 'runSql', $rev); + // $this->addTask('Do the foo change', 'taskFoo', ...); + // // Additional tasks here... + // // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex. + // // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable. + // } + + // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...) { + // return TRUE; + // } + +} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.7.19.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.7.19.mysql.tpl index 91e50b0f3e98c9a57093376c697b2ac6f69f5488..ee87b967880762d9424d400fadd2dd39464f48e1 100644 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.7.19.mysql.tpl +++ b/civicrm/CRM/Upgrade/Incremental/sql/4.7.19.mysql.tpl @@ -41,6 +41,12 @@ INSERT INTO VALUES (@option_group_id_adOpt, {localize}'{ts escape="sql"}Supplemental Address 3{/ts}'{/localize}, (SELECT @max_val := @max_val + 1), 'supplemental_address_3', NULL, 0, NULL, (SELECT @supp2_wt := @supp2_wt + 1), {localize}''{/localize}, 0, 0, 1, NULL, NULL, NULL); +-- Some legacy sites have `0000-00-00 00:00:00` values in +-- `civicrm_financial_trxn.trxn_date` which correspond to the same value in +-- `civicrm_contribution.receive_date` +UPDATE civicrm_financial_trxn SET trxn_date = NULL WHERE trxn_date = '0000-00-00 00:00:00'; +UPDATE civicrm_contribution SET receive_date = NULL WHERE receive_date = '0000-00-00 00:00:00'; + -- CRM-20439 rename card_type to card_type_id of civicrm_financial_trxn table (IIDA-126) ALTER TABLE `civicrm_financial_trxn` CHANGE `card_type` `card_type_id` INT(10) UNSIGNED NULL DEFAULT NULL COMMENT 'FK to accept_creditcard option group values'; diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.7.28.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.7.28.mysql.tpl index 9eeb6a3948e31c8e612d1e453570d8510d1cc8e7..61b278164cdfffe1894c7abb0cb4f9145bfa484e 100644 --- a/civicrm/CRM/Upgrade/Incremental/sql/4.7.28.mysql.tpl +++ b/civicrm/CRM/Upgrade/Incremental/sql/4.7.28.mysql.tpl @@ -1,7 +1,7 @@ -{* file to handle db changes in 4.7.27 during upgrade *} +{* file to handle db changes in 4.7.28 during upgrade *} -- CRM-21268 Missing French overseas departments. - INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES + INSERT IGNORE INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (NULL, 1076, "WF", "Wallis-et-Futuna"), (NULL, 1076, "NC", "Nouvelle-Calédonie"), diff --git a/civicrm/CRM/Upgrade/Incremental/sql/4.7.32.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/4.7.32.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..08267008b5ba5e26dee55564dd991f318e85db57 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/4.7.32.mysql.tpl @@ -0,0 +1,14 @@ +{* file to handle db changes in 4.7.32 during upgrade *} + +-- CRM-21837 - Missing states for Gabon +SELECT @country_id := id from civicrm_country where name = 'Gabon' AND iso_code = 'GA'; +INSERT INTO `civicrm_state_province` (`id`, `country_id`, `abbreviation`, `name`) VALUES +(NULL, @country_id, "01", "Estuaire"), +(NULL, @country_id, "02", "Haut-Ogooué"), +(NULL, @country_id, "03", "Moyen-Ogooué"), +(NULL, @country_id, "04", "Ngounié"), +(NULL, @country_id, "05", "Nyanga"), +(NULL, @country_id, "06", "Ogooué-Ivindo"), +(NULL, @country_id, "07", "Ogooué-Lolo"), +(NULL, @country_id, "08", "Ogooué-Maritime"), +(NULL, @country_id, "09", "Woleu-Ntem"); diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.0.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.0.0.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c6bdb5103b548bbcba44e58f3726b102a76e2276 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.0.0.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.0.0 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.0.beta1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.0.beta1.mysql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..b58251174b72290789c91e66ca022a62bd0082f8 --- /dev/null +++ b/civicrm/CRM/Upgrade/Incremental/sql/5.0.beta1.mysql.tpl @@ -0,0 +1 @@ +{* file to handle db changes in 5.0.beta1 during upgrade *} diff --git a/civicrm/CRM/Upgrade/Incremental/sql/README.txt b/civicrm/CRM/Upgrade/Incremental/sql/README.txt index 437b5ac0c58e8c64962bd09a05c29514710ab6f2..b3f873e3f41358f409be579653d29d7d7eee4121 100644 --- a/civicrm/CRM/Upgrade/Incremental/sql/README.txt +++ b/civicrm/CRM/Upgrade/Incremental/sql/README.txt @@ -1,7 +1,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Page/Cleanup.php b/civicrm/CRM/Upgrade/Page/Cleanup.php index fec0b631e96ef784b26604620ef835cf357b4cf5..10e428ddfd4d80121daebdd7e6a62dcdeb379d2a 100644 --- a/civicrm/CRM/Upgrade/Page/Cleanup.php +++ b/civicrm/CRM/Upgrade/Page/Cleanup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Upgrade/Page/Upgrade.php b/civicrm/CRM/Upgrade/Page/Upgrade.php index d9d1037bb5f473c852d864c8c27ecf774c74da69..c867fccfe52dd4b19fbc10ee19c6aa2f516f7588 100644 --- a/civicrm/CRM/Upgrade/Page/Upgrade.php +++ b/civicrm/CRM/Upgrade/Page/Upgrade.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { @@ -194,6 +194,7 @@ class CRM_Upgrade_Page_Upgrade extends CRM_Core_Page { $template->assign('message', $postUpgradeMessage); $template->assign('upgraded', TRUE); $template->assign('sid', CRM_Utils_System::getSiteID()); + $template->assign('newVersion', $latestVer); // Render page header if (!defined('CIVICRM_UF_HEAD') && $region = CRM_Core_Region::instance('html-header', FALSE)) { diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/Field.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/Field.php index ca214120f4cfc26e7e9644bcbd5b692d923aacf7..281c2fb60fa0571cda5aefa81b867e7de1d64437 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/Field.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/FieldValue.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/FieldValue.php index babfae63e7d0ef4950f3dc1a7f1e049c7c14c071..16f57e934d528f9a4cd53c2c31ac2d57095ab0f4 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/FieldValue.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/FieldValue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/LineItem.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/LineItem.php index 6740f6e57c88d7b06c46a7f3fe47b77503e8285b..4295ceefdc3faf749d1a1d5f0e83333848f81511 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/LineItem.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/LineItem.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/Set.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/Set.php index 51ede4d549104c05358d58557ab4fafe9dc4fe01..c853fced28a339cc87715e4306c8815497dfde33 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/Set.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/BAO/Set.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/Field.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/Field.php index d80104dbdc25c5123f6ca9d5b2fb20af93e7dcc4..6cdbbd54480875692e6ab06dc8d13aa2e884031c 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/Field.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/Field.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/FieldValue.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/FieldValue.php index 22b3fa669187c8199eb4ec49cf8037f768d4e790..a6592a4d43522c0d1bacba510c0dc37186dffb0b 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/FieldValue.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/FieldValue.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/LineItem.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/LineItem.php index a73956f06768e8e8199aa2fa474902f95b519444..ef3fe54f6f6c45461ca81098285027e1bcec3eb5 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/LineItem.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/LineItem.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/Set.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/Set.php index 4cac29ac9e150f476067dabe31ac3aaf951354de..739d8e3f30a825b3734674e78fcf28794cb0624e 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/Set.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/Set.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/SetEntity.php b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/SetEntity.php index 453445c09f611e8afb030f025757e1e56604b2a1..392ee3a8618c47c342bbc4f4529d28a5389e1858 100644 --- a/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/SetEntity.php +++ b/civicrm/CRM/Upgrade/Snapshot/V4p2/Price/DAO/SetEntity.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Upgrade/StateMachine.php b/civicrm/CRM/Upgrade/StateMachine.php index f0a3cf2db4c98ea6800db2c4645aaf10a22feab5..06a397cb862c50ff995f30b29af8a6c3172889f5 100644 --- a/civicrm/CRM/Upgrade/StateMachine.php +++ b/civicrm/CRM/Upgrade/StateMachine.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/API/AbstractFieldCoder.php b/civicrm/CRM/Utils/API/AbstractFieldCoder.php index 51c6e110170161d22f1b7bdbb1373100491ddd5a..983331442fb3dfa1888e1e5dab8da91b86a2efe4 100644 --- a/civicrm/CRM/Utils/API/AbstractFieldCoder.php +++ b/civicrm/CRM/Utils/API/AbstractFieldCoder.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * of all fields (except for some black-listed skip-fields). * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'api/Wrapper.php'; diff --git a/civicrm/CRM/Utils/API/HTMLInputCoder.php b/civicrm/CRM/Utils/API/HTMLInputCoder.php index 297c72a5eb65af8d0f80255d4dd9c870a737440f..3f9d704023763fb3f7ee4429c02f0437f82df1ef 100644 --- a/civicrm/CRM/Utils/API/HTMLInputCoder.php +++ b/civicrm/CRM/Utils/API/HTMLInputCoder.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -35,7 +35,7 @@ * escaping scheme and consequently remove HTMLInputCoder. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_API_HTMLInputCoder extends CRM_Utils_API_AbstractFieldCoder { private $skipFields = NULL; diff --git a/civicrm/CRM/Utils/API/MatchOption.php b/civicrm/CRM/Utils/API/MatchOption.php index 65016774da6e93932689091601e6f428505c718e..45288ebb4248f56dc1b0e6a042ec595f9ca4e2a6 100644 --- a/civicrm/CRM/Utils/API/MatchOption.php +++ b/civicrm/CRM/Utils/API/MatchOption.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -49,7 +49,7 @@ * @endcode * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'api/Wrapper.php'; diff --git a/civicrm/CRM/Utils/API/NullOutputCoder.php b/civicrm/CRM/Utils/API/NullOutputCoder.php index e9aa057e7322da8069700172ad992a028cbafd5d..ba914fceab3affd34cc99591493fcdcfb2508511 100644 --- a/civicrm/CRM/Utils/API/NullOutputCoder.php +++ b/civicrm/CRM/Utils/API/NullOutputCoder.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * when the actual value is NULL or "". Rewrite the output. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'api/Wrapper.php'; diff --git a/civicrm/CRM/Utils/API/ReloadOption.php b/civicrm/CRM/Utils/API/ReloadOption.php index 6c41c62b2979823132ce1e22d16c467a8cfbdbb6..b4cd64679115966cddd18e9d8f7cddae6de6648c 100644 --- a/civicrm/CRM/Utils/API/ReloadOption.php +++ b/civicrm/CRM/Utils/API/ReloadOption.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -38,7 +38,7 @@ * @endcode * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'api/Wrapper.php'; diff --git a/civicrm/CRM/Utils/Address.php b/civicrm/CRM/Utils/Address.php index 3168164aa04f8760aeac10869e445f74d0354f8f..c5f8985aab4fc07e653d9db1b16c63d2a1ce9601 100644 --- a/civicrm/CRM/Utils/Address.php +++ b/civicrm/CRM/Utils/Address.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Address Utilities * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Address { @@ -331,6 +331,7 @@ class CRM_Utils_Address { "city" => "billing_city-{$billingLocationTypeID}", "postal_code" => "billing_postal_code-{$billingLocationTypeID}", "state_province" => "state_province-{$billingLocationTypeID}", + "state_province_name" => "state_province-{$billingLocationTypeID}", "country" => "country-{$billingLocationTypeID}", ); @@ -348,10 +349,13 @@ class CRM_Utils_Address { $value = $params[$alternateName]; } } - if (is_numeric($value) && ($name == 'state_province' || $name == 'country')) { + if (is_numeric($value) && ($name == 'state_province' || $name == 'state_province_name' || $name == 'country')) { if ($name == 'state_province') { $addressFields[$name] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($value); } + if ($name == 'state_province_name') { + $addressFields[$name] = CRM_Core_PseudoConstant::stateProvince($value); + } if ($name == 'country') { $addressFields[$name] = CRM_Core_PseudoConstant::countryIsoCode($value); } diff --git a/civicrm/CRM/Utils/Address/BatchUpdate.php b/civicrm/CRM/Utils/Address/BatchUpdate.php index 0433067848f697f7da46c3dc5e462706a004503c..98a45379b819ca9e37bfc21de2fc1b02500b4cb7 100644 --- a/civicrm/CRM/Utils/Address/BatchUpdate.php +++ b/civicrm/CRM/Utils/Address/BatchUpdate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Address/USPS.php b/civicrm/CRM/Utils/Address/USPS.php index 5cedcc7e0813bb98b1ba162e1c7234dbc648a441..81041a95fa0501b7381beeea3b7342e8e8deb602 100644 --- a/civicrm/CRM/Utils/Address/USPS.php +++ b/civicrm/CRM/Utils/Address/USPS.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Array.php b/civicrm/CRM/Utils/Array.php index 4adc3598d3cce5e389d535a8e81b19649c592b76..42b355f3d07a31c21f74172369874ad1ed470941 100644 --- a/civicrm/CRM/Utils/Array.php +++ b/civicrm/CRM/Utils/Array.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Provides a collection of static methods for array manipulation. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Array { diff --git a/civicrm/CRM/Utils/AutoClean.php b/civicrm/CRM/Utils/AutoClean.php index 02b6268d2c1658695f27f84488649cae5dfbb1e5..1bca02869e1ec1b9fef5e33cb53e80882a14d8bb 100644 --- a/civicrm/CRM/Utils/AutoClean.php +++ b/civicrm/CRM/Utils/AutoClean.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Cache.php b/civicrm/CRM/Utils/Cache.php index 0e3bc09727b4ac72cb3f094501b8bc57436488d2..4c6cf0e38692d2aa6e578086bb459c96fafbda33 100644 --- a/civicrm/CRM/Utils/Cache.php +++ b/civicrm/CRM/Utils/Cache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Cache/APCcache.php b/civicrm/CRM/Utils/Cache/APCcache.php index 2dfc556618cc0333fe67562985c61d829524f572..0f2ed74255f5caf59b18e7e0942251d8bdeb44fe 100644 --- a/civicrm/CRM/Utils/Cache/APCcache.php +++ b/civicrm/CRM/Utils/Cache/APCcache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Cache_APCcache implements CRM_Utils_Cache_Interface { const DEFAULT_TIMEOUT = 3600; diff --git a/civicrm/CRM/Utils/Cache/ArrayCache.php b/civicrm/CRM/Utils/Cache/ArrayCache.php index dbd434f20a3661a8993b1f44c498b3d4052312d7..6bc0f2af5e4c99f4a3c6fb65da403d18027312cd 100644 --- a/civicrm/CRM/Utils/Cache/ArrayCache.php +++ b/civicrm/CRM/Utils/Cache/ArrayCache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Cache/Interface.php b/civicrm/CRM/Utils/Cache/Interface.php index ce015522cb32828c43169a7e3746ade8d47edce3..a0c958495ef58d706a84a4cd88ae3148f8e4a9d6 100644 --- a/civicrm/CRM/Utils/Cache/Interface.php +++ b/civicrm/CRM/Utils/Cache/Interface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * * CRM_Utils_Cache_Interface * diff --git a/civicrm/CRM/Utils/Cache/Memcache.php b/civicrm/CRM/Utils/Cache/Memcache.php index a37f33b79b8a9ac2e0898aa860594b3128eabb6c..bb6c7c80fef462852bd4224fd24e7ac860d94e0c 100644 --- a/civicrm/CRM/Utils/Cache/Memcache.php +++ b/civicrm/CRM/Utils/Cache/Memcache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Cache_Memcache implements CRM_Utils_Cache_Interface { const DEFAULT_HOST = 'localhost'; diff --git a/civicrm/CRM/Utils/Cache/Memcached.php b/civicrm/CRM/Utils/Cache/Memcached.php index cc9e0566dafa9343c9e06ed3a48622a1ed16122e..b163aa5ce86f0a6f4f9464d84224d6aead951abf 100644 --- a/civicrm/CRM/Utils/Cache/Memcached.php +++ b/civicrm/CRM/Utils/Cache/Memcached.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Cache_Memcached implements CRM_Utils_Cache_Interface { const DEFAULT_HOST = 'localhost'; diff --git a/civicrm/CRM/Utils/Cache/NoCache.php b/civicrm/CRM/Utils/Cache/NoCache.php index a12e64ddb2c8f84841f9a1e8768b30e11e440db4..3d619ef0383b674efe1c4fb7cc8faead9fd469da 100644 --- a/civicrm/CRM/Utils/Cache/NoCache.php +++ b/civicrm/CRM/Utils/Cache/NoCache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Cache_NoCache implements CRM_Utils_Cache_Interface { diff --git a/civicrm/CRM/Utils/Cache/Redis.php b/civicrm/CRM/Utils/Cache/Redis.php index 2852935da94c95e3ff15d4a6a1c347ca6cf6ecef..6a1bb482be20c9546dacdcae1e437ff7af188115 100644 --- a/civicrm/CRM/Utils/Cache/Redis.php +++ b/civicrm/CRM/Utils/Cache/Redis.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Utils/Cache/SerializeCache.php b/civicrm/CRM/Utils/Cache/SerializeCache.php index 9a495c81e46b3e6fc54a0c3c83ffd45ac87f00c5..32c50dc301405706dbaf8df3278169ed166a1e79 100644 --- a/civicrm/CRM/Utils/Cache/SerializeCache.php +++ b/civicrm/CRM/Utils/Cache/SerializeCache.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Cache/SqlGroup.php b/civicrm/CRM/Utils/Cache/SqlGroup.php index c2f457640652d78007d9797c97c0f191730f09fe..d556fe7917c0ac59e8c1bb3d503a204441e5ee1c 100644 --- a/civicrm/CRM/Utils/Cache/SqlGroup.php +++ b/civicrm/CRM/Utils/Cache/SqlGroup.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Check.php b/civicrm/CRM/Utils/Check.php index 183c864a04b928bb40188709d4811553add0d718..71b93ece6bc9045c837d3fd6a534e9986217922e 100644 --- a/civicrm/CRM/Utils/Check.php +++ b/civicrm/CRM/Utils/Check.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check { // How often to run checks and notify admins about issues. diff --git a/civicrm/CRM/Utils/Check/Component.php b/civicrm/CRM/Utils/Check/Component.php index 667e4fd77d02ca391d22abbbe74c0e979cf2424f..b14a991f87782659e59f3f4963d484bcda981238 100644 --- a/civicrm/CRM/Utils/Check/Component.php +++ b/civicrm/CRM/Utils/Check/Component.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_Utils_Check_Component { diff --git a/civicrm/CRM/Utils/Check/Component/Case.php b/civicrm/CRM/Utils/Check/Component/Case.php index f6f5a9eb119997580298ddc1ffb164466b404792..d9cd06a88066f478dc69128f6b0b5ae9bbf7a2ba 100644 --- a/civicrm/CRM/Utils/Check/Component/Case.php +++ b/civicrm/CRM/Utils/Check/Component/Case.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_Case extends CRM_Utils_Check_Component { diff --git a/civicrm/CRM/Utils/Check/Component/Env.php b/civicrm/CRM/Utils/Check/Component/Env.php index 5492bc45e71553a5996992db41aa571b4aefff8a..9e115b45164362cfb75ada895a4a3d4528e7dc55 100644 --- a/civicrm/CRM/Utils/Check/Component/Env.php +++ b/civicrm/CRM/Utils/Check/Component/Env.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { @@ -208,14 +208,19 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { $messages = array(); list($domainEmailName, $domainEmailAddress) = CRM_Core_BAO_Domain::getNameAndEmail(TRUE); - $domain = CRM_Core_BAO_Domain::getDomain(); - $domainName = $domain->name; - $fixEmailUrl = CRM_Utils_System::url("civicrm/admin/domain", "action=update&reset=1"); + $domain = CRM_Core_BAO_Domain::getDomain(); + $domainName = $domain->name; + $fixEmailUrl = CRM_Utils_System::url("civicrm/admin/options/from_email_address", "&reset=1"); + $fixDomainName = CRM_Utils_System::url("civicrm/admin/domain", "action=update&reset=1"); if (!$domainEmailAddress || $domainEmailAddress == 'info@EXAMPLE.ORG') { if (!$domainName || $domainName == 'Default Domain Name') { - $msg = ts("Please enter your organization's <a href=\"%1\">name, primary address, and default FROM Email Address</a> (for system-generated emails).", - array(1 => $fixEmailUrl)); + $msg = ts("Please enter your organization's <a href=\"%1\">name, primary address </a> and <a href=\"%2\">default FROM Email Address </a> (for system-generated emails).", + array( + 1 => $fixDomainName, + 2 => $fixEmailUrl, + ) + ); } else { $msg = ts('Please enter a <a href="%1">default FROM Email Address</a> (for system-generated emails).', @@ -224,7 +229,7 @@ class CRM_Utils_Check_Component_Env extends CRM_Utils_Check_Component { } elseif (!$domainName || $domainName == 'Default Domain Name') { $msg = ts("Please enter your organization's <a href=\"%1\">name and primary address</a>.", - array(1 => $fixEmailUrl)); + array(1 => $fixDomainName)); } if (!empty($msg)) { diff --git a/civicrm/CRM/Utils/Check/Component/FinancialTypeAcls.php b/civicrm/CRM/Utils/Check/Component/FinancialTypeAcls.php index 3785d49d7921c137ac680c10e00d66b25ef9323f..e5a269043b943b6567bd81f3584e8d68803207a7 100644 --- a/civicrm/CRM/Utils/Check/Component/FinancialTypeAcls.php +++ b/civicrm/CRM/Utils/Check/Component/FinancialTypeAcls.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_FinancialTypeAcls extends CRM_Utils_Check_Component { diff --git a/civicrm/CRM/Utils/Check/Component/OptionGroups.php b/civicrm/CRM/Utils/Check/Component/OptionGroups.php index b8cd2225f2949139b08a86e60b8068105bde1fcf..ad5d1e635cb08ca40b7daecbca20da9f5e0515e0 100644 --- a/civicrm/CRM/Utils/Check/Component/OptionGroups.php +++ b/civicrm/CRM/Utils/Check/Component/OptionGroups.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_OptionGroups extends CRM_Utils_Check_Component { diff --git a/civicrm/CRM/Utils/Check/Component/PriceFields.php b/civicrm/CRM/Utils/Check/Component/PriceFields.php index a36d9a5584272f1e213641989e296b4d63c8b34d..ef4070a37a5774f8eadd2eb80a176323f9526d95 100644 --- a/civicrm/CRM/Utils/Check/Component/PriceFields.php +++ b/civicrm/CRM/Utils/Check/Component/PriceFields.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2016 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2016 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_PriceFields extends CRM_Utils_Check_Component { diff --git a/civicrm/CRM/Utils/Check/Component/Schema.php b/civicrm/CRM/Utils/Check/Component/Schema.php index 2ef1867deb4e5bdae51eab9771ecd1407925f4d0..128b14159f5f9bf11d5c56e657123bbaa5ee8e0b 100644 --- a/civicrm/CRM/Utils/Check/Component/Schema.php +++ b/civicrm/CRM/Utils/Check/Component/Schema.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2016 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2016 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_Schema extends CRM_Utils_Check_Component { diff --git a/civicrm/CRM/Utils/Check/Component/Security.php b/civicrm/CRM/Utils/Check/Component/Security.php index 7d763dd4b0c90225763a2b461a6b93c04ebb7225..2bae2a87e8a25ad7b6a8b245c8fcb91f6efc7f4d 100644 --- a/civicrm/CRM/Utils/Check/Component/Security.php +++ b/civicrm/CRM/Utils/Check/Component/Security.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_Security extends CRM_Utils_Check_Component { diff --git a/civicrm/CRM/Utils/Check/Component/Source.php b/civicrm/CRM/Utils/Check/Component/Source.php index 8371bc5861d124864665469a5235cce347135afb..391d1b0eda7835e20ba6ae73d472d54a8191c3d3 100644 --- a/civicrm/CRM/Utils/Check/Component/Source.php +++ b/civicrm/CRM/Utils/Check/Component/Source.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_Source extends CRM_Utils_Check_Component { @@ -50,6 +50,7 @@ class CRM_Utils_Check_Component_Source extends CRM_Utils_Check_Component { $files[] = '[civicrm.vendor]/pear/net_smtp/tests'; $files[] = '[civicrm.vendor]/pear/net_smtp/phpdoc.sh'; $files[] = '[civicrm.vendor]/phpoffice/phpword/samples'; + $files[] = '[civicrm.root]/templates/CRM/common/version.tpl'; return $files; } diff --git a/civicrm/CRM/Utils/Check/Component/Timestamps.php b/civicrm/CRM/Utils/Check/Component/Timestamps.php index 2f58fda64fca4d08495a719f8f124b79c59709c4..01d27467333565fba3fcf7a3a0d4ff2c8f92dfdf 100644 --- a/civicrm/CRM/Utils/Check/Component/Timestamps.php +++ b/civicrm/CRM/Utils/Check/Component/Timestamps.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Component_Timestamps extends CRM_Utils_Check_Component { diff --git a/civicrm/CRM/Utils/Check/Message.php b/civicrm/CRM/Utils/Check/Message.php index 5062307b181d50c2626b8359830728fa2fc704c7..916084ec82890ccb90e0cb0bc1eaaa3a0389146c 100644 --- a/civicrm/CRM/Utils/Check/Message.php +++ b/civicrm/CRM/Utils/Check/Message.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Check_Message { /** diff --git a/civicrm/CRM/Utils/Color.php b/civicrm/CRM/Utils/Color.php index 4742640ec297f769184738ac920ed599e843c7df..15c4bcadacd62dbde7b5b49626e47f5bda325949 100644 --- a/civicrm/CRM/Utils/Color.php +++ b/civicrm/CRM/Utils/Color.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/ConsoleTee.php b/civicrm/CRM/Utils/ConsoleTee.php index 9659ddbeba2a63475fd75dc2fefb34a9ceb79bae..fcac8fb3208c923df0333cfbe648628fddb1f8b7 100644 --- a/civicrm/CRM/Utils/ConsoleTee.php +++ b/civicrm/CRM/Utils/ConsoleTee.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Utils/Constant.php b/civicrm/CRM/Utils/Constant.php index e6a96a8baa061210d1258bf48f778297a6e62a82..453dbae1cb4c8175f89052edd504915127f575f9 100644 --- a/civicrm/CRM/Utils/Constant.php +++ b/civicrm/CRM/Utils/Constant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Crypt.php b/civicrm/CRM/Utils/Crypt.php index abb1e1e5aa901fbe8708e216dd42abcfb3bc5d2b..f4db692f54a7b5c55777495afea46a684294b26b 100644 --- a/civicrm/CRM/Utils/Crypt.php +++ b/civicrm/CRM/Utils/Crypt.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Crypt { diff --git a/civicrm/CRM/Utils/Date.php b/civicrm/CRM/Utils/Date.php index a533c16d93525cbe22fd7f3d9e0da2d23b4b78f1..82977dfc6e3fcb12c722b666b1cdc56ab5f7ef38 100644 --- a/civicrm/CRM/Utils/Date.php +++ b/civicrm/CRM/Utils/Date.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/DeprecatedUtils.php b/civicrm/CRM/Utils/DeprecatedUtils.php index d720fb1ffec967ededfa2ad1171798816c90e42b..2ff2231c547d901b24ea292d502076ea5365587e 100644 --- a/civicrm/CRM/Utils/DeprecatedUtils.php +++ b/civicrm/CRM/Utils/DeprecatedUtils.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /* diff --git a/civicrm/CRM/Utils/EnglishNumber.php b/civicrm/CRM/Utils/EnglishNumber.php new file mode 100644 index 0000000000000000000000000000000000000000..3673eceaf64a1d91c0892e799996d7bd349336aa --- /dev/null +++ b/civicrm/CRM/Utils/EnglishNumber.php @@ -0,0 +1,143 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2017 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +/** + * + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2017 + * $Id$ + * + * Utilities for rendering numbers as English. + * + * Note: This file may be used in a standalone environment. Please ensure it + * remains self-sufficient (without needing any external services). + */ +class CRM_Utils_EnglishNumber { + + protected static $lowNumbers = array( + 'Zero', + 'One', + 'Two', + 'Three', + 'Four', + 'Five', + 'Six', + 'Seven', + 'Eight', + 'Nine', + 'Ten', + 'Eleven', + 'Twelve', + 'Thirteen', + 'Fourteen', + 'Fifteen', + 'Sixteen', + 'Seventeen', + 'Eighteen', + 'Nineteen', + ); + + protected static $intervalsOfTen = array( + 9 => 'Ninety', + 8 => 'Eighty', + 7 => 'Seventy', + 6 => 'Sixty', + 5 => 'Fifty', + 4 => 'Forty', + 3 => 'Thirty', + 2 => 'Twenty', + ); + + /** + * @param int $num + * Ex: 12 or 54. + * @param mixed $default + * The default value to return if we cannot determine an English representation. + * If omitted or NULL, throws an exception. + * Tip: If you want to support high values as numerals, just pass the number again. + * @return string + * Ex: 'Twelve' or 'FiftyFour'. + */ + public static function toCamelCase($num, $default = NULL) { + if (isset(self::$lowNumbers[$num])) { + return self::$lowNumbers[$num]; + } + + $tens = (int) ($num / 10); + $last = $num % 10; + if (isset(self::$intervalsOfTen[$tens])) { + if ($last == 0) { + return self::$intervalsOfTen[$tens]; + } + else { + return self::$intervalsOfTen[$tens] . self::$lowNumbers[$last]; + } + } + + if ($default === NULL) { + throw new \RuntimeException("Cannot convert number to English: " . (int) $num); + } + else { + return $default; + } + } + + /** + * @param int $num + * Ex: 12 or 54. + * @param mixed $default + * The default value to return if we cannot determine an English representation. + * If omitted or NULL, throws an exception. + * Tip: If you want to support high values as numerals, just pass the number again. + * @return string + * Ex: 'twelve' or 'fifty-four'. + */ + public static function toHyphen($num, $default = NULL) { + if (isset(self::$lowNumbers[$num])) { + return strtolower(self::$lowNumbers[$num]); + } + + $tens = (int) ($num / 10); + $last = $num % 10; + if (isset(self::$intervalsOfTen[$tens])) { + if ($last == 0) { + return strtolower(self::$intervalsOfTen[$tens]); + } + else { + return strtolower(self::$intervalsOfTen[$tens]) . '-' . strtolower(self::$lowNumbers[$last]); + } + } + + if ($default === NULL) { + throw new \RuntimeException("Cannot convert number to English: " . (int) $num); + } + else { + return $default; + } + } + +} diff --git a/civicrm/CRM/Utils/FakeObject.php b/civicrm/CRM/Utils/FakeObject.php index f56f2d997776c228172e650d108e9ef5e62660a0..9c2d4f8bec9c5d54f14abcdded570cff0cd4d0d5 100644 --- a/civicrm/CRM/Utils/FakeObject.php +++ b/civicrm/CRM/Utils/FakeObject.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/File.php b/civicrm/CRM/Utils/File.php index b23cacf128c39ad5593a6e3d9e29f9edbb8fbeb6..6c759d79257a6ba4cdd7fe4b7832b1f102ce1fd5 100644 --- a/civicrm/CRM/Utils/File.php +++ b/civicrm/CRM/Utils/File.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -910,10 +910,16 @@ HTACCESS; $imageURL = CRM_Utils_String::unstupifyUrl($imageURL); parse_str(parse_url($imageURL, PHP_URL_QUERY), $query); - $path = CRM_Core_Config::singleton()->customFileUploadDir . $query['photo']; + $url = NULL; + if (!empty($query['photo'])) { + $path = CRM_Core_Config::singleton()->customFileUploadDir . $query['photo']; + } + else { + $path = $url = $imageURL; + } $mimeType = 'image/' . strtolower(pathinfo($path, PATHINFO_EXTENSION)); - return self::getFileURL($path, $mimeType); + return self::getFileURL($path, $mimeType, $url); } /** diff --git a/civicrm/CRM/Utils/Geocode.php b/civicrm/CRM/Utils/Geocode.php index 1d3b24a23491556239c724e0639bcc7975a319b5..c51e3b28840315e7893f5ed97ac63111e3978f0f 100644 --- a/civicrm/CRM/Utils/Geocode.php +++ b/civicrm/CRM/Utils/Geocode.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Geocode/Google.php b/civicrm/CRM/Utils/Geocode/Google.php index a5c21bca7d375642b3fd4744ac73e2abe1426bc5..271fdac5e26ab98807c60712a77baaae7ab16d16 100644 --- a/civicrm/CRM/Utils/Geocode/Google.php +++ b/civicrm/CRM/Utils/Geocode/Google.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/GeocodeProvider.php b/civicrm/CRM/Utils/GeocodeProvider.php index 5aa5a418a1febf835abdc1ae2245aa07a6cb05e4..5cc66ce55cae10103d4f8615856c99c9d6028757 100644 --- a/civicrm/CRM/Utils/GeocodeProvider.php +++ b/civicrm/CRM/Utils/GeocodeProvider.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_GeocodeProvider { diff --git a/civicrm/CRM/Utils/GlobalStack.php b/civicrm/CRM/Utils/GlobalStack.php index d8ceac8e57fbe5f5d14341aaeda130d666905fae..365ebc03df2e3ebaab4695804a01bf42cc06cf2b 100644 --- a/civicrm/CRM/Utils/GlobalStack.php +++ b/civicrm/CRM/Utils/GlobalStack.php @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Hook.php b/civicrm/CRM/Utils/Hook.php index 12e595fb5cce795ecf5424be3cb4fcc565685269..c6b99274fb118c6898e2fd999ff590d281b4050c 100644 --- a/civicrm/CRM/Utils/Hook.php +++ b/civicrm/CRM/Utils/Hook.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ abstract class CRM_Utils_Hook { @@ -1635,6 +1635,28 @@ abstract class CRM_Utils_Hook { ); } + /** + * Alter redirect. + * + * This hook is called when the browser is being re-directed and allows the url + * to be altered. + * + * @param \Psr\Http\Message\UriInterface $url + * @param array $context + * Additional information about context + * - output - if this is 'json' then it will return json. + * + * @return null + * the return value is ignored + */ + public static function alterRedirect(&$url, &$context) { + return self::singleton()->invoke(array('url', 'context'), $url, + $context, self::$_nullObject, + self::$_nullObject, self::$_nullObject, self::$_nullObject, + 'civicrm_alterRedirect' + ); + } + /** * @param $varType * @param $var diff --git a/civicrm/CRM/Utils/Hook/Backdrop.php b/civicrm/CRM/Utils/Hook/Backdrop.php index 54da310ecc14a9e4f5b281bc87a3d2a53241e321..e439e2f72508989d14faad6a21543a1d21e2fb68 100644 --- a/civicrm/CRM/Utils/Hook/Backdrop.php +++ b/civicrm/CRM/Utils/Hook/Backdrop.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_Backdrop extends CRM_Utils_Hook_DrupalBase { diff --git a/civicrm/CRM/Utils/Hook/Drupal.php b/civicrm/CRM/Utils/Hook/Drupal.php index cd60052a14bb141e216407c782bec03fd059619d..fcdefd2023db29be048a24831380bbeac00af10f 100644 --- a/civicrm/CRM/Utils/Hook/Drupal.php +++ b/civicrm/CRM/Utils/Hook/Drupal.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_Drupal extends CRM_Utils_Hook_DrupalBase { diff --git a/civicrm/CRM/Utils/Hook/Drupal6.php b/civicrm/CRM/Utils/Hook/Drupal6.php index c34ccc4e5519bc250c3f2802f9bb9c3ab64dabab..1ac57a19e6460f537b5dde742a4c1c2e8a3aabbd 100644 --- a/civicrm/CRM/Utils/Hook/Drupal6.php +++ b/civicrm/CRM/Utils/Hook/Drupal6.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_Drupal6 extends CRM_Utils_Hook_DrupalBase { } diff --git a/civicrm/CRM/Utils/Hook/Drupal8.php b/civicrm/CRM/Utils/Hook/Drupal8.php index 817df956dd44ac53afa9659156abb11199efe24b..0c505c16a0c4ba6e90a7a91959edf0139108bc8c 100644 --- a/civicrm/CRM/Utils/Hook/Drupal8.php +++ b/civicrm/CRM/Utils/Hook/Drupal8.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_Drupal8 extends CRM_Utils_Hook_DrupalBase { diff --git a/civicrm/CRM/Utils/Hook/DrupalBase.php b/civicrm/CRM/Utils/Hook/DrupalBase.php index 1c8c4eaa9000a2d5a75e20f1957aee220b817f3d..aeee7a0566a479828fea9f4f8d341f856bcbdb6a 100644 --- a/civicrm/CRM/Utils/Hook/DrupalBase.php +++ b/civicrm/CRM/Utils/Hook/DrupalBase.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_DrupalBase extends CRM_Utils_Hook { diff --git a/civicrm/CRM/Utils/Hook/Joomla.php b/civicrm/CRM/Utils/Hook/Joomla.php index 6d642fe3e444a2bea14bc45e4fcbc7478bcee79e..833c19effe01ca1422d7c5d8c3d5e65775d1c931 100644 --- a/civicrm/CRM/Utils/Hook/Joomla.php +++ b/civicrm/CRM/Utils/Hook/Joomla.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_Joomla extends CRM_Utils_Hook { /** diff --git a/civicrm/CRM/Utils/Hook/Soap.php b/civicrm/CRM/Utils/Hook/Soap.php index 685fd9ba3029f2027f453b5d398774bcae5f68fe..3fc76004aa0345331accd12a2d921e308a504c5b 100644 --- a/civicrm/CRM/Utils/Hook/Soap.php +++ b/civicrm/CRM/Utils/Hook/Soap.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_Soap extends CRM_Utils_Hook { /** diff --git a/civicrm/CRM/Utils/Hook/UnitTests.php b/civicrm/CRM/Utils/Hook/UnitTests.php index 14ef3fb6ebbcfc83b3fca341ad359d32a660ed51..420579af07a4bd416158788556695f03a890b8d3 100644 --- a/civicrm/CRM/Utils/Hook/UnitTests.php +++ b/civicrm/CRM/Utils/Hook/UnitTests.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_UnitTests extends CRM_Utils_Hook { diff --git a/civicrm/CRM/Utils/Hook/WordPress.php b/civicrm/CRM/Utils/Hook/WordPress.php index 74cd81f89073f6ce205daef6507723a9c5646435..60d5415517c0a7dd8ba68edea4e9cee4cd71ef43 100644 --- a/civicrm/CRM/Utils/Hook/WordPress.php +++ b/civicrm/CRM/Utils/Hook/WordPress.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Hook_WordPress extends CRM_Utils_Hook { diff --git a/civicrm/CRM/Utils/Http.php b/civicrm/CRM/Utils/Http.php index e17d162c35270626883de5a36bf8513ff4726bbd..5635600d2e81332b3ad06f82bec4172a7436da60 100644 --- a/civicrm/CRM/Utils/Http.php +++ b/civicrm/CRM/Utils/Http.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CiviCRM_Hook - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Http { diff --git a/civicrm/CRM/Utils/HttpClient.php b/civicrm/CRM/Utils/HttpClient.php index b0900f28a5ee09bf7f2b728219417fbbd1a84596..e49600dac2c8e15a2f807843cc903b078e71c3d0 100644 --- a/civicrm/CRM/Utils/HttpClient.php +++ b/civicrm/CRM/Utils/HttpClient.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -34,7 +34,7 @@ * want to deal with that so late in the 4.3 dev cycle. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_HttpClient { diff --git a/civicrm/CRM/Utils/ICalendar.php b/civicrm/CRM/Utils/ICalendar.php index bfec1e37b48838d4078aa61388b842f59949c7be..b9a84c95e04b4b45f4ff2911d464e3a3924c5b92 100644 --- a/civicrm/CRM/Utils/ICalendar.php +++ b/civicrm/CRM/Utils/ICalendar.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/JS.php b/civicrm/CRM/Utils/JS.php index 9a74d792977d91a3845a1817175310f198f63631..11525c2ca54afbda4c5ba9dfe3eac184d4b09909 100644 --- a/civicrm/CRM/Utils/JS.php +++ b/civicrm/CRM/Utils/JS.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Parse Javascript content and extract translatable strings. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_JS { /** diff --git a/civicrm/CRM/Utils/JSON.php b/civicrm/CRM/Utils/JSON.php index ffe9b35a206aed926711ac4ececd5889edfd5efb..5cb9330e86746e4ff56551e9164ed95e648d2fa0 100644 --- a/civicrm/CRM/Utils/JSON.php +++ b/civicrm/CRM/Utils/JSON.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Mail.php b/civicrm/CRM/Utils/Mail.php index 7f6f718149f56dce6b34a181d90a4981742e349e..fc9eaf6287ac8e9f7cea308ec983fcf8ee79392d 100644 --- a/civicrm/CRM/Utils/Mail.php +++ b/civicrm/CRM/Utils/Mail.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Mail { diff --git a/civicrm/CRM/Utils/Mail/EmailProcessor.php b/civicrm/CRM/Utils/Mail/EmailProcessor.php index eb66e2b21c0843e9efd53b9dad83ded85c3e2350..fb8953ea9fb09865fb82bb0697f368cefdf67428 100644 --- a/civicrm/CRM/Utils/Mail/EmailProcessor.php +++ b/civicrm/CRM/Utils/Mail/EmailProcessor.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ // we should consider moving these to the settings table diff --git a/civicrm/CRM/Utils/Mail/Incoming.php b/civicrm/CRM/Utils/Mail/Incoming.php index b2f138789f08f379c5814b7dc2789d28b3fb563e..94832e2d5cc13c2169d440582ddad393e63501e1 100644 --- a/civicrm/CRM/Utils/Mail/Incoming.php +++ b/civicrm/CRM/Utils/Mail/Incoming.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Mail_Incoming { const diff --git a/civicrm/CRM/Utils/Migrate/Export.php b/civicrm/CRM/Utils/Migrate/Export.php index c506e2aafaeb19524c88d21d8d0d6875e21ada03..e8e20764addd8b23e2319988c161f909fe1d3cf0 100644 --- a/civicrm/CRM/Utils/Migrate/Export.php +++ b/civicrm/CRM/Utils/Migrate/Export.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Migrate_Export { diff --git a/civicrm/CRM/Utils/Migrate/ExportJSON.php b/civicrm/CRM/Utils/Migrate/ExportJSON.php index 9b90e98ba1a227422278fe4c697127df699876d0..04f9ba641ef2b77528a45ec5ef1450627d66b0ad 100644 --- a/civicrm/CRM/Utils/Migrate/ExportJSON.php +++ b/civicrm/CRM/Utils/Migrate/ExportJSON.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Migrate_ExportJSON { const CHUNK_SIZE = 128; diff --git a/civicrm/CRM/Utils/Migrate/Import.php b/civicrm/CRM/Utils/Migrate/Import.php index d7905959015150413b68bdba19ad2473410d10b7..8a9cf99e74f8d0bdd0fc8d4868afb9ead7cac9d1 100644 --- a/civicrm/CRM/Utils/Migrate/Import.php +++ b/civicrm/CRM/Utils/Migrate/Import.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Migrate_Import { /** diff --git a/civicrm/CRM/Utils/Migrate/ImportJSON.php b/civicrm/CRM/Utils/Migrate/ImportJSON.php index 63a80e743483c736bbf071d77174756b4e81bd93..7dfe594b35798e4c4126e211c184d7c81fef37f7 100644 --- a/civicrm/CRM/Utils/Migrate/ImportJSON.php +++ b/civicrm/CRM/Utils/Migrate/ImportJSON.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Migrate_ImportJSON { diff --git a/civicrm/CRM/Utils/Money.php b/civicrm/CRM/Utils/Money.php index edabc904469ba0f3e717324fdbe08e987ccadcb9..555e7db6e41906f19a1c06eda0209e6b303e5982 100644 --- a/civicrm/CRM/Utils/Money.php +++ b/civicrm/CRM/Utils/Money.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Network.php b/civicrm/CRM/Utils/Network.php index 08fd3d4dd33c1e137375ff9c30ed5cf39bdf2b38..4b5bf0acf51561480dac7a24d0d6b9f3fcef73b5 100644 --- a/civicrm/CRM/Utils/Network.php +++ b/civicrm/CRM/Utils/Network.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Number.php b/civicrm/CRM/Utils/Number.php index f79cd1db1fbc54cbf6d641b4ce64e9f8a44b9a75..a16a1740ba450035f8e0a7cf6f45c9c0ed69367c 100644 --- a/civicrm/CRM/Utils/Number.php +++ b/civicrm/CRM/Utils/Number.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/OpenFlashChart.php b/civicrm/CRM/Utils/OpenFlashChart.php index a22e99755e6a46ae0299b7c5a0ffa4e08d43cc23..6401f4af888f0205ec6b3085e70fbebf037510e5 100644 --- a/civicrm/CRM/Utils/OpenFlashChart.php +++ b/civicrm/CRM/Utils/OpenFlashChart.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'packages/OpenFlashChart/php-ofc-library/open-flash-chart.php'; diff --git a/civicrm/CRM/Utils/OptionBag.php b/civicrm/CRM/Utils/OptionBag.php index 6e2ffe144d5035d35f4fdc3b47a964f713508803..6aebb568e678efe248b97b2082806515352bdfba 100644 --- a/civicrm/CRM/Utils/OptionBag.php +++ b/civicrm/CRM/Utils/OptionBag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/PDF/Document.php b/civicrm/CRM/Utils/PDF/Document.php index e2dac47b16e9f065ad163293b0082fb9c898d9c6..585a8ef14af72cff6cebc9b3945fd028fa2fffdb 100644 --- a/civicrm/CRM/Utils/PDF/Document.php +++ b/civicrm/CRM/Utils/PDF/Document.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'TbsZip/tbszip.php'; diff --git a/civicrm/CRM/Utils/PDF/Label.php b/civicrm/CRM/Utils/PDF/Label.php index e9a504004fa54dd6710cde6427e7f618e1ef0f82..5192ce75854d676090493d625f8da2a01d525674 100644 --- a/civicrm/CRM/Utils/PDF/Label.php +++ b/civicrm/CRM/Utils/PDF/Label.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * functionality and smarts to the base PDF_Label. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/PDF/Utils.php b/civicrm/CRM/Utils/PDF/Utils.php index 9b42f7fad84b2fe1d5e3fdcf6a97226d189c3890..4cdbef3368b158801f1e055e4c56a8dc56f7de59 100644 --- a/civicrm/CRM/Utils/PDF/Utils.php +++ b/civicrm/CRM/Utils/PDF/Utils.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ use Dompdf\Options; /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_PDF_Utils { diff --git a/civicrm/CRM/Utils/Pager.php b/civicrm/CRM/Utils/Pager.php index bd33490a8361b69a2eb9a5e7b650f9e27dd054a1..a2e8f3e74ae95eb008261e4bceca6ec98b7b7d0d 100644 --- a/civicrm/CRM/Utils/Pager.php +++ b/civicrm/CRM/Utils/Pager.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/PagerAToZ.php b/civicrm/CRM/Utils/PagerAToZ.php index 3c605e6edee49273dc97c7b89fdbefbc40990c6e..731b545d38d227a5e5962b1e9c3e610dc4fd82ba 100644 --- a/civicrm/CRM/Utils/PagerAToZ.php +++ b/civicrm/CRM/Utils/PagerAToZ.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/PseudoConstant.php b/civicrm/CRM/Utils/PseudoConstant.php index 6ffc725adfcc1ebfd6b541b007ccc7b2e454a093..c77237acde34ecf4f8cf4cb791041c34a38a5fb5 100644 --- a/civicrm/CRM/Utils/PseudoConstant.php +++ b/civicrm/CRM/Utils/PseudoConstant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/QueryFormatter.php b/civicrm/CRM/Utils/QueryFormatter.php index fb4cae82b8348f76ca663c8bed22b1810ca46c1f..9bcbed6e1d8b71f125ca2792beb4b1f16aad99a9 100644 --- a/civicrm/CRM/Utils/QueryFormatter.php +++ b/civicrm/CRM/Utils/QueryFormatter.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/REST.php b/civicrm/CRM/Utils/REST.php index 7802c4777904f3dba53c4d1ccd281ee19762f794..df5382746f9c1216aaf600eb4dad15726e41ad2c 100644 --- a/civicrm/CRM/Utils/REST.php +++ b/civicrm/CRM/Utils/REST.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class handles all REST client requests. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_REST { diff --git a/civicrm/CRM/Utils/ReCAPTCHA.php b/civicrm/CRM/Utils/ReCAPTCHA.php index aa27d26dd6ba860b6a23215f8be9f4caad7b9cf3..bf556b7e59d3692b9d355393eb2e2f4da45046f5 100644 --- a/civicrm/CRM/Utils/ReCAPTCHA.php +++ b/civicrm/CRM/Utils/ReCAPTCHA.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_ReCAPTCHA { diff --git a/civicrm/CRM/Utils/Recent.php b/civicrm/CRM/Utils/Recent.php index b89e775cc1e42499e8ce42b55e400ab50028578d..7070ecb907028c6b0233f24ec8dda40c3b4ca426 100644 --- a/civicrm/CRM/Utils/Recent.php +++ b/civicrm/CRM/Utils/Recent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Request.php b/civicrm/CRM/Utils/Request.php index ad6bf094e593f233cd3732b32a072ca3a282c715..d1afbe876d161e4030b87fe96df1324bbb444bbe 100644 --- a/civicrm/CRM/Utils/Request.php +++ b/civicrm/CRM/Utils/Request.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Rule.php b/civicrm/CRM/Utils/Rule.php index 0c6473c70a67eab65bb02c815b58fdce38a45624..ada29634f103681acd754c6a7437286c99804876 100644 --- a/civicrm/CRM/Utils/Rule.php +++ b/civicrm/CRM/Utils/Rule.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'HTML/QuickForm/Rule/Email.php'; diff --git a/civicrm/CRM/Utils/SQL.php b/civicrm/CRM/Utils/SQL.php index dba0c9ebe82c11716372070d138222e07af30a7a..2f50c8c6f03a28fcbb1d8b7016eb1a26606dd232 100644 --- a/civicrm/CRM/Utils/SQL.php +++ b/civicrm/CRM/Utils/SQL.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * Just another collection of static utils functions. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_SQL { diff --git a/civicrm/CRM/Utils/SQL/Select.php b/civicrm/CRM/Utils/SQL/Select.php index 8473d34eea6f0fd69403b04c377a52072eadc90b..f05e2d6d8a673d0e002a53ee1087b36e8c1e1b27 100644 --- a/civicrm/CRM/Utils/SQL/Select.php +++ b/civicrm/CRM/Utils/SQL/Select.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -79,7 +79,7 @@ * @endcode * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_SQL_Select implements ArrayAccess { diff --git a/civicrm/CRM/Utils/Signer.php b/civicrm/CRM/Utils/Signer.php index bd825d0a6ed7b1519a28bdb7d7669e206dc30b31..15e4b510ea530db61e760a8e8b50777deeddf6de 100644 --- a/civicrm/CRM/Utils/Signer.php +++ b/civicrm/CRM/Utils/Signer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/SoapServer.php b/civicrm/CRM/Utils/SoapServer.php index 5ab5672c34461641027e59a451786cfe0dbbc53e..2a934e3cb7483cfd3eb5ec3bbc554daf95993e7e 100644 --- a/civicrm/CRM/Utils/SoapServer.php +++ b/civicrm/CRM/Utils/SoapServer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ * This class handles all SOAP client requests. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_SoapServer { diff --git a/civicrm/CRM/Utils/Sort.php b/civicrm/CRM/Utils/Sort.php index 991cced62a1e25e05e4b0000628ddd60ed3e512d..47cfb1c033d813565757cde7558e8a02ac39cf18 100644 --- a/civicrm/CRM/Utils/Sort.php +++ b/civicrm/CRM/Utils/Sort.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -35,7 +35,7 @@ * if introducing additional functionality * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Sort { diff --git a/civicrm/CRM/Utils/String.php b/civicrm/CRM/Utils/String.php index 9b0fdcbf07b64338e458aba4e986f0423bdec7f9..bb715f37dd37ed1936043a0b428c877c6d7b99db 100644 --- a/civicrm/CRM/Utils/String.php +++ b/civicrm/CRM/Utils/String.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ require_once 'HTML/QuickForm/Rule/Email.php'; diff --git a/civicrm/CRM/Utils/System.php b/civicrm/CRM/Utils/System.php index a253b091c047da1afb7db6ade020221cbc73312d..ca0f9a9b9fcb86f336c1c98a85bd7cc6b856ce98 100644 --- a/civicrm/CRM/Utils/System.php +++ b/civicrm/CRM/Utils/System.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -433,8 +433,10 @@ class CRM_Utils_System { * * @param string $url * The URL to provide to the browser via the Location header. + * @param array $context + * Optional additional information for the hook. */ - public static function redirect($url = NULL) { + public static function redirect($url = NULL, $context = []) { if (!$url) { $url = self::url('civicrm/dashboard', 'reset=1'); } @@ -442,8 +444,14 @@ class CRM_Utils_System { // this is kinda hackish but not sure how to do it right $url = str_replace('&', '&', $url); + $context['output'] = CRM_Utils_Array::value('snippet', $_GET); + + $parsedUrl = CRM_Utils_Url::parseUrl($url); + CRM_Utils_Hook::alterRedirect($parsedUrl, $context); + $url = CRM_Utils_Url::unparseUrl($parsedUrl); + // If we are in a json context, respond appropriately - if (CRM_Utils_Array::value('snippet', $_GET) === 'json') { + if ($context['output'] === 'json') { CRM_Core_Page_AJAX::returnJsonResponse(array( 'status' => 'redirect', 'userContext' => $url, @@ -1074,25 +1082,12 @@ class CRM_Utils_System { if (!$version) { $verFile = implode(DIRECTORY_SEPARATOR, - array(dirname(__FILE__), '..', '..', 'civicrm-version.php') + array(dirname(__FILE__), '..', '..', 'xml', 'version.xml') ); if (file_exists($verFile)) { - require_once $verFile; - if (function_exists('civicrmVersion')) { - $info = civicrmVersion(); - $version = $info['version']; - } - } - else { - // svn installs don't have version.txt by default. In that case version.xml should help - - $verFile = implode(DIRECTORY_SEPARATOR, - array(dirname(__FILE__), '..', '..', 'xml', 'version.xml') - ); - if (file_exists($verFile)) { - $str = file_get_contents($verFile); - $xmlObj = simplexml_load_string($str); - $version = (string) $xmlObj->version_no; - } + $str = file_get_contents($verFile); + $xmlObj = simplexml_load_string($str); + $version = (string) $xmlObj->version_no; } // pattern check diff --git a/civicrm/CRM/Utils/System/Backdrop.php b/civicrm/CRM/Utils/System/Backdrop.php index 3b96bfbd0252729f59dd28c704b4ac9d88ff69af..ab0a2963da9fe519f36ba30a11292b9845768bf5 100644 --- a/civicrm/CRM/Utils/System/Backdrop.php +++ b/civicrm/CRM/Utils/System/Backdrop.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/System/Drupal.php b/civicrm/CRM/Utils/System/Drupal.php index 6a4d669999a5e549d9afb0ddb6100516ce0a6f1b..7dd4952051845d1d6df5cbc0cd06f731697bf82c 100644 --- a/civicrm/CRM/Utils/System/Drupal.php +++ b/civicrm/CRM/Utils/System/Drupal.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -853,10 +853,12 @@ AND u.status = 1 * Similar to drupal_exit(). */ public function onCiviExit() { - if (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update') { - module_invoke_all('exit'); + if (function_exists('module_invoke_all')) { + if (!defined('MAINTENANCE_MODE') || MAINTENANCE_MODE != 'update') { + module_invoke_all('exit'); + } + drupal_session_commit(); } - drupal_session_commit(); } } diff --git a/civicrm/CRM/Utils/System/Drupal6.php b/civicrm/CRM/Utils/System/Drupal6.php index 721855e111bb1bfd3a195c9785773a77f0a36471..df8eec7568caa222d410726bce7b4e92484f27d8 100644 --- a/civicrm/CRM/Utils/System/Drupal6.php +++ b/civicrm/CRM/Utils/System/Drupal6.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** @@ -763,7 +763,7 @@ class CRM_Utils_System_Drupal6 extends CRM_Utils_System_DrupalBase { // to the doc for the overridden method, ought to be returned as a region string // (e.g., America/Havana). if (strlen($timezone)) { - $timezone = timezone_name_from_abbr("", (int) $timezone, 0); + $timezone = timezone_name_from_abbr("", (int) $timezone); } if (!$timezone) { diff --git a/civicrm/CRM/Utils/System/Drupal8.php b/civicrm/CRM/Utils/System/Drupal8.php index 9c2eb667a5507ff50d986456ee5028399003a473..75f3f99701ad0b6c002678d7b0c289b760486860 100644 --- a/civicrm/CRM/Utils/System/Drupal8.php +++ b/civicrm/CRM/Utils/System/Drupal8.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/System/DrupalBase.php b/civicrm/CRM/Utils/System/DrupalBase.php index b54b6761aba2565a27dc20295684dbb8c6d265f7..ecc8ebbfe3a4616b2a170bc5d8a3e32e92aeea78 100644 --- a/civicrm/CRM/Utils/System/DrupalBase.php +++ b/civicrm/CRM/Utils/System/DrupalBase.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Utils/System/Joomla.php b/civicrm/CRM/Utils/System/Joomla.php index 526438f4dffa08845f08bf1195264420f4ef45cc..4b8920252528dca1b201e9a1de537c7906416bc9 100644 --- a/civicrm/CRM/Utils/System/Joomla.php +++ b/civicrm/CRM/Utils/System/Joomla.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/System/Soap.php b/civicrm/CRM/Utils/System/Soap.php index b6233ae986605c78478716c9ed31aa0e9c24dea3..c28a634cb0fee67533ec304b42ca1096bf25ab12 100644 --- a/civicrm/CRM/Utils/System/Soap.php +++ b/civicrm/CRM/Utils/System/Soap.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/System/UnitTests.php b/civicrm/CRM/Utils/System/UnitTests.php index 5d34bc6713a8b3806156cd1ffd884d02cef1c068..5b55f736b3faedcb9614feaeb1755e7b043612bf 100644 --- a/civicrm/CRM/Utils/System/UnitTests.php +++ b/civicrm/CRM/Utils/System/UnitTests.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php index ce6c322a5e241dd90a6eb8da6bef6b2254e9fef3..7ee488bed543799dba7eaa23d1ee7cb04a6d63a8 100644 --- a/civicrm/CRM/Utils/System/WordPress.php +++ b/civicrm/CRM/Utils/System/WordPress.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Utils/SystemLogger.php b/civicrm/CRM/Utils/SystemLogger.php index dd6ba99546f99be88a739a1c4a1125ab032df4ca..62ba50b957877fc36a7cde188e711b6410baa4d1 100644 --- a/civicrm/CRM/Utils/SystemLogger.php +++ b/civicrm/CRM/Utils/SystemLogger.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_SystemLogger extends Psr\Log\AbstractLogger implements \Psr\Log\LoggerInterface { /** diff --git a/civicrm/CRM/Utils/Time.php b/civicrm/CRM/Utils/Time.php index 639f234d9b406a410b1b4a2b5f7d203273e62ee1..b52a4253c17e9b03b237540db1d05e755266f0a2 100644 --- a/civicrm/CRM/Utils/Time.php +++ b/civicrm/CRM/Utils/Time.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Token.php b/civicrm/CRM/Utils/Token.php index be56cce19665da11b249222d95c7a57d4361ee35..c2cbd5fbfc8eb6c499f3ccbfe73d9a41cd5e5c88 100644 --- a/civicrm/CRM/Utils/Token.php +++ b/civicrm/CRM/Utils/Token.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/CRM/Utils/Type.php b/civicrm/CRM/Utils/Type.php index 29b05579aec49e98fe344da20a966fad9a636fcb..d96a0c4a13098c4c348424db870575550802eed7 100644 --- a/civicrm/CRM/Utils/Type.php +++ b/civicrm/CRM/Utils/Type.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Type { const diff --git a/civicrm/CRM/Utils/Url.php b/civicrm/CRM/Utils/Url.php new file mode 100644 index 0000000000000000000000000000000000000000..0c97ae48bafe2be7aeff36392e9c594b90a8909b --- /dev/null +++ b/civicrm/CRM/Utils/Url.php @@ -0,0 +1,55 @@ +<?php +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2017 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ + */ + +use GuzzleHttp\Psr7\Uri; +use Psr\Http\Message\UriInterface; + +class CRM_Utils_Url { + + /** + * Parse url to a UriInterface. + * + * @param string $url + * + * @return UriInterface + */ + public static function parseUrl($url) { + return new Uri($url); + } + + /** + * Unparse url back to a string. + * + * @param UriInterface $parsed + * + * @return string + */ + public static function unparseUrl(UriInterface $parsed) { + return $parsed->__toString(); + } + +} diff --git a/civicrm/CRM/Utils/Verp.php b/civicrm/CRM/Utils/Verp.php index 0ecf6050c2abfb083e57289db1e151c18b961259..e00add68af810847580d4a2b7cc580a3c799960c 100644 --- a/civicrm/CRM/Utils/Verp.php +++ b/civicrm/CRM/Utils/Verp.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ * headers. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Verp { /* Mapping of reserved characters to hex codes */ diff --git a/civicrm/CRM/Utils/VersionCheck.php b/civicrm/CRM/Utils/VersionCheck.php index 204e5e34430ba9c9116e528210c77ea32692d494..ce14ef4a121f63dbc73f929a7844e197cec001c5 100644 --- a/civicrm/CRM/Utils/VersionCheck.php +++ b/civicrm/CRM/Utils/VersionCheck.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_VersionCheck { const diff --git a/civicrm/CRM/Utils/VisualBundle.php b/civicrm/CRM/Utils/VisualBundle.php index 27128b1760963eec73771bedda33c435eaa0283e..fb0791210907177fcd0a1b034e88e330ced8c998 100644 --- a/civicrm/CRM/Utils/VisualBundle.php +++ b/civicrm/CRM/Utils/VisualBundle.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ * in the `CRM.visual` namespace. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * $Id$ * */ diff --git a/civicrm/CRM/Utils/Weight.php b/civicrm/CRM/Utils/Weight.php index d514351845db8efdee7fae25b8e9f41ab4379158..48fe4f47c6a330daa15c9f51850144184470a9b2 100644 --- a/civicrm/CRM/Utils/Weight.php +++ b/civicrm/CRM/Utils/Weight.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/CRM/Utils/Wrapper.php b/civicrm/CRM/Utils/Wrapper.php index 2716dd1f6780a73c90856bea4ec3e2448523807e..6f8ec00b028e427ff91e7b67c8a8a43243d6649a 100644 --- a/civicrm/CRM/Utils/Wrapper.php +++ b/civicrm/CRM/Utils/Wrapper.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -33,7 +33,7 @@ * run method as explained below. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_Wrapper { diff --git a/civicrm/CRM/Utils/XML.php b/civicrm/CRM/Utils/XML.php index 178e6bf6ab972e1989b3bb527be095976af069c5..803c923069365a39d9b399a3e074209d0f7b1d70 100644 --- a/civicrm/CRM/Utils/XML.php +++ b/civicrm/CRM/Utils/XML.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,7 +27,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class CRM_Utils_XML { diff --git a/civicrm/CRM/Utils/Zip.php b/civicrm/CRM/Utils/Zip.php index e901e0b690e82054a9ef48b301347245431ae0c6..cd06f99cede518b9f9310bf0a8149a5e042284f7 100644 --- a/civicrm/CRM/Utils/Zip.php +++ b/civicrm/CRM/Utils/Zip.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ /** diff --git a/civicrm/Civi/API/Api3SelectQuery.php b/civicrm/Civi/API/Api3SelectQuery.php index f763e30aa0c9db5507f78c0c17a46a37e0923076..99a77ae5a43283d9a0aa9f04847b817e6e34b215 100644 --- a/civicrm/Civi/API/Api3SelectQuery.php +++ b/civicrm/Civi/API/Api3SelectQuery.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Event/AuthorizeEvent.php b/civicrm/Civi/API/Event/AuthorizeEvent.php index 418642cb65d87b8bf203548f4f4d0e66dabd76e1..11a86467ec2908e064e88705011fb65d95bd709c 100644 --- a/civicrm/Civi/API/Event/AuthorizeEvent.php +++ b/civicrm/Civi/API/Event/AuthorizeEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Event/Event.php b/civicrm/Civi/API/Event/Event.php index 34e091b52dff9d46e0700693641d740286a1d43f..96b95818906de3ef0eb695ec8908e4b86800e8d1 100644 --- a/civicrm/Civi/API/Event/Event.php +++ b/civicrm/Civi/API/Event/Event.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Event/ExceptionEvent.php b/civicrm/Civi/API/Event/ExceptionEvent.php index 2c04398864db382c454b835b9ea92ea72d012f31..e35dec04e01a2598415773798fd613ab4eb2cbc8 100644 --- a/civicrm/Civi/API/Event/ExceptionEvent.php +++ b/civicrm/Civi/API/Event/ExceptionEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Event/PrepareEvent.php b/civicrm/Civi/API/Event/PrepareEvent.php index c0a59c88e253369a448123e92b7bc47e775a0841..53ec98edfcb85626520f6df85384542608684b56 100644 --- a/civicrm/Civi/API/Event/PrepareEvent.php +++ b/civicrm/Civi/API/Event/PrepareEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Event/ResolveEvent.php b/civicrm/Civi/API/Event/ResolveEvent.php index 75d8192d248b5521708f10ef5b1f17d26928c003..fb10018e8018cbc2e543cf81a702da4b8f57ba4c 100644 --- a/civicrm/Civi/API/Event/ResolveEvent.php +++ b/civicrm/Civi/API/Event/ResolveEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Event/RespondEvent.php b/civicrm/Civi/API/Event/RespondEvent.php index a151280b6059927e8d6ac4752246d71d7ed1abeb..62c8be300649d3956e1e385da36fdd449435f8e8 100644 --- a/civicrm/Civi/API/Event/RespondEvent.php +++ b/civicrm/Civi/API/Event/RespondEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Events.php b/civicrm/Civi/API/Events.php index 3f14a2ef5cccad247f86db57b0391fc8df6d1c7c..37ca470dafad49200b50dbd4d6449124f3bd8162 100644 --- a/civicrm/Civi/API/Events.php +++ b/civicrm/Civi/API/Events.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Kernel.php b/civicrm/Civi/API/Kernel.php index 022de94f5a785cd4b8e7b95a04b646d6943c3783..8e541d82a5900b422f7ed42f0a8bff4d3604b75b 100644 --- a/civicrm/Civi/API/Kernel.php +++ b/civicrm/Civi/API/Kernel.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -35,7 +35,7 @@ use Civi\API\Provider\ProviderInterface; /** * @package Civi - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class Kernel { diff --git a/civicrm/Civi/API/Provider/AdhocProvider.php b/civicrm/Civi/API/Provider/AdhocProvider.php index 55c4df3b2b3bc5a64c940d05ec8fd5a50f155fba..3a9e5352d2de1fe681ab181df6e62a4ca99bfd35 100644 --- a/civicrm/Civi/API/Provider/AdhocProvider.php +++ b/civicrm/Civi/API/Provider/AdhocProvider.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Provider/MagicFunctionProvider.php b/civicrm/Civi/API/Provider/MagicFunctionProvider.php index 404c2de2bc79e92733974c3cd0e4909bfdb8fac8..4e08841fb0757cfe47bcbf2ce73108db46e61615 100644 --- a/civicrm/Civi/API/Provider/MagicFunctionProvider.php +++ b/civicrm/Civi/API/Provider/MagicFunctionProvider.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Provider/ProviderInterface.php b/civicrm/Civi/API/Provider/ProviderInterface.php index 71669fd41e4f9ca8e31abb30987a1a6cf21442fd..b671052c0d447d8ea77e667e74b9b9617341a429 100644 --- a/civicrm/Civi/API/Provider/ProviderInterface.php +++ b/civicrm/Civi/API/Provider/ProviderInterface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Provider/ReflectionProvider.php b/civicrm/Civi/API/Provider/ReflectionProvider.php index e16737e0d7e09857066976f608ed02e2bc5ad497..bc263cbf6b6bc7807ae59bb5636e204f2e99cf84 100644 --- a/civicrm/Civi/API/Provider/ReflectionProvider.php +++ b/civicrm/Civi/API/Provider/ReflectionProvider.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Provider/StaticProvider.php b/civicrm/Civi/API/Provider/StaticProvider.php index dc94db7090d4001e9ce12bda3931227a5bd1325c..27e14889f6da1a76d5232605b453950b75c72865 100644 --- a/civicrm/Civi/API/Provider/StaticProvider.php +++ b/civicrm/Civi/API/Provider/StaticProvider.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Request.php b/civicrm/Civi/API/Request.php index d44f769a6b80b31346253dd1f46a3dc2b7681400..fbee414d842c51f6bd4a390a9a6bab0d1658cd1a 100644 --- a/civicrm/Civi/API/Request.php +++ b/civicrm/Civi/API/Request.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/SelectQuery.php b/civicrm/Civi/API/SelectQuery.php index b052ec41898880540004e8ce871ad9c08b20e118..05951a0cd732a5d4fb26558bf9d175f899927877 100644 --- a/civicrm/Civi/API/SelectQuery.php +++ b/civicrm/Civi/API/SelectQuery.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Subscriber/APIv3SchemaAdapter.php b/civicrm/Civi/API/Subscriber/APIv3SchemaAdapter.php index d170827c93df0824212183180fd613435d639a6a..22d406babecacaf3d971526d5fa9239654936377 100644 --- a/civicrm/Civi/API/Subscriber/APIv3SchemaAdapter.php +++ b/civicrm/Civi/API/Subscriber/APIv3SchemaAdapter.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Subscriber/ChainSubscriber.php b/civicrm/Civi/API/Subscriber/ChainSubscriber.php index de15a781de4cd20440547a4f0cd05944a3cb7b49..7a2b8bd630a2a3f74ab84a5146a376e63531aed5 100644 --- a/civicrm/Civi/API/Subscriber/ChainSubscriber.php +++ b/civicrm/Civi/API/Subscriber/ChainSubscriber.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php b/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php index ec6c8c01f5bbc254ca24395fe972ea6258bd92c4..0e3c98af37fb8826c18ac72d56a33db6e3735d23 100644 --- a/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php +++ b/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Subscriber/I18nSubscriber.php b/civicrm/Civi/API/Subscriber/I18nSubscriber.php index 85f5de2142ff150928d1e49bd4592e3b5e15c873..6ad8d1a3fff0733d40a10d483fae8c30b26cb78d 100644 --- a/civicrm/Civi/API/Subscriber/I18nSubscriber.php +++ b/civicrm/Civi/API/Subscriber/I18nSubscriber.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Subscriber/PermissionCheck.php b/civicrm/Civi/API/Subscriber/PermissionCheck.php index f9332727254eb81607f4d77349f7e963353e5e93..e5fd68b1ff8f053efb2a48728ea00789bd24b0dd 100644 --- a/civicrm/Civi/API/Subscriber/PermissionCheck.php +++ b/civicrm/Civi/API/Subscriber/PermissionCheck.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Subscriber/TransactionSubscriber.php b/civicrm/Civi/API/Subscriber/TransactionSubscriber.php index f33e742964d0218e042d440b1cd7124ab39adf4a..04a57bff87e0eb95ae190154ad8768844c5ccac3 100644 --- a/civicrm/Civi/API/Subscriber/TransactionSubscriber.php +++ b/civicrm/Civi/API/Subscriber/TransactionSubscriber.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Subscriber/WhitelistSubscriber.php b/civicrm/Civi/API/Subscriber/WhitelistSubscriber.php index a32117b3e1d3c392515e99a73222a431b58cc88e..64a0b3c7e03d7ab83ee11dbb0fb42a4e43a28dbb 100644 --- a/civicrm/Civi/API/Subscriber/WhitelistSubscriber.php +++ b/civicrm/Civi/API/Subscriber/WhitelistSubscriber.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -38,7 +38,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; * whitelist, then it generates an error. * * @package Civi - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class WhitelistSubscriber implements EventSubscriberInterface { diff --git a/civicrm/Civi/API/Subscriber/WrapperAdapter.php b/civicrm/Civi/API/Subscriber/WrapperAdapter.php index 9340b3b720ebb1d24b4904ed66a15f2312cd2ba2..d3da629242edf735defdd74fead67361dea09961 100644 --- a/civicrm/Civi/API/Subscriber/WrapperAdapter.php +++ b/civicrm/Civi/API/Subscriber/WrapperAdapter.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/Subscriber/XDebugSubscriber.php b/civicrm/Civi/API/Subscriber/XDebugSubscriber.php index 7eab69c7beb8fb31935a517a95c6c991e4ecde9c..b09b329d852895584ff1885b27cb46dcbcb74195 100644 --- a/civicrm/Civi/API/Subscriber/XDebugSubscriber.php +++ b/civicrm/Civi/API/Subscriber/XDebugSubscriber.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/API/WhitelistRule.php b/civicrm/Civi/API/WhitelistRule.php index c18c712a936bba7e0109711d34e7f20d298db370..fa22234dd9fbe09250fa69909c935b6f4ad46edc 100644 --- a/civicrm/Civi/API/WhitelistRule.php +++ b/civicrm/Civi/API/WhitelistRule.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/ActionSchedule/Mapping.php b/civicrm/Civi/ActionSchedule/Mapping.php index dd25ee7af3803d7cfdaddff1786fd0de8a854d3f..2d51e3aab50caf1268e442136949dc5f7d26a57c 100644 --- a/civicrm/Civi/ActionSchedule/Mapping.php +++ b/civicrm/Civi/ActionSchedule/Mapping.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/ActionSchedule/MappingInterface.php b/civicrm/Civi/ActionSchedule/MappingInterface.php index 6dc726dc8a9406cb2bb37bc55bc5ceb456edacee..30636948dbd6d18ac7b8b33b12c82073e1c4e4a3 100644 --- a/civicrm/Civi/ActionSchedule/MappingInterface.php +++ b/civicrm/Civi/ActionSchedule/MappingInterface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/ActionSchedule/RecipientBuilder.php b/civicrm/Civi/ActionSchedule/RecipientBuilder.php index 87b942dc5ac3a775e009903613da06810ebc857b..7086ad63cf36e9ef0a1a91667c69eab7864f84a6 100644 --- a/civicrm/Civi/ActionSchedule/RecipientBuilder.php +++ b/civicrm/Civi/ActionSchedule/RecipientBuilder.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/CCase/Analyzer.php b/civicrm/Civi/CCase/Analyzer.php index bd67838321d8ab798bce271b732d14104c72ebe2..34314fd7466391ef9ccc1f9b6e6fdee427cd663d 100644 --- a/civicrm/Civi/CCase/Analyzer.php +++ b/civicrm/Civi/CCase/Analyzer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/CCase/CaseChangeListener.php b/civicrm/Civi/CCase/CaseChangeListener.php index 2236affdcd482923a8710834ae5ebc49e73704fb..15efa0dcc8d7cf15a83ee1c79c822e8c94a62085 100644 --- a/civicrm/Civi/CCase/CaseChangeListener.php +++ b/civicrm/Civi/CCase/CaseChangeListener.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/CCase/Event/CaseChangeEvent.php b/civicrm/Civi/CCase/Event/CaseChangeEvent.php index 00feba2c01d6789af7e8b941908cf70af158734c..cb6c0a270c3c078b1fd1b6de48fa7846150451ff 100644 --- a/civicrm/Civi/CCase/Event/CaseChangeEvent.php +++ b/civicrm/Civi/CCase/Event/CaseChangeEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/CCase/Events.php b/civicrm/Civi/CCase/Events.php index 557c8c08938160facecae9c338133978d96ec5b3..1e7380006952aea252aeece635400b255b393dfa 100644 --- a/civicrm/Civi/CCase/Events.php +++ b/civicrm/Civi/CCase/Events.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/DAO/Event/PostDelete.php b/civicrm/Civi/Core/DAO/Event/PostDelete.php index abf3df00de7a4d90fe42c2566d492b4ef0e4104a..333b313d2a77a804d05cfd00d9ab9d1b578b3bb3 100644 --- a/civicrm/Civi/Core/DAO/Event/PostDelete.php +++ b/civicrm/Civi/Core/DAO/Event/PostDelete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/DAO/Event/PostUpdate.php b/civicrm/Civi/Core/DAO/Event/PostUpdate.php index 881f194200bddfb22c69ec967cbdaa9639eab826..1949673f63e7e1848bdb57f3220552097a857f8f 100644 --- a/civicrm/Civi/Core/DAO/Event/PostUpdate.php +++ b/civicrm/Civi/Core/DAO/Event/PostUpdate.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/DAO/Event/PreDelete.php b/civicrm/Civi/Core/DAO/Event/PreDelete.php index 7485c508c6666c36afdf42196591d8af8e460242..36d6dce987cfc7477163e53bdf53b8077cecfe1a 100644 --- a/civicrm/Civi/Core/DAO/Event/PreDelete.php +++ b/civicrm/Civi/Core/DAO/Event/PreDelete.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/DatabaseInitializer.php b/civicrm/Civi/Core/DatabaseInitializer.php index 7cb31fe1d5c34cb06257d6a138f85a18e34ff6f1..bcb9a0cb548f1b45a04443d2413c4946989823af 100644 --- a/civicrm/Civi/Core/DatabaseInitializer.php +++ b/civicrm/Civi/Core/DatabaseInitializer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Event/GenericHookEvent.php b/civicrm/Civi/Core/Event/GenericHookEvent.php index 9c47029c9b4d0b27bcf9a93c724bdc9f80479f15..745f10bd194ece2fb7d2f8215c905ce25ca5ead9 100644 --- a/civicrm/Civi/Core/Event/GenericHookEvent.php +++ b/civicrm/Civi/Core/Event/GenericHookEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Event/PostEvent.php b/civicrm/Civi/Core/Event/PostEvent.php index dfbce6582c7c8b8c9cbd9873c302c536de14a4c1..f9c0c33b0ee71bdafbff87546e1cc89c47ded726 100644 --- a/civicrm/Civi/Core/Event/PostEvent.php +++ b/civicrm/Civi/Core/Event/PostEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Event/PreEvent.php b/civicrm/Civi/Core/Event/PreEvent.php index af01c623c493a8b85d83f5928ae2887c3de7a53e..284c8ea29f122096bdde19a31363e071a7ca12a2 100644 --- a/civicrm/Civi/Core/Event/PreEvent.php +++ b/civicrm/Civi/Core/Event/PreEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Event/SystemInstallEvent.php b/civicrm/Civi/Core/Event/SystemInstallEvent.php index e3e8d4f001a66449e8b0fc8a6a4409dcafb004ac..3d7f5d252462c3de5b9055c5850a6db15a16ec19 100644 --- a/civicrm/Civi/Core/Event/SystemInstallEvent.php +++ b/civicrm/Civi/Core/Event/SystemInstallEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php b/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php index ab3722d0fafd685b19ffdc7456edbce057b7a6c4..71e3d6b9046e840164952c93d70eca23923d71bd 100644 --- a/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php +++ b/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/InstallationCanary.php b/civicrm/Civi/Core/InstallationCanary.php index ba13a1b9157a08b74336c5eacff3baaa20f65e85..a5de6fed6727d09c4107676fd59978c62ccac7b8 100644 --- a/civicrm/Civi/Core/InstallationCanary.php +++ b/civicrm/Civi/Core/InstallationCanary.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/LocalizationInitializer.php b/civicrm/Civi/Core/LocalizationInitializer.php index 6eb89355c9b46f2d1f2ef1630ce1e7634a6eb06a..4573d6265029dd09b6ff3ccd01f9d596f9663959 100644 --- a/civicrm/Civi/Core/LocalizationInitializer.php +++ b/civicrm/Civi/Core/LocalizationInitializer.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2015 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Lock/LockInterface.php b/civicrm/Civi/Core/Lock/LockInterface.php index d06ad033cdceabe155739013ee69a688ce70f808..f427db9d195b52115ce875d06c5f409d88f4e3a5 100644 --- a/civicrm/Civi/Core/Lock/LockInterface.php +++ b/civicrm/Civi/Core/Lock/LockInterface.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Lock/LockManager.php b/civicrm/Civi/Core/Lock/LockManager.php index 268f0874c17e1d26d2b8c5ada3b30e178ac8a34b..a59798c162a58c20b1e489379e7d9dec4ef1f5aa 100644 --- a/civicrm/Civi/Core/Lock/LockManager.php +++ b/civicrm/Civi/Core/Lock/LockManager.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Lock/NullLock.php b/civicrm/Civi/Core/Lock/NullLock.php index 4b7fb0b7ddc44e180fa10c90fb2d1749fcce43e2..447def0fa8353b7cdadcb01ec5d9ff51b251ae39 100644 --- a/civicrm/Civi/Core/Lock/NullLock.php +++ b/civicrm/Civi/Core/Lock/NullLock.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ namespace Civi\Core\Lock; /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class NullLock implements LockInterface { diff --git a/civicrm/Civi/Core/SettingsBag.php b/civicrm/Civi/Core/SettingsBag.php index 66a663e93bad56665d78bfdf46f5fd6b42b3759f..595ce92a9de8a990a7883d10ebc0fd01657d2cd9 100644 --- a/civicrm/Civi/Core/SettingsBag.php +++ b/civicrm/Civi/Core/SettingsBag.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/SettingsManager.php b/civicrm/Civi/Core/SettingsManager.php index 2e49450d4e445a72f5dc8915ab563f7e9281de9a..041ebe62cb425864141f135fde8597619ba80c5b 100644 --- a/civicrm/Civi/Core/SettingsManager.php +++ b/civicrm/Civi/Core/SettingsManager.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/SettingsMetadata.php b/civicrm/Civi/Core/SettingsMetadata.php index c7ee46523366dc195cbf3a6236b98769b16f9923..03390cbaed41622271d6b80dfaad7f4194280990 100644 --- a/civicrm/Civi/Core/SettingsMetadata.php +++ b/civicrm/Civi/Core/SettingsMetadata.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/SqlTrigger/StaticTriggers.php b/civicrm/Civi/Core/SqlTrigger/StaticTriggers.php index e4747a8d2b8e4a8295badec2e821fea320495d0f..104e2a44f0c072a77b2ce7cde72189172b1124e4 100644 --- a/civicrm/Civi/Core/SqlTrigger/StaticTriggers.php +++ b/civicrm/Civi/Core/SqlTrigger/StaticTriggers.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ namespace Civi\Core\SqlTrigger; * Build a set of simple, literal SQL triggers. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class StaticTriggers { diff --git a/civicrm/Civi/Core/SqlTrigger/TimestampTriggers.php b/civicrm/Civi/Core/SqlTrigger/TimestampTriggers.php index 60c35a9c224e534179df127eee148a82776dda67..67ceb628f493bf7a254bcaedf0898788bd2fa662 100644 --- a/civicrm/Civi/Core/SqlTrigger/TimestampTriggers.php +++ b/civicrm/Civi/Core/SqlTrigger/TimestampTriggers.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -36,7 +36,7 @@ use Civi\Core\Event\GenericHookEvent; * This class is a generalization of CRM-10554 with the aim of enabling CRM-20958. * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class TimestampTriggers { diff --git a/civicrm/Civi/Core/SqlTriggers.php b/civicrm/Civi/Core/SqlTriggers.php index d4a2aab0cd566c90d3401400992e2f8c6a92f024..a8be7756a757619a57176b3ab30d815d67f1d0b8 100644 --- a/civicrm/Civi/Core/SqlTriggers.php +++ b/civicrm/Civi/Core/SqlTriggers.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/Civi/Core/Transaction/Frame.php b/civicrm/Civi/Core/Transaction/Frame.php index b147f996de0cd79461fe30a0fc635126d10ce450..94761e319d7646cdf4ba921e960264b94d44ce73 100644 --- a/civicrm/Civi/Core/Transaction/Frame.php +++ b/civicrm/Civi/Core/Transaction/Frame.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -33,7 +33,7 @@ namespace Civi\Core\Transaction; * and any nested frames are SQL savepoints (SAVEPOINT foo/ROLLBACK TO SAVEPOINT). * * @package Civi - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class Frame { diff --git a/civicrm/Civi/Core/Transaction/Manager.php b/civicrm/Civi/Core/Transaction/Manager.php index 2f40345796478fe4c58f9fdddbe4666d1c85d0cb..acea08f6bc81be757db35e5cf1b999730951fb3b 100644 --- a/civicrm/Civi/Core/Transaction/Manager.php +++ b/civicrm/Civi/Core/Transaction/Manager.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ namespace Civi\Core\Transaction; /** * * @package Civi - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 */ class Manager { diff --git a/civicrm/Civi/Token/AbstractTokenSubscriber.php b/civicrm/Civi/Token/AbstractTokenSubscriber.php index 450955bfd5b0b3cf43a96beebb5625b3f71990c6..8cd6c17ea8a69ef9c0636e228e3ef29450a155a8 100644 --- a/civicrm/Civi/Token/AbstractTokenSubscriber.php +++ b/civicrm/Civi/Token/AbstractTokenSubscriber.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/ang/crmMailing/BlockReview.html b/civicrm/ang/crmMailing/BlockReview.html index def183c0109eb864fe95932b85df2325d2510913..5a0021e40ab6449f566db6941318b680fb3e66a0 100644 --- a/civicrm/ang/crmMailing/BlockReview.html +++ b/civicrm/ang/crmMailing/BlockReview.html @@ -11,7 +11,7 @@ Required vars: mailing, attachments <div crm-ui-field="{title: ts('Recipients')}"> <div ng-controller="ViewRecipCtrl"> <div ng-controller="EditRecipCtrl"> - <div><a crm-icon="fa-users" class="crm-hover-button action-item" ng-click="previewRecipients()">{{getRecipientsEstimate()}}</a></div> + <div><a crm-icon="fa-users" class="crm-hover-button action-item" ng-click="previewRecipients()">{{getRecipientCount()}}</a></div> <div ng-show="getIncludesAsString(mailing)"> (<strong>{{ts('Include:')}}</strong> {{getIncludesAsString(mailing)}}) </div> diff --git a/civicrm/ang/crmMailing/services.js b/civicrm/ang/crmMailing/services.js index 4eb62381f2544aeac2b1e755a3a658df3dbed29c..cfaaeda2b1d1a7225ef76a167697b25c60d05cee 100644 --- a/civicrm/ang/crmMailing/services.js +++ b/civicrm/ang/crmMailing/services.js @@ -275,6 +275,7 @@ id: '$value.id' } }); + delete params.scheduled_date; delete params.recipients; // the content was merged in params._skip_evil_bao_auto_recipients_ = 1; // skip recipient rebuild on mail preview return qApi('Mailing', 'create', params).then(function(result) { @@ -300,6 +301,7 @@ 'api.email.getvalue': {'return': 'email'} } }); + delete params.scheduled_date; delete params.recipients; // the content was merged in return qApi('Mailing', 'create', params).then(function (recipResult) { // changes rolled back, so we don't care about updating mailing @@ -332,6 +334,7 @@ }); crmMailingCache.put('mailing-' + mailing.id + '-recipient-params', params.recipients); } + delete params.scheduled_date; delete params.recipients; // the content was merged in recipientCount = qApi('Mailing', 'create', params).then(function (recipResult) { // changes rolled back, so we don't care about updating mailing diff --git a/civicrm/ang/crmUi.js b/civicrm/ang/crmUi.js index 3fc8598217f9ad66f8e87a5bd57a56df9a50af5f..70da3871c882862378f826be1ea53fd9dc4a95dc 100644 --- a/civicrm/ang/crmUi.js +++ b/civicrm/ang/crmUi.js @@ -875,6 +875,20 @@ }, link: function (scope, element, attrs) { scope.ts = CRM.ts(null); + + element.find('.crm-wizard-buttons button').click(function () { + // These values are captured inside the click handler to ensure the + // positions/sizes of the elements are captured at the time of the + // click vs. at the time this directive is initialized. + var topOfWizard = element.offset().top; + var heightOfMenu = $('#civicrm-menu').height() || 0; + + $('html') + // stop any other animations that might be happening... + .stop() + // gracefully slide the user to the top of the wizard + .animate({scrollTop: topOfWizard - heightOfMenu}, 1000); + }); } }; }) diff --git a/civicrm/api/v3/AclRole.php b/civicrm/api/v3/AclRole.php index b1708533b7046e4f2e0c5250ef95ff4f5dbc6076..36f570df60653a53ae1274142aaeb4cd64f6465e 100644 --- a/civicrm/api/v3/AclRole.php +++ b/civicrm/api/v3/AclRole.php @@ -40,7 +40,7 @@ * API result array */ function civicrm_api3_acl_role_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'AclRole'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'EntityRole'); } /** diff --git a/civicrm/api/v3/Batch.php b/civicrm/api/v3/Batch.php index 03c63ec45603b15ca07c8ebb14d661e4270e0dad..45372c1ae496983a3250b87e4c6ac4e99fe9a916 100644 --- a/civicrm/api/v3/Batch.php +++ b/civicrm/api/v3/Batch.php @@ -39,7 +39,7 @@ * @return array */ function civicrm_api3_batch_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Batch'); } /** diff --git a/civicrm/api/v3/CaseContact.php b/civicrm/api/v3/CaseContact.php index 4898d6308c4b66e745b64525dd186fe492b2f502..c121abc7daccd446b878d860ef731361be9d1405 100644 --- a/civicrm/api/v3/CaseContact.php +++ b/civicrm/api/v3/CaseContact.php @@ -39,7 +39,7 @@ * @return array */ function civicrm_api3_case_contact_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'CaseContact'); } /** diff --git a/civicrm/api/v3/ContactType.php b/civicrm/api/v3/ContactType.php index 7efeb499af47ccdcccb9a6c624acd02e0ba5aa7d..f31750ba8a850bbea112b7da556d8cc6bbe2ca3c 100644 --- a/civicrm/api/v3/ContactType.php +++ b/civicrm/api/v3/ContactType.php @@ -75,7 +75,6 @@ function civicrm_api3_contact_type_create($params) { * Array of matching contact_types */ function civicrm_api3_contact_type_get($params) { - civicrm_api3_verify_mandatory($params); return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); } diff --git a/civicrm/api/v3/Contribution.php b/civicrm/api/v3/Contribution.php index 027725ff587456987b7c0abce8bd7be7af5df041..451e302d5832f505fc2b8a8cd6478fa19e8dc612 100644 --- a/civicrm/api/v3/Contribution.php +++ b/civicrm/api/v3/Contribution.php @@ -47,6 +47,13 @@ function civicrm_api3_contribution_create(&$params) { $params = array_merge($params, $values); // The BAO should not clean money - it should be done in the form layer & api wrapper // (although arguably the api should expect pre-cleaned it seems to do some cleaning.) + if (empty($params['skipCleanMoney'])) { + foreach (['total_amount', 'net_amount', 'fee_amount'] as $field) { + if (isset($params[$field])) { + $params[$field] = CRM_Utils_Rule::cleanMoney($params[$field]); + } + } + } $params['skipCleanMoney'] = TRUE; if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()) { diff --git a/civicrm/api/v3/ContributionProduct.php b/civicrm/api/v3/ContributionProduct.php index a372bf871d1fd96e4a1cfd4a0c42a25d49008ec1..86efc7bd9682a2d4a02005ad74f14a48b9d0172e 100644 --- a/civicrm/api/v3/ContributionProduct.php +++ b/civicrm/api/v3/ContributionProduct.php @@ -43,7 +43,7 @@ * @return array */ function civicrm_api3_contribution_product_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'ContributionProduct'); } /** diff --git a/civicrm/api/v3/ContributionSoft.php b/civicrm/api/v3/ContributionSoft.php index 5c4daf3a94ad94ed7aadf6e77cbe687751b8b3e8..aafe6023e622daa614b923fe39cac980cfd2710f 100644 --- a/civicrm/api/v3/ContributionSoft.php +++ b/civicrm/api/v3/ContributionSoft.php @@ -41,7 +41,7 @@ * API result array */ function civicrm_api3_contribution_soft_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'ContributionSoft'); } /** diff --git a/civicrm/api/v3/Country.php b/civicrm/api/v3/Country.php index 8b0520df03c1525ec083cb1273a61933eede8c25..820e8087b3a6efcae7c2228f436008751dfcf71d 100644 --- a/civicrm/api/v3/Country.php +++ b/civicrm/api/v3/Country.php @@ -42,7 +42,7 @@ * @throws \API_Exception */ function civicrm_api3_country_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_DAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_DAO(__FUNCTION__), $params, 'Country'); } /** diff --git a/civicrm/api/v3/Dashboard.php b/civicrm/api/v3/Dashboard.php index cf5aae7b2f27fca5444dbd97288c796cc0029504..01c1e43cd11b19d2262a7ad8b13f61a25d0ea41c 100644 --- a/civicrm/api/v3/Dashboard.php +++ b/civicrm/api/v3/Dashboard.php @@ -73,11 +73,7 @@ function _civicrm_api3_dashboard_create_spec(&$params) { * @return array */ function civicrm_api3_dashboard_get($params) { - // NEVER COPY THIS. No idea why a newish api would not use basic_get. - $bao = new CRM_Core_BAO_Dashboard(); - _civicrm_api3_dao_set_filter($bao, $params, TRUE); - $dashlets = _civicrm_api3_dao_to_array($bao, $params, TRUE, 'Dashboard'); - return civicrm_api3_create_success($dashlets, $params, 'Dashboard', 'get', $bao); + return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); } /** diff --git a/civicrm/api/v3/DashboardContact.php b/civicrm/api/v3/DashboardContact.php index e67fef5f6eb602d4320b2b4224eae7e0486412b7..7a1d9b3711c21fc660b2f4cb5bc1f43ed2a0bcb4 100644 --- a/civicrm/api/v3/DashboardContact.php +++ b/civicrm/api/v3/DashboardContact.php @@ -51,7 +51,7 @@ function civicrm_api3_dashboard_contact_create($params) { if ($errors !== NULL) { return $errors; } - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'DashboardContact'); } /** diff --git a/civicrm/api/v3/EntityBatch.php b/civicrm/api/v3/EntityBatch.php index 4418bce80c69733cee9057ccf62994536af44131..7dae97a0e3710bcc27b6dcc7f13dd010ce16f34c 100644 --- a/civicrm/api/v3/EntityBatch.php +++ b/civicrm/api/v3/EntityBatch.php @@ -66,7 +66,7 @@ function _civicrm_api3_entity_batch_create_spec(&$params) { * @return array */ function civicrm_api3_entity_batch_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'EntityBatch'); } /** diff --git a/civicrm/api/v3/EntityFinancialTrxn.php b/civicrm/api/v3/EntityFinancialTrxn.php index 0c0e7b1578ff4dd2d7c96921ddfcaf9892949cbf..5ddd6c30a5d9eaf7ee95430b66c19504f3b1656f 100644 --- a/civicrm/api/v3/EntityFinancialTrxn.php +++ b/civicrm/api/v3/EntityFinancialTrxn.php @@ -39,7 +39,7 @@ * @return array */ function civicrm_api3_entity_financial_trxn_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'EntityFinancialTrxn'); } /** diff --git a/civicrm/api/v3/Extension.php b/civicrm/api/v3/Extension.php index 3b9378e6c8e9596a1f05ced93b938ae9d1e77a7a..6926aa8bfbb86f2e826c77ca9f0df41543d77bb7 100644 --- a/civicrm/api/v3/Extension.php +++ b/civicrm/api/v3/Extension.php @@ -368,12 +368,14 @@ function civicrm_api3_extension_get($params) { $result[] = $info; } } - $options = _civicrm_api3_get_options_from_params($params); - $returnFields = !empty($options['return']) ? $options['return'] : array(); - if (!in_array('id', $returnFields)) { - $returnFields = array_merge($returnFields, array('id')); - } - return _civicrm_api3_basic_array_get('Extension', $params, $result, 'id', $returnFields); + + // These fields have been filtered already, and they have special semantics. + unset($params['key']); + unset($params['keys']); + unset($params['full_name']); + + $filterableFields = array('id', 'type', 'status', 'path'); + return _civicrm_api3_basic_array_get('Extension', $params, $result, 'id', $filterableFields); } /** diff --git a/civicrm/api/v3/FinancialItem.php b/civicrm/api/v3/FinancialItem.php index 11747973d696a9bc1b0219516ecc48f1864b72d6..9aecca6eaf488fced7351cf0d3221ec9fc713592 100644 --- a/civicrm/api/v3/FinancialItem.php +++ b/civicrm/api/v3/FinancialItem.php @@ -39,7 +39,7 @@ * @return array */ function civicrm_api3_financial_item_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'FinancialItem'); } /** diff --git a/civicrm/api/v3/GroupNesting.php b/civicrm/api/v3/GroupNesting.php index e8987d5d86069f54c723f4c0afcc2290d88a0216..20ed57e99a44a81af8d7269633fb56268ec83ec9 100644 --- a/civicrm/api/v3/GroupNesting.php +++ b/civicrm/api/v3/GroupNesting.php @@ -55,15 +55,10 @@ function civicrm_api3_group_nesting_get($params) { * Parameters array - allowed array keys include:. * * @return array - * TBD - * @todo Work out the return value. + * API success array */ function civicrm_api3_group_nesting_create($params) { - CRM_Contact_BAO_GroupNesting::add($params['parent_group_id'], $params['child_group_id']); - - // FIXME: CRM_Contact_BAO_GroupNesting requires some work - $result = array('is_error' => 0); - return civicrm_api3_create_success($result, $params, 'GroupNesting'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'GroupNesting'); } /** diff --git a/civicrm/api/v3/GroupOrganization.php b/civicrm/api/v3/GroupOrganization.php index c3bdde207d807c18cd84a815ea5df57b3fec7a6b..0816c5b9bc6e85f9d38eb1f2404ddc0f40e39b5e 100644 --- a/civicrm/api/v3/GroupOrganization.php +++ b/civicrm/api/v3/GroupOrganization.php @@ -55,14 +55,7 @@ function civicrm_api3_group_organization_get($params) { */ function civicrm_api3_group_organization_create($params) { - $groupOrgBAO = CRM_Contact_BAO_GroupOrganization::add($params); - - if (is_null($groupOrgBAO)) { - return civicrm_api3_create_error("group organization not created"); - } - - _civicrm_api3_object_to_array($groupOrgBAO, $values); - return civicrm_api3_create_success($values, $params, 'GroupOrganization', 'get', $groupOrgBAO); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'GroupOrganization'); } /** diff --git a/civicrm/api/v3/Im.php b/civicrm/api/v3/Im.php index 7630989d4cb0fd0c92082cb5b41709fb6c8741ff..e78bf0481295551f2a704020358e6c35e752f86b 100644 --- a/civicrm/api/v3/Im.php +++ b/civicrm/api/v3/Im.php @@ -39,7 +39,7 @@ * @return array */ function civicrm_api3_im_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'IM'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Im'); } /** diff --git a/civicrm/api/v3/Job.php b/civicrm/api/v3/Job.php index 1d21b3496500c3216e3038d38e833fa972d2f9f2..e9e9306691d4288e0d874a783732d1615a09d4d2 100644 --- a/civicrm/api/v3/Job.php +++ b/civicrm/api/v3/Job.php @@ -58,7 +58,7 @@ function _civicrm_api3_job_create_spec(&$params) { * @return array */ function civicrm_api3_job_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Job'); } /** diff --git a/civicrm/api/v3/JobLog.php b/civicrm/api/v3/JobLog.php index f4e770b3aa330d1d88a2373207cc6ed650ed550d..ce2a9e911fea88f85b65325ab22f6d370adadb39 100644 --- a/civicrm/api/v3/JobLog.php +++ b/civicrm/api/v3/JobLog.php @@ -36,3 +36,27 @@ function civicrm_api3_job_log_get($params) { return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); } + +/** + * Create one or more job log record. + * + * @param array $params + * input parameters + * + * @return array + */ +function civicrm_api3_job_log_create($params) { + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'JobLog'); +} + +/** + * Delete one or more job log record. + * + * @param array $params + * input parameters + * + * @return array + */ +function civicrm_api3_job_log_delete($params) { + return _civicrm_api3_basic_delete(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'JobLog'); +} diff --git a/civicrm/api/v3/LocationType.php b/civicrm/api/v3/LocationType.php index 49b124f0d3aa54a003986f6bc0ebaefa72e409af..bd419d87117752a84548745cc74d9bf642c6a61d 100644 --- a/civicrm/api/v3/LocationType.php +++ b/civicrm/api/v3/LocationType.php @@ -45,7 +45,7 @@ function civicrm_api3_location_type_create($params) { $params['display_name'] = $params['name']; } - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'LocationType'); } /** diff --git a/civicrm/api/v3/MailSettings.php b/civicrm/api/v3/MailSettings.php index 54743ad1796aaf068d4788e33a8fb111add2a1a3..112a175e9fbd8b49a1d93d4f7779aeab900e16fe 100644 --- a/civicrm/api/v3/MailSettings.php +++ b/civicrm/api/v3/MailSettings.php @@ -41,7 +41,7 @@ * API result array. */ function civicrm_api3_mail_settings_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MailSettings'); } /** diff --git a/civicrm/api/v3/Mailing.php b/civicrm/api/v3/Mailing.php index 22aba4bfda3965edab0f1086170a404f08e139f5..32c3fe1a33b635ef80261f244dcf6fd95bce39d2 100644 --- a/civicrm/api/v3/Mailing.php +++ b/civicrm/api/v3/Mailing.php @@ -77,7 +77,7 @@ function civicrm_api3_mailing_create($params) { // FlexMailer is a refactoring of CiviMail which provides new hooks/APIs/docs. If the sysadmin has opted to enable it, then use that instead of CiviMail. $safeParams['_evil_bao_validator_'] = \CRM_Utils_Constant::value('CIVICRM_FLEXMAILER_HACK_SENDABLE', 'CRM_Mailing_BAO_Mailing::checkSendable'); - $result = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $safeParams); + $result = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $safeParams, 'Mailing'); return _civicrm_api3_mailing_get_formatResult($result); } diff --git a/civicrm/api/v3/MailingAB.php b/civicrm/api/v3/MailingAB.php index e0ca07424afee4a3ff9e34e096a9003cac7453c6..542ced9213fee074713d5b2ba21088d57fca1720 100644 --- a/civicrm/api/v3/MailingAB.php +++ b/civicrm/api/v3/MailingAB.php @@ -50,7 +50,7 @@ function _civicrm_api3_mailing_a_b_create_spec(&$spec) { * API Success Array */ function civicrm_api3_mailing_a_b_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MailingAB'); } /** diff --git a/civicrm/api/v3/MailingComponent.php b/civicrm/api/v3/MailingComponent.php index 811d3b5b217f01ab7254c4c0b5288898de021708..e05491edceacb7777bc85f349561a4803ce0c7e3 100644 --- a/civicrm/api/v3/MailingComponent.php +++ b/civicrm/api/v3/MailingComponent.php @@ -41,7 +41,7 @@ * API result array. */ function civicrm_api3_mailing_component_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Component'); } diff --git a/civicrm/api/v3/MailingEventQueue.php b/civicrm/api/v3/MailingEventQueue.php index 8592a8d364660105fccc9bf75f2a7585cdbbf800..a1a3f8de84a0fe0a3fba7802598e34b3aab25f99 100644 --- a/civicrm/api/v3/MailingEventQueue.php +++ b/civicrm/api/v3/MailingEventQueue.php @@ -50,7 +50,7 @@ function civicrm_api3_mailing_event_queue_create($params) { array('job_id', 'contact_id'), FALSE ); - return _civicrm_api3_basic_create('CRM_Mailing_Event_BAO_Queue', $params); + return _civicrm_api3_basic_create('CRM_Mailing_Event_BAO_Queue', $params, 'Queue'); } /** diff --git a/civicrm/api/v3/MappingField.php b/civicrm/api/v3/MappingField.php index 4dc877876260c002e1aa1afb370eebf0ef5a9eec..88d257bc9c49d5e005eadac6f85f279fc2097d33 100644 --- a/civicrm/api/v3/MappingField.php +++ b/civicrm/api/v3/MappingField.php @@ -40,7 +40,7 @@ * @return array */ function civicrm_api3_mapping_field_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MappingField'); } /** diff --git a/civicrm/api/v3/MembershipLog.php b/civicrm/api/v3/MembershipLog.php index 89d58c442c5283268402ccb1468760414efa06d1..cd5dd6ad7bb257a2ab13d1456076714e5386286d 100644 --- a/civicrm/api/v3/MembershipLog.php +++ b/civicrm/api/v3/MembershipLog.php @@ -41,7 +41,7 @@ * API result array. */ function civicrm_api3_membership_log_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MembershipLog'); } /** diff --git a/civicrm/api/v3/MembershipPayment.php b/civicrm/api/v3/MembershipPayment.php index 05277f11d62129175ecfa378ce7b0decc2cc33ce..3f13154fb0ab99bacc79c470a6ffa7a3b0878ebe 100644 --- a/civicrm/api/v3/MembershipPayment.php +++ b/civicrm/api/v3/MembershipPayment.php @@ -42,7 +42,7 @@ * API result array. */ function civicrm_api3_membership_payment_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MembershipPayment'); } /** diff --git a/civicrm/api/v3/MembershipType.php b/civicrm/api/v3/MembershipType.php index a8b29405c522e96e776998e287cddd31fe2768d7..436b22e8792bde0acc3662b9bc852eed71a7d051 100644 --- a/civicrm/api/v3/MembershipType.php +++ b/civicrm/api/v3/MembershipType.php @@ -47,7 +47,7 @@ function civicrm_api3_membership_type_create($params) { $params[$field] = implode(CRM_Core_DAO::VALUE_SEPARATOR, $params[$field]); } } - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Membership_type'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MembershipType'); } /** diff --git a/civicrm/api/v3/MessageTemplate.php b/civicrm/api/v3/MessageTemplate.php index a8557538a8aafb07335b213827130d06ffb68619..8c4c7554184df13fa96d2037740601c78dcef7fa 100644 --- a/civicrm/api/v3/MessageTemplate.php +++ b/civicrm/api/v3/MessageTemplate.php @@ -40,7 +40,7 @@ * @throws \API_Exception */ function civicrm_api3_message_template_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'MessageTemplate'); } /** diff --git a/civicrm/api/v3/Navigation.php b/civicrm/api/v3/Navigation.php index e4070ef16486902ff1daa6e71e264773b4e83ff9..fb040d2c65d5a16bac7d7d0f07802c9dce1c2eb9 100644 --- a/civicrm/api/v3/Navigation.php +++ b/civicrm/api/v3/Navigation.php @@ -109,7 +109,7 @@ function _civicrm_api3_navigation_create_spec(&$params) { */ function civicrm_api3_navigation_create($params) { civicrm_api3_verify_one_mandatory($params, NULL, array('name', 'label')); - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Navigation'); } /** diff --git a/civicrm/api/v3/Note.php b/civicrm/api/v3/Note.php index 70f73c5b2fad67e51aeab4abb1bdf228e31298b0..d08d6e37f020b39c89b740187829e31b1fbe3baf 100644 --- a/civicrm/api/v3/Note.php +++ b/civicrm/api/v3/Note.php @@ -44,7 +44,7 @@ * API result array */ function civicrm_api3_note_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Note'); } /** diff --git a/civicrm/api/v3/OpenID.php b/civicrm/api/v3/OpenID.php index cff85e2928367f12f977e2bc62fb648d69272adc..d338a2429041871138cf3473aca84d9884d28f5c 100644 --- a/civicrm/api/v3/OpenID.php +++ b/civicrm/api/v3/OpenID.php @@ -40,7 +40,7 @@ * API result array */ function civicrm_api3_open_i_d_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'OpenID'); } /** diff --git a/civicrm/api/v3/OptionGroup.php b/civicrm/api/v3/OptionGroup.php index 58942efa592d235c5eed741298528f10b1d1826a..e20cced41fdadb886c151622ee7335334980ec7e 100644 --- a/civicrm/api/v3/OptionGroup.php +++ b/civicrm/api/v3/OptionGroup.php @@ -53,7 +53,7 @@ function civicrm_api3_option_group_get($params) { * @return array */ function civicrm_api3_option_group_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'OptionGroup'); } /** diff --git a/civicrm/api/v3/OptionValue.php b/civicrm/api/v3/OptionValue.php index a10cb899c97ebccd0c8e4e59604d7beef5a0fe5d..e83333467051bb81c288b724a7b52a6900c53b1c 100644 --- a/civicrm/api/v3/OptionValue.php +++ b/civicrm/api/v3/OptionValue.php @@ -42,7 +42,7 @@ * API result array */ function civicrm_api3_option_value_get($params) { - return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_get(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'OptionValue'); } /** diff --git a/civicrm/api/v3/ParticipantPayment.php b/civicrm/api/v3/ParticipantPayment.php index 422049a920a6db519c4b2eb36ab936d13f85e8fb..7a231e78d6d505d66f1df47c2317b553d27cdbd1 100644 --- a/civicrm/api/v3/ParticipantPayment.php +++ b/civicrm/api/v3/ParticipantPayment.php @@ -43,17 +43,7 @@ * @return array */ function civicrm_api3_participant_payment_create($params) { - - $ids = array(); - if (!empty($params['id'])) { - $ids['id'] = $params['id']; - } - $participantPayment = CRM_Event_BAO_ParticipantPayment::create($params, $ids); - - $payment = array(); - _civicrm_api3_object_to_array($participantPayment, $payment[$participantPayment->id]); - - return civicrm_api3_create_success($payment, $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'ParticipantPayment'); } /** diff --git a/civicrm/api/v3/ParticipantStatusType.php b/civicrm/api/v3/ParticipantStatusType.php index 22ea6081b962225674e0a4234dbed373b3550b9b..ea74bbf59308c69eb5f73ad3ad476e0dd603235c 100644 --- a/civicrm/api/v3/ParticipantStatusType.php +++ b/civicrm/api/v3/ParticipantStatusType.php @@ -45,7 +45,7 @@ * participant_status array */ function civicrm_api3_participant_status_type_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'ParticipantStatusType'); } /** diff --git a/civicrm/api/v3/PaymentProcessorType.php b/civicrm/api/v3/PaymentProcessorType.php index 9f3f4c09e05aad3c5ea926ced3d6171809a45bc4..9c2799650fcc805560e39d27403358f9a519d239 100644 --- a/civicrm/api/v3/PaymentProcessorType.php +++ b/civicrm/api/v3/PaymentProcessorType.php @@ -40,17 +40,7 @@ * @return array */ function civicrm_api3_payment_processor_type_create($params) { - if (isset($params['id']) && !CRM_Utils_Rule::integer($params['id'])) { - return civicrm_api3_create_error('Invalid value for payment_processor type ID'); - } - - $paymentProcessorType = CRM_Financial_BAO_PaymentProcessorType::create($params); - - $relType = array(); - - _civicrm_api3_object_to_array($paymentProcessorType, $relType[$paymentProcessorType->id]); - - return civicrm_api3_create_success($relType, $params, 'PaymentProcessorType', 'create', $paymentProcessorType); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'PaymentProcessorType'); } /** diff --git a/civicrm/api/v3/Premium.php b/civicrm/api/v3/Premium.php index 5f3a8f41eaa45f15d63a64113407f34ba74b195c..066e6e9a9bf7e4091f0ed13176603330018a66c1 100644 --- a/civicrm/api/v3/Premium.php +++ b/civicrm/api/v3/Premium.php @@ -44,7 +44,7 @@ * @return array */ function civicrm_api3_premium_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Premium'); } /** diff --git a/civicrm/api/v3/PrintLabel.php b/civicrm/api/v3/PrintLabel.php index 54ad27ccc2acb264fee09a8349d578d86f884144..c436a853c2ad22a323a0cb50fd63cb20fda9166c 100644 --- a/civicrm/api/v3/PrintLabel.php +++ b/civicrm/api/v3/PrintLabel.php @@ -39,7 +39,7 @@ * @return array */ function civicrm_api3_print_label_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'PrintLabel'); } /** diff --git a/civicrm/api/v3/Product.php b/civicrm/api/v3/Product.php index e862b28449a2892b54b156863869ee7195c2d8a3..a60e19bad037ebd571e7e98e5f2821749a68a3f6 100644 --- a/civicrm/api/v3/Product.php +++ b/civicrm/api/v3/Product.php @@ -43,7 +43,7 @@ * @return array */ function civicrm_api3_product_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Product'); } /** diff --git a/civicrm/api/v3/RelationshipType.php b/civicrm/api/v3/RelationshipType.php index 4260edc42cac0c5b369d151e197840aa3cc8d159..b7aa1d34c89266801794adafa9762a0106435818 100644 --- a/civicrm/api/v3/RelationshipType.php +++ b/civicrm/api/v3/RelationshipType.php @@ -41,31 +41,16 @@ */ function civicrm_api3_relationship_type_create($params) { - if (!isset($params['label_a_b'])) { - + // @todo should we when id is empty? + if (!isset($params['label_a_b']) && !empty($params['name_a_b'])) { $params['label_a_b'] = $params['name_a_b']; } - if (!isset($params['label_b_a'])) { - + if (!isset($params['label_b_a']) && !empty($params['name_b_a'])) { $params['label_b_a'] = $params['name_b_a']; } - $ids = array(); - if (isset($params['id']) && !CRM_Utils_Rule::integer($params['id'])) { - return civicrm_api3_create_error('Invalid value for relationship type ID'); - } - else { - $ids['relationshipType'] = CRM_Utils_Array::value('id', $params); - } - - $relationType = CRM_Contact_BAO_RelationshipType::add($params, $ids); - - $relType = array(); - - _civicrm_api3_object_to_array($relationType, $relType[$relationType->id]); - - return civicrm_api3_create_success($relType, $params, 'RelationshipType', 'create', $relationType); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'RelationshipType'); } /** diff --git a/civicrm/api/v3/ReportInstance.php b/civicrm/api/v3/ReportInstance.php index 97679be0ed8816ad1a7c9518dc70e7e4640bd361..cb8c618e550d774f74786abedfcfa5eddc6c8707 100644 --- a/civicrm/api/v3/ReportInstance.php +++ b/civicrm/api/v3/ReportInstance.php @@ -53,7 +53,7 @@ function civicrm_api3_report_instance_get($params) { * API result array */ function civicrm_api3_report_instance_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'ReportInstance'); } /** diff --git a/civicrm/api/v3/RuleGroup.php b/civicrm/api/v3/RuleGroup.php index 68a0f9ef41a9645d7889130bb5bce8fe9b3cc94e..d8abd0a8b38fc490a2558760c8b8a3de85d0c40d 100644 --- a/civicrm/api/v3/RuleGroup.php +++ b/civicrm/api/v3/RuleGroup.php @@ -43,7 +43,7 @@ * API result array */ function civicrm_api3_rule_group_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'RuleGroup'); } /** diff --git a/civicrm/api/v3/SavedSearch.php b/civicrm/api/v3/SavedSearch.php index e32c258e35282961af64d811031e582956f5c0e4..ec9538601db8406968bb09d82d68aa950d732673 100644 --- a/civicrm/api/v3/SavedSearch.php +++ b/civicrm/api/v3/SavedSearch.php @@ -60,7 +60,7 @@ function civicrm_api3_saved_search_create($params) { } } - $result = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + $result = _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'SavedSearch'); _civicrm_api3_saved_search_result_cleanup($result); return $result; } diff --git a/civicrm/api/v3/SmsProvider.php b/civicrm/api/v3/SmsProvider.php index fc45ebb241e088b09cfca9b23c78023cfa9b086c..c445c4ed76afd67a783e2ac42b9133ed8410b2db 100644 --- a/civicrm/api/v3/SmsProvider.php +++ b/civicrm/api/v3/SmsProvider.php @@ -39,7 +39,7 @@ * @return array */ function civicrm_api3_sms_provider_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Provider'); } /** diff --git a/civicrm/api/v3/StateProvince.php b/civicrm/api/v3/StateProvince.php index b07d41cb420c369907b1892018e21a8556e65bf7..2044cf98b3c7f080b975156a421e99cc862ab84f 100644 --- a/civicrm/api/v3/StateProvince.php +++ b/civicrm/api/v3/StateProvince.php @@ -42,7 +42,7 @@ * @throws \API_Exception */ function civicrm_api3_state_province_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_DAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_DAO(__FUNCTION__), $params, 'StateProvince'); } /** diff --git a/civicrm/api/v3/StatusPreference.php b/civicrm/api/v3/StatusPreference.php index b1f6d72041ab23059a1efcc83f8e54cdcec06440..734fadba570f272c5165135f12b7f9e13dc761bc 100644 --- a/civicrm/api/v3/StatusPreference.php +++ b/civicrm/api/v3/StatusPreference.php @@ -39,7 +39,7 @@ * @return array */ function civicrm_api3_status_preference_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'StatusPreference'); } /** diff --git a/civicrm/api/v3/Tag.php b/civicrm/api/v3/Tag.php index 4b526add88a4fd627c18e4b61e9ac23ac8ef671a..7c67264e7255313227790dfe5653ed78a3a48527 100644 --- a/civicrm/api/v3/Tag.php +++ b/civicrm/api/v3/Tag.php @@ -48,7 +48,7 @@ * API result array */ function civicrm_api3_tag_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Tag'); } /** diff --git a/civicrm/api/v3/Website.php b/civicrm/api/v3/Website.php index 34735609db4498000c0a9298c2c1e1bd1df0c9c4..310d601fee61962ca0d2b31a63d272f4f116fdc1 100644 --- a/civicrm/api/v3/Website.php +++ b/civicrm/api/v3/Website.php @@ -38,15 +38,9 @@ * * @return array * API result array - * @todo convert to using basic create - BAO function non-std */ function civicrm_api3_website_create($params) { - //DO NOT USE THIS FUNCTION AS THE BASIS FOR A NEW API http://wiki.civicrm.org/confluence/display/CRM/API+Architecture+Standards - _civicrm_api3_check_edit_permissions('CRM_Core_BAO_Website', $params); - $websiteBAO = CRM_Core_BAO_Website::add($params); - $values = array(); - _civicrm_api3_object_to_array($websiteBAO, $values[$websiteBAO->id]); - return civicrm_api3_create_success($values, $params, 'Website', 'get'); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'Website'); } /** diff --git a/civicrm/api/v3/WordReplacement.php b/civicrm/api/v3/WordReplacement.php index 01a6e1a4bd8d02a050d0b6562cd9009be04952e7..93d779e878e7fedae0cb9c7cf15a40ab1f2b5269 100644 --- a/civicrm/api/v3/WordReplacement.php +++ b/civicrm/api/v3/WordReplacement.php @@ -55,7 +55,7 @@ function civicrm_api3_word_replacement_get($params) { * @return array */ function civicrm_api3_word_replacement_create($params) { - return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params); + return _civicrm_api3_basic_create(_civicrm_api3_get_BAO(__FUNCTION__), $params, 'WordReplacement'); } /** diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php index 7640e9ae127743894555e35da2fd9b04f2bda977..b12e53636ddf0cb3b698eef466d1f09347fb6263 100644 --- a/civicrm/api/v3/utils.php +++ b/civicrm/api/v3/utils.php @@ -2441,13 +2441,13 @@ function _civicrm_api3_field_value_check(&$params, $fieldName, $type = NULL) { * List of all records. * @param string $idCol * The property which defines the ID of a record - * @param array $fields + * @param array $filterableFields * List of filterable fields. * * @return array * @throws \API_Exception */ -function _civicrm_api3_basic_array_get($entity, $params, $records, $idCol, $fields) { +function _civicrm_api3_basic_array_get($entity, $params, $records, $idCol, $filterableFields) { $options = _civicrm_api3_get_options_from_params($params, TRUE, $entity, 'get'); // TODO // $sort = CRM_Utils_Array::value('sort', $options, NULL); $offset = CRM_Utils_Array::value('offset', $options); @@ -2465,7 +2465,7 @@ function _civicrm_api3_basic_array_get($entity, $params, $records, $idCol, $fiel if ($k == 'id') { $k = $idCol; } - if (in_array($k, $fields) && $record[$k] != $v) { + if (in_array($k, $filterableFields) && $record[$k] != $v) { $match = FALSE; break; } diff --git a/civicrm/bower_components/crossfilter2/.bower.json b/civicrm/bower_components/crossfilter2/.bower.json index dc6f7ce79049361d1c1a03ae8f5d7109049e0af6..d7363b6302f4eaa07b13f2d78cbb7bf5ad773e26 100644 --- a/civicrm/bower_components/crossfilter2/.bower.json +++ b/civicrm/bower_components/crossfilter2/.bower.json @@ -17,22 +17,22 @@ "**/.*", "node_modules", "bower_components", - "src", - "lib", - "test", - "component.json", "package.json", "index.js", - "Makefile" + "src", + "component.json", + "media", + "test", + "tests" ], - "version": "1.3.14", - "_release": "1.3.14", + "version": "1.4.5", + "_release": "1.4.5", "_resolution": { "type": "version", - "tag": "1.3.14", - "commit": "8066669e84e13a8e3212df6dc20dee63f083cca2" + "tag": "1.4.5", + "commit": "1ab783060946492b38a902e6ec4816c68ec79127" }, "_source": "https://github.com/crossfilter/crossfilter.git", - "_target": "~1.3", + "_target": "~1.4", "_originalSource": "crossfilter2" } \ No newline at end of file diff --git a/civicrm/bower_components/crossfilter2/AUTHORS b/civicrm/bower_components/crossfilter2/AUTHORS new file mode 100644 index 0000000000000000000000000000000000000000..1ad8182c28385cf67a7874e71d3e598591a37760 --- /dev/null +++ b/civicrm/bower_components/crossfilter2/AUTHORS @@ -0,0 +1,20 @@ +# Below is a list of people and organizations that have contributed +# to the Crossfilter project. Names should be added to the list like so: +# +# Name/Organization <email address> (alphabetical order by last name) + +Douglas Armstrong <site@xnet.com> +Samuel Cormier-Iijima <sciyoshi@gmail.com> +Mark Herhold <mherhold@rti.org> +Ethan Jewett <ethan.jewett@coredatra.com> + + +# Below is a list of people and organizations that have contributed +# to the Dart project. Names should be added to the list like so: +# +# Name/Organization <email address> + +Google Inc. + +Ola Martin Bini <ola.bini@gmail.com> +Michael Haubenwallner <michael.haubenwallner@gmail.com> diff --git a/civicrm/bower_components/crossfilter2/CONTRIBUTING.md b/civicrm/bower_components/crossfilter2/CONTRIBUTING.md index 4e2411bf923536287ebb9f542ebf26baec84a2a6..616c1631bb7e73d34f9222504654aa770a00e4ee 100644 --- a/civicrm/bower_components/crossfilter2/CONTRIBUTING.md +++ b/civicrm/bower_components/crossfilter2/CONTRIBUTING.md @@ -1,23 +1,21 @@ ## Contributing To Crossfilter -### Individual Contributor License Agreement +If you want to contribute to Crossfilter, please submit a PR with your changes. The PR should contain tests (but not build artifacts). -Want to add support for a new backend or visualization? We'd love for you to participate in the development of Crossfilter. Before we can accept your pull request, please sign our [Individual Contributor License Agreement][1]. It's a short form that covers our bases and makes sure you're eligible to contribute. Thank you! - - [1]: https://spreadsheets.google.com/spreadsheet/viewform?formkey=dDViT2xzUHAwRkI3X3k5Z0lQM091OGc6MQ&ndplr=1 +This is a community-maintained fork of [square/crossfilter](https://github.com/square/crossfilter) and you don't need to sign a contributor agreement. ### Getting Help -Full API documentation is kept [in the wiki][2]. If you have a question or need help using Crossfilter, please ask on Stackoverflow using the [crossfilter tag][3]. Feel free to file bug reports and other suggestions in the [github issue tracker][4]. +Full API documentation is kept [in the wiki][2]. If you have a question or need help using Crossfilter, please ask on Stackoverflow using the [crossfilter tag][3], or on the [crossfilter users group](https://groups.google.com/forum/#!forum/crossfilter). Feel free to file bug reports and other suggestions in the [github issue tracker][4]. - [2]: https://github.com/square/crossfilter/wiki + [2]: https://github.com/crossfilter/crossfilter/wiki [3]: http://stackoverflow.com/questions/tagged/crossfilter - [4]: https://github.com/square/crossfilter/issues + [4]: https://github.com/crossfilter/crossfilter/issues ### License Crossfilter is available under the [Apache License][5]. - [5]: https://github.com/square/crossfilter/blob/master/LICENSE + [5]: https://github.com/crossfilter/crossfilter/blob/master/LICENSE diff --git a/civicrm/bower_components/crossfilter2/LICENSE b/civicrm/bower_components/crossfilter2/LICENSE index a0ae5ddbc7129c4c6358dad941f35ee9b706e367..9b729ccd20b66a9a5f4ae7a6c4534e9f1d1f4493 100644 --- a/civicrm/bower_components/crossfilter2/LICENSE +++ b/civicrm/bower_components/crossfilter2/LICENSE @@ -1,4 +1,6 @@ -Copyright 2012 Square, Inc. +Copyright 2012-2016 Square, Inc, and crossfilter contributors. +See the AUTHORS file at the top level of this distribution and +https://github.com/crossfilter/crossfilter/blob/master/AUTHORS Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the diff --git a/civicrm/bower_components/crossfilter2/NOTICE b/civicrm/bower_components/crossfilter2/NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..6f1c66a513706d7c541f23da667b6eeeb5260d3f --- /dev/null +++ b/civicrm/bower_components/crossfilter2/NOTICE @@ -0,0 +1,28 @@ +Original copyright notice from the Dart project Quicksort implementation. The +quicksort implementation at src/quicksort.js is based on this implementation: + +Copyright 2012, the Dart project authors. All rights reserved. Redistribution +and use in source and binary forms, with or without modification, are permitted +provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of Google Inc. nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/civicrm/bower_components/crossfilter2/README.md b/civicrm/bower_components/crossfilter2/README.md index a8e0b9175fe3bd48a78dee47022e78f3875ffb96..5b0893fd1cbeca6d3a50d1aa71ff295d8ad9a1fe 100644 --- a/civicrm/bower_components/crossfilter2/README.md +++ b/civicrm/bower_components/crossfilter2/README.md @@ -1,7 +1,23 @@ # Crossfilter -**Crossfilter** is a JavaScript library for exploring large multivariate datasets in the browser. Crossfilter supports extremely fast (<30ms) interaction with coordinated views, even with datasets containing a million or more records; we built it to power analytics for Square Register, allowing merchants to slice and dice their payment history fluidly. +[](https://gitter.im/crossfilter/crossfilter?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://travis-ci.org/crossfilter/crossfilter) [](https://cdnjs.com/libraries/crossfilter2) + +**Crossfilter** is a JavaScript library for exploring large multivariate datasets in the browser. Crossfilter supports extremely fast (<30ms) interaction with coordinated views, even with datasets containing a million or more records. Since most interactions only involve a single dimension, and then only small adjustments are made to the filter values, incremental filtering and reducing is significantly faster than starting from scratch. Crossfilter uses sorted indexes (and a few bit-twiddling hacks) to make this possible, dramatically increasing the perforÂmance of live histograms and top-K lists. Crossfilter is available under the [Apache License](/square/crossfilter/blob/master/LICENSE). -Want to learn more? [See the wiki.](https://github.com/square/crossfilter/wiki) +This is a community-maintained fork of the original [square/crossfilter](https://github.com/square/crossfilter) library. + +Want to learn more? [See the wiki.](https://github.com/crossfilter/crossfilter/wiki) + +## Gallery of Community Examples + +* [Configurable Chart Collection (C3) - World Bank Example](http://drarmstr.github.io/chartcollection/examples/#worldbank) - ([Source](http://drarmstr.github.io/chartcollection/examples/#worldbank/source), [HTML](http://drarmstr.github.io/chartcollection/examples/#worldbank/html)) +* [Dimensional Charting JavaScript Library (dc.js)](https://dc-js.github.io/dc.js/) - ([Source](https://dc-js.github.io/dc.js/docs/stock.html)) + +## Development +Install dependencies: + * `npm install` + * `npm install -g browserify uglify-js` + +Test changes with `npm test`. Build with `npm run build` for use in the browser. You may also want to benchmark your changes with `npm run benchmark`. diff --git a/civicrm/bower_components/crossfilter2/bower.json b/civicrm/bower_components/crossfilter2/bower.json index c75d6ff0d973be32bc482dd50e444ceb0d76eaae..7fbdaeda405c2f0f13ec5ef2de8c8e7324246eff 100644 --- a/civicrm/bower_components/crossfilter2/bower.json +++ b/civicrm/bower_components/crossfilter2/bower.json @@ -17,12 +17,12 @@ "**/.*", "node_modules", "bower_components", - "src", - "lib", - "test", - "component.json", "package.json", "index.js", - "Makefile" + "src", + "component.json", + "media", + "test", + "tests" ] } diff --git a/civicrm/bower_components/crossfilter2/crossfilter.js b/civicrm/bower_components/crossfilter2/crossfilter.js index a9b843b24b822b5884560eefd47cff913d9f0910..49b664e715e6f7fb422b7005434507c829e8546a 100644 --- a/civicrm/bower_components/crossfilter2/crossfilter.js +++ b/civicrm/bower_components/crossfilter2/crossfilter.js @@ -1,19 +1,1136 @@ -(function(exports){ -crossfilter.version = "1.3.14"; -function crossfilter_identity(d) { - return d; +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.crossfilter = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +module.exports = require("./src/crossfilter").crossfilter; + +},{"./src/crossfilter":6}],2:[function(require,module,exports){ +(function (global){ +/** + * lodash (Custom Build) <https://lodash.com/> + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors <https://jquery.org/> + * Released under MIT license <https://lodash.com/license> + * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; } -crossfilter.permute = permute; -function permute(array, index) { - for (var i = 0, n = index.length, copy = new Array(n); i < n; ++i) { - copy[i] = array[index[i]]; +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} } - return copy; + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ +function result(object, path, defaultValue) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + object = undefined; + length = 1; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; +} + +module.exports = result; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],3:[function(require,module,exports){ +module.exports={"version":"1.4.5"} +},{}],4:[function(require,module,exports){ +if (typeof Uint8Array !== "undefined") { + var crossfilter_array8 = function(n) { return new Uint8Array(n); }; + var crossfilter_array16 = function(n) { return new Uint16Array(n); }; + var crossfilter_array32 = function(n) { return new Uint32Array(n); }; + + var crossfilter_arrayLengthen = function(array, length) { + if (array.length >= length) return array; + var copy = new array.constructor(length); + copy.set(array); + return copy; + }; + + var crossfilter_arrayWiden = function(array, width) { + var copy; + switch (width) { + case 16: copy = crossfilter_array16(array.length); break; + case 32: copy = crossfilter_array32(array.length); break; + default: throw new Error("invalid array width!"); + } + copy.set(array); + return copy; + }; +} + +function crossfilter_arrayUntyped(n) { + var array = new Array(n), i = -1; + while (++i < n) array[i] = 0; + return array; +} + +function crossfilter_arrayLengthenUntyped(array, length) { + var n = array.length; + while (n < length) array[n++] = 0; + return array; +} + +function crossfilter_arrayWidenUntyped(array, width) { + if (width > 32) throw new Error("invalid array width!"); + return array; +} + +// An arbitrarily-wide array of bitmasks +function crossfilter_bitarray(n) { + this.length = n; + this.subarrays = 1; + this.width = 8; + this.masks = { + 0: 0 + } + + this[0] = crossfilter_array8(n); +} + +crossfilter_bitarray.prototype.lengthen = function(n) { + var i, len; + for (i = 0, len = this.subarrays; i < len; ++i) { + this[i] = crossfilter_arrayLengthen(this[i], n); + } + this.length = n; +}; + +// Reserve a new bit index in the array, returns {offset, one} +crossfilter_bitarray.prototype.add = function() { + var m, w, one, i, len; + + for (i = 0, len = this.subarrays; i < len; ++i) { + m = this.masks[i]; + w = this.width - (32 * i); + one = ~m & -~m; + + if (w >= 32 && !one) { + continue; + } + + if (w < 32 && (one & (1 << w))) { + // widen this subarray + this[i] = crossfilter_arrayWiden(this[i], w <<= 1); + this.width = 32 * i + w; + } + + this.masks[i] |= one; + + return { + offset: i, + one: one + }; + } + + // add a new subarray + this[this.subarrays] = crossfilter_array8(this.length); + this.masks[this.subarrays] = 1; + this.width += 8; + return { + offset: this.subarrays++, + one: 1 + }; +}; + +// Copy record from index src to index dest +crossfilter_bitarray.prototype.copy = function(dest, src) { + var i, len; + for (i = 0, len = this.subarrays; i < len; ++i) { + this[i][dest] = this[i][src]; + } +}; + +// Truncate the array to the given length +crossfilter_bitarray.prototype.truncate = function(n) { + var i, len; + for (i = 0, len = this.subarrays; i < len; ++i) { + for (var j = this.length - 1; j >= n; j--) { + this[i][j] = 0; + } + this[i].length = n; + } + this.length = n; +}; + +// Checks that all bits for the given index are 0 +crossfilter_bitarray.prototype.zero = function(n) { + var i, len; + for (i = 0, len = this.subarrays; i < len; ++i) { + if (this[i][n]) { + return false; + } + } + return true; +}; + +// Checks that all bits for the given index are 0 except for possibly one +crossfilter_bitarray.prototype.zeroExcept = function(n, offset, zero) { + var i, len; + for (i = 0, len = this.subarrays; i < len; ++i) { + if (i === offset ? this[i][n] & zero : this[i][n]) { + return false; + } + } + return true; +}; + +// Checks that all bits for the given indez are 0 except for the specified mask. +// The mask should be an array of the same size as the filter subarrays width. +crossfilter_bitarray.prototype.zeroExceptMask = function(n, mask) { + var i, len; + for (i = 0, len = this.subarrays; i < len; ++i) { + if (this[i][n] & mask[i]) { + return false; + } + } + return true; } -var bisect = crossfilter.bisect = bisect_by(crossfilter_identity); -bisect.by = bisect_by; +// Checks that only the specified bit is set for the given index +crossfilter_bitarray.prototype.only = function(n, offset, one) { + var i, len; + for (i = 0, len = this.subarrays; i < len; ++i) { + if (this[i][n] != (i === offset ? one : 0)) { + return false; + } + } + return true; +}; + +// Checks that only the specified bit is set for the given index except for possibly one other +crossfilter_bitarray.prototype.onlyExcept = function(n, offset, zero, onlyOffset, onlyOne) { + var mask; + var i, len; + for (i = 0, len = this.subarrays; i < len; ++i) { + mask = this[i][n]; + if (i === offset) + mask &= zero; + if (mask != (i === onlyOffset ? onlyOne : 0)) { + return false; + } + } + return true; +}; + +module.exports = { + array8: crossfilter_arrayUntyped, + array16: crossfilter_arrayUntyped, + array32: crossfilter_arrayUntyped, + arrayLengthen: crossfilter_arrayLengthenUntyped, + arrayWiden: crossfilter_arrayWidenUntyped, + bitarray: crossfilter_bitarray +}; + +},{}],5:[function(require,module,exports){ +'use strict'; + +var crossfilter_identity = require('./identity'); function bisect_by(f) { @@ -55,1347 +1172,1992 @@ function bisect_by(f) { bisectRight.left = bisectLeft; return bisectRight; } -var heap = crossfilter.heap = heap_by(crossfilter_identity); -heap.by = heap_by; +module.exports = bisect_by(crossfilter_identity); +module.exports.by = bisect_by; // assign the raw function to the export as well + +},{"./identity":10}],6:[function(require,module,exports){ +'use strict'; + +var xfilterArray = require('./array'); +var xfilterFilter = require('./filter'); +var crossfilter_identity = require('./identity'); +var crossfilter_null = require('./null'); +var crossfilter_zero = require('./zero'); +var xfilterHeapselect = require('./heapselect'); +var xfilterHeap = require('./heap'); +var bisect = require('./bisect'); +var insertionsort = require('./insertionsort'); +var permute = require('./permute'); +var quicksort = require('./quicksort'); +var xfilterReduce = require('./reduce'); +var packageJson = require('./../package.json'); // require own package.json for the version field +var result = require('lodash.result'); + +// constants +var REMOVED_INDEX = -1; + +// expose API exports +exports.crossfilter = crossfilter; +exports.crossfilter.heap = xfilterHeap; +exports.crossfilter.heapselect = xfilterHeapselect; +exports.crossfilter.bisect = bisect; +exports.crossfilter.insertionsort = insertionsort; +exports.crossfilter.permute = permute; +exports.crossfilter.quicksort = quicksort; +exports.crossfilter.version = packageJson.version; // please note use of "package-json-versionify" transform -function heap_by(f) { +function crossfilter() { + var crossfilter = { + add: add, + remove: removeData, + dimension: dimension, + groupAll: groupAll, + size: size, + all: all, + allFiltered: allFiltered, + onChange: onChange, + isElementFiltered: isElementFiltered + }; - // Builds a binary heap within the specified array a[lo:hi]. The heap has the - // property such that the parent a[lo+i] is always less than or equal to its - // two children: a[lo+2*i+1] and a[lo+2*i+2]. - function heap(a, lo, hi) { - var n = hi - lo, - i = (n >>> 1) + 1; - while (--i > 0) sift(a, i, n, lo); - return a; - } + var data = [], // the records + n = 0, // the number of records; data.length + filters, // 1 is filtered out + filterListeners = [], // when the filters change + dataListeners = [], // when data is added + removeDataListeners = [], // when data is removed + callbacks = []; - // Sorts the specified array a[lo:hi] in descending order, assuming it is - // already a heap. - function sort(a, lo, hi) { - var n = hi - lo, - t; - while (--n > 0) t = a[lo], a[lo] = a[lo + n], a[lo + n] = t, sift(a, 1, n, lo); - return a; - } + filters = new xfilterArray.bitarray(0); - // Sifts the element a[lo+i-1] down the heap, where the heap is the contiguous - // slice of array a[lo:lo+n]. This method can also be used to update the heap - // incrementally, without incurring the full cost of reconstructing the heap. - function sift(a, i, n, lo) { - var d = a[--lo + i], - x = f(d), - child; - while ((child = i << 1) <= n) { - if (child < n && f(a[lo + child]) > f(a[lo + child + 1])) child++; - if (x <= f(a[lo + child])) break; - a[lo + i] = a[lo + child]; - i = child; + // Adds the specified new records to this crossfilter. + function add(newData) { + var n0 = n, + n1 = newData.length; + + // If there's actually new data to add… + // Merge the new data into the existing data. + // Lengthen the filter bitset to handle the new records. + // Notify listeners (dimensions and groups) that new data is available. + if (n1) { + data = data.concat(newData); + filters.lengthen(n += n1); + dataListeners.forEach(function(l) { l(newData, n0, n1); }); + triggerOnChange('dataAdded'); } - a[lo + i] = d; + + return crossfilter; } - heap.sort = sort; - return heap; -} -var heapselect = crossfilter.heapselect = heapselect_by(crossfilter_identity); + // Removes all records that match the current filters, or if a predicate function is passed, + // removes all records matching the predicate (ignoring filters). + function removeData(predicate) { + var // Mapping from old record indexes to new indexes (after records removed) + newIndex = crossfilter_index(n, n), + removed = [], + usePred = typeof predicate === 'function', + shouldRemove = function (i) { + return usePred ? predicate(data[i], i) : filters.zero(i) + }; + + for (var index1 = 0, index2 = 0; index1 < n; ++index1) { + if ( shouldRemove(index1) ) { + removed.push(index1); + newIndex[index1] = REMOVED_INDEX; + } else { + newIndex[index1] = index2++; + } + } -heapselect.by = heapselect_by; + // Remove all matching records from groups. + filterListeners.forEach(function(l) { l(-1, -1, [], removed, true); }); -function heapselect_by(f) { - var heap = heap_by(f); + // Update indexes. + removeDataListeners.forEach(function(l) { l(newIndex); }); - // Returns a new array containing the top k elements in the array a[lo:hi]. - // The returned array is not sorted, but maintains the heap property. If k is - // greater than hi - lo, then fewer than k elements will be returned. The - // order of elements in a is unchanged by this operation. - function heapselect(a, lo, hi, k) { - var queue = new Array(k = Math.min(hi - lo, k)), - min, - i, - x, - d; + // Remove old filters and data by overwriting. + for (var index3 = 0, index4 = 0; index3 < n; ++index3) { + if ( newIndex[index3] !== REMOVED_INDEX ) { + if (index3 !== index4) filters.copy(index4, index3), data[index4] = data[index3]; + ++index4; + } + } - for (i = 0; i < k; ++i) queue[i] = a[lo++]; - heap(queue, 0, k); + data.length = n = index4; + filters.truncate(index4); + triggerOnChange('dataRemoved'); + } - if (lo < hi) { - min = f(queue[0]); - do { - if (x = f(d = a[lo]) > min) { - queue[0] = d; - min = f(heap(queue, 0, k)[0]); - } - } while (++lo < hi); + // Return true if the data element at index i is filtered IN. + // Optionally, ignore the filters of any dimensions in the ignore_dimensions list. + function isElementFiltered(i, ignore_dimensions) { + var n, + d, + id, + len, + mask = Array(filters.subarrays); + for (n = 0; n < filters.subarrays; n++) { mask[n] = ~0; } + if (ignore_dimensions) { + for (d = 0, len = ignore_dimensions.length; d < len; d++) { + // The top bits of the ID are the subarray offset and the lower bits are the bit + // offset of the "one" mask. + id = ignore_dimensions[d].id(); + mask[id >> 7] &= ~(0x1 << (id & 0x3f)); + } } - - return queue; + return filters.zeroExceptMask(i,mask); } - return heapselect; -} -var insertionsort = crossfilter.insertionsort = insertionsort_by(crossfilter_identity); + // Adds a new dimension with the specified value accessor function. + function dimension(value, iterable) { -insertionsort.by = insertionsort_by; + if (typeof value === 'string') { + var accessorPath = value; + value = function(d) { return result(d, accessorPath); }; + } -function insertionsort_by(f) { + var dimension = { + filter: filter, + filterExact: filterExact, + filterRange: filterRange, + filterFunction: filterFunction, + filterAll: filterAll, + currentFilter: currentFilter, + hasCurrentFilter: hasCurrentFilter, + top: top, + bottom: bottom, + group: group, + groupAll: groupAll, + dispose: dispose, + remove: dispose, // for backwards-compatibility + accessor: value, + id: function() { return id; } + }; - function insertionsort(a, lo, hi) { - for (var i = lo + 1; i < hi; ++i) { - for (var j = i, t = a[i], x = f(t); j > lo && f(a[j - 1]) > x; --j) { - a[j] = a[j - 1]; - } - a[j] = t; - } - return a; - } + var one, // lowest unset bit as mask, e.g., 00001000 + zero, // inverted one, e.g., 11110111 + offset, // offset into the filters arrays + id, // unique ID for this dimension (reused when dimensions are disposed) + values, // sorted, cached array + index, // maps sorted value index -> record index (in data) + newValues, // temporary array storing newly-added values + newIndex, // temporary array storing newly-added index + iterablesIndexCount, + newIterablesIndexCount, + iterablesIndexFilterStatus, + newIterablesIndexFilterStatus, + iterablesEmptyRows = [], + sort = quicksort.by(function(i) { return newValues[i]; }), + refilter = xfilterFilter.filterAll, // for recomputing filter + refilterFunction, // the custom filter function in use + filterValue, // the value used for filtering (value, array, function or undefined) + filterValuePresent, // true if filterValue contains something + indexListeners = [], // when data is added + dimensionGroups = [], + lo0 = 0, + hi0 = 0, + t = 0, + k; - return insertionsort; -} -// Algorithm designed by Vladimir Yaroslavskiy. -// Implementation based on the Dart project; see lib/dart/LICENSE for details. + // Updating a dimension is a two-stage process. First, we must update the + // associated filters for the newly-added records. Once all dimensions have + // updated their filters, the groups are notified to update. + dataListeners.unshift(preAdd); + dataListeners.push(postAdd); -var quicksort = crossfilter.quicksort = quicksort_by(crossfilter_identity); + removeDataListeners.push(removeData); -quicksort.by = quicksort_by; + // Add a new dimension in the filter bitmap and store the offset and bitmask. + var tmp = filters.add(); + offset = tmp.offset; + one = tmp.one; + zero = ~one; -function quicksort_by(f) { - var insertionsort = insertionsort_by(f); + // Create a unique ID for the dimension + // IDs will be re-used if dimensions are disposed. + // For internal use the ID is the subarray offset shifted left 7 bits or'd with the + // bit offset of the set bit in the dimension's "one" mask. + id = (offset << 7) | (Math.log(one) / Math.log(2)); - function sort(a, lo, hi) { - return (hi - lo < quicksort_sizeThreshold - ? insertionsort - : quicksort)(a, lo, hi); - } + preAdd(data, 0, n); + postAdd(data, 0, n); - function quicksort(a, lo, hi) { - // Compute the two pivots by looking at 5 elements. - var sixth = (hi - lo) / 6 | 0, - i1 = lo + sixth, - i5 = hi - 1 - sixth, - i3 = lo + hi - 1 >> 1, // The midpoint. - i2 = i3 - sixth, - i4 = i3 + sixth; + // Incorporates the specified new records into this dimension. + // This function is responsible for updating filters, values, and index. + function preAdd(newData, n0, n1) { - var e1 = a[i1], x1 = f(e1), - e2 = a[i2], x2 = f(e2), - e3 = a[i3], x3 = f(e3), - e4 = a[i4], x4 = f(e4), - e5 = a[i5], x5 = f(e5); + if (iterable){ + // Count all the values + t = 0; + j = 0; + k = []; - var t; + for (var i0 = 0; i0 < newData.length; i0++) { + for(j = 0, k = value(newData[i0]); j < k.length; j++) { + t++; + } + } - // Sort the selected 5 elements using a sorting network. - if (x1 > x2) t = e1, e1 = e2, e2 = t, t = x1, x1 = x2, x2 = t; - if (x4 > x5) t = e4, e4 = e5, e5 = t, t = x4, x4 = x5, x5 = t; - if (x1 > x3) t = e1, e1 = e3, e3 = t, t = x1, x1 = x3, x3 = t; - if (x2 > x3) t = e2, e2 = e3, e3 = t, t = x2, x2 = x3, x3 = t; - if (x1 > x4) t = e1, e1 = e4, e4 = t, t = x1, x1 = x4, x4 = t; - if (x3 > x4) t = e3, e3 = e4, e4 = t, t = x3, x3 = x4, x4 = t; - if (x2 > x5) t = e2, e2 = e5, e5 = t, t = x2, x2 = x5, x5 = t; - if (x2 > x3) t = e2, e2 = e3, e3 = t, t = x2, x2 = x3, x3 = t; - if (x4 > x5) t = e4, e4 = e5, e5 = t, t = x4, x4 = x5, x5 = t; + newValues = []; + newIterablesIndexCount = crossfilter_range(newData.length); + newIterablesIndexFilterStatus = crossfilter_index(t,1); + var unsortedIndex = crossfilter_range(t); + + for (var l = 0, index1 = 0; index1 < newData.length; index1++) { + k = value(newData[index1]) + // + if(!k.length){ + newIterablesIndexCount[index1] = 0; + iterablesEmptyRows.push(index1 + n0); + continue; + } + newIterablesIndexCount[index1] = k.length + for (j = 0; j < k.length; j++) { + newValues.push(k[j]); + unsortedIndex[l] = index1; + l++; + } + } - var pivot1 = e2, pivotValue1 = x2, - pivot2 = e4, pivotValue2 = x4; + // Create the Sort map used to sort both the values and the valueToData indices + var sortMap = sort(crossfilter_range(t), 0, t); - // e2 and e4 have been saved in the pivot variables. They will be written - // back, once the partitioning is finished. - a[i1] = e1; - a[i2] = a[lo]; - a[i3] = e3; - a[i4] = a[hi - 1]; - a[i5] = e5; + // Use the sortMap to sort the newValues + newValues = permute(newValues, sortMap); - var less = lo + 1, // First element in the middle partition. - great = hi - 2; // Last element in the middle partition. - // Note that for value comparison, <, <=, >= and > coerce to a primitive via - // Object.prototype.valueOf; == and === do not, so in order to be consistent - // with natural order (such as for Date objects), we must do two compares. - var pivotsEqual = pivotValue1 <= pivotValue2 && pivotValue1 >= pivotValue2; - if (pivotsEqual) { + // Use the sortMap to sort the unsortedIndex map + // newIndex should be a map of sortedValue -> crossfilterData + newIndex = permute(unsortedIndex, sortMap) - // Degenerated case where the partitioning becomes a dutch national flag - // problem. - // - // [ | < pivot | == pivot | unpartitioned | > pivot | ] - // ^ ^ ^ ^ ^ - // left less k great right - // - // a[left] and a[right] are undefined and are filled after the - // partitioning. - // - // Invariants: - // 1) for x in ]left, less[ : x < pivot. - // 2) for x in [less, k[ : x == pivot. - // 3) for x in ]great, right[ : x > pivot. - for (var k = less; k <= great; ++k) { - var ek = a[k], xk = f(ek); - if (xk < pivotValue1) { - if (k !== less) { - a[k] = a[less]; - a[less] = ek; - } - ++less; - } else if (xk > pivotValue1) { + } else{ + // Permute new values into natural order using a standard sorted index. + newValues = newData.map(value); + newIndex = sort(crossfilter_range(n1), 0, n1); + newValues = permute(newValues, newIndex); + } - // Find the first element <= pivot in the range [k - 1, great] and - // put [:ek:] there. We know that such an element must exist: - // When k == less, then el3 (which is equal to pivot) lies in the - // interval. Otherwise a[k - 1] == pivot and the search stops at k-1. - // Note that in the latter case invariant 2 will be violated for a - // short amount of time. The invariant will be restored when the - // pivots are put into their final positions. - while (true) { - var greatValue = f(a[great]); - if (greatValue > pivotValue1) { - great--; - // This is the only location in the while-loop where a new - // iteration is started. - continue; - } else if (greatValue < pivotValue1) { - // Triple exchange. - a[k] = a[less]; - a[less++] = a[great]; - a[great--] = ek; - break; - } else { - a[k] = a[great]; - a[great--] = ek; - // Note: if great < k then we will exit the outer loop and fix - // invariant 2 (which we just violated). - break; - } - } - } + if(iterable) { + n1 = t; } - } else { - // We partition the list into three parts: - // 1. < pivot1 - // 2. >= pivot1 && <= pivot2 - // 3. > pivot2 - // - // During the loop we have: - // [ | < pivot1 | >= pivot1 && <= pivot2 | unpartitioned | > pivot2 | ] - // ^ ^ ^ ^ ^ - // left less k great right - // - // a[left] and a[right] are undefined and are filled after the - // partitioning. - // - // Invariants: - // 1. for x in ]left, less[ : x < pivot1 - // 2. for x in [less, k[ : pivot1 <= x && x <= pivot2 - // 3. for x in ]great, right[ : x > pivot2 - for (var k = less; k <= great; k++) { - var ek = a[k], xk = f(ek); - if (xk < pivotValue1) { - if (k !== less) { - a[k] = a[less]; - a[less] = ek; - } - ++less; - } else { - if (xk > pivotValue2) { - while (true) { - var greatValue = f(a[great]); - if (greatValue > pivotValue2) { - great--; - if (great < k) break; - // This is the only location inside the loop where a new - // iteration is started. - continue; - } else { - // a[great] <= pivot2. - if (greatValue < pivotValue1) { - // Triple exchange. - a[k] = a[less]; - a[less++] = a[great]; - a[great--] = ek; - } else { - // a[great] >= pivot1. - a[k] = a[great]; - a[great--] = ek; - } - break; - } - } + // Bisect newValues to determine which new records are selected. + var bounds = refilter(newValues), lo1 = bounds[0], hi1 = bounds[1]; + if (refilterFunction) { + for (var index2 = 0; index2 < n1; ++index2) { + if (!refilterFunction(newValues[index2], index2)) { + filters[offset][newIndex[index2] + n0] |= one; + if(iterable) newIterablesIndexFilterStatus[index2] = 1; } } + } else { + for (var index3 = 0; index3 < lo1; ++index3) { + filters[offset][newIndex[index3] + n0] |= one; + if(iterable) newIterablesIndexFilterStatus[index3] = 1; + } + for (var index4 = hi1; index4 < n1; ++index4) { + filters[offset][newIndex[index4] + n0] |= one; + if(iterable) newIterablesIndexFilterStatus[index4] = 1; + } } - } - // Move pivots into their final positions. - // We shrunk the list from both sides (a[left] and a[right] have - // meaningless values in them) and now we move elements from the first - // and third partition into these locations so that we can store the - // pivots. - a[lo] = a[less - 1]; - a[less - 1] = pivot1; - a[hi - 1] = a[great + 1]; - a[great + 1] = pivot2; + // If this dimension previously had no data, then we don't need to do the + // more expensive merge operation; use the new values and index as-is. + if (!n0) { + values = newValues; + index = newIndex; + iterablesIndexCount = newIterablesIndexCount; + iterablesIndexFilterStatus = newIterablesIndexFilterStatus; + lo0 = lo1; + hi0 = hi1; + return; + } - // The list is now partitioned into three partitions: - // [ < pivot1 | >= pivot1 && <= pivot2 | > pivot2 ] - // ^ ^ ^ ^ - // left less great right - // Recursive descent. (Don't include the pivot values.) - sort(a, lo, less - 1); - sort(a, great + 2, hi); - if (pivotsEqual) { - // All elements in the second partition are equal to the pivot. No - // need to sort them. - return a; - } + var oldValues = values, + oldIndex = index, + oldIterablesIndexFilterStatus = iterablesIndexFilterStatus, + old_n0, + i1 = 0; - // In theory it should be enough to call _doSort recursively on the second - // partition. - // The Android source however removes the pivot elements from the recursive - // call if the second partition is too large (more than 2/3 of the list). - if (less < i1 && great > i5) { - var lessValue, greatValue; - while ((lessValue = f(a[less])) <= pivotValue1 && lessValue >= pivotValue1) ++less; - while ((greatValue = f(a[great])) <= pivotValue2 && greatValue >= pivotValue2) --great; + i0 = 0; - // Copy paste of the previous 3-way partitioning with adaptions. - // - // We partition the list into three parts: - // 1. == pivot1 - // 2. > pivot1 && < pivot2 - // 3. == pivot2 - // - // During the loop we have: - // [ == pivot1 | > pivot1 && < pivot2 | unpartitioned | == pivot2 ] - // ^ ^ ^ - // less k great - // - // Invariants: - // 1. for x in [ *, less[ : x == pivot1 - // 2. for x in [less, k[ : pivot1 < x && x < pivot2 - // 3. for x in ]great, * ] : x == pivot2 - for (var k = less; k <= great; k++) { - var ek = a[k], xk = f(ek); - if (xk <= pivotValue1 && xk >= pivotValue1) { - if (k !== less) { - a[k] = a[less]; - a[less] = ek; + if(iterable){ + old_n0 = n0 + n0 = oldValues.length; + n1 = t + } + + // Otherwise, create new arrays into which to merge new and old. + values = iterable ? new Array(n0 + n1) : new Array(n); + index = iterable ? new Array(n0 + n1) : crossfilter_index(n, n); + if(iterable) iterablesIndexFilterStatus = crossfilter_index(n0 + n1, 1); + + // Concatenate the newIterablesIndexCount onto the old one. + if(iterable) { + var oldiiclength = iterablesIndexCount.length; + iterablesIndexCount = xfilterArray.arrayLengthen(iterablesIndexCount, n); + for(var j=0; j+oldiiclength < n; j++) { + iterablesIndexCount[j+oldiiclength] = newIterablesIndexCount[j]; + } + } + + // Merge the old and new sorted values, and old and new index. + var index5 = 0; + for (; i0 < n0 && i1 < n1; ++index5) { + if (oldValues[i0] < newValues[i1]) { + values[index5] = oldValues[i0]; + if(iterable) iterablesIndexFilterStatus[index5] = oldIterablesIndexFilterStatus[i0]; + index[index5] = oldIndex[i0++]; + } else { + values[index5] = newValues[i1]; + if(iterable) iterablesIndexFilterStatus[index5] = newIterablesIndexFilterStatus[i1]; + index[index5] = newIndex[i1++] + (iterable ? old_n0 : n0); + } + } + + // Add any remaining old values. + for (; i0 < n0; ++i0, ++index5) { + values[index5] = oldValues[i0]; + if(iterable) iterablesIndexFilterStatus[index5] = oldIterablesIndexFilterStatus[i0]; + index[index5] = oldIndex[i0]; + } + + // Add any remaining new values. + for (; i1 < n1; ++i1, ++index5) { + values[index5] = newValues[i1]; + if(iterable) iterablesIndexFilterStatus[index5] = newIterablesIndexFilterStatus[i1]; + index[index5] = newIndex[i1] + (iterable ? old_n0 : n0); + } + + // Bisect again to recompute lo0 and hi0. + bounds = refilter(values), lo0 = bounds[0], hi0 = bounds[1]; + } + + // When all filters have updated, notify index listeners of the new values. + function postAdd(newData, n0, n1) { + indexListeners.forEach(function(l) { l(newValues, newIndex, n0, n1); }); + newValues = newIndex = null; + } + + function removeData(reIndex) { + if (iterable) { + for (var i0 = 0, i1 = 0; i0 < iterablesEmptyRows.length; i0++) { + if (reIndex[iterablesEmptyRows[i0]] !== REMOVED_INDEX) { + iterablesEmptyRows[i1] = reIndex[iterablesEmptyRows[i0]]; + i1++; + } + } + iterablesEmptyRows.length = i1; + for (i0 = 0, i1 = 0; i0 < n; i0++) { + if (reIndex[i0] !== REMOVED_INDEX) { + if (i1 !== i0) iterablesIndexCount[i1] = iterablesIndexCount[i0]; + i1++; + } + } + iterablesIndexCount.length = i1; + } + // Rewrite our index, overwriting removed values + var n0 = values.length; + for (var i = 0, j = 0, oldDataIndex; i < n0; ++i) { + oldDataIndex = index[i]; + if (reIndex[oldDataIndex] !== REMOVED_INDEX) { + if (i !== j) values[j] = values[i]; + index[j] = reIndex[oldDataIndex]; + if (iterable) { + iterablesIndexFilterStatus[j] = iterablesIndexFilterStatus[i]; + } + ++j; + } + } + values.length = j; + if (iterable) iterablesIndexFilterStatus.length = j; + while (j < n0) index[j++] = 0; + + // Bisect again to recompute lo0 and hi0. + var bounds = refilter(values); + lo0 = bounds[0], hi0 = bounds[1]; + } + + // Updates the selected values based on the specified bounds [lo, hi]. + // This implementation is used by all the public filter methods. + function filterIndexBounds(bounds) { + + var lo1 = bounds[0], + hi1 = bounds[1]; + + if (refilterFunction) { + refilterFunction = null; + filterIndexFunction(function(d, i) { return lo1 <= i && i < hi1; }, bounds[0] === 0 && bounds[1] === values.length); + lo0 = lo1; + hi0 = hi1; + return dimension; + } + + var i, + j, + k, + added = [], + removed = [], + valueIndexAdded = [], + valueIndexRemoved = []; + + + // Fast incremental update based on previous lo index. + if (lo1 < lo0) { + for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) { + added.push(index[i]); + valueIndexAdded.push(i); + } + } else if (lo1 > lo0) { + for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) { + removed.push(index[i]); + valueIndexRemoved.push(i); + } + } + + // Fast incremental update based on previous hi index. + if (hi1 > hi0) { + for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) { + added.push(index[i]); + valueIndexAdded.push(i); + } + } else if (hi1 < hi0) { + for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) { + removed.push(index[i]); + valueIndexRemoved.push(i); + } + } + + if(!iterable) { + // Flip filters normally. + + for(i=0; i<added.length; i++) { + filters[offset][added[i]] ^= one; + } + + for(i=0; i<removed.length; i++) { + filters[offset][removed[i]] ^= one; + } + + } else { + // For iterables, we need to figure out if the row has been completely removed vs partially included + // Only count a row as added if it is not already being aggregated. Only count a row + // as removed if the last element being aggregated is removed. + + var newAdded = []; + var newRemoved = []; + for (i = 0; i < added.length; i++) { + iterablesIndexCount[added[i]]++ + iterablesIndexFilterStatus[valueIndexAdded[i]] = 0; + if(iterablesIndexCount[added[i]] === 1) { + filters[offset][added[i]] ^= one; + newAdded.push(added[i]); + } + } + for (i = 0; i < removed.length; i++) { + iterablesIndexCount[removed[i]]-- + iterablesIndexFilterStatus[valueIndexRemoved[i]] = 1; + if(iterablesIndexCount[removed[i]] === 0) { + filters[offset][removed[i]] ^= one; + newRemoved.push(removed[i]); + } + } + + added = newAdded; + removed = newRemoved; + + // Now handle empty rows. + if(bounds[0] === 0 && bounds[1] === values.length) { + for(i = 0; i < iterablesEmptyRows.length; i++) { + if((filters[offset][k = iterablesEmptyRows[i]] & one)) { + // Was not in the filter, so set the filter and add + filters[offset][k] ^= one; + added.push(k); + } } - less++; } else { - if (xk <= pivotValue2 && xk >= pivotValue2) { - while (true) { - var greatValue = f(a[great]); - if (greatValue <= pivotValue2 && greatValue >= pivotValue2) { - great--; - if (great < k) break; - // This is the only location inside the loop where a new - // iteration is started. - continue; - } else { - // a[great] < pivot2. - if (greatValue < pivotValue1) { - // Triple exchange. - a[k] = a[less]; - a[less++] = a[great]; - a[great--] = ek; - } else { - // a[great] == pivot1. - a[k] = a[great]; - a[great--] = ek; - } - break; - } + // filter in place - remove empty rows if necessary + for(i = 0; i < iterablesEmptyRows.length; i++) { + if(!(filters[offset][k = iterablesEmptyRows[i]] & one)) { + // Was in the filter, so set the filter and remove + filters[offset][k] ^= one; + removed.push(k); } } } } + + lo0 = lo1; + hi0 = hi1; + filterListeners.forEach(function(l) { l(one, offset, added, removed); }); + triggerOnChange('filtered'); + return dimension; } - // The second partition has now been cleared of pivot elements and looks - // as follows: - // [ * | > pivot1 && < pivot2 | * ] - // ^ ^ - // less great - // Sort the second partition using recursive descent. + // Filters this dimension using the specified range, value, or null. + // If the range is null, this is equivalent to filterAll. + // If the range is an array, this is equivalent to filterRange. + // Otherwise, this is equivalent to filterExact. + function filter(range) { + return range == null + ? filterAll() : Array.isArray(range) + ? filterRange(range) : typeof range === "function" + ? filterFunction(range) + : filterExact(range); + } - // The second partition looks as follows: - // [ * | >= pivot1 && <= pivot2 | * ] - // ^ ^ - // less great - // Simply sort it by recursive descent. + // Filters this dimension to select the exact value. + function filterExact(value) { + filterValue = value; + filterValuePresent = true; + return filterIndexBounds((refilter = xfilterFilter.filterExact(bisect, value))(values)); + } - return sort(a, less, great + 1); - } + // Filters this dimension to select the specified range [lo, hi]. + // The lower bound is inclusive, and the upper bound is exclusive. + function filterRange(range) { + filterValue = range; + filterValuePresent = true; + return filterIndexBounds((refilter = xfilterFilter.filterRange(bisect, range))(values)); + } - return sort; -} + // Clears any filters on this dimension. + function filterAll() { + filterValue = undefined; + filterValuePresent = false; + return filterIndexBounds((refilter = xfilterFilter.filterAll)(values)); + } -var quicksort_sizeThreshold = 32; -var crossfilter_array8 = crossfilter_arrayUntyped, - crossfilter_array16 = crossfilter_arrayUntyped, - crossfilter_array32 = crossfilter_arrayUntyped, - crossfilter_arrayLengthen = crossfilter_arrayLengthenUntyped, - crossfilter_arrayWiden = crossfilter_arrayWidenUntyped; + // Filters this dimension using an arbitrary function. + function filterFunction(f) { + filterValue = f; + filterValuePresent = true; + + refilterFunction = f; + refilter = xfilterFilter.filterAll; -if (typeof Uint8Array !== "undefined") { - crossfilter_array8 = function(n) { return new Uint8Array(n); }; - crossfilter_array16 = function(n) { return new Uint16Array(n); }; - crossfilter_array32 = function(n) { return new Uint32Array(n); }; + filterIndexFunction(f, false); - crossfilter_arrayLengthen = function(array, length) { - if (array.length >= length) return array; - var copy = new array.constructor(length); - copy.set(array); - return copy; - }; + var bounds = refilter(values); + lo0 = bounds[0], hi0 = bounds[1]; - crossfilter_arrayWiden = function(array, width) { - var copy; - switch (width) { - case 16: copy = crossfilter_array16(array.length); break; - case 32: copy = crossfilter_array32(array.length); break; - default: throw new Error("invalid array width!"); + return dimension; } - copy.set(array); - return copy; - }; -} -function crossfilter_arrayUntyped(n) { - var array = new Array(n), i = -1; - while (++i < n) array[i] = 0; - return array; -} + function filterIndexFunction(f, filterAll) { + var i, + k, + x, + added = [], + removed = [], + valueIndexAdded = [], + valueIndexRemoved = [], + indexLength = values.length; + + if(!iterable) { + for (i = 0; i < indexLength; ++i) { + if (!(filters[offset][k = index[i]] & one) ^ !!(x = f(values[i], i))) { + if (x) added.push(k); + else removed.push(k); + } + } + } -function crossfilter_arrayLengthenUntyped(array, length) { - var n = array.length; - while (n < length) array[n++] = 0; - return array; -} + if(iterable) { + for(i=0; i < indexLength; ++i) { + if(f(values[i], i)) { + added.push(index[i]); + valueIndexAdded.push(i); + } else { + removed.push(index[i]); + valueIndexRemoved.push(i); + } + } + } -function crossfilter_arrayWidenUntyped(array, width) { - if (width > 32) throw new Error("invalid array width!"); - return array; -} -function crossfilter_filterExact(bisect, value) { - return function(values) { - var n = values.length; - return [bisect.left(values, value, 0, n), bisect.right(values, value, 0, n)]; - }; -} + if(!iterable) { + for(i=0; i<added.length; i++) { + if(filters[offset][added[i]] & one) filters[offset][added[i]] &= zero; + } + + for(i=0; i<removed.length; i++) { + if(!(filters[offset][removed[i]] & one)) filters[offset][removed[i]] |= one; + } + } else { + + var newAdded = []; + var newRemoved = []; + for (i = 0; i < added.length; i++) { + // First check this particular value needs to be added + if(iterablesIndexFilterStatus[valueIndexAdded[i]] === 1) { + iterablesIndexCount[added[i]]++ + iterablesIndexFilterStatus[valueIndexAdded[i]] = 0; + if(iterablesIndexCount[added[i]] === 1) { + filters[offset][added[i]] ^= one; + newAdded.push(added[i]); + } + } + } + for (i = 0; i < removed.length; i++) { + // First check this particular value needs to be removed + if(iterablesIndexFilterStatus[valueIndexRemoved[i]] === 0) { + iterablesIndexCount[removed[i]]-- + iterablesIndexFilterStatus[valueIndexRemoved[i]] = 1; + if(iterablesIndexCount[removed[i]] === 0) { + filters[offset][removed[i]] ^= one; + newRemoved.push(removed[i]); + } + } + } + + added = newAdded; + removed = newRemoved; + + // Now handle empty rows. + if(filterAll) { + for(i = 0; i < iterablesEmptyRows.length; i++) { + if((filters[offset][k = iterablesEmptyRows[i]] & one)) { + // Was not in the filter, so set the filter and add + filters[offset][k] ^= one; + added.push(k); + } + } + } else { + // filter in place - remove empty rows if necessary + for(i = 0; i < iterablesEmptyRows.length; i++) { + if(!(filters[offset][k = iterablesEmptyRows[i]] & one)) { + // Was in the filter, so set the filter and remove + filters[offset][k] ^= one; + removed.push(k); + } + } + } + } + + filterListeners.forEach(function(l) { l(one, offset, added, removed); }); + triggerOnChange('filtered'); + } + + function currentFilter() { + return filterValue; + } + + function hasCurrentFilter() { + return filterValuePresent; + } + + // Returns the top K selected records based on this dimension's order. + // Note: observes this dimension's filter, unlike group and groupAll. + function top(k, top_offset) { + var array = [], + i = hi0, + j, + toSkip = 0; + + if(top_offset && top_offset > 0) toSkip = top_offset; + + while (--i >= lo0 && k > 0) { + if (filters.zero(j = index[i])) { + if(toSkip > 0) { + //skip matching row + --toSkip; + } else { + array.push(data[j]); + --k; + } + } + } + + if(iterable){ + for(i = 0; i < iterablesEmptyRows.length && k > 0; i++) { + // Add row with empty iterable column at the end + if(filters.zero(j = iterablesEmptyRows[i])) { + if(toSkip > 0) { + //skip matching row + --toSkip; + } else { + array.push(data[j]); + --k; + } + } + } + } + + return array; + } + + // Returns the bottom K selected records based on this dimension's order. + // Note: observes this dimension's filter, unlike group and groupAll. + function bottom(k, bottom_offset) { + var array = [], + i, + j, + toSkip = 0; + + if(bottom_offset && bottom_offset > 0) toSkip = bottom_offset; + + if(iterable) { + // Add row with empty iterable column at the top + for(i = 0; i < iterablesEmptyRows.length && k > 0; i++) { + if(filters.zero(j = iterablesEmptyRows[i])) { + if(toSkip > 0) { + //skip matching row + --toSkip; + } else { + array.push(data[j]); + --k; + } + } + } + } + + i = lo0; + + while (i < hi0 && k > 0) { + if (filters.zero(j = index[i])) { + if(toSkip > 0) { + //skip matching row + --toSkip; + } else { + array.push(data[j]); + --k; + } + } + i++; + } + + return array; + } + + // Adds a new group to this dimension, using the specified key function. + function group(key) { + var group = { + top: top, + all: all, + reduce: reduce, + reduceCount: reduceCount, + reduceSum: reduceSum, + order: order, + orderNatural: orderNatural, + size: size, + dispose: dispose, + remove: dispose // for backwards-compatibility + }; + + // Ensure that this group will be removed when the dimension is removed. + dimensionGroups.push(group); + + var groups, // array of {key, value} + groupIndex, // object id ↦ group id + groupWidth = 8, + groupCapacity = crossfilter_capacity(groupWidth), + k = 0, // cardinality + select, + heap, + reduceAdd, + reduceRemove, + reduceInitial, + update = crossfilter_null, + reset = crossfilter_null, + resetNeeded = true, + groupAll = key === crossfilter_null, + n0old; + + if (arguments.length < 1) key = crossfilter_identity; + + // The group listens to the crossfilter for when any dimension changes, so + // that it can update the associated reduce values. It must also listen to + // the parent dimension for when data is added, and compute new keys. + filterListeners.push(update); + indexListeners.push(add); + removeDataListeners.push(removeData); + + // Incorporate any existing data into the grouping. + add(values, index, 0, n); + + // Incorporates the specified new values into this group. + // This function is responsible for updating groups and groupIndex. + function add(newValues, newIndex, n0, n1) { + + if(iterable) { + n0old = n0 + n0 = values.length - newValues.length + n1 = newValues.length; + } + + var oldGroups = groups, + reIndex = iterable ? [] : crossfilter_index(k, groupCapacity), + add = reduceAdd, + remove = reduceRemove, + initial = reduceInitial, + k0 = k, // old cardinality + i0 = 0, // index of old group + i1 = 0, // index of new record + j, // object id + g0, // old group + x0, // old key + x1, // new key + g, // group to add + x; // key of group to add + + // If a reset is needed, we don't need to update the reduce values. + if (resetNeeded) add = initial = crossfilter_null; + if (resetNeeded) remove = initial = crossfilter_null; + + // Reset the new groups (k is a lower bound). + // Also, make sure that groupIndex exists and is long enough. + groups = new Array(k), k = 0; + if(iterable){ + groupIndex = k0 ? groupIndex : []; + } + else{ + groupIndex = k0 > 1 ? xfilterArray.arrayLengthen(groupIndex, n) : crossfilter_index(n, groupCapacity); + } + + + // Get the first old key (x0 of g0), if it exists. + if (k0) x0 = (g0 = oldGroups[0]).key; + + // Find the first new key (x1), skipping NaN keys. + while (i1 < n1 && !((x1 = key(newValues[i1])) >= x1)) ++i1; + + // While new keys remain… + while (i1 < n1) { + + // Determine the lesser of the two current keys; new and old. + // If there are no old keys remaining, then always add the new key. + if (g0 && x0 <= x1) { + g = g0, x = x0; + + // Record the new index of the old group. + reIndex[i0] = k; + + // Retrieve the next old key. + g0 = oldGroups[++i0]; + if (g0) x0 = g0.key; + } else { + g = {key: x1, value: initial()}, x = x1; + } + + // Add the lesser group. + groups[k] = g; + + // Add any selected records belonging to the added group, while + // advancing the new key and populating the associated group index. + + while (x1 <= x) { + j = newIndex[i1] + (iterable ? n0old : n0) + + + if(iterable){ + if(groupIndex[j]){ + groupIndex[j].push(k) + } + else{ + groupIndex[j] = [k] + } + } + else{ + groupIndex[j] = k; + } + + // Always add new values to groups. Only remove when not in filter. + // This gives groups full information on data life-cycle. + g.value = add(g.value, data[j], true); + if (!filters.zeroExcept(j, offset, zero)) g.value = remove(g.value, data[j], false); + if (++i1 >= n1) break; + x1 = key(newValues[i1]); + } + + groupIncrement(); + } + + // Add any remaining old groups that were greater th1an all new keys. + // No incremental reduce is needed; these groups have no new records. + // Also record the new index of the old group. + while (i0 < k0) { + groups[reIndex[i0] = k] = oldGroups[i0++]; + groupIncrement(); + } + + + // Fill in gaps with empty arrays where there may have been rows with empty iterables + if(iterable){ + for (var index1 = 0; index1 < n; index1++) { + if(!groupIndex[index1]){ + groupIndex[index1] = []; + } + } + } -function crossfilter_filterRange(bisect, range) { - var min = range[0], - max = range[1]; - return function(values) { - var n = values.length; - return [bisect.left(values, min, 0, n), bisect.left(values, max, 0, n)]; - }; -} + // If we added any new groups before any old groups, + // update the group index of all the old records. + if(k > i0){ + if(iterable){ + for (i0 = 0; i0 < n0old; ++i0) { + for (index1 = 0; index1 < groupIndex[i0].length; index1++) { + groupIndex[i0][index1] = reIndex[groupIndex[i0][index1]]; + } + } + } + else{ + for (i0 = 0; i0 < n0; ++i0) { + groupIndex[i0] = reIndex[groupIndex[i0]]; + } + } + } -function crossfilter_filterAll(values) { - return [0, values.length]; -} -function crossfilter_null() { - return null; -} -function crossfilter_zero() { - return 0; -} -function crossfilter_reduceIncrement(p) { - return p + 1; -} + // Modify the update and reset behavior based on the cardinality. + // If the cardinality is less than or equal to one, then the groupIndex + // is not needed. If the cardinality is zero, then there are no records + // and therefore no groups to update or reset. Note that we also must + // change the registered listener to point to the new method. + j = filterListeners.indexOf(update); + if (k > 1 || iterable) { + update = updateMany; + reset = resetMany; + } else { + if (!k && groupAll) { + k = 1; + groups = [{key: null, value: initial()}]; + } + if (k === 1) { + update = updateOne; + reset = resetOne; + } else { + update = crossfilter_null; + reset = crossfilter_null; + } + groupIndex = null; + } + filterListeners[j] = update; -function crossfilter_reduceDecrement(p) { - return p - 1; -} + // Count the number of added groups, + // and widen the group index as needed. + function groupIncrement() { + if(iterable){ + k++ + return + } + if (++k === groupCapacity) { + reIndex = xfilterArray.arrayWiden(reIndex, groupWidth <<= 1); + groupIndex = xfilterArray.arrayWiden(groupIndex, groupWidth); + groupCapacity = crossfilter_capacity(groupWidth); + } + } + } -function crossfilter_reduceAdd(f) { - return function(p, v) { - return p + +f(v); - }; -} + function removeData(reIndex) { + if (k > 1 || iterable) { + var oldK = k, + oldGroups = groups, + seenGroups = crossfilter_index(oldK, oldK), + i, + i0, + j; -function crossfilter_reduceSubtract(f) { - return function(p, v) { - return p - f(v); - }; -} -exports.crossfilter = crossfilter; + // Filter out non-matches by copying matching group index entries to + // the beginning of the array. + if (!iterable) { + for (i = 0, j = 0; i < n; ++i) { + if (reIndex[i] !== REMOVED_INDEX) { + seenGroups[groupIndex[j] = groupIndex[i]] = 1; + ++j; + } + } + } else { + for (i = 0, j = 0; i < n; ++i) { + if (reIndex[i] !== REMOVED_INDEX) { + groupIndex[j] = groupIndex[i]; + for (i0 = 0; i0 < groupIndex[j].length; i0++) { + seenGroups[groupIndex[j][i0]] = 1; + } + ++j; + } + } + } -function crossfilter() { - var crossfilter = { - add: add, - remove: removeData, - dimension: dimension, - groupAll: groupAll, - size: size - }; + // Reassemble groups including only those groups that were referred + // to by matching group index entries. Note the new group index in + // seenGroups. + groups = [], k = 0; + for (i = 0; i < oldK; ++i) { + if (seenGroups[i]) { + seenGroups[i] = k++; + groups.push(oldGroups[i]); + } + } - var data = [], // the records - n = 0, // the number of records; data.length - m = 0, // a bit mask representing which dimensions are in use - M = 8, // number of dimensions that can fit in `filters` - filters = crossfilter_array8(0), // M bits per record; 1 is filtered out - filterListeners = [], // when the filters change - dataListeners = [], // when data is added - removeDataListeners = []; // when data is removed + if (k > 1 || iterable) { + // Reindex the group index using seenGroups to find the new index. + if (!iterable) { + for (i = 0; i < j; ++i) groupIndex[i] = seenGroups[groupIndex[i]]; + } else { + for (i = 0; i < j; ++i) { + for (i0 = 0; i0 < groupIndex[i].length; ++i0) { + groupIndex[i][i0] = seenGroups[groupIndex[i][i0]]; + } + } + } + } else { + groupIndex = null; + } + filterListeners[filterListeners.indexOf(update)] = k > 1 || iterable + ? (reset = resetMany, update = updateMany) + : k === 1 ? (reset = resetOne, update = updateOne) + : reset = update = crossfilter_null; + } else if (k === 1) { + if (groupAll) return; + for (var index3 = 0; index3 < n; ++index3) if (reIndex[index3] !== REMOVED_INDEX) return; + groups = [], k = 0; + filterListeners[filterListeners.indexOf(update)] = + update = reset = crossfilter_null; + } + } - // Adds the specified new records to this crossfilter. - function add(newData) { - var n0 = n, - n1 = newData.length; + // Reduces the specified selected or deselected records. + // This function is only used when the cardinality is greater than 1. + // notFilter indicates a crossfilter.add/remove operation. + function updateMany(filterOne, filterOffset, added, removed, notFilter) { - // If there's actually new data to add… - // Merge the new data into the existing data. - // Lengthen the filter bitset to handle the new records. - // Notify listeners (dimensions and groups) that new data is available. - if (n1) { - data = data.concat(newData); - filters = crossfilter_arrayLengthen(filters, n += n1); - dataListeners.forEach(function(l) { l(newData, n0, n1); }); - } + if ((filterOne === one && filterOffset === offset) || resetNeeded) return; - return crossfilter; - } + var i, + j, + k, + n, + g; - // Removes all records that match the current filters. - function removeData() { - var newIndex = crossfilter_index(n, n), - removed = []; - for (var i = 0, j = 0; i < n; ++i) { - if (filters[i]) newIndex[i] = j++; - else removed.push(i); - } + if(iterable){ + // Add the added values. + for (i = 0, n = added.length; i < n; ++i) { + if (filters.zeroExcept(k = added[i], offset, zero)) { + for (j = 0; j < groupIndex[k].length; j++) { + g = groups[groupIndex[k][j]]; + g.value = reduceAdd(g.value, data[k], false, j); + } + } + } - // Remove all matching records from groups. - filterListeners.forEach(function(l) { l(0, [], removed); }); + // Remove the removed values. + for (i = 0, n = removed.length; i < n; ++i) { + if (filters.onlyExcept(k = removed[i], offset, zero, filterOffset, filterOne)) { + for (j = 0; j < groupIndex[k].length; j++) { + g = groups[groupIndex[k][j]]; + g.value = reduceRemove(g.value, data[k], notFilter, j); + } + } + } + return; + } - // Update indexes. - removeDataListeners.forEach(function(l) { l(newIndex); }); + // Add the added values. + for (i = 0, n = added.length; i < n; ++i) { + if (filters.zeroExcept(k = added[i], offset, zero)) { + g = groups[groupIndex[k]]; + g.value = reduceAdd(g.value, data[k], false); + } + } - // Remove old filters and data by overwriting. - for (var i = 0, j = 0, k; i < n; ++i) { - if (k = filters[i]) { - if (i !== j) filters[j] = k, data[j] = data[i]; - ++j; + // Remove the removed values. + for (i = 0, n = removed.length; i < n; ++i) { + if (filters.onlyExcept(k = removed[i], offset, zero, filterOffset, filterOne)) { + g = groups[groupIndex[k]]; + g.value = reduceRemove(g.value, data[k], notFilter); + } + } } - } - data.length = j; - while (n > j) filters[--n] = 0; - } - // Adds a new dimension with the specified value accessor function. - function dimension(value) { - var dimension = { - filter: filter, - filterExact: filterExact, - filterRange: filterRange, - filterFunction: filterFunction, - filterAll: filterAll, - top: top, - bottom: bottom, - group: group, - groupAll: groupAll, - dispose: dispose, - remove: dispose // for backwards-compatibility - }; + // Reduces the specified selected or deselected records. + // This function is only used when the cardinality is 1. + // notFilter indicates a crossfilter.add/remove operation. + function updateOne(filterOne, filterOffset, added, removed, notFilter) { + if ((filterOne === one && filterOffset === offset) || resetNeeded) return; - var one = ~m & -~m, // lowest unset bit as mask, e.g., 00001000 - zero = ~one, // inverted one, e.g., 11110111 - values, // sorted, cached array - index, // value rank ↦ object id - newValues, // temporary array storing newly-added values - newIndex, // temporary array storing newly-added index - sort = quicksort_by(function(i) { return newValues[i]; }), - refilter = crossfilter_filterAll, // for recomputing filter - refilterFunction, // the custom filter function in use - indexListeners = [], // when data is added - dimensionGroups = [], - lo0 = 0, - hi0 = 0; + var i, + k, + n, + g = groups[0]; - // Updating a dimension is a two-stage process. First, we must update the - // associated filters for the newly-added records. Once all dimensions have - // updated their filters, the groups are notified to update. - dataListeners.unshift(preAdd); - dataListeners.push(postAdd); + // Add the added values. + for (i = 0, n = added.length; i < n; ++i) { + if (filters.zeroExcept(k = added[i], offset, zero)) { + g.value = reduceAdd(g.value, data[k], false); + } + } - removeDataListeners.push(removeData); + // Remove the removed values. + for (i = 0, n = removed.length; i < n; ++i) { + if (filters.onlyExcept(k = removed[i], offset, zero, filterOffset, filterOne)) { + g.value = reduceRemove(g.value, data[k], notFilter); + } + } + } - // Incorporate any existing data into this dimension, and make sure that the - // filter bitset is wide enough to handle the new dimension. - m |= one; - if (M >= 32 ? !one : m & -(1 << M)) { - filters = crossfilter_arrayWiden(filters, M <<= 1); - } - preAdd(data, 0, n); - postAdd(data, 0, n); + // Recomputes the group reduce values from scratch. + // This function is only used when the cardinality is greater than 1. + function resetMany() { + var i, + j, + g; - // Incorporates the specified new records into this dimension. - // This function is responsible for updating filters, values, and index. - function preAdd(newData, n0, n1) { + // Reset all group values. + for (i = 0; i < k; ++i) { + groups[i].value = reduceInitial(); + } - // Permute new values into natural order using a sorted index. - newValues = newData.map(value); - newIndex = sort(crossfilter_range(n1), 0, n1); - newValues = permute(newValues, newIndex); + // We add all records and then remove filtered records so that reducers + // can build an 'unfiltered' view even if there are already filters in + // place on other dimensions. + if(iterable){ + for (i = 0; i < n; ++i) { + for (j = 0; j < groupIndex[i].length; j++) { + g = groups[groupIndex[i][j]]; + g.value = reduceAdd(g.value, data[i], true, j); + } + } + for (i = 0; i < n; ++i) { + if (!filters.zeroExcept(i, offset, zero)) { + for (j = 0; j < groupIndex[i].length; j++) { + g = groups[groupIndex[i][j]]; + g.value = reduceRemove(g.value, data[i], false, j); + } + } + } + return; + } - // Bisect newValues to determine which new records are selected. - var bounds = refilter(newValues), lo1 = bounds[0], hi1 = bounds[1], i; - if (refilterFunction) { - for (i = 0; i < n1; ++i) { - if (!refilterFunction(newValues[i], i)) filters[newIndex[i] + n0] |= one; + for (i = 0; i < n; ++i) { + g = groups[groupIndex[i]]; + g.value = reduceAdd(g.value, data[i], true); + } + for (i = 0; i < n; ++i) { + if (!filters.zeroExcept(i, offset, zero)) { + g = groups[groupIndex[i]]; + g.value = reduceRemove(g.value, data[i], false); + } } - } else { - for (i = 0; i < lo1; ++i) filters[newIndex[i] + n0] |= one; - for (i = hi1; i < n1; ++i) filters[newIndex[i] + n0] |= one; } - // If this dimension previously had no data, then we don't need to do the - // more expensive merge operation; use the new values and index as-is. - if (!n0) { - values = newValues; - index = newIndex; - lo0 = lo1; - hi0 = hi1; - return; - } + // Recomputes the group reduce values from scratch. + // This function is only used when the cardinality is 1. + function resetOne() { + var i, + g = groups[0]; - var oldValues = values, - oldIndex = index, - i0 = 0, - i1 = 0; + // Reset the singleton group values. + g.value = reduceInitial(); - // Otherwise, create new arrays into which to merge new and old. - values = new Array(n); - index = crossfilter_index(n, n); + // We add all records and then remove filtered records so that reducers + // can build an 'unfiltered' view even if there are already filters in + // place on other dimensions. + for (i = 0; i < n; ++i) { + g.value = reduceAdd(g.value, data[i], true); + } - // Merge the old and new sorted values, and old and new index. - for (i = 0; i0 < n0 && i1 < n1; ++i) { - if (oldValues[i0] < newValues[i1]) { - values[i] = oldValues[i0]; - index[i] = oldIndex[i0++]; - } else { - values[i] = newValues[i1]; - index[i] = newIndex[i1++] + n0; + for (i = 0; i < n; ++i) { + if (!filters.zeroExcept(i, offset, zero)) { + g.value = reduceRemove(g.value, data[i], false); + } } } - // Add any remaining old values. - for (; i0 < n0; ++i0, ++i) { - values[i] = oldValues[i0]; - index[i] = oldIndex[i0]; + // Returns the array of group values, in the dimension's natural order. + function all() { + if (resetNeeded) reset(), resetNeeded = false; + return groups; } - // Add any remaining new values. - for (; i1 < n1; ++i1, ++i) { - values[i] = newValues[i1]; - index[i] = newIndex[i1] + n0; + // Returns a new array containing the top K group values, in reduce order. + function top(k) { + var top = select(all(), 0, groups.length, k); + return heap.sort(top, 0, top.length); } - // Bisect again to recompute lo0 and hi0. - bounds = refilter(values), lo0 = bounds[0], hi0 = bounds[1]; - } - - // When all filters have updated, notify index listeners of the new values. - function postAdd(newData, n0, n1) { - indexListeners.forEach(function(l) { l(newValues, newIndex, n0, n1); }); - newValues = newIndex = null; - } - - function removeData(reIndex) { - for (var i = 0, j = 0, k; i < n; ++i) { - if (filters[k = index[i]]) { - if (i !== j) values[j] = values[i]; - index[j] = reIndex[k]; - ++j; - } + // Sets the reduce behavior for this group to use the specified functions. + // This method lazily recomputes the reduce values, waiting until needed. + function reduce(add, remove, initial) { + reduceAdd = add; + reduceRemove = remove; + reduceInitial = initial; + resetNeeded = true; + return group; } - values.length = j; - while (j < n) index[j++] = 0; - // Bisect again to recompute lo0 and hi0. - var bounds = refilter(values); - lo0 = bounds[0], hi0 = bounds[1]; - } + // A convenience method for reducing by count. + function reduceCount() { + return reduce(xfilterReduce.reduceIncrement, xfilterReduce.reduceDecrement, crossfilter_zero); + } - // Updates the selected values based on the specified bounds [lo, hi]. - // This implementation is used by all the public filter methods. - function filterIndexBounds(bounds) { - var lo1 = bounds[0], - hi1 = bounds[1]; + // A convenience method for reducing by sum(value). + function reduceSum(value) { + return reduce(xfilterReduce.reduceAdd(value), xfilterReduce.reduceSubtract(value), crossfilter_zero); + } - if (refilterFunction) { - refilterFunction = null; - filterIndexFunction(function(d, i) { return lo1 <= i && i < hi1; }); - lo0 = lo1; - hi0 = hi1; - return dimension; + // Sets the reduce order, using the specified accessor. + function order(value) { + select = xfilterHeapselect.by(valueOf); + heap = xfilterHeap.by(valueOf); + function valueOf(d) { return value(d.value); } + return group; } - var i, - j, - k, - added = [], - removed = []; + // A convenience method for natural ordering by reduce value. + function orderNatural() { + return order(crossfilter_identity); + } - // Fast incremental update based on previous lo index. - if (lo1 < lo0) { - for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) { - filters[k = index[i]] ^= one; - added.push(k); - } - } else if (lo1 > lo0) { - for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) { - filters[k = index[i]] ^= one; - removed.push(k); - } + // Returns the cardinality of this group, irrespective of any filters. + function size() { + return k; } - // Fast incremental update based on previous hi index. - if (hi1 > hi0) { - for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) { - filters[k = index[i]] ^= one; - added.push(k); - } - } else if (hi1 < hi0) { - for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) { - filters[k = index[i]] ^= one; - removed.push(k); - } + // Removes this group and associated event listeners. + function dispose() { + var i = filterListeners.indexOf(update); + if (i >= 0) filterListeners.splice(i, 1); + i = indexListeners.indexOf(add); + if (i >= 0) indexListeners.splice(i, 1); + i = removeDataListeners.indexOf(removeData); + if (i >= 0) removeDataListeners.splice(i, 1); + i = dimensionGroups.indexOf(group); + if (i >= 0) dimensionGroups.splice(i, 1); + return group; } - lo0 = lo1; - hi0 = hi1; - filterListeners.forEach(function(l) { l(one, added, removed); }); - return dimension; + return reduceCount().orderNatural(); } - // Filters this dimension using the specified range, value, or null. - // If the range is null, this is equivalent to filterAll. - // If the range is an array, this is equivalent to filterRange. - // Otherwise, this is equivalent to filterExact. - function filter(range) { - return range == null - ? filterAll() : Array.isArray(range) - ? filterRange(range) : typeof range === "function" - ? filterFunction(range) - : filterExact(range); + // A convenience function for generating a singleton group. + function groupAll() { + var g = group(crossfilter_null), all = g.all; + delete g.all; + delete g.top; + delete g.order; + delete g.orderNatural; + delete g.size; + g.value = function() { return all()[0].value; }; + return g; } - // Filters this dimension to select the exact value. - function filterExact(value) { - return filterIndexBounds((refilter = crossfilter_filterExact(bisect, value))(values)); + // Removes this dimension and associated groups and event listeners. + function dispose() { + dimensionGroups.forEach(function(group) { group.dispose(); }); + var i = dataListeners.indexOf(preAdd); + if (i >= 0) dataListeners.splice(i, 1); + i = dataListeners.indexOf(postAdd); + if (i >= 0) dataListeners.splice(i, 1); + i = removeDataListeners.indexOf(removeData); + if (i >= 0) removeDataListeners.splice(i, 1); + filters.masks[offset] &= zero; + return filterAll(); } - // Filters this dimension to select the specified range [lo, hi]. - // The lower bound is inclusive, and the upper bound is exclusive. - function filterRange(range) { - return filterIndexBounds((refilter = crossfilter_filterRange(bisect, range))(values)); - } + return dimension; + } - // Clears any filters on this dimension. - function filterAll() { - return filterIndexBounds((refilter = crossfilter_filterAll)(values)); - } + // A convenience method for groupAll on a dummy dimension. + // This implementation can be optimized since it always has cardinality 1. + function groupAll() { + var group = { + reduce: reduce, + reduceCount: reduceCount, + reduceSum: reduceSum, + value: value, + dispose: dispose, + remove: dispose // for backwards-compatibility + }; - // Filters this dimension using an arbitrary function. - function filterFunction(f) { - refilter = crossfilter_filterAll; + var reduceValue, + reduceAdd, + reduceRemove, + reduceInitial, + resetNeeded = true; + + // The group listens to the crossfilter for when any dimension changes, so + // that it can update the reduce value. It must also listen to the parent + // dimension for when data is added. + filterListeners.push(update); + dataListeners.push(add); - filterIndexFunction(refilterFunction = f); + // For consistency; actually a no-op since resetNeeded is true. + add(data, 0, n); + + // Incorporates the specified new values into this group. + function add(newData, n0) { + var i; - lo0 = 0; - hi0 = n; + if (resetNeeded) return; - return dimension; + // Cycle through all the values. + for (i = n0; i < n; ++i) { + + // Add all values all the time. + reduceValue = reduceAdd(reduceValue, data[i], true); + + // Remove the value if filtered. + if (!filters.zero(i)) { + reduceValue = reduceRemove(reduceValue, data[i], false); + } + } } - function filterIndexFunction(f) { + // Reduces the specified selected or deselected records. + function update(filterOne, filterOffset, added, removed, notFilter) { var i, k, - x, - added = [], - removed = []; + n; - for (i = 0; i < n; ++i) { - if (!(filters[k = index[i]] & one) ^ !!(x = f(values[i], i))) { - if (x) filters[k] &= zero, added.push(k); - else filters[k] |= one, removed.push(k); + if (resetNeeded) return; + + // Add the added values. + for (i = 0, n = added.length; i < n; ++i) { + if (filters.zero(k = added[i])) { + reduceValue = reduceAdd(reduceValue, data[k], notFilter); + } + } + + // Remove the removed values. + for (i = 0, n = removed.length; i < n; ++i) { + if (filters.only(k = removed[i], filterOffset, filterOne)) { + reduceValue = reduceRemove(reduceValue, data[k], notFilter); } } - filterListeners.forEach(function(l) { l(one, added, removed); }); } - // Returns the top K selected records based on this dimension's order. - // Note: observes this dimension's filter, unlike group and groupAll. - function top(k) { - var array = [], - i = hi0, - j; + // Recomputes the group reduce value from scratch. + function reset() { + var i; - while (--i >= lo0 && k > 0) { - if (!filters[j = index[i]]) { - array.push(data[j]); - --k; + reduceValue = reduceInitial(); + + // Cycle through all the values. + for (i = 0; i < n; ++i) { + + // Add all values all the time. + reduceValue = reduceAdd(reduceValue, data[i], true); + + // Remove the value if it is filtered. + if (!filters.zero(i)) { + reduceValue = reduceRemove(reduceValue, data[i], false); } } + } - return array; + // Sets the reduce behavior for this group to use the specified functions. + // This method lazily recomputes the reduce value, waiting until needed. + function reduce(add, remove, initial) { + reduceAdd = add; + reduceRemove = remove; + reduceInitial = initial; + resetNeeded = true; + return group; } - // Returns the bottom K selected records based on this dimension's order. - // Note: observes this dimension's filter, unlike group and groupAll. - function bottom(k) { - var array = [], - i = lo0, - j; + // A convenience method for reducing by count. + function reduceCount() { + return reduce(xfilterReduce.reduceIncrement, xfilterReduce.reduceDecrement, crossfilter_zero); + } - while (i < hi0 && k > 0) { - if (!filters[j = index[i]]) { - array.push(data[j]); - --k; - } - i++; - } + // A convenience method for reducing by sum(value). + function reduceSum(value) { + return reduce(xfilterReduce.reduceAdd(value), xfilterReduce.reduceSubtract(value), crossfilter_zero); + } - return array; + // Returns the computed reduce value. + function value() { + if (resetNeeded) reset(), resetNeeded = false; + return reduceValue; } - // Adds a new group to this dimension, using the specified key function. - function group(key) { - var group = { - top: top, - all: all, - reduce: reduce, - reduceCount: reduceCount, - reduceSum: reduceSum, - order: order, - orderNatural: orderNatural, - size: size, - dispose: dispose, - remove: dispose // for backwards-compatibility - }; + // Removes this group and associated event listeners. + function dispose() { + var i = filterListeners.indexOf(update); + if (i >= 0) filterListeners.splice(i, 1); + i = dataListeners.indexOf(add); + if (i >= 0) dataListeners.splice(i, 1); + return group; + } - // Ensure that this group will be removed when the dimension is removed. - dimensionGroups.push(group); + return reduceCount(); + } - var groups, // array of {key, value} - groupIndex, // object id ↦ group id - groupWidth = 8, - groupCapacity = crossfilter_capacity(groupWidth), - k = 0, // cardinality - select, - heap, - reduceAdd, - reduceRemove, - reduceInitial, - update = crossfilter_null, - reset = crossfilter_null, - resetNeeded = true, - groupAll = key === crossfilter_null; + // Returns the number of records in this crossfilter, irrespective of any filters. + function size() { + return n; + } - if (arguments.length < 1) key = crossfilter_identity; + // Returns the raw row data contained in this crossfilter + function all(){ + return data; + } - // The group listens to the crossfilter for when any dimension changes, so - // that it can update the associated reduce values. It must also listen to - // the parent dimension for when data is added, and compute new keys. - filterListeners.push(update); - indexListeners.push(add); - removeDataListeners.push(removeData); + // Returns row data with all dimension filters applied + function allFiltered() { + var array = [], + i = 0; - // Incorporate any existing data into the grouping. - add(values, index, 0, n); + for (i = 0; i < n; i++) { + if (filters.zero(i)) { + array.push(data[i]); + } + } - // Incorporates the specified new values into this group. - // This function is responsible for updating groups and groupIndex. - function add(newValues, newIndex, n0, n1) { - var oldGroups = groups, - reIndex = crossfilter_index(k, groupCapacity), - add = reduceAdd, - initial = reduceInitial, - k0 = k, // old cardinality - i0 = 0, // index of old group - i1 = 0, // index of new record - j, // object id - g0, // old group - x0, // old key - x1, // new key - g, // group to add - x; // key of group to add + return array; + } - // If a reset is needed, we don't need to update the reduce values. - if (resetNeeded) add = initial = crossfilter_null; + function onChange(cb){ + if(typeof cb !== 'function'){ + /* eslint no-console: 0 */ + console.warn('onChange callback parameter must be a function!'); + return; + } + callbacks.push(cb); + return function(){ + callbacks.splice(callbacks.indexOf(cb), 1); + }; + } - // Reset the new groups (k is a lower bound). - // Also, make sure that groupIndex exists and is long enough. - groups = new Array(k), k = 0; - groupIndex = k0 > 1 ? crossfilter_arrayLengthen(groupIndex, n) : crossfilter_index(n, groupCapacity); + function triggerOnChange(eventName){ + for (var i = 0; i < callbacks.length; i++) { + callbacks[i](eventName); + } + } - // Get the first old key (x0 of g0), if it exists. - if (k0) x0 = (g0 = oldGroups[0]).key; + return arguments.length + ? add(arguments[0]) + : crossfilter; +} - // Find the first new key (x1), skipping NaN keys. - while (i1 < n1 && !((x1 = key(newValues[i1])) >= x1)) ++i1; +// Returns an array of size n, big enough to store ids up to m. +function crossfilter_index(n, m) { + return (m < 0x101 + ? xfilterArray.array8 : m < 0x10001 + ? xfilterArray.array16 + : xfilterArray.array32)(n); +} - // While new keys remain… - while (i1 < n1) { +// Constructs a new array of size n, with sequential values from 0 to n - 1. +function crossfilter_range(n) { + var range = crossfilter_index(n, n); + for (var i = -1; ++i < n;) range[i] = i; + return range; +} - // Determine the lesser of the two current keys; new and old. - // If there are no old keys remaining, then always add the new key. - if (g0 && x0 <= x1) { - g = g0, x = x0; +function crossfilter_capacity(w) { + return w === 8 + ? 0x100 : w === 16 + ? 0x10000 + : 0x100000000; +} - // Record the new index of the old group. - reIndex[i0] = k; +},{"./../package.json":3,"./array":4,"./bisect":5,"./filter":7,"./heap":8,"./heapselect":9,"./identity":10,"./insertionsort":11,"./null":12,"./permute":13,"./quicksort":14,"./reduce":15,"./zero":16,"lodash.result":2}],7:[function(require,module,exports){ +'use strict'; - // Retrieve the next old key. - if (g0 = oldGroups[++i0]) x0 = g0.key; - } else { - g = {key: x1, value: initial()}, x = x1; - } +function crossfilter_filterExact(bisect, value) { + return function(values) { + var n = values.length; + return [bisect.left(values, value, 0, n), bisect.right(values, value, 0, n)]; + }; +} - // Add the lesser group. - groups[k] = g; +function crossfilter_filterRange(bisect, range) { + var min = range[0], + max = range[1]; + return function(values) { + var n = values.length; + return [bisect.left(values, min, 0, n), bisect.left(values, max, 0, n)]; + }; +} - // Add any selected records belonging to the added group, while - // advancing the new key and populating the associated group index. - while (!(x1 > x)) { - groupIndex[j = newIndex[i1] + n0] = k; - if (!(filters[j] & zero)) g.value = add(g.value, data[j]); - if (++i1 >= n1) break; - x1 = key(newValues[i1]); - } +function crossfilter_filterAll(values) { + return [0, values.length]; +} - groupIncrement(); - } +module.exports = { + filterExact: crossfilter_filterExact, + filterRange: crossfilter_filterRange, + filterAll: crossfilter_filterAll +}; - // Add any remaining old groups that were greater than all new keys. - // No incremental reduce is needed; these groups have no new records. - // Also record the new index of the old group. - while (i0 < k0) { - groups[reIndex[i0] = k] = oldGroups[i0++]; - groupIncrement(); - } +},{}],8:[function(require,module,exports){ +'use strict'; - // If we added any new groups before any old groups, - // update the group index of all the old records. - if (k > i0) for (i0 = 0; i0 < n0; ++i0) { - groupIndex[i0] = reIndex[groupIndex[i0]]; - } +var crossfilter_identity = require('./identity'); - // Modify the update and reset behavior based on the cardinality. - // If the cardinality is less than or equal to one, then the groupIndex - // is not needed. If the cardinality is zero, then there are no records - // and therefore no groups to update or reset. Note that we also must - // change the registered listener to point to the new method. - j = filterListeners.indexOf(update); - if (k > 1) { - update = updateMany; - reset = resetMany; - } else { - if (!k && groupAll) { - k = 1; - groups = [{key: null, value: initial()}]; - } - if (k === 1) { - update = updateOne; - reset = resetOne; - } else { - update = crossfilter_null; - reset = crossfilter_null; - } - groupIndex = null; - } - filterListeners[j] = update; +function heap_by(f) { - // Count the number of added groups, - // and widen the group index as needed. - function groupIncrement() { - if (++k === groupCapacity) { - reIndex = crossfilter_arrayWiden(reIndex, groupWidth <<= 1); - groupIndex = crossfilter_arrayWiden(groupIndex, groupWidth); - groupCapacity = crossfilter_capacity(groupWidth); - } - } - } + // Builds a binary heap within the specified array a[lo:hi]. The heap has the + // property such that the parent a[lo+i] is always less than or equal to its + // two children: a[lo+2*i+1] and a[lo+2*i+2]. + function heap(a, lo, hi) { + var n = hi - lo, + i = (n >>> 1) + 1; + while (--i > 0) sift(a, i, n, lo); + return a; + } - function removeData() { - if (k > 1) { - var oldK = k, - oldGroups = groups, - seenGroups = crossfilter_index(oldK, oldK); + // Sorts the specified array a[lo:hi] in descending order, assuming it is + // already a heap. + function sort(a, lo, hi) { + var n = hi - lo, + t; + while (--n > 0) t = a[lo], a[lo] = a[lo + n], a[lo + n] = t, sift(a, 1, n, lo); + return a; + } - // Filter out non-matches by copying matching group index entries to - // the beginning of the array. - for (var i = 0, j = 0; i < n; ++i) { - if (filters[i]) { - seenGroups[groupIndex[j] = groupIndex[i]] = 1; - ++j; - } - } + // Sifts the element a[lo+i-1] down the heap, where the heap is the contiguous + // slice of array a[lo:lo+n]. This method can also be used to update the heap + // incrementally, without incurring the full cost of reconstructing the heap. + function sift(a, i, n, lo) { + var d = a[--lo + i], + x = f(d), + child; + while ((child = i << 1) <= n) { + if (child < n && f(a[lo + child]) > f(a[lo + child + 1])) child++; + if (x <= f(a[lo + child])) break; + a[lo + i] = a[lo + child]; + i = child; + } + a[lo + i] = d; + } - // Reassemble groups including only those groups that were referred - // to by matching group index entries. Note the new group index in - // seenGroups. - groups = [], k = 0; - for (i = 0; i < oldK; ++i) { - if (seenGroups[i]) { - seenGroups[i] = k++; - groups.push(oldGroups[i]); - } - } + heap.sort = sort; + return heap; +} - if (k > 1) { - // Reindex the group index using seenGroups to find the new index. - for (var i = 0; i < j; ++i) groupIndex[i] = seenGroups[groupIndex[i]]; - } else { - groupIndex = null; - } - filterListeners[filterListeners.indexOf(update)] = k > 1 - ? (reset = resetMany, update = updateMany) - : k === 1 ? (reset = resetOne, update = updateOne) - : reset = update = crossfilter_null; - } else if (k === 1) { - if (groupAll) return; - for (var i = 0; i < n; ++i) if (filters[i]) return; - groups = [], k = 0; - filterListeners[filterListeners.indexOf(update)] = - update = reset = crossfilter_null; - } - } +module.exports = heap_by(crossfilter_identity); +module.exports.by = heap_by; - // Reduces the specified selected or deselected records. - // This function is only used when the cardinality is greater than 1. - function updateMany(filterOne, added, removed) { - if (filterOne === one || resetNeeded) return; +},{"./identity":10}],9:[function(require,module,exports){ +'use strict'; - var i, - k, - n, - g; +var crossfilter_identity = require('./identity'); +var xFilterHeap = require('./heap'); - // Add the added values. - for (i = 0, n = added.length; i < n; ++i) { - if (!(filters[k = added[i]] & zero)) { - g = groups[groupIndex[k]]; - g.value = reduceAdd(g.value, data[k]); - } +function heapselect_by(f) { + var heap = xFilterHeap.by(f); + + // Returns a new array containing the top k elements in the array a[lo:hi]. + // The returned array is not sorted, but maintains the heap property. If k is + // greater than hi - lo, then fewer than k elements will be returned. The + // order of elements in a is unchanged by this operation. + function heapselect(a, lo, hi, k) { + var queue = new Array(k = Math.min(hi - lo, k)), + min, + i, + d; + + for (i = 0; i < k; ++i) queue[i] = a[lo++]; + heap(queue, 0, k); + + if (lo < hi) { + min = f(queue[0]); + do { + if (f(d = a[lo]) > min) { + queue[0] = d; + min = f(heap(queue, 0, k)[0]); } + } while (++lo < hi); + } - // Remove the removed values. - for (i = 0, n = removed.length; i < n; ++i) { - if ((filters[k = removed[i]] & zero) === filterOne) { - g = groups[groupIndex[k]]; - g.value = reduceRemove(g.value, data[k]); - } - } - } + return queue; + } - // Reduces the specified selected or deselected records. - // This function is only used when the cardinality is 1. - function updateOne(filterOne, added, removed) { - if (filterOne === one || resetNeeded) return; + return heapselect; +} - var i, - k, - n, - g = groups[0]; +module.exports = heapselect_by(crossfilter_identity); +module.exports.by = heapselect_by; // assign the raw function to the export as well - // Add the added values. - for (i = 0, n = added.length; i < n; ++i) { - if (!(filters[k = added[i]] & zero)) { - g.value = reduceAdd(g.value, data[k]); - } - } +},{"./heap":8,"./identity":10}],10:[function(require,module,exports){ +'use strict'; - // Remove the removed values. - for (i = 0, n = removed.length; i < n; ++i) { - if ((filters[k = removed[i]] & zero) === filterOne) { - g.value = reduceRemove(g.value, data[k]); - } - } - } +function crossfilter_identity(d) { + return d; +} - // Recomputes the group reduce values from scratch. - // This function is only used when the cardinality is greater than 1. - function resetMany() { - var i, - g; +module.exports = crossfilter_identity; - // Reset all group values. - for (i = 0; i < k; ++i) { - groups[i].value = reduceInitial(); - } +},{}],11:[function(require,module,exports){ +'use strict'; - // Add any selected records. - for (i = 0; i < n; ++i) { - if (!(filters[i] & zero)) { - g = groups[groupIndex[i]]; - g.value = reduceAdd(g.value, data[i]); - } - } +var crossfilter_identity = require('./identity'); + +function insertionsort_by(f) { + + function insertionsort(a, lo, hi) { + for (var i = lo + 1; i < hi; ++i) { + for (var j = i, t = a[i], x = f(t); j > lo && f(a[j - 1]) > x; --j) { + a[j] = a[j - 1]; } + a[j] = t; + } + return a; + } - // Recomputes the group reduce values from scratch. - // This function is only used when the cardinality is 1. - function resetOne() { - var i, - g = groups[0]; + return insertionsort; +} - // Reset the singleton group values. - g.value = reduceInitial(); +module.exports = insertionsort_by(crossfilter_identity); +module.exports.by = insertionsort_by; - // Add any selected records. - for (i = 0; i < n; ++i) { - if (!(filters[i] & zero)) { - g.value = reduceAdd(g.value, data[i]); - } - } - } +},{"./identity":10}],12:[function(require,module,exports){ +'use strict'; - // Returns the array of group values, in the dimension's natural order. - function all() { - if (resetNeeded) reset(), resetNeeded = false; - return groups; - } +function crossfilter_null() { + return null; +} - // Returns a new array containing the top K group values, in reduce order. - function top(k) { - var top = select(all(), 0, groups.length, k); - return heap.sort(top, 0, top.length); - } +module.exports = crossfilter_null; - // Sets the reduce behavior for this group to use the specified functions. - // This method lazily recomputes the reduce values, waiting until needed. - function reduce(add, remove, initial) { - reduceAdd = add; - reduceRemove = remove; - reduceInitial = initial; - resetNeeded = true; - return group; - } +},{}],13:[function(require,module,exports){ +'use strict'; - // A convenience method for reducing by count. - function reduceCount() { - return reduce(crossfilter_reduceIncrement, crossfilter_reduceDecrement, crossfilter_zero); - } +function permute(array, index, deep) { + for (var i = 0, n = index.length, copy = deep ? JSON.parse(JSON.stringify(array)) : new Array(n); i < n; ++i) { + copy[i] = array[index[i]]; + } + return copy; +} - // A convenience method for reducing by sum(value). - function reduceSum(value) { - return reduce(crossfilter_reduceAdd(value), crossfilter_reduceSubtract(value), crossfilter_zero); - } +module.exports = permute; - // Sets the reduce order, using the specified accessor. - function order(value) { - select = heapselect_by(valueOf); - heap = heap_by(valueOf); - function valueOf(d) { return value(d.value); } - return group; - } +},{}],14:[function(require,module,exports){ +var crossfilter_identity = require('./identity'); +var xFilterInsertionsort = require('./insertionsort'); - // A convenience method for natural ordering by reduce value. - function orderNatural() { - return order(crossfilter_identity); - } +// Algorithm designed by Vladimir Yaroslavskiy. +// Implementation based on the Dart project; see NOTICE and AUTHORS for details. - // Returns the cardinality of this group, irrespective of any filters. - function size() { - return k; - } +function quicksort_by(f) { + var insertionsort = xFilterInsertionsort.by(f); - // Removes this group and associated event listeners. - function dispose() { - var i = filterListeners.indexOf(update); - if (i >= 0) filterListeners.splice(i, 1); - i = indexListeners.indexOf(add); - if (i >= 0) indexListeners.splice(i, 1); - i = removeDataListeners.indexOf(removeData); - if (i >= 0) removeDataListeners.splice(i, 1); - return group; - } + function sort(a, lo, hi) { + return (hi - lo < quicksort_sizeThreshold + ? insertionsort + : quicksort)(a, lo, hi); + } - return reduceCount().orderNatural(); - } + function quicksort(a, lo, hi) { + // Compute the two pivots by looking at 5 elements. + var sixth = (hi - lo) / 6 | 0, + i1 = lo + sixth, + i5 = hi - 1 - sixth, + i3 = lo + hi - 1 >> 1, // The midpoint. + i2 = i3 - sixth, + i4 = i3 + sixth; - // A convenience function for generating a singleton group. - function groupAll() { - var g = group(crossfilter_null), all = g.all; - delete g.all; - delete g.top; - delete g.order; - delete g.orderNatural; - delete g.size; - g.value = function() { return all()[0].value; }; - return g; - } + var e1 = a[i1], x1 = f(e1), + e2 = a[i2], x2 = f(e2), + e3 = a[i3], x3 = f(e3), + e4 = a[i4], x4 = f(e4), + e5 = a[i5], x5 = f(e5); - // Removes this dimension and associated groups and event listeners. - function dispose() { - dimensionGroups.forEach(function(group) { group.dispose(); }); - var i = dataListeners.indexOf(preAdd); - if (i >= 0) dataListeners.splice(i, 1); - i = dataListeners.indexOf(postAdd); - if (i >= 0) dataListeners.splice(i, 1); - i = removeDataListeners.indexOf(removeData); - if (i >= 0) removeDataListeners.splice(i, 1); - m &= zero; - return filterAll(); - } + var t; - return dimension; - } + // Sort the selected 5 elements using a sorting network. + if (x1 > x2) t = e1, e1 = e2, e2 = t, t = x1, x1 = x2, x2 = t; + if (x4 > x5) t = e4, e4 = e5, e5 = t, t = x4, x4 = x5, x5 = t; + if (x1 > x3) t = e1, e1 = e3, e3 = t, t = x1, x1 = x3, x3 = t; + if (x2 > x3) t = e2, e2 = e3, e3 = t, t = x2, x2 = x3, x3 = t; + if (x1 > x4) t = e1, e1 = e4, e4 = t, t = x1, x1 = x4, x4 = t; + if (x3 > x4) t = e3, e3 = e4, e4 = t, t = x3, x3 = x4, x4 = t; + if (x2 > x5) t = e2, e2 = e5, e5 = t, t = x2, x2 = x5, x5 = t; + if (x2 > x3) t = e2, e2 = e3, e3 = t, t = x2, x2 = x3, x3 = t; + if (x4 > x5) t = e4, e4 = e5, e5 = t, t = x4, x4 = x5, x5 = t; - // A convenience method for groupAll on a dummy dimension. - // This implementation can be optimized since it always has cardinality 1. - function groupAll() { - var group = { - reduce: reduce, - reduceCount: reduceCount, - reduceSum: reduceSum, - value: value, - dispose: dispose, - remove: dispose // for backwards-compatibility - }; + var pivot1 = e2, pivotValue1 = x2, + pivot2 = e4, pivotValue2 = x4; - var reduceValue, - reduceAdd, - reduceRemove, - reduceInitial, - resetNeeded = true; + // e2 and e4 have been saved in the pivot variables. They will be written + // back, once the partitioning is finished. + a[i1] = e1; + a[i2] = a[lo]; + a[i3] = e3; + a[i4] = a[hi - 1]; + a[i5] = e5; - // The group listens to the crossfilter for when any dimension changes, so - // that it can update the reduce value. It must also listen to the parent - // dimension for when data is added. - filterListeners.push(update); - dataListeners.push(add); + var less = lo + 1, // First element in the middle partition. + great = hi - 2; // Last element in the middle partition. - // For consistency; actually a no-op since resetNeeded is true. - add(data, 0, n); + // Note that for value comparison, <, <=, >= and > coerce to a primitive via + // Object.prototype.valueOf; == and === do not, so in order to be consistent + // with natural order (such as for Date objects), we must do two compares. + var pivotsEqual = pivotValue1 <= pivotValue2 && pivotValue1 >= pivotValue2; + if (pivotsEqual) { - // Incorporates the specified new values into this group. - function add(newData, n0) { - var i; + // Degenerated case where the partitioning becomes a dutch national flag + // problem. + // + // [ | < pivot | == pivot | unpartitioned | > pivot | ] + // ^ ^ ^ ^ ^ + // left less k great right + // + // a[left] and a[right] are undefined and are filled after the + // partitioning. + // + // Invariants: + // 1) for x in ]left, less[ : x < pivot. + // 2) for x in [less, k[ : x == pivot. + // 3) for x in ]great, right[ : x > pivot. + for (var k = less; k <= great; ++k) { + var ek = a[k], xk = f(ek); + if (xk < pivotValue1) { + if (k !== less) { + a[k] = a[less]; + a[less] = ek; + } + ++less; + } else if (xk > pivotValue1) { - if (resetNeeded) return; + // Find the first element <= pivot in the range [k - 1, great] and + // put [:ek:] there. We know that such an element must exist: + // When k == less, then el3 (which is equal to pivot) lies in the + // interval. Otherwise a[k - 1] == pivot and the search stops at k-1. + // Note that in the latter case invariant 2 will be violated for a + // short amount of time. The invariant will be restored when the + // pivots are put into their final positions. + /* eslint no-constant-condition: 0 */ + while (true) { + var greatValue = f(a[great]); + if (greatValue > pivotValue1) { + great--; + // This is the only location in the while-loop where a new + // iteration is started. + continue; + } else if (greatValue < pivotValue1) { + // Triple exchange. + a[k] = a[less]; + a[less++] = a[great]; + a[great--] = ek; + break; + } else { + a[k] = a[great]; + a[great--] = ek; + // Note: if great < k then we will exit the outer loop and fix + // invariant 2 (which we just violated). + break; + } + } + } + } + } else { - // Add the added values. - for (i = n0; i < n; ++i) { - if (!filters[i]) { - reduceValue = reduceAdd(reduceValue, data[i]); + // We partition the list into three parts: + // 1. < pivot1 + // 2. >= pivot1 && <= pivot2 + // 3. > pivot2 + // + // During the loop we have: + // [ | < pivot1 | >= pivot1 && <= pivot2 | unpartitioned | > pivot2 | ] + // ^ ^ ^ ^ ^ + // left less k great right + // + // a[left] and a[right] are undefined and are filled after the + // partitioning. + // + // Invariants: + // 1. for x in ]left, less[ : x < pivot1 + // 2. for x in [less, k[ : pivot1 <= x && x <= pivot2 + // 3. for x in ]great, right[ : x > pivot2 + (function () { // isolate scope + for (var k = less; k <= great; k++) { + var ek = a[k], xk = f(ek); + if (xk < pivotValue1) { + if (k !== less) { + a[k] = a[less]; + a[less] = ek; + } + ++less; + } else { + if (xk > pivotValue2) { + while (true) { + var greatValue = f(a[great]); + if (greatValue > pivotValue2) { + great--; + if (great < k) break; + // This is the only location inside the loop where a new + // iteration is started. + continue; + } else { + // a[great] <= pivot2. + if (greatValue < pivotValue1) { + // Triple exchange. + a[k] = a[less]; + a[less++] = a[great]; + a[great--] = ek; + } else { + // a[great] >= pivot1. + a[k] = a[great]; + a[great--] = ek; + } + break; + } + } + } } } + })(); // isolate scope } - // Reduces the specified selected or deselected records. - function update(filterOne, added, removed) { - var i, - k, - n; + // Move pivots into their final positions. + // We shrunk the list from both sides (a[left] and a[right] have + // meaningless values in them) and now we move elements from the first + // and third partition into these locations so that we can store the + // pivots. + a[lo] = a[less - 1]; + a[less - 1] = pivot1; + a[hi - 1] = a[great + 1]; + a[great + 1] = pivot2; - if (resetNeeded) return; + // The list is now partitioned into three partitions: + // [ < pivot1 | >= pivot1 && <= pivot2 | > pivot2 ] + // ^ ^ ^ ^ + // left less great right - // Add the added values. - for (i = 0, n = added.length; i < n; ++i) { - if (!filters[k = added[i]]) { - reduceValue = reduceAdd(reduceValue, data[k]); - } - } + // Recursive descent. (Don't include the pivot values.) + sort(a, lo, less - 1); + sort(a, great + 2, hi); - // Remove the removed values. - for (i = 0, n = removed.length; i < n; ++i) { - if (filters[k = removed[i]] === filterOne) { - reduceValue = reduceRemove(reduceValue, data[k]); - } - } + if (pivotsEqual) { + // All elements in the second partition are equal to the pivot. No + // need to sort them. + return a; } - // Recomputes the group reduce value from scratch. - function reset() { - var i; + // In theory it should be enough to call _doSort recursively on the second + // partition. + // The Android source however removes the pivot elements from the recursive + // call if the second partition is too large (more than 2/3 of the list). + if (less < i1 && great > i5) { - reduceValue = reduceInitial(); + (function () { // isolate scope + var lessValue, greatValue; + while ((lessValue = f(a[less])) <= pivotValue1 && lessValue >= pivotValue1) ++less; + while ((greatValue = f(a[great])) <= pivotValue2 && greatValue >= pivotValue2) --great; - for (i = 0; i < n; ++i) { - if (!filters[i]) { - reduceValue = reduceAdd(reduceValue, data[i]); + // Copy paste of the previous 3-way partitioning with adaptions. + // + // We partition the list into three parts: + // 1. == pivot1 + // 2. > pivot1 && < pivot2 + // 3. == pivot2 + // + // During the loop we have: + // [ == pivot1 | > pivot1 && < pivot2 | unpartitioned | == pivot2 ] + // ^ ^ ^ + // less k great + // + // Invariants: + // 1. for x in [ *, less[ : x == pivot1 + // 2. for x in [less, k[ : pivot1 < x && x < pivot2 + // 3. for x in ]great, * ] : x == pivot2 + for (var k = less; k <= great; k++) { + var ek = a[k], xk = f(ek); + if (xk <= pivotValue1 && xk >= pivotValue1) { + if (k !== less) { + a[k] = a[less]; + a[less] = ek; + } + less++; + } else { + if (xk <= pivotValue2 && xk >= pivotValue2) { + /* eslint no-constant-condition: 0 */ + while (true) { + greatValue = f(a[great]); + if (greatValue <= pivotValue2 && greatValue >= pivotValue2) { + great--; + if (great < k) break; + // This is the only location inside the loop where a new + // iteration is started. + continue; + } else { + // a[great] < pivot2. + if (greatValue < pivotValue1) { + // Triple exchange. + a[k] = a[less]; + a[less++] = a[great]; + a[great--] = ek; + } else { + // a[great] == pivot1. + a[k] = a[great]; + a[great--] = ek; + } + break; + } + } + } } } - } + })(); // isolate scope - // Sets the reduce behavior for this group to use the specified functions. - // This method lazily recomputes the reduce value, waiting until needed. - function reduce(add, remove, initial) { - reduceAdd = add; - reduceRemove = remove; - reduceInitial = initial; - resetNeeded = true; - return group; } - // A convenience method for reducing by count. - function reduceCount() { - return reduce(crossfilter_reduceIncrement, crossfilter_reduceDecrement, crossfilter_zero); - } + // The second partition has now been cleared of pivot elements and looks + // as follows: + // [ * | > pivot1 && < pivot2 | * ] + // ^ ^ + // less great + // Sort the second partition using recursive descent. - // A convenience method for reducing by sum(value). - function reduceSum(value) { - return reduce(crossfilter_reduceAdd(value), crossfilter_reduceSubtract(value), crossfilter_zero); - } + // The second partition looks as follows: + // [ * | >= pivot1 && <= pivot2 | * ] + // ^ ^ + // less great + // Simply sort it by recursive descent. - // Returns the computed reduce value. - function value() { - if (resetNeeded) reset(), resetNeeded = false; - return reduceValue; - } + return sort(a, less, great + 1); + } - // Removes this group and associated event listeners. - function dispose() { - var i = filterListeners.indexOf(update); - if (i >= 0) filterListeners.splice(i); - i = dataListeners.indexOf(add); - if (i >= 0) dataListeners.splice(i); - return group; - } + return sort; +} - return reduceCount(); - } +var quicksort_sizeThreshold = 32; - // Returns the number of records in this crossfilter, irrespective of any filters. - function size() { - return n; - } +module.exports = quicksort_by(crossfilter_identity); +module.exports.by = quicksort_by; - return arguments.length - ? add(arguments[0]) - : crossfilter; +},{"./identity":10,"./insertionsort":11}],15:[function(require,module,exports){ +'use strict'; + +function crossfilter_reduceIncrement(p) { + return p + 1; } -// Returns an array of size n, big enough to store ids up to m. -function crossfilter_index(n, m) { - return (m < 0x101 - ? crossfilter_array8 : m < 0x10001 - ? crossfilter_array16 - : crossfilter_array32)(n); +function crossfilter_reduceDecrement(p) { + return p - 1; } -// Constructs a new array of size n, with sequential values from 0 to n - 1. -function crossfilter_range(n) { - var range = crossfilter_index(n, n); - for (var i = -1; ++i < n;) range[i] = i; - return range; +function crossfilter_reduceAdd(f) { + return function(p, v) { + return p + +f(v); + }; } -function crossfilter_capacity(w) { - return w === 8 - ? 0x100 : w === 16 - ? 0x10000 - : 0x100000000; +function crossfilter_reduceSubtract(f) { + return function(p, v) { + return p - f(v); + }; } -})(typeof exports !== 'undefined' && exports || this); + +module.exports = { + reduceIncrement: crossfilter_reduceIncrement, + reduceDecrement: crossfilter_reduceDecrement, + reduceAdd: crossfilter_reduceAdd, + reduceSubtract: crossfilter_reduceSubtract +}; + +},{}],16:[function(require,module,exports){ +'use strict'; + +function crossfilter_zero() { + return 0; +} + +module.exports = crossfilter_zero; + +},{}]},{},[1])(1) +}); \ No newline at end of file diff --git a/civicrm/bower_components/crossfilter2/crossfilter.min.js b/civicrm/bower_components/crossfilter2/crossfilter.min.js index 7bb2c73edb8351ead14893473e93bcc98b4f68b2..46114a21e33953598446637a69d94cea3cb5fb59 100644 --- a/civicrm/bower_components/crossfilter2/crossfilter.min.js +++ b/civicrm/bower_components/crossfilter2/crossfilter.min.js @@ -1 +1 @@ -!function(r){function n(r){return r}function t(r,n){for(var t=0,e=n.length,u=Array(e);e>t;++t)u[t]=r[n[t]];return u}function e(r){function n(n,t,e,u){for(;u>e;){var f=e+u>>>1;r(n[f])<t?e=f+1:u=f}return e}function t(n,t,e,u){for(;u>e;){var f=e+u>>>1;t<r(n[f])?u=f:e=f+1}return e}return t.right=t,t.left=n,t}function u(r){function n(r,n,t){for(var u=t-n,f=(u>>>1)+1;--f>0;)e(r,f,u,n);return r}function t(r,n,t){for(var u,f=t-n;--f>0;)u=r[n],r[n]=r[n+f],r[n+f]=u,e(r,1,f,n);return r}function e(n,t,e,u){for(var f,o=n[--u+t],i=r(o);(f=t<<1)<=e&&(e>f&&r(n[u+f])>r(n[u+f+1])&&f++,!(i<=r(n[u+f])));)n[u+t]=n[u+f],t=f;n[u+t]=o}return n.sort=t,n}function f(r){function n(n,e,u,f){var o,i,a,c,l=Array(f=Math.min(u-e,f));for(i=0;f>i;++i)l[i]=n[e++];if(t(l,0,f),u>e){o=r(l[0]);do(a=r(c=n[e])>o)&&(l[0]=c,o=r(t(l,0,f)[0]));while(++e<u)}return l}var t=u(r);return n}function o(r){function n(n,t,e){for(var u=t+1;e>u;++u){for(var f=u,o=n[u],i=r(o);f>t&&r(n[f-1])>i;--f)n[f]=n[f-1];n[f]=o}return n}return n}function i(r){function n(r,n,u){return(N>u-n?e:t)(r,n,u)}function t(t,e,u){var f,o=0|(u-e)/6,i=e+o,a=u-1-o,c=e+u-1>>1,l=c-o,v=c+o,s=t[i],h=r(s),d=t[l],p=r(d),g=t[c],y=r(g),m=t[v],x=r(m),b=t[a],A=r(b);h>p&&(f=s,s=d,d=f,f=h,h=p,p=f),x>A&&(f=m,m=b,b=f,f=x,x=A,A=f),h>y&&(f=s,s=g,g=f,f=h,h=y,y=f),p>y&&(f=d,d=g,g=f,f=p,p=y,y=f),h>x&&(f=s,s=m,m=f,f=h,h=x,x=f),y>x&&(f=g,g=m,m=f,f=y,y=x,x=f),p>A&&(f=d,d=b,b=f,f=p,p=A,A=f),p>y&&(f=d,d=g,g=f,f=p,p=y,y=f),x>A&&(f=m,m=b,b=f,f=x,x=A,A=f);var k=d,O=p,w=m,E=x;t[i]=s,t[l]=t[e],t[c]=g,t[v]=t[u-1],t[a]=b;var M=e+1,U=u-2,z=E>=O&&O>=E;if(z)for(var N=M;U>=N;++N){var C=t[N],S=r(C);if(O>S)N!==M&&(t[N]=t[M],t[M]=C),++M;else if(S>O)for(;;){var q=r(t[U]);{if(!(q>O)){if(O>q){t[N]=t[M],t[M++]=t[U],t[U--]=C;break}t[N]=t[U],t[U--]=C;break}U--}}}else for(var N=M;U>=N;N++){var C=t[N],S=r(C);if(O>S)N!==M&&(t[N]=t[M],t[M]=C),++M;else if(S>E)for(;;){var q=r(t[U]);{if(!(q>E)){O>q?(t[N]=t[M],t[M++]=t[U],t[U--]=C):(t[N]=t[U],t[U--]=C);break}if(U--,N>U)break}}}if(t[e]=t[M-1],t[M-1]=k,t[u-1]=t[U+1],t[U+1]=w,n(t,e,M-1),n(t,U+2,u),z)return t;if(i>M&&U>a){for(var F,q;(F=r(t[M]))<=O&&F>=O;)++M;for(;(q=r(t[U]))<=E&&q>=E;)--U;for(var N=M;U>=N;N++){var C=t[N],S=r(C);if(O>=S&&S>=O)N!==M&&(t[N]=t[M],t[M]=C),M++;else if(E>=S&&S>=E)for(;;){var q=r(t[U]);{if(!(E>=q&&q>=E)){O>q?(t[N]=t[M],t[M++]=t[U],t[U--]=C):(t[N]=t[U],t[U--]=C);break}if(U--,N>U)break}}}}return n(t,M,U+1)}var e=o(r);return n}function a(r){for(var n=Array(r),t=-1;++t<r;)n[t]=0;return n}function c(r,n){for(var t=r.length;n>t;)r[t++]=0;return r}function l(r,n){if(n>32)throw Error("invalid array width!");return r}function v(r,n){return function(t){var e=t.length;return[r.left(t,n,0,e),r.right(t,n,0,e)]}}function s(r,n){var t=n[0],e=n[1];return function(n){var u=n.length;return[r.left(n,t,0,u),r.left(n,e,0,u)]}}function h(r){return[0,r.length]}function d(){return null}function p(){return 0}function g(r){return r+1}function y(r){return r-1}function m(r){return function(n,t){return n+ +r(t)}}function x(r){return function(n,t){return n-r(t)}}function b(){function r(r){var n=E,t=r.length;return t&&(b=b.concat(r),z=F(z,E+=t),S.forEach(function(e){e(r,n,t)})),l}function e(){for(var r=A(E,E),n=[],t=0,e=0;E>t;++t)z[t]?r[t]=e++:n.push(t);N.forEach(function(r){r(0,[],n)}),q.forEach(function(n){n(r)});for(var u,t=0,e=0;E>t;++t)(u=z[t])&&(t!==e&&(z[e]=u,b[e]=b[t]),++e);for(b.length=e;E>e;)z[--E]=0}function o(r){function e(n,e,u){T=n.map(r),V=$(k(u),0,u),T=t(T,V);var f,o=_(T),i=o[0],a=o[1];if(W)for(f=0;u>f;++f)W(T[f],f)||(z[V[f]+e]|=Y);else{for(f=0;i>f;++f)z[V[f]+e]|=Y;for(f=a;u>f;++f)z[V[f]+e]|=Y}if(!e)return P=T,Q=V,tn=i,en=a,void 0;var c=P,l=Q,v=0,s=0;for(P=Array(E),Q=A(E,E),f=0;e>v&&u>s;++f)c[v]<T[s]?(P[f]=c[v],Q[f]=l[v++]):(P[f]=T[s],Q[f]=V[s++]+e);for(;e>v;++v,++f)P[f]=c[v],Q[f]=l[v];for(;u>s;++s,++f)P[f]=T[s],Q[f]=V[s]+e;o=_(P),tn=o[0],en=o[1]}function o(r,n,t){rn.forEach(function(r){r(T,V,n,t)}),T=V=null}function a(r){for(var n,t=0,e=0;E>t;++t)z[n=Q[t]]&&(t!==e&&(P[e]=P[t]),Q[e]=r[n],++e);for(P.length=e;E>e;)Q[e++]=0;var u=_(P);tn=u[0],en=u[1]}function c(r){var n=r[0],t=r[1];if(W)return W=null,G(function(r,e){return e>=n&&t>e}),tn=n,en=t,X;var e,u,f,o=[],i=[];if(tn>n)for(e=n,u=Math.min(tn,t);u>e;++e)z[f=Q[e]]^=Y,o.push(f);else if(n>tn)for(e=tn,u=Math.min(n,en);u>e;++e)z[f=Q[e]]^=Y,i.push(f);if(t>en)for(e=Math.max(n,en),u=t;u>e;++e)z[f=Q[e]]^=Y,o.push(f);else if(en>t)for(e=Math.max(tn,t),u=en;u>e;++e)z[f=Q[e]]^=Y,i.push(f);return tn=n,en=t,N.forEach(function(r){r(Y,o,i)}),X}function l(r){return null==r?B():Array.isArray(r)?j(r):"function"==typeof r?D(r):C(r)}function C(r){return c((_=v(w,r))(P))}function j(r){return c((_=s(w,r))(P))}function B(){return c((_=h)(P))}function D(r){return _=h,G(W=r),tn=0,en=E,X}function G(r){var n,t,e,u=[],f=[];for(n=0;E>n;++n)!(z[t=Q[n]]&Y)^!!(e=r(P[n],n))&&(e?(z[t]&=Z,u.push(t)):(z[t]|=Y,f.push(t)));N.forEach(function(r){r(Y,u,f)})}function H(r){for(var n,t=[],e=en;--e>=tn&&r>0;)z[n=Q[e]]||(t.push(b[n]),--r);return t}function I(r){for(var n,t=[],e=tn;en>e&&r>0;)z[n=Q[e]]||(t.push(b[n]),--r),e++;return t}function J(r){function t(n,t,e,u){function f(){++T===L&&(m=R(m,K<<=1),B=R(B,K),L=O(K))}var l,v,s,h,p,g,y=j,m=A(T,L),x=H,k=J,w=T,M=0,U=0;for(X&&(x=k=d),j=Array(T),T=0,B=w>1?F(B,E):A(E,L),w&&(s=(v=y[0]).key);u>U&&!((h=r(n[U]))>=h);)++U;for(;u>U;){for(v&&h>=s?(p=v,g=s,m[M]=T,(v=y[++M])&&(s=v.key)):(p={key:h,value:k()},g=h),j[T]=p;!(h>g||(B[l=t[U]+e]=T,z[l]&Z||(p.value=x(p.value,b[l])),++U>=u));)h=r(n[U]);f()}for(;w>M;)j[m[M]=T]=y[M++],f();if(T>M)for(M=0;e>M;++M)B[M]=m[B[M]];l=N.indexOf(V),T>1?(V=o,W=a):(!T&&$&&(T=1,j=[{key:null,value:k()}]),1===T?(V=i,W=c):(V=d,W=d),B=null),N[l]=V}function e(){if(T>1){for(var r=T,n=j,t=A(r,r),e=0,u=0;E>e;++e)z[e]&&(t[B[u]=B[e]]=1,++u);for(j=[],T=0,e=0;r>e;++e)t[e]&&(t[e]=T++,j.push(n[e]));if(T>1)for(var e=0;u>e;++e)B[e]=t[B[e]];else B=null;N[N.indexOf(V)]=T>1?(W=a,V=o):1===T?(W=c,V=i):W=V=d}else if(1===T){if($)return;for(var e=0;E>e;++e)if(z[e])return;j=[],T=0,N[N.indexOf(V)]=V=W=d}}function o(r,n,t){if(r!==Y&&!X){var e,u,f,o;for(e=0,f=n.length;f>e;++e)z[u=n[e]]&Z||(o=j[B[u]],o.value=H(o.value,b[u]));for(e=0,f=t.length;f>e;++e)(z[u=t[e]]&Z)===r&&(o=j[B[u]],o.value=I(o.value,b[u]))}}function i(r,n,t){if(r!==Y&&!X){var e,u,f,o=j[0];for(e=0,f=n.length;f>e;++e)z[u=n[e]]&Z||(o.value=H(o.value,b[u]));for(e=0,f=t.length;f>e;++e)(z[u=t[e]]&Z)===r&&(o.value=I(o.value,b[u]))}}function a(){var r,n;for(r=0;T>r;++r)j[r].value=J();for(r=0;E>r;++r)z[r]&Z||(n=j[B[r]],n.value=H(n.value,b[r]))}function c(){var r,n=j[0];for(n.value=J(),r=0;E>r;++r)z[r]&Z||(n.value=H(n.value,b[r]))}function l(){return X&&(W(),X=!1),j}function v(r){var n=D(l(),0,j.length,r);return G.sort(n,0,n.length)}function s(r,n,t){return H=r,I=n,J=t,X=!0,S}function h(){return s(g,y,p)}function k(r){return s(m(r),x(r),p)}function w(r){function n(n){return r(n.value)}return D=f(n),G=u(n),S}function M(){return w(n)}function U(){return T}function C(){var r=N.indexOf(V);return r>=0&&N.splice(r,1),r=rn.indexOf(t),r>=0&&rn.splice(r,1),r=q.indexOf(e),r>=0&&q.splice(r,1),S}var S={top:v,all:l,reduce:s,reduceCount:h,reduceSum:k,order:w,orderNatural:M,size:U,dispose:C,remove:C};nn.push(S);var j,B,D,G,H,I,J,K=8,L=O(K),T=0,V=d,W=d,X=!0,$=r===d;return arguments.length<1&&(r=n),N.push(V),rn.push(t),q.push(e),t(P,Q,0,E),h().orderNatural()}function K(){var r=J(d),n=r.all;return delete r.all,delete r.top,delete r.order,delete r.orderNatural,delete r.size,r.value=function(){return n()[0].value},r}function L(){nn.forEach(function(r){r.dispose()});var r=S.indexOf(e);return r>=0&&S.splice(r,1),r=S.indexOf(o),r>=0&&S.splice(r,1),r=q.indexOf(a),r>=0&&q.splice(r,1),M&=Z,B()}var P,Q,T,V,W,X={filter:l,filterExact:C,filterRange:j,filterFunction:D,filterAll:B,top:H,bottom:I,group:J,groupAll:K,dispose:L,remove:L},Y=~M&-~M,Z=~Y,$=i(function(r){return T[r]}),_=h,rn=[],nn=[],tn=0,en=0;return S.unshift(e),S.push(o),q.push(a),M|=Y,(U>=32?!Y:M&-(1<<U))&&(z=R(z,U<<=1)),e(b,0,E),o(b,0,E),X}function a(){function r(r,n){var t;if(!h)for(t=n;E>t;++t)z[t]||(a=c(a,b[t]))}function n(r,n,t){var e,u,f;if(!h){for(e=0,f=n.length;f>e;++e)z[u=n[e]]||(a=c(a,b[u]));for(e=0,f=t.length;f>e;++e)z[u=t[e]]===r&&(a=l(a,b[u]))}}function t(){var r;for(a=v(),r=0;E>r;++r)z[r]||(a=c(a,b[r]))}function e(r,n,t){return c=r,l=n,v=t,h=!0,s}function u(){return e(g,y,p)}function f(r){return e(m(r),x(r),p)}function o(){return h&&(t(),h=!1),a}function i(){var t=N.indexOf(n);return t>=0&&N.splice(t),t=S.indexOf(r),t>=0&&S.splice(t),s}var a,c,l,v,s={reduce:e,reduceCount:u,reduceSum:f,value:o,dispose:i,remove:i},h=!0;return N.push(n),S.push(r),r(b,0,E),u()}function c(){return E}var l={add:r,remove:e,dimension:o,groupAll:a,size:c},b=[],E=0,M=0,U=8,z=C(0),N=[],S=[],q=[];return arguments.length?r(arguments[0]):l}function A(r,n){return(257>n?C:65537>n?S:q)(r)}function k(r){for(var n=A(r,r),t=-1;++t<r;)n[t]=t;return n}function O(r){return 8===r?256:16===r?65536:4294967296}b.version="1.3.14",b.permute=t;var w=b.bisect=e(n);w.by=e;var E=b.heap=u(n);E.by=u;var M=b.heapselect=f(n);M.by=f;var U=b.insertionsort=o(n);U.by=o;var z=b.quicksort=i(n);z.by=i;var N=32,C=a,S=a,q=a,F=c,R=l;"undefined"!=typeof Uint8Array&&(C=function(r){return new Uint8Array(r)},S=function(r){return new Uint16Array(r)},q=function(r){return new Uint32Array(r)},F=function(r,n){if(r.length>=n)return r;var t=new r.constructor(n);return t.set(r),t},R=function(r,n){var t;switch(n){case 16:t=S(r.length);break;case 32:t=q(r.length);break;default:throw Error("invalid array width!")}return t.set(r),t}),r.crossfilter=b}("undefined"!=typeof exports&&exports||this); \ No newline at end of file +!function(r){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=r();else if("function"==typeof define&&define.amd)define([],r);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.crossfilter=r()}}(function(){return function r(t,e,n){function o(u,f){if(!e[u]){if(!t[u]){var a="function"==typeof require&&require;if(!f&&a)return a(u,!0);if(i)return i(u,!0);var s=new Error("Cannot find module '"+u+"'");throw s.code="MODULE_NOT_FOUND",s}var c=e[u]={exports:{}};t[u][0].call(c.exports,function(r){var e=t[u][1][r];return o(e?e:r)},c,c.exports,r,t,e,n)}return e[u].exports}for(var i="function"==typeof require&&require,u=0;u<n.length;u++)o(n[u]);return o}({1:[function(r,t){t.exports=r("./src/crossfilter").crossfilter},{"./src/crossfilter":6}],2:[function(r,t){(function(r){function e(r,t){return null==r?void 0:r[t]}function n(r){var t=!1;if(null!=r&&"function"!=typeof r.toString)try{t=!!(r+"")}catch(e){}return t}function o(r){var t=-1,e=r?r.length:0;for(this.clear();++t<e;){var n=r[t];this.set(n[0],n[1])}}function i(){this.__data__=dt?dt(null):{}}function u(r){return this.has(r)&&delete this.__data__[r]}function f(r){var t=this.__data__;if(dt){var e=t[r];return e===T?void 0:e}return st.call(t,r)?t[r]:void 0}function a(r){var t=this.__data__;return dt?void 0!==t[r]:st.call(t,r)}function s(r,t){var e=this.__data__;return e[r]=dt&&void 0===t?T:t,this}function c(r){var t=-1,e=r?r.length:0;for(this.clear();++t<e;){var n=r[t];this.set(n[0],n[1])}}function l(){this.__data__=[]}function h(r){var t=this.__data__,e=w(t,r);if(0>e)return!1;var n=t.length-1;return e==n?t.pop():pt.call(t,e,1),!0}function p(r){var t=this.__data__,e=w(t,r);return 0>e?void 0:t[e][1]}function v(r){return w(this.__data__,r)>-1}function d(r,t){var e=this.__data__,n=w(e,r);return 0>n?e.push([r,t]):e[n][1]=t,this}function y(r){var t=-1,e=r?r.length:0;for(this.clear();++t<e;){var n=r[t];this.set(n[0],n[1])}}function g(){this.__data__={hash:new o,map:new(vt||c),string:new o}}function b(r){return k(this,r).delete(r)}function _(r){return k(this,r).get(r)}function x(r){return k(this,r).has(r)}function m(r,t){return k(this,r).set(r,t),this}function w(r,t){for(var e=r.length;e--;)if(q(r[e][0],t))return e;return-1}function E(r){if(!R(r)||M(r))return!1;var t=N(r)||n(r)?lt:Z;return t.test(C(r))}function O(r){if("string"==typeof r)return r;if(D(r))return gt?gt.call(r):"";var t=r+"";return"0"==t&&1/r==-W?"-0":t}function A(r){return _t(r)?r:bt(r)}function k(r,t){var e=r.__data__;return S(t)?e["string"==typeof t?"string":"hash"]:e.map}function z(r,t){var n=e(r,t);return E(n)?n:void 0}function j(r,t){if(_t(r))return!1;var e=typeof r;return"number"==e||"symbol"==e||"boolean"==e||null==r||D(r)?!0:K.test(r)||!H.test(r)||null!=t&&r in Object(t)}function S(r){var t=typeof r;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==r:null===r}function M(r){return!!ft&&ft in r}function F(r){if("string"==typeof r||D(r))return r;var t=r+"";return"0"==t&&1/r==-W?"-0":t}function C(r){if(null!=r){try{return at.call(r)}catch(t){}try{return r+""}catch(t){}}return""}function $(r,t){if("function"!=typeof r||t&&"function"!=typeof t)throw new TypeError(P);var e=function(){var n=arguments,o=t?t.apply(this,n):n[0],i=e.cache;if(i.has(o))return i.get(o);var u=r.apply(this,n);return e.cache=i.set(o,u),u};return e.cache=new($.Cache||y),e}function q(r,t){return r===t||r!==r&&t!==t}function N(r){var t=R(r)?ct.call(r):"";return t==J||t==G}function R(r){var t=typeof r;return!!r&&("object"==t||"function"==t)}function U(r){return!!r&&"object"==typeof r}function D(r){return"symbol"==typeof r||U(r)&&ct.call(r)==B}function I(r){return null==r?"":O(r)}function L(r,t,e){t=j(t,r)?[t]:A(t);var n=-1,o=t.length;for(o||(r=void 0,o=1);++n<o;){var i=null==r?void 0:r[F(t[n])];void 0===i&&(n=o,i=e),r=N(i)?i.call(r):i}return r}var P="Expected a function",T="__lodash_hash_undefined__",W=1/0,J="[object Function]",G="[object GeneratorFunction]",B="[object Symbol]",H=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,K=/^\w*$/,Q=/^\./,V=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,X=/[\\^$.*+?()[\]{}|]/g,Y=/\\(\\)?/g,Z=/^\[object .+?Constructor\]$/,rt="object"==typeof r&&r&&r.Object===Object&&r,tt="object"==typeof self&&self&&self.Object===Object&&self,et=rt||tt||Function("return this")(),nt=Array.prototype,ot=Function.prototype,it=Object.prototype,ut=et["__core-js_shared__"],ft=function(){var r=/[^.]+$/.exec(ut&&ut.keys&&ut.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""}(),at=ot.toString,st=it.hasOwnProperty,ct=it.toString,lt=RegExp("^"+at.call(st).replace(X,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ht=et.Symbol,pt=nt.splice,vt=z(et,"Map"),dt=z(Object,"create"),yt=ht?ht.prototype:void 0,gt=yt?yt.toString:void 0;o.prototype.clear=i,o.prototype.delete=u,o.prototype.get=f,o.prototype.has=a,o.prototype.set=s,c.prototype.clear=l,c.prototype.delete=h,c.prototype.get=p,c.prototype.has=v,c.prototype.set=d,y.prototype.clear=g,y.prototype.delete=b,y.prototype.get=_,y.prototype.has=x,y.prototype.set=m;var bt=$(function(r){r=I(r);var t=[];return Q.test(r)&&t.push(""),r.replace(V,function(r,e,n,o){t.push(n?o.replace(Y,"$1"):e||r)}),t});$.Cache=y;var _t=Array.isArray;t.exports=L}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],3:[function(r,t){t.exports={version:"1.4.5"}},{}],4:[function(r,t){function e(r){for(var t=new Array(r),e=-1;++e<r;)t[e]=0;return t}function n(r,t){for(var e=r.length;t>e;)r[e++]=0;return r}function o(r,t){if(t>32)throw new Error("invalid array width!");return r}function i(r){this.length=r,this.subarrays=1,this.width=8,this.masks={0:0},this[0]=u(r)}if("undefined"!=typeof Uint8Array)var u=function(r){return new Uint8Array(r)},f=function(r){return new Uint16Array(r)},a=function(r){return new Uint32Array(r)},s=function(r,t){if(r.length>=t)return r;var e=new r.constructor(t);return e.set(r),e},c=function(r,t){var e;switch(t){case 16:e=f(r.length);break;case 32:e=a(r.length);break;default:throw new Error("invalid array width!")}return e.set(r),e};i.prototype.lengthen=function(r){var t,e;for(t=0,e=this.subarrays;e>t;++t)this[t]=s(this[t],r);this.length=r},i.prototype.add=function(){var r,t,e,n,o;for(n=0,o=this.subarrays;o>n;++n)if(r=this.masks[n],t=this.width-32*n,e=~r&-~r,!(t>=32)||e)return 32>t&&e&1<<t&&(this[n]=c(this[n],t<<=1),this.width=32*n+t),this.masks[n]|=e,{offset:n,one:e};return this[this.subarrays]=u(this.length),this.masks[this.subarrays]=1,this.width+=8,{offset:this.subarrays++,one:1}},i.prototype.copy=function(r,t){var e,n;for(e=0,n=this.subarrays;n>e;++e)this[e][r]=this[e][t]},i.prototype.truncate=function(r){var t,e;for(t=0,e=this.subarrays;e>t;++t){for(var n=this.length-1;n>=r;n--)this[t][n]=0;this[t].length=r}this.length=r},i.prototype.zero=function(r){var t,e;for(t=0,e=this.subarrays;e>t;++t)if(this[t][r])return!1;return!0},i.prototype.zeroExcept=function(r,t,e){var n,o;for(n=0,o=this.subarrays;o>n;++n)if(n===t?this[n][r]&e:this[n][r])return!1;return!0},i.prototype.zeroExceptMask=function(r,t){var e,n;for(e=0,n=this.subarrays;n>e;++e)if(this[e][r]&t[e])return!1;return!0},i.prototype.only=function(r,t,e){var n,o;for(n=0,o=this.subarrays;o>n;++n)if(this[n][r]!=(n===t?e:0))return!1;return!0},i.prototype.onlyExcept=function(r,t,e,n,o){var i,u,f;for(u=0,f=this.subarrays;f>u;++u)if(i=this[u][r],u===t&&(i&=e),i!=(u===n?o:0))return!1;return!0},t.exports={array8:e,array16:e,array32:e,arrayLengthen:n,arrayWiden:o,bitarray:i}},{}],5:[function(r,t){"use strict";function e(r){function t(t,e,n,o){for(;o>n;){var i=n+o>>>1;r(t[i])<e?n=i+1:o=i}return n}function e(t,e,n,o){for(;o>n;){var i=n+o>>>1;e<r(t[i])?o=i:n=i+1}return n}return e.right=e,e.left=t,e}var n=r("./identity");t.exports=e(n),t.exports.by=e},{"./identity":10}],6:[function(r,t,e){"use strict";function n(){function r(r){var t=S,e=r.length;return e&&(j=j.concat(r),k.lengthen(S+=e),F.forEach(function(n){n(r,t,e)}),A("dataAdded")),z}function t(r){for(var t=o(S,S),e=[],n="function"==typeof r,i=function(t){return n?r(j[t],t):k.zero(t)},u=0,f=0;S>u;++u)i(u)?(e.push(u),t[u]=m):t[u]=f++;M.forEach(function(r){r(-1,-1,[],e,!0)}),C.forEach(function(r){r(t)});for(var a=0,s=0;S>a;++a)t[a]!==m&&(a!==s&&(k.copy(s,a),j[s]=j[a]),++s);j.length=S=s,k.truncate(s),A("dataRemoved")}function e(r,t){var e,n,o,i,u=Array(k.subarrays);for(e=0;e<k.subarrays;e++)u[e]=-1;if(t)for(n=0,i=t.length;i>n;n++)o=t[n].id(),u[o>>7]&=~(1<<(63&o));return k.zeroExceptMask(r,u)}function n(r,t){function e(e,n,u){if(t){pt=0,z=0,ot=[];for(var a=0;a<e.length;a++)for(z=0,ot=r(e[a]);z<ot.length;z++)pt++;Q=[],Y=i(e.length),rt=o(pt,1);for(var s=i(pt),c=0,l=0;l<e.length;l++)if(ot=r(e[l]),ot.length)for(Y[l]=ot.length,z=0;z<ot.length;z++)Q.push(ot[z]),s[c]=l,c++;else Y[l]=0,ut.push(l+n);var h=ft(i(pt),0,pt);Q=y(Q,h),V=y(s,h)}else Q=e.map(r),V=ft(i(u),0,u),Q=y(Q,V);t&&(u=pt);var p=at(Q),v=p[0],d=p[1];if(tt)for(var g=0;u>g;++g)tt(Q[g],g)||(k[G][V[g]+n]|=W,t&&(rt[g]=1));else{for(var b=0;v>b;++b)k[G][V[b]+n]|=W,t&&(rt[b]=1);for(var _=d;u>_;++_)k[G][V[_]+n]|=W,t&&(rt[_]=1)}if(!n)return H=Q,K=V,X=Y,Z=rt,lt=v,ht=d,void 0;var x,m=H,w=K,E=Z,O=0;if(a=0,t&&(x=n,n=m.length,u=pt),H=t?new Array(n+u):new Array(S),K=t?new Array(n+u):o(S,S),t&&(Z=o(n+u,1)),t){var A=X.length;X=f.arrayLengthen(X,S);for(var z=0;S>z+A;z++)X[z+A]=Y[z]}for(var j=0;n>a&&u>O;++j)m[a]<Q[O]?(H[j]=m[a],t&&(Z[j]=E[a]),K[j]=w[a++]):(H[j]=Q[O],t&&(Z[j]=rt[O]),K[j]=V[O++]+(t?x:n));for(;n>a;++a,++j)H[j]=m[a],t&&(Z[j]=E[a]),K[j]=w[a];for(;u>O;++O,++j)H[j]=Q[O],t&&(Z[j]=rt[O]),K[j]=V[O]+(t?x:n);p=at(H),lt=p[0],ht=p[1]}function n(r,t,e){st.forEach(function(r){r(Q,V,t,e)}),Q=V=null}function d(r){if(t){for(var e=0,n=0;e<ut.length;e++)r[ut[e]]!==m&&(ut[n]=r[ut[e]],n++);for(ut.length=n,e=0,n=0;S>e;e++)r[e]!==m&&(n!==e&&(X[n]=X[e]),n++);X.length=n}for(var o,i=H.length,u=0,f=0;i>u;++u)o=K[u],r[o]!==m&&(u!==f&&(H[f]=H[u]),K[f]=r[o],t&&(Z[f]=Z[u]),++f);for(H.length=f,t&&(Z.length=f);i>f;)K[f++]=0;var a=at(H);lt=a[0],ht=a[1]}function _(r){var e=r[0],n=r[1];if(tt)return tt=null,q(function(r,t){return t>=e&&n>t},0===r[0]&&r[1]===H.length),lt=e,ht=n,it;var o,i,u,f=[],a=[],s=[],c=[];if(lt>e)for(o=e,i=Math.min(lt,n);i>o;++o)f.push(K[o]),s.push(o);else if(e>lt)for(o=lt,i=Math.min(e,ht);i>o;++o)a.push(K[o]),c.push(o);if(n>ht)for(o=Math.max(e,ht),i=n;i>o;++o)f.push(K[o]),s.push(o);else if(ht>n)for(o=Math.max(lt,n),i=ht;i>o;++o)a.push(K[o]),c.push(o);if(t){var l=[],h=[];for(o=0;o<f.length;o++)X[f[o]]++,Z[s[o]]=0,1===X[f[o]]&&(k[G][f[o]]^=W,l.push(f[o]));for(o=0;o<a.length;o++)X[a[o]]--,Z[c[o]]=1,0===X[a[o]]&&(k[G][a[o]]^=W,h.push(a[o]));if(f=l,a=h,0===r[0]&&r[1]===H.length)for(o=0;o<ut.length;o++)k[G][u=ut[o]]&W&&(k[G][u]^=W,f.push(u));else for(o=0;o<ut.length;o++)k[G][u=ut[o]]&W||(k[G][u]^=W,a.push(u))}else{for(o=0;o<f.length;o++)k[G][f[o]]^=W;for(o=0;o<a.length;o++)k[G][a[o]]^=W}return lt=e,ht=n,M.forEach(function(r){r(W,G,f,a)}),A("filtered"),it}function w(r){return null==r?z():Array.isArray(r)?O(r):"function"==typeof r?$(r):E(r)}function E(r){return et=r,nt=!0,_((at=a.filterExact(v,r))(H))}function O(r){return et=r,nt=!0,_((at=a.filterRange(v,r))(H))}function z(){return et=void 0,nt=!1,_((at=a.filterAll)(H))}function $(r){et=r,nt=!0,tt=r,at=a.filterAll,q(r,!1);var t=at(H);return lt=t[0],ht=t[1],it}function q(r,e){var n,o,i,u=[],f=[],a=[],s=[],c=H.length;if(!t)for(n=0;c>n;++n)!(k[G][o=K[n]]&W)^!!(i=r(H[n],n))&&(i?u.push(o):f.push(o));if(t)for(n=0;c>n;++n)r(H[n],n)?(u.push(K[n]),a.push(n)):(f.push(K[n]),s.push(n));if(t){var l=[],h=[];for(n=0;n<u.length;n++)1===Z[a[n]]&&(X[u[n]]++,Z[a[n]]=0,1===X[u[n]]&&(k[G][u[n]]^=W,l.push(u[n])));for(n=0;n<f.length;n++)0===Z[s[n]]&&(X[f[n]]--,Z[s[n]]=1,0===X[f[n]]&&(k[G][f[n]]^=W,h.push(f[n])));if(u=l,f=h,e)for(n=0;n<ut.length;n++)k[G][o=ut[n]]&W&&(k[G][o]^=W,u.push(o));else for(n=0;n<ut.length;n++)k[G][o=ut[n]]&W||(k[G][o]^=W,f.push(o))}else{for(n=0;n<u.length;n++)k[G][u[n]]&W&&(k[G][u[n]]&=J);for(n=0;n<f.length;n++)k[G][f[n]]&W||(k[G][f[n]]|=W)}M.forEach(function(r){r(W,G,u,f)}),A("filtered")}function N(){return et}function R(){return nt}function U(r,e){var n,o=[],i=ht,u=0;for(e&&e>0&&(u=e);--i>=lt&&r>0;)k.zero(n=K[i])&&(u>0?--u:(o.push(j[n]),--r));if(t)for(i=0;i<ut.length&&r>0;i++)k.zero(n=ut[i])&&(u>0?--u:(o.push(j[n]),--r));return o}function D(r,e){var n,o,i=[],u=0;if(e&&e>0&&(u=e),t)for(n=0;n<ut.length&&r>0;n++)k.zero(o=ut[n])&&(u>0?--u:(i.push(j[o]),--r));for(n=lt;ht>n&&r>0;)k.zero(o=K[n])&&(u>0?--u:(i.push(j[o]),--r)),n++;return i}function I(r){function e(e,n,s,l){function h(){return t?(B++,void 0):(++B===T&&(w=f.arrayWiden(w,P<<=1),q=f.arrayWiden(q,P),T=u(P)),void 0)}t&&(L=s,s=H.length-e.length,l=e.length);var p,y,g,b,_,x,m=$,w=t?[]:o(B,T),E=U,O=D,A=I,z=B,F=0,C=0;for(X&&(E=A=c),X&&(O=A=c),$=new Array(B),B=0,q=t?z?q:[]:z>1?f.arrayLengthen(q,S):o(S,T),z&&(g=(y=m[0]).key);l>C&&!((b=r(e[C]))>=b);)++C;for(;l>C;){for(y&&b>=g?(_=y,x=g,w[F]=B,y=m[++F],y&&(g=y.key)):(_={key:b,value:A()},x=b),$[B]=_;x>=b&&(p=n[C]+(t?L:s),t?q[p]?q[p].push(B):q[p]=[B]:q[p]=B,_.value=E(_.value,j[p],!0),k.zeroExcept(p,G,J)||(_.value=O(_.value,j[p],!1)),!(++C>=l));)b=r(e[C]);h()}for(;z>F;)$[w[F]=B]=m[F++],h();if(t)for(var N=0;S>N;N++)q[N]||(q[N]=[]);if(B>F)if(t)for(F=0;L>F;++F)for(N=0;N<q[F].length;N++)q[F][N]=w[q[F][N]];else for(F=0;s>F;++F)q[F]=w[q[F]];p=M.indexOf(Q),B>1||t?(Q=i,V=v):(!B&&Y&&(B=1,$=[{key:null,value:A()}]),1===B?(Q=a,V=d):(Q=c,V=c),q=null),M[p]=Q}function n(r){if(B>1||t){var e,n,u,f=B,s=$,l=o(f,f);if(t){for(e=0,u=0;S>e;++e)if(r[e]!==m){for(q[u]=q[e],n=0;n<q[u].length;n++)l[q[u][n]]=1;++u}}else for(e=0,u=0;S>e;++e)r[e]!==m&&(l[q[u]=q[e]]=1,++u);for($=[],B=0,e=0;f>e;++e)l[e]&&(l[e]=B++,$.push(s[e]));if(B>1||t)if(t)for(e=0;u>e;++e)for(n=0;n<q[e].length;++n)q[e][n]=l[q[e][n]];else for(e=0;u>e;++e)q[e]=l[q[e]];else q=null;M[M.indexOf(Q)]=B>1||t?(V=v,Q=i):1===B?(V=d,Q=a):V=Q=c}else if(1===B){if(Y)return;for(var h=0;S>h;++h)if(r[h]!==m)return;$=[],B=0,M[M.indexOf(Q)]=Q=V=c}}function i(r,e,n,o,i){if(!(r===W&&e===G||X)){var u,f,a,s,c;if(t){for(u=0,s=n.length;s>u;++u)if(k.zeroExcept(a=n[u],G,J))for(f=0;f<q[a].length;f++)c=$[q[a][f]],c.value=U(c.value,j[a],!1,f);for(u=0,s=o.length;s>u;++u)if(k.onlyExcept(a=o[u],G,J,e,r))for(f=0;f<q[a].length;f++)c=$[q[a][f]],c.value=D(c.value,j[a],i,f)}else{for(u=0,s=n.length;s>u;++u)k.zeroExcept(a=n[u],G,J)&&(c=$[q[a]],c.value=U(c.value,j[a],!1));for(u=0,s=o.length;s>u;++u)k.onlyExcept(a=o[u],G,J,e,r)&&(c=$[q[a]],c.value=D(c.value,j[a],i))}}}function a(r,t,e,n,o){if(!(r===W&&t===G||X)){var i,u,f,a=$[0];for(i=0,f=e.length;f>i;++i)k.zeroExcept(u=e[i],G,J)&&(a.value=U(a.value,j[u],!1));for(i=0,f=n.length;f>i;++i)k.onlyExcept(u=n[i],G,J,t,r)&&(a.value=D(a.value,j[u],o))}}function v(){var r,e,n;for(r=0;B>r;++r)$[r].value=I();if(t){for(r=0;S>r;++r)for(e=0;e<q[r].length;e++)n=$[q[r][e]],n.value=U(n.value,j[r],!0,e);for(r=0;S>r;++r)if(!k.zeroExcept(r,G,J))for(e=0;e<q[r].length;e++)n=$[q[r][e]],n.value=D(n.value,j[r],!1,e)}else{for(r=0;S>r;++r)n=$[q[r]],n.value=U(n.value,j[r],!0);for(r=0;S>r;++r)k.zeroExcept(r,G,J)||(n=$[q[r]],n.value=D(n.value,j[r],!1))}}function d(){var r,t=$[0];for(t.value=I(),r=0;S>r;++r)t.value=U(t.value,j[r],!0);for(r=0;S>r;++r)k.zeroExcept(r,G,J)||(t.value=D(t.value,j[r],!1))}function y(){return X&&(V(),X=!1),$}function g(r){var t=N(y(),0,$.length,r);return R.sort(t,0,t.length)}function _(r,t,e){return U=r,D=t,I=e,X=!0,F}function x(){return _(b.reduceIncrement,b.reduceDecrement,l)}function w(r){return _(b.reduceAdd(r),b.reduceSubtract(r),l)}function E(r){function t(t){return r(t.value)}return N=h.by(t),R=p.by(t),F}function O(){return E(s)}function A(){return B}function z(){var r=M.indexOf(Q);return r>=0&&M.splice(r,1),r=st.indexOf(e),r>=0&&st.splice(r,1),r=C.indexOf(n),r>=0&&C.splice(r,1),r=ct.indexOf(F),r>=0&&ct.splice(r,1),F}var F={top:g,all:y,reduce:_,reduceCount:x,reduceSum:w,order:E,orderNatural:O,size:A,dispose:z,remove:z};ct.push(F);var $,q,N,R,U,D,I,L,P=8,T=u(P),B=0,Q=c,V=c,X=!0,Y=r===c;return arguments.length<1&&(r=s),M.push(Q),st.push(e),C.push(n),e(H,K,0,S),x().orderNatural()}function L(){var r=I(c),t=r.all;return delete r.all,delete r.top,delete r.order,delete r.orderNatural,delete r.size,r.value=function(){return t()[0].value},r}function P(){ct.forEach(function(r){r.dispose()});var r=F.indexOf(e);return r>=0&&F.splice(r,1),r=F.indexOf(n),r>=0&&F.splice(r,1),r=C.indexOf(d),r>=0&&C.splice(r,1),k.masks[G]&=J,z()}if("string"==typeof r){var T=r;r=function(r){return x(r,T)}}var W,J,G,B,H,K,Q,V,X,Y,Z,rt,tt,et,nt,ot,it={filter:w,filterExact:E,filterRange:O,filterFunction:$,filterAll:z,currentFilter:N,hasCurrentFilter:R,top:U,bottom:D,group:I,groupAll:L,dispose:P,remove:P,accessor:r,id:function(){return B}},ut=[],ft=g.by(function(r){return Q[r]}),at=a.filterAll,st=[],ct=[],lt=0,ht=0,pt=0;F.unshift(e),F.push(n),C.push(d);var vt=k.add();return G=vt.offset,W=vt.one,J=~W,B=G<<7|Math.log(W)/Math.log(2),e(j,0,S),n(j,0,S),it}function d(){function r(r,t){var e;if(!v)for(e=t;S>e;++e)a=s(a,j[e],!0),k.zero(e)||(a=c(a,j[e],!1))}function t(r,t,e,n,o){var i,u,f;if(!v){for(i=0,f=e.length;f>i;++i)k.zero(u=e[i])&&(a=s(a,j[u],o));for(i=0,f=n.length;f>i;++i)k.only(u=n[i],t,r)&&(a=c(a,j[u],o))}}function e(){var r;for(a=h(),r=0;S>r;++r)a=s(a,j[r],!0),k.zero(r)||(a=c(a,j[r],!1))}function n(r,t,e){return s=r,c=t,h=e,v=!0,p}function o(){return n(b.reduceIncrement,b.reduceDecrement,l)}function i(r){return n(b.reduceAdd(r),b.reduceSubtract(r),l)}function u(){return v&&(e(),v=!1),a}function f(){var e=M.indexOf(t);return e>=0&&M.splice(e,1),e=F.indexOf(r),e>=0&&F.splice(e,1),p}var a,s,c,h,p={reduce:n,reduceCount:o,reduceSum:i,value:u,dispose:f,remove:f},v=!0;return M.push(t),F.push(r),r(j,0,S),o()}function _(){return S}function w(){return j}function E(){var r=[],t=0;for(t=0;S>t;t++)k.zero(t)&&r.push(j[t]);return r}function O(r){return"function"!=typeof r?(console.warn("onChange callback parameter must be a function!"),void 0):($.push(r),function(){$.splice($.indexOf(r),1)})}function A(r){for(var t=0;t<$.length;t++)$[t](r)}var k,z={add:r,remove:t,dimension:n,groupAll:d,size:_,all:w,allFiltered:E,onChange:O,isElementFiltered:e},j=[],S=0,M=[],F=[],C=[],$=[];return k=new f.bitarray(0),arguments.length?r(arguments[0]):z}function o(r,t){return(257>t?f.array8:65537>t?f.array16:f.array32)(r)}function i(r){for(var t=o(r,r),e=-1;++e<r;)t[e]=e;return t}function u(r){return 8===r?256:16===r?65536:4294967296}var f=r("./array"),a=r("./filter"),s=r("./identity"),c=r("./null"),l=r("./zero"),h=r("./heapselect"),p=r("./heap"),v=r("./bisect"),d=r("./insertionsort"),y=r("./permute"),g=r("./quicksort"),b=r("./reduce"),_=r("./../package.json"),x=r("lodash.result"),m=-1;e.crossfilter=n,e.crossfilter.heap=p,e.crossfilter.heapselect=h,e.crossfilter.bisect=v,e.crossfilter.insertionsort=d,e.crossfilter.permute=y,e.crossfilter.quicksort=g,e.crossfilter.version=_.version},{"./../package.json":3,"./array":4,"./bisect":5,"./filter":7,"./heap":8,"./heapselect":9,"./identity":10,"./insertionsort":11,"./null":12,"./permute":13,"./quicksort":14,"./reduce":15,"./zero":16,"lodash.result":2}],7:[function(r,t){"use strict";function e(r,t){return function(e){var n=e.length;return[r.left(e,t,0,n),r.right(e,t,0,n)]}}function n(r,t){var e=t[0],n=t[1];return function(t){var o=t.length;return[r.left(t,e,0,o),r.left(t,n,0,o)]}}function o(r){return[0,r.length]}t.exports={filterExact:e,filterRange:n,filterAll:o}},{}],8:[function(r,t){"use strict";function e(r){function t(r,t,e){for(var o=e-t,i=(o>>>1)+1;--i>0;)n(r,i,o,t);return r}function e(r,t,e){for(var o,i=e-t;--i>0;)o=r[t],r[t]=r[t+i],r[t+i]=o,n(r,1,i,t);return r}function n(t,e,n,o){for(var i,u=t[--o+e],f=r(u);(i=e<<1)<=n&&(n>i&&r(t[o+i])>r(t[o+i+1])&&i++,!(f<=r(t[o+i])));)t[o+e]=t[o+i],e=i;t[o+e]=u}return t.sort=e,t}var n=r("./identity");t.exports=e(n),t.exports.by=e},{"./identity":10}],9:[function(r,t){"use strict";function e(r){function t(t,n,o,i){var u,f,a,s=new Array(i=Math.min(o-n,i));for(f=0;i>f;++f)s[f]=t[n++];if(e(s,0,i),o>n){u=r(s[0]);do r(a=t[n])>u&&(s[0]=a,u=r(e(s,0,i)[0]));while(++n<o)}return s}var e=o.by(r);return t}var n=r("./identity"),o=r("./heap");t.exports=e(n),t.exports.by=e},{"./heap":8,"./identity":10}],10:[function(r,t){"use strict";function e(r){return r}t.exports=e},{}],11:[function(r,t){"use strict";function e(r){function t(t,e,n){for(var o=e+1;n>o;++o){for(var i=o,u=t[o],f=r(u);i>e&&r(t[i-1])>f;--i)t[i]=t[i-1];t[i]=u}return t}return t}var n=r("./identity");t.exports=e(n),t.exports.by=e},{"./identity":10}],12:[function(r,t){"use strict";function e(){return null}t.exports=e},{}],13:[function(r,t){"use strict";function e(r,t,e){for(var n=0,o=t.length,i=e?JSON.parse(JSON.stringify(r)):new Array(o);o>n;++n)i[n]=r[t[n]];return i}t.exports=e},{}],14:[function(r,t){function e(r){function t(r,t,o){return(i>o-t?n:e)(r,t,o)}function e(e,n,o){var i,u=0|(o-n)/6,f=n+u,a=o-1-u,s=n+o-1>>1,c=s-u,l=s+u,h=e[f],p=r(h),v=e[c],d=r(v),y=e[s],g=r(y),b=e[l],_=r(b),x=e[a],m=r(x);p>d&&(i=h,h=v,v=i,i=p,p=d,d=i),_>m&&(i=b,b=x,x=i,i=_,_=m,m=i),p>g&&(i=h,h=y,y=i,i=p,p=g,g=i),d>g&&(i=v,v=y,y=i,i=d,d=g,g=i),p>_&&(i=h,h=b,b=i,i=p,p=_,_=i),g>_&&(i=y,y=b,b=i,i=g,g=_,_=i),d>m&&(i=v,v=x,x=i,i=d,d=m,m=i),d>g&&(i=v,v=y,y=i,i=d,d=g,g=i),_>m&&(i=b,b=x,x=i,i=_,_=m,m=i);var w=v,E=d,O=b,A=_;e[f]=h,e[c]=e[n],e[s]=y,e[l]=e[o-1],e[a]=x;var k=n+1,z=o-2,j=A>=E&&E>=A;if(j)for(var S=k;z>=S;++S){var M=e[S],F=r(M);if(E>F)S!==k&&(e[S]=e[k],e[k]=M),++k;else if(F>E)for(;;){var C=r(e[z]);{if(!(C>E)){if(E>C){e[S]=e[k],e[k++]=e[z],e[z--]=M;break}e[S]=e[z],e[z--]=M;break}z--}}}else!function(){for(var t=k;z>=t;t++){var n=e[t],o=r(n);if(E>o)t!==k&&(e[t]=e[k],e[k]=n),++k;else if(o>A)for(;;){var i=r(e[z]);{if(!(i>A)){E>i?(e[t]=e[k],e[k++]=e[z],e[z--]=n):(e[t]=e[z],e[z--]=n);break}if(z--,t>z)break}}}}();return e[n]=e[k-1],e[k-1]=w,e[o-1]=e[z+1],e[z+1]=O,t(e,n,k-1),t(e,z+2,o),j?e:(f>k&&z>a&&!function(){for(var t,n;(t=r(e[k]))<=E&&t>=E;)++k;for(;(n=r(e[z]))<=A&&n>=A;)--z;for(var o=k;z>=o;o++){var i=e[o],u=r(i);if(E>=u&&u>=E)o!==k&&(e[o]=e[k],e[k]=i),k++;else if(A>=u&&u>=A)for(;;){n=r(e[z]);{if(!(A>=n&&n>=A)){E>n?(e[o]=e[k],e[k++]=e[z],e[z--]=i):(e[o]=e[z],e[z--]=i);break}if(z--,o>z)break}}}}(),t(e,k,z+1))}var n=o.by(r);return t}var n=r("./identity"),o=r("./insertionsort"),i=32;t.exports=e(n),t.exports.by=e},{"./identity":10,"./insertionsort":11}],15:[function(r,t){"use strict";function e(r){return r+1}function n(r){return r-1}function o(r){return function(t,e){return t+ +r(e)}}function i(r){return function(t,e){return t-r(e)}}t.exports={reduceIncrement:e,reduceDecrement:n,reduceAdd:o,reduceSubtract:i}},{}],16:[function(r,t){"use strict";function e(){return 0}t.exports=e},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/civicrm/bower_components/crossfilter2/index.d.ts b/civicrm/bower_components/crossfilter2/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..91c54bfd0ca09e3b580ae9b5162c36d7ef009563 --- /dev/null +++ b/civicrm/bower_components/crossfilter2/index.d.ts @@ -0,0 +1,145 @@ +export = crossfilter; + +declare function crossfilter<T>(records?: T[]): crossfilter.Crossfilter<T>; + +declare namespace crossfilter { + export type ComparableValue = string | number | boolean; + + export interface ComparableObject { + valueOf(): ComparableValue; + } + + export type NaturallyOrderedValue = ComparableValue | ComparableObject; + + export type Predicate<T> = (record: T) => boolean; + + export type OrderedValueSelector<TRecord, TValue extends NaturallyOrderedValue = NaturallyOrderedValue> = ( + record: TRecord, + ) => TValue; + + export type FilterValue = + | NaturallyOrderedValue + | [NaturallyOrderedValue, NaturallyOrderedValue] + | Predicate<NaturallyOrderedValue>; + + export interface Grouping<TKey extends NaturallyOrderedValue> { + key: TKey; + value: number; + } + + export interface Group<T, TKey extends NaturallyOrderedValue, TReduce extends NaturallyOrderedValue> { + top(k: number): Array<Grouping<TKey>>; + all(): Array<Grouping<TKey>>; + reduce( + add: (p: T, v: TReduce, nf: boolean) => TReduce, + remove: (p: T, v: TReduce, nf: boolean) => TReduce, + initial: () => TReduce, + ): Group<T, TKey, TReduce>; + reduceCount(): Group<T, TKey, TReduce>; + reduceSum(selector: (record: T) => number): Group<T, TKey, TReduce>; + order(selector: (value: TReduce) => NaturallyOrderedValue): Group<T, TKey, TReduce>; + orderNatural(): Group<T, TKey, TReduce>; + size(): number; + dispose(): Group<T, TKey, TReduce>; + } + + export interface GroupAll<T, TReduce extends NaturallyOrderedValue> { + reduce( + add: (p: T, v: TReduce, nf: boolean) => TReduce, + remove: (p: T, v: TReduce, nf: boolean) => TReduce, + initial: () => TReduce, + ): GroupAll<T, TReduce>; + reduceCount(): GroupAll<T, TReduce>; + reduceSum(selector: (record: T) => number): GroupAll<T, TReduce>; + dispose(): GroupAll<T, TReduce>; + value(): number; + } + + export interface Dimension<TRecord, TValue extends NaturallyOrderedValue> { + filter(filterValue: FilterValue): Dimension<TRecord, TValue>; + filterExact(value: TValue): Dimension<TRecord, TValue>; + filterRange(range: [TValue, TValue]): Dimension<TRecord, TValue>; + filterFunction(predicate: Predicate<TValue>): Dimension<TRecord, TValue>; + filterAll(): Dimension<TRecord, TValue>; + top(k: number, offset?: number): TRecord[]; + bottom(k: number, offset?: number): TRecord[]; + group<TReduce extends NaturallyOrderedValue>( + groupValue?: (value: TValue) => NaturallyOrderedValue, + ): Group<TRecord, TValue, TReduce>; + groupAll<TReduce extends NaturallyOrderedValue>(): GroupAll<TRecord, TReduce>; + dispose(): Dimension<TRecord, TValue>; + accessor(record: TRecord): NaturallyOrderedValue; + id(): number; + } + + export const enum EventType { + DATA_ADDED = 'dataAdded', + DATA_REMOVED = 'dataRemoved', + FILTERED = 'filtered', + } + + export interface Crossfilter<T> { + add(records: T[]): Crossfilter<T>; + remove(predicate?: Predicate<T>): void; + dimension<TValue extends NaturallyOrderedValue>( + selector: OrderedValueSelector<T, TValue>, + isArray?: boolean, + ): Dimension<T, TValue>; + groupAll<TReduce extends NaturallyOrderedValue>(): GroupAll<T, TReduce>; + size(): number; + all(): T[]; + allFiltered(): T[]; + onChange(callback: (type: EventType) => void): void; + isElementFiltered(index: number, ignoreDimensions?: number[]): boolean; + } + + export type HeapSelector<T> = (records: T[], lo: number, hi: number, k: number) => T[]; + + export interface Heap<T> { + (records: T[], lo: number, hi: number): T[]; + sort(records: T[], lo: number, hi: number): T[]; + } + + export type Sorter<T> = (records: T[], lo: number, hi: number) => T[]; + + export type Bisection<T> = (records: T[], record: T, lo: number, hi: number) => number; + + export interface Bisector<T> extends Bisection<T> { + left: Bisection<T>; + right: Bisection<T>; + } + + export const version: string; + + namespace heap { + export function by<T>(selector: OrderedValueSelector<T>): Heap<T>; + } + + export function heap<T>(records: T[], lo: number, hi: number): T[]; + + namespace heapselect { + export function by<T>(selector: OrderedValueSelector<T>): HeapSelector<T>; + } + + export function heapselect<T>(records: T[], lo: number, hi: number, k: number): T[]; + + namespace bisect { + export function by<T>(selector: OrderedValueSelector<T>): Bisector<T>; + } + + export function bisect<T>(records: T[], record: T, lo: number, hi: number): number; + + namespace insertionsort { + export function by<T>(selector: OrderedValueSelector<T>): Sorter<T>; + } + + export function insertionsort<T>(records: T[], lo: number, hi: number): T[]; + + namespace quicksort { + export function by<T>(selector: OrderedValueSelector<T>): Sorter<T>; + } + + export function quicksort<T>(records: T[], lo: number, hi: number): T[]; + + export function permute<T>(records: T[], index: number[], deep: number): T[]; +} diff --git a/civicrm/bower_components/dc-2.1.x/.bower.json b/civicrm/bower_components/dc-2.1.x/.bower.json index aa17bc2123116d4e870273bfaf23883d37b044c2..a3ed44e63ff4c64e880a8b57e9c234454855d825 100644 --- a/civicrm/bower_components/dc-2.1.x/.bower.json +++ b/civicrm/bower_components/dc-2.1.x/.bower.json @@ -22,15 +22,15 @@ ], "dependencies": { "d3": "3.x", - "crossfilter2": "~1.3" + "crossfilter2": "~1.4" }, "homepage": "https://github.com/NickQiZhu/dc.js", - "version": "2.1.9", - "_release": "2.1.9", + "version": "2.1.10", + "_release": "2.1.10", "_resolution": { "type": "version", - "tag": "2.1.9", - "commit": "c3b7ee27e3b17e069bb196e730c35b37e42cf7f6" + "tag": "2.1.10", + "commit": "1eb166ef26b33fca3875e490c29d1cacc960168e" }, "_source": "https://github.com/NickQiZhu/dc.js.git", "_target": "~2.1.8", diff --git a/civicrm/bower_components/dc-2.1.x/bower.json b/civicrm/bower_components/dc-2.1.x/bower.json index c973041e8776184fc9e9b4783008e7202c2a4313..62f0c60a686546dc27ac0c0268abd7af9431eb0b 100644 --- a/civicrm/bower_components/dc-2.1.x/bower.json +++ b/civicrm/bower_components/dc-2.1.x/bower.json @@ -19,6 +19,6 @@ ], "dependencies": { "d3": "3.x", - "crossfilter2": "~1.3" + "crossfilter2": "~1.4" } } diff --git a/civicrm/bower_components/dc-2.1.x/dc.js b/civicrm/bower_components/dc-2.1.x/dc.js index dc4f1ebdcc9835c5a69d7186b68279a2bb36dab5..1d6b097070ede2c73556db40261004820bfdcd84 100644 --- a/civicrm/bower_components/dc-2.1.x/dc.js +++ b/civicrm/bower_components/dc-2.1.x/dc.js @@ -1,5 +1,5 @@ /*! - * dc 2.1.9 + * dc 2.1.10 * http://dc-js.github.io/dc.js/ * Copyright 2012-2016 Nick Zhu & the dc.js Developers * https://github.com/dc-js/dc.js/blob/master/AUTHORS @@ -29,7 +29,7 @@ * such as {@link dc.baseMixin#svg .svg} and {@link dc.coordinateGridMixin#xAxis .xAxis}, * return values that are themselves chainable d3 objects. * @namespace dc - * @version 2.1.9 + * @version 2.1.10 * @example * // Example chaining * chart.width(300) @@ -38,7 +38,7 @@ */ /*jshint -W079*/ var dc = { - version: '2.1.9', + version: '2.1.10', constants: { CHART_CLASS: 'dc-chart', DEBUG_GROUP_CLASS: 'debug', diff --git a/civicrm/bower_components/dc-2.1.x/dc.js.map b/civicrm/bower_components/dc-2.1.x/dc.js.map index 1f2e174412758aa8b7bba5303e52a8adfefc0de4..528ddfbcb3a63adcd9e471e8b745af2961937f6d 100644 --- a/civicrm/bower_components/dc-2.1.x/dc.js.map +++ b/civicrm/bower_components/dc-2.1.x/dc.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/banner.js","src/core.js","src/errors.js","src/utils.js","src/logger.js","src/events.js","src/filters.js","src/base-mixin.js","src/margin-mixin.js","src/color-mixin.js","src/coordinate-grid-mixin.js","src/stack-mixin.js","src/cap-mixin.js","src/bubble-mixin.js","src/pie-chart.js","src/bar-chart.js","src/line-chart.js","src/data-count.js","src/data-table.js","src/data-grid.js","src/bubble-chart.js","src/composite-chart.js","src/series-chart.js","src/geo-choropleth-chart.js","src/bubble-overlay.js","src/row-chart.js","src/legend.js","src/scatter-plot.js","src/number-display.js","src/heatmap.js","src/d3.box.js","src/box-plot.js","src/select-menu.js","src/footer.js"],"names":[],"mappings":"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","file":"dc.js","sourcesContent":["(function() { function _dc(d3, crossfilter) {\n'use strict';\n","/**\n * The entire dc.js library is scoped under the **dc** name space. It does not introduce\n * anything else into the global name space.\n *\n * Most `dc` functions are designed to allow function chaining, meaning they return the current chart\n * instance whenever it is appropriate. The getter forms of functions do not participate in function\n * chaining because they return values that are not the chart, although some,\n * such as {@link dc.baseMixin#svg .svg} and {@link dc.coordinateGridMixin#xAxis .xAxis},\n * return values that are themselves chainable d3 objects.\n * @namespace dc\n * @version 2.1.9\n * @example\n * // Example chaining\n * chart.width(300)\n * .height(300)\n * .filter('sunday');\n */\n/*jshint -W079*/\nvar dc = {\n version: '2.1.9',\n constants: {\n CHART_CLASS: 'dc-chart',\n DEBUG_GROUP_CLASS: 'debug',\n STACK_CLASS: 'stack',\n DESELECTED_CLASS: 'deselected',\n SELECTED_CLASS: 'selected',\n NODE_INDEX_NAME: '__index__',\n GROUP_INDEX_NAME: '__group_index__',\n DEFAULT_CHART_GROUP: '__default_chart_group__',\n EVENT_DELAY: 40,\n NEGLIGIBLE_NUMBER: 1e-10\n },\n _renderlet: null\n};\n/*jshint +W079*/\n\n/**\n * The dc.chartRegistry object maintains sets of all instantiated dc.js charts under named groups\n * and the default group.\n *\n * A chart group often corresponds to a crossfilter instance. It specifies\n * the set of charts which should be updated when a filter changes on one of the charts or when the\n * global functions {@link dc.filterAll dc.filterAll}, {@link dc.refocusAll dc.refocusAll},\n * {@link dc.renderAll dc.renderAll}, {@link dc.redrawAll dc.redrawAll}, or chart functions\n * {@link dc.baseMixin#renderGroup baseMixin.renderGroup},\n * {@link dc.baseMixin#redrawGroup baseMixin.redrawGroup} are called.\n *\n * @namespace chartRegistry\n * @memberof dc\n * @type {{has, register, deregister, clear, list}}\n */\ndc.chartRegistry = (function () {\n // chartGroup:string => charts:array\n var _chartMap = {};\n\n function initializeChartGroup (group) {\n if (!group) {\n group = dc.constants.DEFAULT_CHART_GROUP;\n }\n\n if (!_chartMap[group]) {\n _chartMap[group] = [];\n }\n\n return group;\n }\n\n return {\n /**\n * Determine if a given chart instance resides in any group in the registry.\n * @method has\n * @memberof dc.chartRegistry\n * @param {Object} chart dc.js chart instance\n * @returns {Boolean}\n */\n has: function (chart) {\n for (var e in _chartMap) {\n if (_chartMap[e].indexOf(chart) >= 0) {\n return true;\n }\n }\n return false;\n },\n\n /**\n * Add given chart instance to the given group, creating the group if necessary.\n * If no group is provided, the default group `dc.constants.DEFAULT_CHART_GROUP` will be used.\n * @method register\n * @memberof dc.chartRegistry\n * @param {Object} chart dc.js chart instance\n * @param {String} [group] Group name\n */\n register: function (chart, group) {\n group = initializeChartGroup(group);\n _chartMap[group].push(chart);\n },\n\n /**\n * Remove given chart instance from the given group, creating the group if necessary.\n * If no group is provided, the default group `dc.constants.DEFAULT_CHART_GROUP` will be used.\n * @method deregister\n * @memberof dc.chartRegistry\n * @param {Object} chart dc.js chart instance\n * @param {String} [group] Group name\n */\n deregister: function (chart, group) {\n group = initializeChartGroup(group);\n for (var i = 0; i < _chartMap[group].length; i++) {\n if (_chartMap[group][i].anchorName() === chart.anchorName()) {\n _chartMap[group].splice(i, 1);\n break;\n }\n }\n },\n\n /**\n * Clear given group if one is provided, otherwise clears all groups.\n * @method clear\n * @memberof dc.chartRegistry\n * @param {String} group Group name\n */\n clear: function (group) {\n if (group) {\n delete _chartMap[group];\n } else {\n _chartMap = {};\n }\n },\n\n /**\n * Get an array of each chart instance in the given group.\n * If no group is provided, the charts in the default group are returned.\n * @method list\n * @memberof dc.chartRegistry\n * @param {String} [group] Group name\n * @returns {Array<Object>}\n */\n list: function (group) {\n group = initializeChartGroup(group);\n return _chartMap[group];\n }\n };\n})();\n\n/**\n * Add given chart instance to the given group, creating the group if necessary.\n * If no group is provided, the default group `dc.constants.DEFAULT_CHART_GROUP` will be used.\n * @memberof dc\n * @method registerChart\n * @param {Object} chart dc.js chart instance\n * @param {String} [group] Group name\n */\ndc.registerChart = function (chart, group) {\n dc.chartRegistry.register(chart, group);\n};\n\n/**\n * Remove given chart instance from the given group, creating the group if necessary.\n * If no group is provided, the default group `dc.constants.DEFAULT_CHART_GROUP` will be used.\n * @memberof dc\n * @method deregisterChart\n * @param {Object} chart dc.js chart instance\n * @param {String} [group] Group name\n */\ndc.deregisterChart = function (chart, group) {\n dc.chartRegistry.deregister(chart, group);\n};\n\n/**\n * Determine if a given chart instance resides in any group in the registry.\n * @memberof dc\n * @method hasChart\n * @param {Object} chart dc.js chart instance\n * @returns {Boolean}\n */\ndc.hasChart = function (chart) {\n return dc.chartRegistry.has(chart);\n};\n\n/**\n * Clear given group if one is provided, otherwise clears all groups.\n * @memberof dc\n * @method deregisterAllCharts\n * @param {String} group Group name\n */\ndc.deregisterAllCharts = function (group) {\n dc.chartRegistry.clear(group);\n};\n\n/**\n * Clear all filters on all charts within the given chart group. If the chart group is not given then\n * only charts that belong to the default chart group will be reset.\n * @memberof dc\n * @method filterAll\n * @param {String} [group]\n */\ndc.filterAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].filterAll();\n }\n};\n\n/**\n * Reset zoom level / focus on all charts that belong to the given chart group. If the chart group is\n * not given then only charts that belong to the default chart group will be reset.\n * @memberof dc\n * @method refocusAll\n * @param {String} [group]\n */\ndc.refocusAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n if (charts[i].focus) {\n charts[i].focus();\n }\n }\n};\n\n/**\n * Re-render all charts belong to the given chart group. If the chart group is not given then only\n * charts that belong to the default chart group will be re-rendered.\n * @memberof dc\n * @method renderAll\n * @param {String} [group]\n */\ndc.renderAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].render();\n }\n\n if (dc._renderlet !== null) {\n dc._renderlet(group);\n }\n};\n\n/**\n * Redraw all charts belong to the given chart group. If the chart group is not given then only charts\n * that belong to the default chart group will be re-drawn. Redraw is different from re-render since\n * when redrawing dc tries to update the graphic incrementally, using transitions, instead of starting\n * from scratch.\n * @memberof dc\n * @method redrawAll\n * @param {String} [group]\n */\ndc.redrawAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].redraw();\n }\n\n if (dc._renderlet !== null) {\n dc._renderlet(group);\n }\n};\n\n/**\n * If this boolean is set truthy, all transitions will be disabled, and changes to the charts will happen\n * immediately.\n * @memberof dc\n * @member disableTransitions\n * @type {Boolean}\n * @default false\n */\ndc.disableTransitions = false;\n\n/**\n * Start a transition on a selection if transitions are globally enabled\n * ({@link dc.disableTransitions} is false) and the duration is greater than zero; otherwise return\n * the selection. Since most operations are the same on a d3 selection and a d3 transition, this\n * allows a common code path for both cases.\n * @memberof dc\n * @method transition\n * @param {d3.selection} selection - the selection to be transitioned\n * @param {Number|Function} [duration=250] - the duration of the transition in milliseconds, a\n * function returning the duration, or 0 for no transition\n * @param {Number|Function} [delay] - the delay of the transition in milliseconds, or a function\n * returning the delay, or 0 for no delay\n * @param {String} [name] - the name of the transition (if concurrent transitions on the same\n * elements are needed)\n * @returns {d3.transition|d3.selection}\n */\ndc.transition = function (selection, duration, delay, name) {\n if (dc.disableTransitions || duration <= 0) {\n return selection;\n }\n\n var s = selection.transition(name);\n\n if (duration >= 0 || duration !== undefined) {\n s = s.duration(duration);\n }\n if (delay >= 0 || delay !== undefined) {\n s = s.delay(delay);\n }\n\n return s;\n};\n\n/* somewhat silly, but to avoid duplicating logic */\ndc.optionalTransition = function (enable, duration, delay, name) {\n if (enable) {\n return function (selection) {\n return dc.transition(selection, duration, delay, name);\n };\n } else {\n return function (selection) {\n return selection;\n };\n }\n};\n\n// See http://stackoverflow.com/a/20773846\ndc.afterTransition = function (transition, callback) {\n if (transition.empty() || !transition.duration) {\n callback.call(transition);\n } else {\n var n = 0;\n transition\n .each(function () { ++n; })\n .each('end', function () {\n if (!--n) {\n callback.call(transition);\n }\n });\n }\n};\n\n/**\n * @namespace units\n * @memberof dc\n * @type {{}}\n */\ndc.units = {};\n\n/**\n * The default value for {@link dc.coordinateGridMixin#xUnits .xUnits} for the\n * {@link dc.coordinateGridMixin Coordinate Grid Chart} and should\n * be used when the x values are a sequence of integers.\n * It is a function that counts the number of integers in the range supplied in its start and end parameters.\n * @method integers\n * @memberof dc.units\n * @see {@link dc.coordinateGridMixin#xUnits coordinateGridMixin.xUnits}\n * @example\n * chart.xUnits(dc.units.integers) // already the default\n * @param {Number} start\n * @param {Number} end\n * @returns {Number}\n */\ndc.units.integers = function (start, end) {\n return Math.abs(end - start);\n};\n\n/**\n * This argument can be passed to the {@link dc.coordinateGridMixin#xUnits .xUnits} function of the to\n * specify ordinal units for the x axis. Usually this parameter is used in combination with passing\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md d3.scale.ordinal} to\n * {@link dc.coordinateGridMixin#x .x}.\n * It just returns the domain passed to it, which for ordinal charts is an array of all values.\n * @method ordinal\n * @memberof dc.units\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md d3.scale.ordinal}\n * @see {@link dc.coordinateGridMixin#xUnits coordinateGridMixin.xUnits}\n * @see {@link dc.coordinateGridMixin#x coordinateGridMixin.x}\n * @example\n * chart.xUnits(dc.units.ordinal)\n * .x(d3.scale.ordinal())\n * @param {*} start\n * @param {*} end\n * @param {Array<String>} domain\n * @returns {Array<String>}\n */\ndc.units.ordinal = function (start, end, domain) {\n return domain;\n};\n\n/**\n * @namespace fp\n * @memberof dc.units\n * @type {{}}\n */\ndc.units.fp = {};\n/**\n * This function generates an argument for the {@link dc.coordinateGridMixin Coordinate Grid Chart}\n * {@link dc.coordinateGridMixin#xUnits .xUnits} function specifying that the x values are floating-point\n * numbers with the given precision.\n * The returned function determines how many values at the given precision will fit into the range\n * supplied in its start and end parameters.\n * @method precision\n * @memberof dc.units.fp\n * @see {@link dc.coordinateGridMixin#xUnits coordinateGridMixin.xUnits}\n * @example\n * // specify values (and ticks) every 0.1 units\n * chart.xUnits(dc.units.fp.precision(0.1)\n * // there are 500 units between 0.5 and 1 if the precision is 0.001\n * var thousandths = dc.units.fp.precision(0.001);\n * thousandths(0.5, 1.0) // returns 500\n * @param {Number} precision\n * @returns {Function} start-end unit function\n */\ndc.units.fp.precision = function (precision) {\n var _f = function (s, e) {\n var d = Math.abs((e - s) / _f.resolution);\n if (dc.utils.isNegligible(d - Math.floor(d))) {\n return Math.floor(d);\n } else {\n return Math.ceil(d);\n }\n };\n _f.resolution = precision;\n return _f;\n};\n\ndc.round = {};\ndc.round.floor = function (n) {\n return Math.floor(n);\n};\ndc.round.ceil = function (n) {\n return Math.ceil(n);\n};\ndc.round.round = function (n) {\n return Math.round(n);\n};\n\ndc.override = function (obj, functionName, newFunction) {\n var existingFunction = obj[functionName];\n obj['_' + functionName] = existingFunction;\n obj[functionName] = newFunction;\n};\n\ndc.renderlet = function (_) {\n if (!arguments.length) {\n return dc._renderlet;\n }\n dc._renderlet = _;\n return dc;\n};\n\ndc.instanceOfChart = function (o) {\n return o instanceof Object && o.__dcFlag__ && true;\n};\n","dc.errors = {};\n\ndc.errors.Exception = function (msg) {\n var _msg = msg || 'Unexpected internal error';\n\n this.message = _msg;\n\n this.toString = function () {\n return _msg;\n };\n this.stack = (new Error()).stack;\n};\ndc.errors.Exception.prototype = Object.create(Error.prototype);\ndc.errors.Exception.prototype.constructor = dc.errors.Exception;\n\ndc.errors.InvalidStateException = function () {\n dc.errors.Exception.apply(this, arguments);\n};\n\ndc.errors.InvalidStateException.prototype = Object.create(dc.errors.Exception.prototype);\ndc.errors.InvalidStateException.prototype.constructor = dc.errors.InvalidStateException;\n\ndc.errors.BadArgumentException = function () {\n dc.errors.Exception.apply(this, arguments);\n};\n\ndc.errors.BadArgumentException.prototype = Object.create(dc.errors.Exception.prototype);\ndc.errors.BadArgumentException.prototype.constructor = dc.errors.BadArgumentException;\n","/**\n * The default date format for dc.js\n * @name dateFormat\n * @memberof dc\n * @type {Function}\n * @default d3.time.format('%m/%d/%Y')\n */\ndc.dateFormat = d3.time.format('%m/%d/%Y');\n\n/**\n * @namespace printers\n * @memberof dc\n * @type {{}}\n */\ndc.printers = {};\n\n/**\n * Converts a list of filters into a readable string.\n * @method filters\n * @memberof dc.printers\n * @param {Array<dc.filters>} filters\n * @returns {String}\n */\ndc.printers.filters = function (filters) {\n var s = '';\n\n for (var i = 0; i < filters.length; ++i) {\n if (i > 0) {\n s += ', ';\n }\n s += dc.printers.filter(filters[i]);\n }\n\n return s;\n};\n\n/**\n * Converts a filter into a readable string.\n * @method filter\n * @memberof dc.printers\n * @param {dc.filters|any|Array<any>} filter\n * @returns {String}\n */\ndc.printers.filter = function (filter) {\n var s = '';\n\n if (typeof filter !== 'undefined' && filter !== null) {\n if (filter instanceof Array) {\n if (filter.length >= 2) {\n s = '[' + dc.utils.printSingleValue(filter[0]) + ' -> ' + dc.utils.printSingleValue(filter[1]) + ']';\n } else if (filter.length >= 1) {\n s = dc.utils.printSingleValue(filter[0]);\n }\n } else {\n s = dc.utils.printSingleValue(filter);\n }\n }\n\n return s;\n};\n\n/**\n * Returns a function that given a string property name, can be used to pluck the property off an object. A function\n * can be passed as the second argument to also alter the data being returned.\n *\n * This can be a useful shorthand method to create accessor functions.\n * @method pluck\n * @memberof dc\n * @example\n * var xPluck = dc.pluck('x');\n * var objA = {x: 1};\n * xPluck(objA) // 1\n * @example\n * var xPosition = dc.pluck('x', function (x, i) {\n * // `this` is the original datum,\n * // `x` is the x property of the datum,\n * // `i` is the position in the array\n * return this.radius + x;\n * });\n * dc.selectAll('.circle').data(...).x(xPosition);\n * @param {String} n\n * @param {Function} [f]\n * @returns {Function}\n */\ndc.pluck = function (n, f) {\n if (!f) {\n return function (d) { return d[n]; };\n }\n return function (d, i) { return f.call(d, d[n], i); };\n};\n\n/**\n * @namespace utils\n * @memberof dc\n * @type {{}}\n */\ndc.utils = {};\n\n/**\n * Print a single value filter.\n * @method printSingleValue\n * @memberof dc.utils\n * @param {any} filter\n * @returns {String}\n */\ndc.utils.printSingleValue = function (filter) {\n var s = '' + filter;\n\n if (filter instanceof Date) {\n s = dc.dateFormat(filter);\n } else if (typeof(filter) === 'string') {\n s = filter;\n } else if (dc.utils.isFloat(filter)) {\n s = dc.utils.printSingleValue.fformat(filter);\n } else if (dc.utils.isInteger(filter)) {\n s = Math.round(filter);\n }\n\n return s;\n};\ndc.utils.printSingleValue.fformat = d3.format('.2f');\n\n/**\n * Arbitrary add one value to another.\n * @method add\n * @memberof dc.utils\n * @todo\n * These assume than any string r is a percentage (whether or not it includes %).\n * They also generate strange results if l is a string.\n * @param {String|Date|Number} l the value to modify\n * @param {Number} r the amount by which to modify the value\n * @param {String} [t] if `l` is a `Date`, the\n * [interval](https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Intervals.md#interval) in\n * the `d3.time` namespace\n * @returns {String|Date|Number}\n */\ndc.utils.add = function (l, r, t) {\n if (typeof r === 'string') {\n r = r.replace('%', '');\n }\n\n if (l instanceof Date) {\n if (typeof r === 'string') {\n r = +r;\n }\n if (t === 'millis') {\n return new Date(l.getTime() + r);\n }\n t = t || 'day';\n return d3.time[t].offset(l, r);\n } else if (typeof r === 'string') {\n var percentage = (+r / 100);\n return l > 0 ? l * (1 + percentage) : l * (1 - percentage);\n } else {\n return l + r;\n }\n};\n\n/**\n * Arbitrary subtract one value from another.\n * @method subtract\n * @memberof dc.utils\n * @todo\n * These assume than any string r is a percentage (whether or not it includes %).\n * They also generate strange results if l is a string.\n * @param {String|Date|Number} l the value to modify\n * @param {Number} r the amount by which to modify the value\n * @param {String} [t] if `l` is a `Date`, the\n * [interval](https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Intervals.md#interval) in\n * the `d3.time` namespace\n * @returns {String|Date|Number}\n */\ndc.utils.subtract = function (l, r, t) {\n if (typeof r === 'string') {\n r = r.replace('%', '');\n }\n\n if (l instanceof Date) {\n if (typeof r === 'string') {\n r = +r;\n }\n if (t === 'millis') {\n return new Date(l.getTime() - r);\n }\n t = t || 'day';\n return d3.time[t].offset(l, -r);\n } else if (typeof r === 'string') {\n var percentage = (+r / 100);\n return l < 0 ? l * (1 + percentage) : l * (1 - percentage);\n } else {\n return l - r;\n }\n};\n\n/**\n * Is the value a number?\n * @method isNumber\n * @memberof dc.utils\n * @param {any} n\n * @returns {Boolean}\n */\ndc.utils.isNumber = function (n) {\n return n === +n;\n};\n\n/**\n * Is the value a float?\n * @method isFloat\n * @memberof dc.utils\n * @param {any} n\n * @returns {Boolean}\n */\ndc.utils.isFloat = function (n) {\n return n === +n && n !== (n | 0);\n};\n\n/**\n * Is the value an integer?\n * @method isInteger\n * @memberof dc.utils\n * @param {any} n\n * @returns {Boolean}\n */\ndc.utils.isInteger = function (n) {\n return n === +n && n === (n | 0);\n};\n\n/**\n * Is the value very close to zero?\n * @method isNegligible\n * @memberof dc.utils\n * @param {any} n\n * @returns {Boolean}\n */\ndc.utils.isNegligible = function (n) {\n return !dc.utils.isNumber(n) || (n < dc.constants.NEGLIGIBLE_NUMBER && n > -dc.constants.NEGLIGIBLE_NUMBER);\n};\n\n/**\n * Ensure the value is no greater or less than the min/max values. If it is return the boundary value.\n * @method clamp\n * @memberof dc.utils\n * @param {any} val\n * @param {any} min\n * @param {any} max\n * @returns {any}\n */\ndc.utils.clamp = function (val, min, max) {\n return val < min ? min : (val > max ? max : val);\n};\n\n/**\n * Using a simple static counter, provide a unique integer id.\n * @method uniqueId\n * @memberof dc.utils\n * @returns {Number}\n */\nvar _idCounter = 0;\ndc.utils.uniqueId = function () {\n return ++_idCounter;\n};\n\n/**\n * Convert a name to an ID.\n * @method nameToId\n * @memberof dc.utils\n * @param {String} name\n * @returns {String}\n */\ndc.utils.nameToId = function (name) {\n return name.toLowerCase().replace(/[\\s]/g, '_').replace(/[\\.']/g, '');\n};\n\n/**\n * Append or select an item on a parent element.\n * @method appendOrSelect\n * @memberof dc.utils\n * @param {d3.selection} parent\n * @param {String} selector\n * @param {String} tag\n * @returns {d3.selection}\n */\ndc.utils.appendOrSelect = function (parent, selector, tag) {\n tag = tag || selector;\n var element = parent.select(selector);\n if (element.empty()) {\n element = parent.append(tag);\n }\n return element;\n};\n\n/**\n * Return the number if the value is a number; else 0.\n * @method safeNumber\n * @memberof dc.utils\n * @param {Number|any} n\n * @returns {Number}\n */\ndc.utils.safeNumber = function (n) { return dc.utils.isNumber(+n) ? +n : 0;};\n","dc.logger = {};\n\ndc.logger.enableDebugLog = false;\n\ndc.logger.warn = function (msg) {\n if (console) {\n if (console.warn) {\n console.warn(msg);\n } else if (console.log) {\n console.log(msg);\n }\n }\n\n return dc.logger;\n};\n\ndc.logger.debug = function (msg) {\n if (dc.logger.enableDebugLog && console) {\n if (console.debug) {\n console.debug(msg);\n } else if (console.log) {\n console.log(msg);\n }\n }\n\n return dc.logger;\n};\n\ndc.logger.deprecate = function (fn, msg) {\n // Allow logging of deprecation\n var warned = false;\n function deprecated () {\n if (!warned) {\n dc.logger.warn(msg);\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n return deprecated;\n};\n","dc.events = {\n current: null\n};\n\n/**\n * This function triggers a throttled event function with a specified delay (in milli-seconds). Events\n * that are triggered repetitively due to user interaction such brush dragging might flood the library\n * and invoke more renders than can be executed in time. Using this function to wrap your event\n * function allows the library to smooth out the rendering by throttling events and only responding to\n * the most recent event.\n * @name events.trigger\n * @memberof dc\n * @example\n * chart.on('renderlet', function(chart) {\n * // smooth the rendering through event throttling\n * dc.events.trigger(function(){\n * // focus some other chart to the range selected by user on this chart\n * someOtherChart.focus(chart.filter());\n * });\n * })\n * @param {Function} closure\n * @param {Number} [delay]\n */\ndc.events.trigger = function (closure, delay) {\n if (!delay) {\n closure();\n return;\n }\n\n dc.events.current = closure;\n\n setTimeout(function () {\n if (closure === dc.events.current) {\n closure();\n }\n }, delay);\n};\n","/**\n * The dc.js filters are functions which are passed into crossfilter to chose which records will be\n * accumulated to produce values for the charts. In the crossfilter model, any filters applied on one\n * dimension will affect all the other dimensions but not that one. dc always applies a filter\n * function to the dimension; the function combines multiple filters and if any of them accept a\n * record, it is filtered in.\n *\n * These filter constructors are used as appropriate by the various charts to implement brushing. We\n * mention below which chart uses which filter. In some cases, many instances of a filter will be added.\n *\n * Each of the dc.js filters is an object with the following properties:\n * * `isFiltered` - a function that returns true if a value is within the filter\n * * `filterType` - a string identifying the filter, here the name of the constructor\n *\n * Currently these filter objects are also arrays, but this is not a requirement. Custom filters\n * can be used as long as they have the properties above.\n * @namespace filters\n * @memberof dc\n * @type {{}}\n */\ndc.filters = {};\n\n/**\n * RangedFilter is a filter which accepts keys between `low` and `high`. It is used to implement X\n * axis brushing for the {@link dc.coordinateGridMixin coordinate grid charts}.\n *\n * Its `filterType` is 'RangedFilter'\n * @name RangedFilter\n * @memberof dc.filters\n * @param {Number} low\n * @param {Number} high\n * @returns {Array<Number>}\n * @constructor\n */\ndc.filters.RangedFilter = function (low, high) {\n var range = new Array(low, high);\n range.isFiltered = function (value) {\n return value >= this[0] && value < this[1];\n };\n range.filterType = 'RangedFilter';\n\n return range;\n};\n\n/**\n * TwoDimensionalFilter is a filter which accepts a single two-dimensional value. It is used by the\n * {@link dc.heatMap heat map chart} to include particular cells as they are clicked. (Rows and columns are\n * filtered by filtering all the cells in the row or column.)\n *\n * Its `filterType` is 'TwoDimensionalFilter'\n * @name TwoDimensionalFilter\n * @memberof dc.filters\n * @param {Array<Number>} filter\n * @returns {Array<Number>}\n * @constructor\n */\ndc.filters.TwoDimensionalFilter = function (filter) {\n if (filter === null) { return null; }\n\n var f = filter;\n f.isFiltered = function (value) {\n return value.length && value.length === f.length &&\n value[0] === f[0] && value[1] === f[1];\n };\n f.filterType = 'TwoDimensionalFilter';\n\n return f;\n};\n\n/**\n * The RangedTwoDimensionalFilter allows filtering all values which fit within a rectangular\n * region. It is used by the {@link dc.scatterPlot scatter plot} to implement rectangular brushing.\n *\n * It takes two two-dimensional points in the form `[[x1,y1],[x2,y2]]`, and normalizes them so that\n * `x1 <= x2` and `y1 <= y2`. It then returns a filter which accepts any points which are in the\n * rectangular range including the lower values but excluding the higher values.\n *\n * If an array of two values are given to the RangedTwoDimensionalFilter, it interprets the values as\n * two x coordinates `x1` and `x2` and returns a filter which accepts any points for which `x1 <= x <\n * x2`.\n *\n * Its `filterType` is 'RangedTwoDimensionalFilter'\n * @name RangedTwoDimensionalFilter\n * @memberof dc.filters\n * @param {Array<Array<Number>>} filter\n * @returns {Array<Array<Number>>}\n * @constructor\n */\ndc.filters.RangedTwoDimensionalFilter = function (filter) {\n if (filter === null) { return null; }\n\n var f = filter;\n var fromBottomLeft;\n\n if (f[0] instanceof Array) {\n fromBottomLeft = [\n [Math.min(filter[0][0], filter[1][0]), Math.min(filter[0][1], filter[1][1])],\n [Math.max(filter[0][0], filter[1][0]), Math.max(filter[0][1], filter[1][1])]\n ];\n } else {\n fromBottomLeft = [[filter[0], -Infinity], [filter[1], Infinity]];\n }\n\n f.isFiltered = function (value) {\n var x, y;\n\n if (value instanceof Array) {\n x = value[0];\n y = value[1];\n } else {\n x = value;\n y = fromBottomLeft[0][1];\n }\n\n return x >= fromBottomLeft[0][0] && x < fromBottomLeft[1][0] &&\n y >= fromBottomLeft[0][1] && y < fromBottomLeft[1][1];\n };\n f.filterType = 'RangedTwoDimensionalFilter';\n\n return f;\n};\n","/**\n * `dc.baseMixin` is an abstract functional object representing a basic `dc` chart object\n * for all chart and widget implementations. Methods from the {@link #dc.baseMixin dc.baseMixin} are inherited\n * and available on all chart implementations in the `dc` library.\n * @name baseMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.baseMixin}\n */\ndc.baseMixin = function (_chart) {\n _chart.__dcFlag__ = dc.utils.uniqueId();\n\n var _dimension;\n var _group;\n\n var _anchor;\n var _root;\n var _svg;\n var _isChild;\n\n var _minWidth = 200;\n var _defaultWidthCalc = function (element) {\n var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n return (width && width > _minWidth) ? width : _minWidth;\n };\n var _widthCalc = _defaultWidthCalc;\n\n var _minHeight = 200;\n var _defaultHeightCalc = function (element) {\n var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n return (height && height > _minHeight) ? height : _minHeight;\n };\n var _heightCalc = _defaultHeightCalc;\n var _width, _height;\n var _useViewBoxResizing = false;\n\n var _keyAccessor = dc.pluck('key');\n var _valueAccessor = dc.pluck('value');\n var _label = dc.pluck('key');\n\n var _ordering = dc.pluck('key');\n var _orderSort;\n\n var _renderLabel = false;\n\n var _title = function (d) {\n return _chart.keyAccessor()(d) + ': ' + _chart.valueAccessor()(d);\n };\n var _renderTitle = true;\n var _controlsUseVisibility = false;\n\n var _transitionDuration = 750;\n\n var _transitionDelay = 0;\n\n var _filterPrinter = dc.printers.filters;\n\n var _mandatoryAttributes = ['dimension', 'group'];\n\n var _chartGroup = dc.constants.DEFAULT_CHART_GROUP;\n\n var _listeners = d3.dispatch(\n 'preRender',\n 'postRender',\n 'preRedraw',\n 'postRedraw',\n 'filtered',\n 'zoomed',\n 'renderlet',\n 'pretransition');\n\n var _legend;\n var _commitHandler;\n\n var _filters = [];\n var _filterHandler = function (dimension, filters) {\n if (filters.length === 0) {\n dimension.filter(null);\n } else if (filters.length === 1 && !filters[0].isFiltered) {\n // single value and not a function-based filter\n dimension.filterExact(filters[0]);\n } else if (filters.length === 1 && filters[0].filterType === 'RangedFilter') {\n // single range-based filter\n dimension.filterRange(filters[0]);\n } else {\n dimension.filterFunction(function (d) {\n for (var i = 0; i < filters.length; i++) {\n var filter = filters[i];\n if (filter.isFiltered && filter.isFiltered(d)) {\n return true;\n } else if (filter <= d && filter >= d) {\n return true;\n }\n }\n return false;\n });\n }\n return filters;\n };\n\n var _data = function (group) {\n return group.all();\n };\n\n /**\n * Set or get the height attribute of a chart. The height is applied to the SVGElement generated by\n * the chart when rendered (or re-rendered). If a value is given, then it will be used to calculate\n * the new height and the chart returned for method chaining. The value can either be a numeric, a\n * function, or falsy. If no value is specified then the value of the current height attribute will\n * be returned.\n *\n * By default, without an explicit height being given, the chart will select the width of its\n * anchor element. If that isn't possible it defaults to 200 (provided by the\n * {@link dc.baseMixin#minHeight minHeight} property). Setting the value falsy will return\n * the chart to the default behavior.\n * @method height\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#minHeight minHeight}\n * @example\n * // Default height\n * chart.height(function (element) {\n * var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n * return (height && height > chart.minHeight()) ? height : chart.minHeight();\n * });\n *\n * chart.height(250); // Set the chart's height to 250px;\n * chart.height(function(anchor) { return doSomethingWith(anchor); }); // set the chart's height with a function\n * chart.height(null); // reset the height to the default auto calculation\n * @param {Number|Function} [height]\n * @returns {Number|dc.baseMixin}\n */\n _chart.height = function (height) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_height)) {\n // only calculate once\n _height = _heightCalc(_root.node());\n }\n return _height;\n }\n _heightCalc = d3.functor(height || _defaultHeightCalc);\n _height = undefined;\n return _chart;\n };\n\n /**\n * Set or get the width attribute of a chart.\n * @method width\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#height height}\n * @see {@link dc.baseMixin#minWidth minWidth}\n * @example\n * // Default width\n * chart.width(function (element) {\n * var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n * return (width && width > chart.minWidth()) ? width : chart.minWidth();\n * });\n * @param {Number|Function} [width]\n * @returns {Number|dc.baseMixin}\n */\n _chart.width = function (width) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_width)) {\n // only calculate once\n _width = _widthCalc(_root.node());\n }\n return _width;\n }\n _widthCalc = d3.functor(width || _defaultWidthCalc);\n _width = undefined;\n return _chart;\n };\n\n /**\n * Set or get the minimum width attribute of a chart. This only has effect when used with the default\n * {@link dc.baseMixin#width width} function.\n * @method minWidth\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#width width}\n * @param {Number} [minWidth=200]\n * @returns {Number|dc.baseMixin}\n */\n _chart.minWidth = function (minWidth) {\n if (!arguments.length) {\n return _minWidth;\n }\n _minWidth = minWidth;\n return _chart;\n };\n\n /**\n * Set or get the minimum height attribute of a chart. This only has effect when used with the default\n * {@link dc.baseMixin#height height} function.\n * @method minHeight\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#height height}\n * @param {Number} [minHeight=200]\n * @returns {Number|dc.baseMixin}\n */\n _chart.minHeight = function (minHeight) {\n if (!arguments.length) {\n return _minHeight;\n }\n _minHeight = minHeight;\n return _chart;\n };\n\n /**\n * Turn on/off using the SVG\n * {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox `viewBox` attribute}.\n * When enabled, `viewBox` will be set on the svg root element instead of `width` and `height`.\n * Requires that the chart aspect ratio be defined using chart.width(w) and chart.height(h).\n *\n * This will maintain the aspect ratio while enabling the chart to resize responsively to the\n * space given to the chart using CSS. For example, the chart can use `width: 100%; height:\n * 100%` or absolute positioning to resize to its parent div.\n *\n * Since the text will be sized as if the chart is drawn according to the width and height, and\n * will be resized if the chart is any other size, you need to set the chart width and height so\n * that the text looks good. In practice, 600x400 seems to work pretty well for most charts.\n *\n * You can see examples of this resizing strategy in the [Chart Resizing\n * Examples](http://dc-js.github.io/dc.js/resizing/); just add `?resize=viewbox` to any of the\n * one-chart examples to enable `useViewBoxResizing`.\n * @method useViewBoxResizing\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [useViewBoxResizing=false]\n * @returns {Boolean|dc.baseMixin}\n */\n _chart.useViewBoxResizing = function (useViewBoxResizing) {\n if (!arguments.length) {\n return _useViewBoxResizing;\n }\n _useViewBoxResizing = useViewBoxResizing;\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Set or get the dimension attribute of a chart. In `dc`, a dimension can be any valid\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension crossfilter dimension}\n *\n * If a value is given, then it will be used as the new dimension. If no value is specified then\n * the current dimension will be returned.\n * @method dimension\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension crossfilter.dimension}\n * @example\n * var index = crossfilter([]);\n * var dimension = index.dimension(dc.pluck('key'));\n * chart.dimension(dimension);\n * @param {crossfilter.dimension} [dimension]\n * @returns {crossfilter.dimension|dc.baseMixin}\n */\n _chart.dimension = function (dimension) {\n if (!arguments.length) {\n return _dimension;\n }\n _dimension = dimension;\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * Set the data callback or retrieve the chart's data set. The data callback is passed the chart's\n * group and by default will return\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_all group.all}.\n * This behavior may be modified to, for instance, return only the top 5 groups.\n * @method data\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // Default data function\n * chart.data(function (group) { return group.all(); });\n *\n * chart.data(function (group) { return group.top(5); });\n * @param {Function} [callback]\n * @returns {*|dc.baseMixin}\n */\n _chart.data = function (callback) {\n if (!arguments.length) {\n return _data.call(_chart, _group);\n }\n _data = d3.functor(callback);\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Set or get the group attribute of a chart. In `dc` a group is a\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group-map-reduce crossfilter group}.\n * Usually the group should be created from the particular dimension associated with the same chart. If a value is\n * given, then it will be used as the new group.\n *\n * If no value specified then the current group will be returned.\n * If `name` is specified then it will be used to generate legend label.\n * @method group\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group-map-reduce crossfilter.group}\n * @example\n * var index = crossfilter([]);\n * var dimension = index.dimension(dc.pluck('key'));\n * chart.dimension(dimension);\n * chart.group(dimension.group(crossfilter.reduceSum()));\n * @param {crossfilter.group} [group]\n * @param {String} [name]\n * @returns {crossfilter.group|dc.baseMixin}\n */\n _chart.group = function (group, name) {\n if (!arguments.length) {\n return _group;\n }\n _group = group;\n _chart._groupName = name;\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * Get or set an accessor to order ordinal dimensions. The chart uses\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#quicksort_by crossfilter.quicksort.by}\n * to sort elements; this accessor returns the value to order on.\n * @method ordering\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#quicksort_by crossfilter.quicksort.by}\n * @example\n * // Default ordering accessor\n * _chart.ordering(dc.pluck('key'));\n * @param {Function} [orderFunction]\n * @returns {Function|dc.baseMixin}\n */\n _chart.ordering = function (orderFunction) {\n if (!arguments.length) {\n return _ordering;\n }\n _ordering = orderFunction;\n _orderSort = crossfilter.quicksort.by(_ordering);\n _chart.expireCache();\n return _chart;\n };\n\n _chart._computeOrderedGroups = function (data) {\n var dataCopy = data.slice(0);\n\n if (dataCopy.length <= 1) {\n return dataCopy;\n }\n\n if (!_orderSort) {\n _orderSort = crossfilter.quicksort.by(_ordering);\n }\n\n return _orderSort(dataCopy, 0, dataCopy.length);\n };\n\n /**\n * Clear all filters associated with this chart. The same effect can be achieved by calling\n * {@link dc.baseMixin#filter chart.filter(null)}.\n * @method filterAll\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.filterAll = function () {\n return _chart.filter(null);\n };\n\n /**\n * Execute d3 single selection in the chart's scope using the given selector and return the d3\n * selection.\n *\n * This function is **not chainable** since it does not return a chart instance; however the d3\n * selection result can be chained to d3 function calls.\n * @method select\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#d3_select d3.select}\n * @example\n * // Has the same effect as d3.select('#chart-id').select(selector)\n * chart.select(selector)\n * @returns {d3.selection}\n */\n _chart.select = function (s) {\n return _root.select(s);\n };\n\n /**\n * Execute in scope d3 selectAll using the given selector and return d3 selection result.\n *\n * This function is **not chainable** since it does not return a chart instance; however the d3\n * selection result can be chained to d3 function calls.\n * @method selectAll\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#d3_selectAll d3.selectAll}\n * @example\n * // Has the same effect as d3.select('#chart-id').selectAll(selector)\n * chart.selectAll(selector)\n * @returns {d3.selection}\n */\n _chart.selectAll = function (s) {\n return _root ? _root.selectAll(s) : null;\n };\n\n /**\n * Set the root SVGElement to either be an existing chart's root; or any valid [d3 single\n * selector](https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements) specifying a dom\n * block element such as a div; or a dom element or d3 selection. Optionally registers the chart\n * within the chartGroup. This class is called internally on chart initialization, but be called\n * again to relocate the chart. However, it will orphan any previously created SVGElements.\n * @method anchor\n * @memberof dc.baseMixin\n * @instance\n * @param {anchorChart|anchorSelector|anchorNode} [parent]\n * @param {String} [chartGroup]\n * @returns {String|node|d3.selection|dc.baseMixin}\n */\n _chart.anchor = function (parent, chartGroup) {\n if (!arguments.length) {\n return _anchor;\n }\n if (dc.instanceOfChart(parent)) {\n _anchor = parent.anchor();\n _root = parent.root();\n _isChild = true;\n } else if (parent) {\n if (parent.select && parent.classed) { // detect d3 selection\n _anchor = parent.node();\n } else {\n _anchor = parent;\n }\n _root = d3.select(_anchor);\n _root.classed(dc.constants.CHART_CLASS, true);\n dc.registerChart(_chart, chartGroup);\n _isChild = false;\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _chart;\n };\n\n /**\n * Returns the DOM id for the chart's anchored location.\n * @method anchorName\n * @memberof dc.baseMixin\n * @instance\n * @returns {String}\n */\n _chart.anchorName = function () {\n var a = _chart.anchor();\n if (a && a.id) {\n return a.id;\n }\n if (a && a.replace) {\n return a.replace('#', '');\n }\n return 'dc-chart' + _chart.chartID();\n };\n\n /**\n * Returns the root element where a chart resides. Usually it will be the parent div element where\n * the SVGElement was created. You can also pass in a new root element however this is usually handled by\n * dc internally. Resetting the root element on a chart outside of dc internals may have\n * unexpected consequences.\n * @method root\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement HTMLElement}\n * @param {HTMLElement} [rootElement]\n * @returns {HTMLElement|dc.baseMixin}\n */\n _chart.root = function (rootElement) {\n if (!arguments.length) {\n return _root;\n }\n _root = rootElement;\n return _chart;\n };\n\n /**\n * Returns the top SVGElement for this specific chart. You can also pass in a new SVGElement,\n * however this is usually handled by dc internally. Resetting the SVGElement on a chart outside\n * of dc internals may have unexpected consequences.\n * @method svg\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SVGElement SVGElement}\n * @param {SVGElement|d3.selection} [svgElement]\n * @returns {SVGElement|d3.selection|dc.baseMixin}\n */\n _chart.svg = function (svgElement) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = svgElement;\n return _chart;\n };\n\n /**\n * Remove the chart's SVGElements from the dom and recreate the container SVGElement.\n * @method resetSvg\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SVGElement SVGElement}\n * @returns {SVGElement}\n */\n _chart.resetSvg = function () {\n _chart.select('svg').remove();\n return generateSvg();\n };\n\n function sizeSvg () {\n if (_svg) {\n if (!_useViewBoxResizing) {\n _svg\n .attr('width', _chart.width())\n .attr('height', _chart.height());\n } else if (!_svg.attr('viewBox')) {\n _svg\n .attr('viewBox', '0 0 ' + _chart.width() + ' ' + _chart.height());\n }\n }\n }\n\n function generateSvg () {\n _svg = _chart.root().append('svg');\n sizeSvg();\n return _svg;\n }\n\n /**\n * Set or get the filter printer function. The filter printer function is used to generate human\n * friendly text for filter value(s) associated with the chart instance. The text will get shown\n * in the `.filter element; see {@link dc.baseMixin#turnOnControls turnOnControls}.\n *\n * By default dc charts use a default filter printer {@link dc.printers.filters dc.printers.filters}\n * that provides simple printing support for both single value and ranged filters.\n * @method filterPrinter\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // for a chart with an ordinal brush, print the filters in upper case\n * chart.filterPrinter(function(filters) {\n * return filters.map(function(f) { return f.toUpperCase(); }).join(', ');\n * });\n * // for a chart with a range brush, print the filter as start and extent\n * chart.filterPrinter(function(filters) {\n * return 'start ' + dc.utils.printSingleValue(filters[0][0]) +\n * ' extent ' + dc.utils.printSingleValue(filters[0][1] - filters[0][0]);\n * });\n * @param {Function} [filterPrinterFunction=dc.printers.filters]\n * @returns {Function|dc.baseMixin}\n */\n _chart.filterPrinter = function (filterPrinterFunction) {\n if (!arguments.length) {\n return _filterPrinter;\n }\n _filterPrinter = filterPrinterFunction;\n return _chart;\n };\n\n /**\n * If set, use the `visibility` attribute instead of the `display` attribute for showing/hiding\n * chart reset and filter controls, for less disruption to the layout.\n * @method controlsUseVisibility\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [controlsUseVisibility=false]\n * @returns {Boolean|dc.baseMixin}\n **/\n _chart.controlsUseVisibility = function (useVisibility) {\n if (!arguments.length) {\n return _controlsUseVisibility;\n }\n _controlsUseVisibility = useVisibility;\n return _chart;\n };\n\n /**\n * Turn on optional control elements within the root element. dc currently supports the\n * following html control elements.\n * * root.selectAll('.reset') - elements are turned on if the chart has an active filter. This type\n * of control element is usually used to store a reset link to allow user to reset filter on a\n * certain chart. This element will be turned off automatically if the filter is cleared.\n * * root.selectAll('.filter') elements are turned on if the chart has an active filter. The text\n * content of this element is then replaced with the current filter value using the filter printer\n * function. This type of element will be turned off automatically if the filter is cleared.\n * @method turnOnControls\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.turnOnControls = function () {\n if (_root) {\n var attribute = _chart.controlsUseVisibility() ? 'visibility' : 'display';\n _chart.selectAll('.reset').style(attribute, null);\n _chart.selectAll('.filter').text(_filterPrinter(_chart.filters())).style(attribute, null);\n }\n return _chart;\n };\n\n /**\n * Turn off optional control elements within the root element.\n * @method turnOffControls\n * @memberof dc.baseMixin\n * @see {@link dc.baseMixin#turnOnControls turnOnControls}\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.turnOffControls = function () {\n if (_root) {\n var attribute = _chart.controlsUseVisibility() ? 'visibility' : 'display';\n var value = _chart.controlsUseVisibility() ? 'hidden' : 'none';\n _chart.selectAll('.reset').style(attribute, value);\n _chart.selectAll('.filter').style(attribute, value).text(_chart.filter());\n }\n return _chart;\n };\n\n /**\n * Set or get the animation transition duration (in milliseconds) for this chart instance.\n * @method transitionDuration\n * @memberof dc.baseMixin\n * @instance\n * @param {Number} [duration=750]\n * @returns {Number|dc.baseMixin}\n */\n _chart.transitionDuration = function (duration) {\n if (!arguments.length) {\n return _transitionDuration;\n }\n _transitionDuration = duration;\n return _chart;\n };\n\n /**\n * Set or get the animation transition delay (in milliseconds) for this chart instance.\n * @method transitionDelay\n * @memberof dc.baseMixin\n * @instance\n * @param {Number} [delay=0]\n * @returns {Number|dc.baseMixin}\n */\n _chart.transitionDelay = function (delay) {\n if (!arguments.length) {\n return _transitionDelay;\n }\n _transitionDelay = delay;\n return _chart;\n };\n\n _chart._mandatoryAttributes = function (_) {\n if (!arguments.length) {\n return _mandatoryAttributes;\n }\n _mandatoryAttributes = _;\n return _chart;\n };\n\n function checkForMandatoryAttributes (a) {\n if (!_chart[a] || !_chart[a]()) {\n throw new dc.errors.InvalidStateException('Mandatory attribute chart.' + a +\n ' is missing on chart[#' + _chart.anchorName() + ']');\n }\n }\n\n /**\n * Invoking this method will force the chart to re-render everything from scratch. Generally it\n * should only be used to render the chart for the first time on the page or if you want to make\n * sure everything is redrawn from scratch instead of relying on the default incremental redrawing\n * behaviour.\n * @method render\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.render = function () {\n _height = _width = undefined; // force recalculate\n _listeners.preRender(_chart);\n\n if (_mandatoryAttributes) {\n _mandatoryAttributes.forEach(checkForMandatoryAttributes);\n }\n\n var result = _chart._doRender();\n\n if (_legend) {\n _legend.render();\n }\n\n _chart._activateRenderlets('postRender');\n\n return result;\n };\n\n _chart._activateRenderlets = function (event) {\n _listeners.pretransition(_chart);\n if (_chart.transitionDuration() > 0 && _svg) {\n _svg.transition().duration(_chart.transitionDuration()).delay(_chart.transitionDelay())\n .each('end', function () {\n _listeners.renderlet(_chart);\n if (event) {\n _listeners[event](_chart);\n }\n });\n } else {\n _listeners.renderlet(_chart);\n if (event) {\n _listeners[event](_chart);\n }\n }\n };\n\n /**\n * Calling redraw will cause the chart to re-render data changes incrementally. If there is no\n * change in the underlying data dimension then calling this method will have no effect on the\n * chart. Most chart interaction in dc will automatically trigger this method through internal\n * events (in particular {@link dc.redrawAll dc.redrawAll}); therefore, you only need to\n * manually invoke this function if data is manipulated outside of dc's control (for example if\n * data is loaded in the background using\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#crossfilter_add crossfilter.add}).\n * @method redraw\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.redraw = function () {\n sizeSvg();\n _listeners.preRedraw(_chart);\n\n var result = _chart._doRedraw();\n\n if (_legend) {\n _legend.render();\n }\n\n _chart._activateRenderlets('postRedraw');\n\n return result;\n };\n\n /**\n * Gets/sets the commit handler. If the chart has a commit handler, the handler will be called when\n * the chart's filters have changed, in order to send the filter data asynchronously to a server.\n *\n * Unlike other functions in dc.js, the commit handler is asynchronous. It takes two arguments:\n * a flag indicating whether this is a render (true) or a redraw (false), and a callback to be\n * triggered once the commit is filtered. The callback has the standard node.js continuation signature\n * with error first and result second.\n * @method commitHandler\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.commitHandler = function (commitHandler) {\n if (!arguments.length) {\n return _commitHandler;\n }\n _commitHandler = commitHandler;\n return _chart;\n };\n\n /**\n * Redraws all charts in the same group as this chart, typically in reaction to a filter\n * change. If the chart has a {@link dc.baseMixin.commitFilter commitHandler}, it will\n * be executed and waited for.\n * @method redrawGroup\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.redrawGroup = function () {\n if (_commitHandler) {\n _commitHandler(false, function (error, result) {\n if (error) {\n console.log(error);\n } else {\n dc.redrawAll(_chart.chartGroup());\n }\n });\n } else {\n dc.redrawAll(_chart.chartGroup());\n }\n return _chart;\n };\n\n /**\n * Renders all charts in the same group as this chart. If the chart has a\n * {@link dc.baseMixin.commitFilter commitHandler}, it will be executed and waited for\n * @method renderGroup\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.renderGroup = function () {\n if (_commitHandler) {\n _commitHandler(false, function (error, result) {\n if (error) {\n console.log(error);\n } else {\n dc.renderAll(_chart.chartGroup());\n }\n });\n } else {\n dc.renderAll(_chart.chartGroup());\n }\n return _chart;\n };\n\n _chart._invokeFilteredListener = function (f) {\n if (f !== undefined) {\n _listeners.filtered(_chart, f);\n }\n };\n\n _chart._invokeZoomedListener = function () {\n _listeners.zoomed(_chart);\n };\n\n var _hasFilterHandler = function (filters, filter) {\n if (filter === null || typeof(filter) === 'undefined') {\n return filters.length > 0;\n }\n return filters.some(function (f) {\n return filter <= f && filter >= f;\n });\n };\n\n /**\n * Set or get the has-filter handler. The has-filter handler is a function that checks to see if\n * the chart's current filters (first argument) include a specific filter (second argument). Using a custom has-filter handler allows\n * you to change the way filters are checked for and replaced.\n * @method hasFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default has-filter handler\n * chart.hasFilterHandler(function (filters, filter) {\n * if (filter === null || typeof(filter) === 'undefined') {\n * return filters.length > 0;\n * }\n * return filters.some(function (f) {\n * return filter <= f && filter >= f;\n * });\n * });\n *\n * // custom filter handler (no-op)\n * chart.hasFilterHandler(function(filters, filter) {\n * return false;\n * });\n * @param {Function} [hasFilterHandler]\n * @returns {Function|dc.baseMixin}\n */\n _chart.hasFilterHandler = function (hasFilterHandler) {\n if (!arguments.length) {\n return _hasFilterHandler;\n }\n _hasFilterHandler = hasFilterHandler;\n return _chart;\n };\n\n /**\n * Check whether any active filter or a specific filter is associated with particular chart instance.\n * This function is **not chainable**.\n * @method hasFilter\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#hasFilterHandler hasFilterHandler}\n * @param {*} [filter]\n * @returns {Boolean}\n */\n _chart.hasFilter = function (filter) {\n return _hasFilterHandler(_filters, filter);\n };\n\n var _removeFilterHandler = function (filters, filter) {\n for (var i = 0; i < filters.length; i++) {\n if (filters[i] <= filter && filters[i] >= filter) {\n filters.splice(i, 1);\n break;\n }\n }\n return filters;\n };\n\n /**\n * Set or get the remove filter handler. The remove filter handler is a function that removes a\n * filter from the chart's current filters. Using a custom remove filter handler allows you to\n * change how filters are removed or perform additional work when removing a filter, e.g. when\n * using a filter server other than crossfilter.\n *\n * The handler should return a new or modified array as the result.\n * @method removeFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default remove filter handler\n * chart.removeFilterHandler(function (filters, filter) {\n * for (var i = 0; i < filters.length; i++) {\n * if (filters[i] <= filter && filters[i] >= filter) {\n * filters.splice(i, 1);\n * break;\n * }\n * }\n * return filters;\n * });\n *\n * // custom filter handler (no-op)\n * chart.removeFilterHandler(function(filters, filter) {\n * return filters;\n * });\n * @param {Function} [removeFilterHandler]\n * @returns {Function|dc.baseMixin}\n */\n _chart.removeFilterHandler = function (removeFilterHandler) {\n if (!arguments.length) {\n return _removeFilterHandler;\n }\n _removeFilterHandler = removeFilterHandler;\n return _chart;\n };\n\n var _addFilterHandler = function (filters, filter) {\n filters.push(filter);\n return filters;\n };\n\n /**\n * Set or get the add filter handler. The add filter handler is a function that adds a filter to\n * the chart's filter list. Using a custom add filter handler allows you to change the way filters\n * are added or perform additional work when adding a filter, e.g. when using a filter server other\n * than crossfilter.\n *\n * The handler should return a new or modified array as the result.\n * @method addFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default add filter handler\n * chart.addFilterHandler(function (filters, filter) {\n * filters.push(filter);\n * return filters;\n * });\n *\n * // custom filter handler (no-op)\n * chart.addFilterHandler(function(filters, filter) {\n * return filters;\n * });\n * @param {Function} [addFilterHandler]\n * @returns {Function|dc.baseMixin}\n */\n _chart.addFilterHandler = function (addFilterHandler) {\n if (!arguments.length) {\n return _addFilterHandler;\n }\n _addFilterHandler = addFilterHandler;\n return _chart;\n };\n\n var _resetFilterHandler = function (filters) {\n return [];\n };\n\n /**\n * Set or get the reset filter handler. The reset filter handler is a function that resets the\n * chart's filter list by returning a new list. Using a custom reset filter handler allows you to\n * change the way filters are reset, or perform additional work when resetting the filters,\n * e.g. when using a filter server other than crossfilter.\n *\n * The handler should return a new or modified array as the result.\n * @method resetFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default remove filter handler\n * function (filters) {\n * return [];\n * }\n *\n * // custom filter handler (no-op)\n * chart.resetFilterHandler(function(filters) {\n * return filters;\n * });\n * @param {Function} [resetFilterHandler]\n * @returns {dc.baseMixin}\n */\n _chart.resetFilterHandler = function (resetFilterHandler) {\n if (!arguments.length) {\n return _resetFilterHandler;\n }\n _resetFilterHandler = resetFilterHandler;\n return _chart;\n };\n\n function applyFilters (filters) {\n if (_chart.dimension() && _chart.dimension().filter) {\n var fs = _filterHandler(_chart.dimension(), filters);\n if (fs) {\n filters = fs;\n }\n }\n return filters;\n }\n\n /**\n * Replace the chart filter. This is equivalent to calling `chart.filter(null).filter(filter)`\n * but more efficient because the filter is only applied once.\n *\n * @method replaceFilter\n * @memberof dc.baseMixin\n * @instance\n * @param {*} [filter]\n * @returns {dc.baseMixin}\n **/\n _chart.replaceFilter = function (filter) {\n _filters = _resetFilterHandler(_filters);\n _chart.filter(filter);\n return _chart;\n };\n\n /**\n * Filter the chart by the given parameter, or return the current filter if no input parameter\n * is given.\n *\n * The filter parameter can take one of these forms:\n * * A single value: the value will be toggled (added if it is not present in the current\n * filters, removed if it is present)\n * * An array containing a single array of values (`[[value,value,value]]`): each value is\n * toggled\n * * When appropriate for the chart, a {@link dc.filters dc filter object} such as\n * * {@link dc.filters.RangedFilter `dc.filters.RangedFilter`} for the\n * {@link dc.coordinateGridMixin dc.coordinateGridMixin} charts\n * * {@link dc.filters.TwoDimensionalFilter `dc.filters.TwoDimensionalFilter`} for the\n * {@link dc.heatMap heat map}\n * * {@link dc.filters.RangedTwoDimensionalFilter `dc.filters.RangedTwoDimensionalFilter`}\n * for the {@link dc.scatterPlot scatter plot}\n * * `null`: the filter will be reset using the\n * {@link dc.baseMixin#resetFilterHandler resetFilterHandler}\n *\n * Note that this is always a toggle (even when it doesn't make sense for the filter type). If\n * you wish to replace the current filter, either call `chart.filter(null)` first - or it's more\n * efficient to call {@link dc.baseMixin#replaceFilter `chart.replaceFilter(filter)`} instead.\n *\n * Each toggle is executed by checking if the value is already present using the\n * {@link dc.baseMixin#hasFilterHandler hasFilterHandler}; if it is not present, it is added\n * using the {@link dc.baseMixin#addFilterHandler addFilterHandler}; if it is already present,\n * it is removed using the {@link dc.baseMixin#removeFilterHandler removeFilterHandler}.\n *\n * Once the filters array has been updated, the filters are applied to the\n * crossfilter dimension, using the {@link dc.baseMixin#filterHandler filterHandler}.\n *\n * Once you have set the filters, call {@link dc.baseMixin#redrawGroup `chart.redrawGroup()`}\n * (or {@link dc.redrawAll `dc.redrawAll()`}) to redraw the chart's group.\n * @method filter\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#addFilterHandler addFilterHandler}\n * @see {@link dc.baseMixin#removeFilterHandler removeFilterHandler}\n * @see {@link dc.baseMixin#resetFilterHandler resetFilterHandler}\n * @see {@link dc.baseMixin#filterHandler filterHandler}\n * @example\n * // filter by a single string\n * chart.filter('Sunday');\n * // filter by a single age\n * chart.filter(18);\n * // filter by a set of states\n * chart.filter([['MA', 'TX', 'ND', 'WA']]);\n * // filter by range -- note the use of dc.filters.RangedFilter, which is different\n * // from the syntax for filtering a crossfilter dimension directly, dimension.filter([15,20])\n * chart.filter(dc.filters.RangedFilter(15,20));\n * @param {*} [filter]\n * @returns {dc.baseMixin}\n */\n _chart.filter = function (filter) {\n if (!arguments.length) {\n return _filters.length > 0 ? _filters[0] : null;\n }\n var filters = _filters;\n if (filter instanceof Array && filter[0] instanceof Array && !filter.isFiltered) {\n // toggle each filter\n filter[0].forEach(function (f) {\n if (_hasFilterHandler(filters, f)) {\n filters = _removeFilterHandler(filters, f);\n } else {\n filters = _addFilterHandler(filters, f);\n }\n });\n } else if (filter === null) {\n filters = _resetFilterHandler(filters);\n } else {\n if (_hasFilterHandler(filters, filter)) {\n filters = _removeFilterHandler(filters, filter);\n } else {\n filters = _addFilterHandler(filters, filter);\n }\n }\n _filters = applyFilters(filters);\n _chart._invokeFilteredListener(filter);\n\n if (_root !== null && _chart.hasFilter()) {\n _chart.turnOnControls();\n } else {\n _chart.turnOffControls();\n }\n\n return _chart;\n };\n\n /**\n * Returns all current filters. This method does not perform defensive cloning of the internal\n * filter array before returning, therefore any modification of the returned array will effect the\n * chart's internal filter storage.\n * @method filters\n * @memberof dc.baseMixin\n * @instance\n * @returns {Array<*>}\n */\n _chart.filters = function () {\n return _filters;\n };\n\n _chart.highlightSelected = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, true);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, false);\n };\n\n _chart.fadeDeselected = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, false);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, true);\n };\n\n _chart.resetHighlight = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, false);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, false);\n };\n\n /**\n * This function is passed to d3 as the onClick handler for each chart. The default behavior is to\n * filter on the clicked datum (passed to the callback) and redraw the chart group.\n * @method onClick\n * @memberof dc.baseMixin\n * @instance\n * @param {*} datum\n */\n _chart.onClick = function (datum) {\n var filter = _chart.keyAccessor()(datum);\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n /**\n * Set or get the filter handler. The filter handler is a function that performs the filter action\n * on a specific dimension. Using a custom filter handler allows you to perform additional logic\n * before or after filtering.\n * @method filterHandler\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension_filter crossfilter.dimension.filter}\n * @example\n * // the default filter handler handles all possible cases for the charts in dc.js\n * // you can replace it with something more specialized for your own chart\n * chart.filterHandler(function (dimension, filters) {\n * if (filters.length === 0) {\n * // the empty case (no filtering)\n * dimension.filter(null);\n * } else if (filters.length === 1 && !filters[0].isFiltered) {\n * // single value and not a function-based filter\n * dimension.filterExact(filters[0]);\n * } else if (filters.length === 1 && filters[0].filterType === 'RangedFilter') {\n * // single range-based filter\n * dimension.filterRange(filters[0]);\n * } else {\n * // an array of values, or an array of filter objects\n * dimension.filterFunction(function (d) {\n * for (var i = 0; i < filters.length; i++) {\n * var filter = filters[i];\n * if (filter.isFiltered && filter.isFiltered(d)) {\n * return true;\n * } else if (filter <= d && filter >= d) {\n * return true;\n * }\n * }\n * return false;\n * });\n * }\n * return filters;\n * });\n *\n * // custom filter handler\n * chart.filterHandler(function(dimension, filter){\n * var newFilter = filter + 10;\n * dimension.filter(newFilter);\n * return newFilter; // set the actual filter value to the new value\n * });\n * @param {Function} [filterHandler]\n * @returns {Function|dc.baseMixin}\n */\n _chart.filterHandler = function (filterHandler) {\n if (!arguments.length) {\n return _filterHandler;\n }\n _filterHandler = filterHandler;\n return _chart;\n };\n\n // abstract function stub\n _chart._doRender = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n _chart._doRedraw = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n _chart.legendables = function () {\n // do nothing in base, should be overridden by sub-function\n return [];\n };\n\n _chart.legendHighlight = function () {\n // do nothing in base, should be overridden by sub-function\n };\n\n _chart.legendReset = function () {\n // do nothing in base, should be overridden by sub-function\n };\n\n _chart.legendToggle = function () {\n // do nothing in base, should be overriden by sub-function\n };\n\n _chart.isLegendableHidden = function () {\n // do nothing in base, should be overridden by sub-function\n return false;\n };\n\n /**\n * Set or get the key accessor function. The key accessor function is used to retrieve the key\n * value from the crossfilter group. Key values are used differently in different charts, for\n * example keys correspond to slices in a pie chart and x axis positions in a grid coordinate chart.\n * @method keyAccessor\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default key accessor\n * chart.keyAccessor(function(d) { return d.key; });\n * // custom key accessor for a multi-value crossfilter reduction\n * chart.keyAccessor(function(p) { return p.value.absGain; });\n * @param {Function} [keyAccessor]\n * @returns {Function|dc.baseMixin}\n */\n _chart.keyAccessor = function (keyAccessor) {\n if (!arguments.length) {\n return _keyAccessor;\n }\n _keyAccessor = keyAccessor;\n return _chart;\n };\n\n /**\n * Set or get the value accessor function. The value accessor function is used to retrieve the\n * value from the crossfilter group. Group values are used differently in different charts, for\n * example values correspond to slice sizes in a pie chart and y axis positions in a grid\n * coordinate chart.\n * @method valueAccessor\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default value accessor\n * chart.valueAccessor(function(d) { return d.value; });\n * // custom value accessor for a multi-value crossfilter reduction\n * chart.valueAccessor(function(p) { return p.value.percentageGain; });\n * @param {Function} [valueAccessor]\n * @returns {Function|dc.baseMixin}\n */\n _chart.valueAccessor = function (valueAccessor) {\n if (!arguments.length) {\n return _valueAccessor;\n }\n _valueAccessor = valueAccessor;\n return _chart;\n };\n\n /**\n * Set or get the label function. The chart class will use this function to render labels for each\n * child element in the chart, e.g. slices in a pie chart or bubbles in a bubble chart. Not every\n * chart supports the label function, for example line chart does not use this function\n * at all. By default, enables labels; pass false for the second parameter if this is not desired.\n * @method label\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default label function just return the key\n * chart.label(function(d) { return d.key; });\n * // label function has access to the standard d3 data binding and can get quite complicated\n * chart.label(function(d) { return d.data.key + '(' + Math.floor(d.data.value / all.value() * 100) + '%)'; });\n * @param {Function} [labelFunction]\n * @param {Boolean} [enableLabels=true]\n * @returns {Function|dc.baseMixin}\n */\n _chart.label = function (labelFunction, enableLabels) {\n if (!arguments.length) {\n return _label;\n }\n _label = labelFunction;\n if ((enableLabels === undefined) || enableLabels) {\n _renderLabel = true;\n }\n return _chart;\n };\n\n /**\n * Turn on/off label rendering\n * @method renderLabel\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [renderLabel=false]\n * @returns {Boolean|dc.baseMixin}\n */\n _chart.renderLabel = function (renderLabel) {\n if (!arguments.length) {\n return _renderLabel;\n }\n _renderLabel = renderLabel;\n return _chart;\n };\n\n /**\n * Set or get the title function. The chart class will use this function to render the SVGElement title\n * (usually interpreted by browser as tooltips) for each child element in the chart, e.g. a slice\n * in a pie chart or a bubble in a bubble chart. Almost every chart supports the title function;\n * however in grid coordinate charts you need to turn off the brush in order to see titles, because\n * otherwise the brush layer will block tooltip triggering.\n * @method title\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default title function shows \"key: value\"\n * chart.title(function(d) { return d.key + ': ' + d.value; });\n * // title function has access to the standard d3 data binding and can get quite complicated\n * chart.title(function(p) {\n * return p.key.getFullYear()\n * + '\\n'\n * + 'Index Gain: ' + numberFormat(p.value.absGain) + '\\n'\n * + 'Index Gain in Percentage: ' + numberFormat(p.value.percentageGain) + '%\\n'\n * + 'Fluctuation / Index Ratio: ' + numberFormat(p.value.fluctuationPercentage) + '%';\n * });\n * @param {Function} [titleFunction]\n * @returns {Function|dc.baseMixin}\n */\n _chart.title = function (titleFunction) {\n if (!arguments.length) {\n return _title;\n }\n _title = titleFunction;\n return _chart;\n };\n\n /**\n * Turn on/off title rendering, or return the state of the render title flag if no arguments are\n * given.\n * @method renderTitle\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [renderTitle=true]\n * @returns {Boolean|dc.baseMixin}\n */\n _chart.renderTitle = function (renderTitle) {\n if (!arguments.length) {\n return _renderTitle;\n }\n _renderTitle = renderTitle;\n return _chart;\n };\n\n /**\n * A renderlet is similar to an event listener on rendering event. Multiple renderlets can be added\n * to an individual chart. Each time a chart is rerendered or redrawn the renderlets are invoked\n * right after the chart finishes its transitions, giving you a way to modify the SVGElements.\n * Renderlet functions take the chart instance as the only input parameter and you can\n * use the dc API or use raw d3 to achieve pretty much any effect.\n *\n * Use {@link dc.baseMixin#on on} with a 'renderlet' prefix.\n * Generates a random key for the renderlet, which makes it hard to remove.\n * @method renderlet\n * @memberof dc.baseMixin\n * @instance\n * @deprecated\n * @example\n * // do this instead of .renderlet(function(chart) { ... })\n * chart.on(\"renderlet\", function(chart){\n * // mix of dc API and d3 manipulation\n * chart.select('g.y').style('display', 'none');\n * // its a closure so you can also access other chart variable available in the closure scope\n * moveChart.filter(chart.filter());\n * });\n * @param {Function} renderletFunction\n * @returns {dc.baseMixin}\n */\n _chart.renderlet = dc.logger.deprecate(function (renderletFunction) {\n _chart.on('renderlet.' + dc.utils.uniqueId(), renderletFunction);\n return _chart;\n }, 'chart.renderlet has been deprecated. Please use chart.on(\"renderlet.<renderletKey>\", renderletFunction)');\n\n /**\n * Get or set the chart group to which this chart belongs. Chart groups are rendered or redrawn\n * together since it is expected they share the same underlying crossfilter data set.\n * @method chartGroup\n * @memberof dc.baseMixin\n * @instance\n * @param {String} [chartGroup]\n * @returns {String|dc.baseMixin}\n */\n _chart.chartGroup = function (chartGroup) {\n if (!arguments.length) {\n return _chartGroup;\n }\n if (!_isChild) {\n dc.deregisterChart(_chart, _chartGroup);\n }\n _chartGroup = chartGroup;\n if (!_isChild) {\n dc.registerChart(_chart, _chartGroup);\n }\n return _chart;\n };\n\n /**\n * Expire the internal chart cache. dc charts cache some data internally on a per chart basis to\n * speed up rendering and avoid unnecessary calculation; however it might be useful to clear the\n * cache if you have changed state which will affect rendering. For example, if you invoke\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#crossfilter_add crossfilter.add}\n * function or reset group or dimension after rendering, it is a good idea to\n * clear the cache to make sure charts are rendered properly.\n * @method expireCache\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.expireCache = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n /**\n * Attach a dc.legend widget to this chart. The legend widget will automatically draw legend labels\n * based on the color setting and names associated with each group.\n * @method legend\n * @memberof dc.baseMixin\n * @instance\n * @example\n * chart.legend(dc.legend().x(400).y(10).itemHeight(13).gap(5))\n * @param {dc.legend} [legend]\n * @returns {dc.legend|dc.baseMixin}\n */\n _chart.legend = function (legend) {\n if (!arguments.length) {\n return _legend;\n }\n _legend = legend;\n _legend.parent(_chart);\n return _chart;\n };\n\n /**\n * Returns the internal numeric ID of the chart.\n * @method chartID\n * @memberof dc.baseMixin\n * @instance\n * @returns {String}\n */\n _chart.chartID = function () {\n return _chart.__dcFlag__;\n };\n\n /**\n * Set chart options using a configuration object. Each key in the object will cause the method of\n * the same name to be called with the value to set that attribute for the chart.\n * @method options\n * @memberof dc.baseMixin\n * @instance\n * @example\n * chart.options({dimension: myDimension, group: myGroup});\n * @param {{}} opts\n * @returns {dc.baseMixin}\n */\n _chart.options = function (opts) {\n var applyOptions = [\n 'anchor',\n 'group',\n 'xAxisLabel',\n 'yAxisLabel',\n 'stack',\n 'title',\n 'point',\n 'getColor',\n 'overlayGeoJson'\n ];\n\n for (var o in opts) {\n if (typeof(_chart[o]) === 'function') {\n if (opts[o] instanceof Array && applyOptions.indexOf(o) !== -1) {\n _chart[o].apply(_chart, opts[o]);\n } else {\n _chart[o].call(_chart, opts[o]);\n }\n } else {\n dc.logger.debug('Not a valid option setter name: ' + o);\n }\n }\n return _chart;\n };\n\n /**\n * All dc chart instance supports the following listeners.\n * Supports the following events:\n * * `renderlet` - This listener function will be invoked after transitions after redraw and render. Replaces the\n * deprecated {@link dc.baseMixin#renderlet renderlet} method.\n * * `pretransition` - Like `.on('renderlet', ...)` but the event is fired before transitions start.\n * * `preRender` - This listener function will be invoked before chart rendering.\n * * `postRender` - This listener function will be invoked after chart finish rendering including\n * all renderlets' logic.\n * * `preRedraw` - This listener function will be invoked before chart redrawing.\n * * `postRedraw` - This listener function will be invoked after chart finish redrawing\n * including all renderlets' logic.\n * * `filtered` - This listener function will be invoked after a filter is applied, added or removed.\n * * `zoomed` - This listener function will be invoked after a zoom is triggered.\n * @method on\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Internals.md#dispatch_on d3.dispatch.on}\n * @example\n * .on('renderlet', function(chart, filter){...})\n * .on('pretransition', function(chart, filter){...})\n * .on('preRender', function(chart){...})\n * .on('postRender', function(chart){...})\n * .on('preRedraw', function(chart){...})\n * .on('postRedraw', function(chart){...})\n * .on('filtered', function(chart, filter){...})\n * .on('zoomed', function(chart, filter){...})\n * @param {String} event\n * @param {Function} listener\n * @returns {dc.baseMixin}\n */\n _chart.on = function (event, listener) {\n _listeners.on(event, listener);\n return _chart;\n };\n\n return _chart;\n};\n","/**\n * Margin is a mixin that provides margin utility functions for both the Row Chart and Coordinate Grid\n * Charts.\n * @name marginMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.marginMixin}\n */\ndc.marginMixin = function (_chart) {\n var _margin = {top: 10, right: 50, bottom: 30, left: 30};\n\n /**\n * Get or set the margins for a particular coordinate grid chart instance. The margins is stored as\n * an associative Javascript array.\n * @method margins\n * @memberof dc.marginMixin\n * @instance\n * @example\n * var leftMargin = chart.margins().left; // 30 by default\n * chart.margins().left = 50;\n * leftMargin = chart.margins().left; // now 50\n * @param {{top: Number, right: Number, left: Number, bottom: Number}} [margins={top: 10, right: 50, bottom: 30, left: 30}]\n * @returns {{top: Number, right: Number, left: Number, bottom: Number}|dc.marginMixin}\n */\n _chart.margins = function (margins) {\n if (!arguments.length) {\n return _margin;\n }\n _margin = margins;\n return _chart;\n };\n\n _chart.effectiveWidth = function () {\n return _chart.width() - _chart.margins().left - _chart.margins().right;\n };\n\n _chart.effectiveHeight = function () {\n return _chart.height() - _chart.margins().top - _chart.margins().bottom;\n };\n\n return _chart;\n};\n","/**\n * The Color Mixin is an abstract chart functional class providing universal coloring support\n * as a mix-in for any concrete chart implementation.\n * @name colorMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.colorMixin}\n */\ndc.colorMixin = function (_chart) {\n var _colors = d3.scale.category20c();\n var _defaultAccessor = true;\n\n var _colorAccessor = function (d) { return _chart.keyAccessor()(d); };\n\n /**\n * Retrieve current color scale or set a new color scale. This methods accepts any function that\n * operates like a d3 scale.\n * @method colors\n * @memberof dc.colorMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @example\n * // alternate categorical scale\n * chart.colors(d3.scale.category20b());\n * // ordinal scale\n * chart.colors(d3.scale.ordinal().range(['red','green','blue']));\n * // convenience method, the same as above\n * chart.ordinalColors(['red','green','blue']);\n * // set a linear scale\n * chart.linearColors([\"#4575b4\", \"#ffffbf\", \"#a50026\"]);\n * @param {d3.scale} [colorScale=d3.scale.category20c()]\n * @returns {d3.scale|dc.colorMixin}\n */\n _chart.colors = function (colorScale) {\n if (!arguments.length) {\n return _colors;\n }\n if (colorScale instanceof Array) {\n _colors = d3.scale.quantize().range(colorScale); // deprecated legacy support, note: this fails for ordinal domains\n } else {\n _colors = d3.functor(colorScale);\n }\n return _chart;\n };\n\n /**\n * Convenience method to set the color scale to\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal d3.scale.ordinal} with\n * range `r`.\n * @method ordinalColors\n * @memberof dc.colorMixin\n * @instance\n * @param {Array<String>} r\n * @returns {dc.colorMixin}\n */\n _chart.ordinalColors = function (r) {\n return _chart.colors(d3.scale.ordinal().range(r));\n };\n\n /**\n * Convenience method to set the color scale to an Hcl interpolated linear scale with range `r`.\n * @method linearColors\n * @memberof dc.colorMixin\n * @instance\n * @param {Array<Number>} r\n * @returns {dc.colorMixin}\n */\n _chart.linearColors = function (r) {\n return _chart.colors(d3.scale.linear()\n .range(r)\n .interpolate(d3.interpolateHcl));\n };\n\n /**\n * Set or the get color accessor function. This function will be used to map a data point in a\n * crossfilter group to a color value on the color scale. The default function uses the key\n * accessor.\n * @method colorAccessor\n * @memberof dc.colorMixin\n * @instance\n * @example\n * // default index based color accessor\n * .colorAccessor(function (d, i){return i;})\n * // color accessor for a multi-value crossfilter reduction\n * .colorAccessor(function (d){return d.value.absGain;})\n * @param {Function} [colorAccessor]\n * @returns {Function|dc.colorMixin}\n */\n _chart.colorAccessor = function (colorAccessor) {\n if (!arguments.length) {\n return _colorAccessor;\n }\n _colorAccessor = colorAccessor;\n _defaultAccessor = false;\n return _chart;\n };\n\n // what is this?\n _chart.defaultColorAccessor = function () {\n return _defaultAccessor;\n };\n\n /**\n * Set or get the current domain for the color mapping function. The domain must be supplied as an\n * array.\n *\n * Note: previously this method accepted a callback function. Instead you may use a custom scale\n * set by {@link dc.colorMixin#colors .colors}.\n * @method colorDomain\n * @memberof dc.colorMixin\n * @instance\n * @param {Array<String>} [domain]\n * @returns {Array<String>|dc.colorMixin}\n */\n _chart.colorDomain = function (domain) {\n if (!arguments.length) {\n return _colors.domain();\n }\n _colors.domain(domain);\n return _chart;\n };\n\n /**\n * Set the domain by determining the min and max values as retrieved by\n * {@link dc.colorMixin#colorAccessor .colorAccessor} over the chart's dataset.\n * @method calculateColorDomain\n * @memberof dc.colorMixin\n * @instance\n * @returns {dc.colorMixin}\n */\n _chart.calculateColorDomain = function () {\n var newDomain = [d3.min(_chart.data(), _chart.colorAccessor()),\n d3.max(_chart.data(), _chart.colorAccessor())];\n _colors.domain(newDomain);\n return _chart;\n };\n\n /**\n * Get the color for the datum d and counter i. This is used internally by charts to retrieve a color.\n * @method getColor\n * @memberof dc.colorMixin\n * @instance\n * @param {*} d\n * @param {Number} [i]\n * @returns {String}\n */\n _chart.getColor = function (d, i) {\n return _colors(_colorAccessor.call(this, d, i));\n };\n\n /**\n * **Deprecated.** Get/set the color calculator. This actually replaces the\n * {@link dc.colorMixin#getColor getColor} method!\n *\n * This is not recommended, since using a {@link dc.colorMixin#colorAccessor colorAccessor} and\n * color scale ({@link dc.colorMixin#colors .colors}) is more powerful and idiomatic d3.\n * @method colorCalculator\n * @memberof dc.colorMixin\n * @instance\n * @param {*} [colorCalculator]\n * @returns {Function|dc.colorMixin}\n */\n _chart.colorCalculator = dc.logger.deprecate(function (colorCalculator) {\n if (!arguments.length) {\n return _chart.getColor;\n }\n _chart.getColor = colorCalculator;\n return _chart;\n }, 'colorMixin.colorCalculator has been deprecated. Please colorMixin.colors and colorMixin.colorAccessor instead');\n\n return _chart;\n};\n","/**\n * Coordinate Grid is an abstract base chart designed to support a number of coordinate grid based\n * concrete chart types, e.g. bar chart, line chart, and bubble chart.\n * @name coordinateGridMixin\n * @memberof dc\n * @mixin\n * @mixes dc.colorMixin\n * @mixes dc.marginMixin\n * @mixes dc.baseMixin\n * @param {Object} _chart\n * @returns {dc.coordinateGridMixin}\n */\ndc.coordinateGridMixin = function (_chart) {\n var GRID_LINE_CLASS = 'grid-line';\n var HORIZONTAL_CLASS = 'horizontal';\n var VERTICAL_CLASS = 'vertical';\n var Y_AXIS_LABEL_CLASS = 'y-axis-label';\n var X_AXIS_LABEL_CLASS = 'x-axis-label';\n var DEFAULT_AXIS_LABEL_PADDING = 12;\n\n _chart = dc.colorMixin(dc.marginMixin(dc.baseMixin(_chart)));\n\n _chart.colors(d3.scale.category10());\n _chart._mandatoryAttributes().push('x');\n var _parent;\n var _g;\n var _chartBodyG;\n\n var _x;\n var _xOriginalDomain;\n var _xAxis = d3.svg.axis().orient('bottom');\n var _xUnits = dc.units.integers;\n var _xAxisPadding = 0;\n var _xAxisPaddingUnit = 'day';\n var _xElasticity = false;\n var _xAxisLabel;\n var _xAxisLabelPadding = 0;\n var _lastXDomain;\n\n var _y;\n var _yAxis = d3.svg.axis().orient('left');\n var _yAxisPadding = 0;\n var _yElasticity = false;\n var _yAxisLabel;\n var _yAxisLabelPadding = 0;\n\n var _brush = d3.svg.brush();\n var _brushOn = true;\n var _round;\n\n var _renderHorizontalGridLine = false;\n var _renderVerticalGridLine = false;\n\n var _refocused = false, _resizing = false;\n var _unitCount;\n\n var _zoomScale = [1, Infinity];\n var _zoomOutRestrict = true;\n\n var _zoom = d3.behavior.zoom().on('zoom', zoomHandler);\n var _nullZoom = d3.behavior.zoom().on('zoom', null);\n var _hasBeenMouseZoomable = false;\n\n var _rangeChart;\n var _focusChart;\n\n var _mouseZoomable = false;\n var _clipPadding = 0;\n\n var _outerRangeBandPadding = 0.5;\n var _rangeBandPadding = 0;\n\n var _useRightYAxis = false;\n\n /**\n * When changing the domain of the x or y scale, it is necessary to tell the chart to recalculate\n * and redraw the axes. (`.rescale()` is called automatically when the x or y scale is replaced\n * with {@link dc.coordinateGridMixin+x .x()} or {@link dc.coordinateGridMixin#y .y()}, and has\n * no effect on elastic scales.)\n * @method rescale\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {dc.coordinateGridMixin}\n */\n _chart.rescale = function () {\n _unitCount = undefined;\n _resizing = true;\n return _chart;\n };\n\n _chart.resizing = function () {\n return _resizing;\n };\n\n /**\n * Get or set the range selection chart associated with this instance. Setting the range selection\n * chart using this function will automatically update its selection brush when the current chart\n * zooms in. In return the given range chart will also automatically attach this chart as its focus\n * chart hence zoom in when range brush updates.\n *\n * Usually the range and focus charts will share a dimension. The range chart will set the zoom\n * boundaries for the focus chart, so its dimension values must be compatible with the domain of\n * the focus chart.\n *\n * See the [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) example for this effect in action.\n * @method rangeChart\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {dc.coordinateGridMixin} [rangeChart]\n * @returns {dc.coordinateGridMixin}\n */\n _chart.rangeChart = function (rangeChart) {\n if (!arguments.length) {\n return _rangeChart;\n }\n _rangeChart = rangeChart;\n _rangeChart.focusChart(_chart);\n return _chart;\n };\n\n /**\n * Get or set the scale extent for mouse zooms.\n * @method zoomScale\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Array<Number|Date>} [extent=[1, Infinity]]\n * @returns {Array<Number|Date>|dc.coordinateGridMixin}\n */\n _chart.zoomScale = function (extent) {\n if (!arguments.length) {\n return _zoomScale;\n }\n _zoomScale = extent;\n return _chart;\n };\n\n /**\n * Get or set the zoom restriction for the chart. If true limits the zoom to origional domain of the chart.\n * @method zoomOutRestrict\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [zoomOutRestrict=true]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.zoomOutRestrict = function (zoomOutRestrict) {\n if (!arguments.length) {\n return _zoomOutRestrict;\n }\n _zoomScale[0] = zoomOutRestrict ? 1 : 0;\n _zoomOutRestrict = zoomOutRestrict;\n return _chart;\n };\n\n _chart._generateG = function (parent) {\n if (parent === undefined) {\n _parent = _chart.svg();\n } else {\n _parent = parent;\n }\n\n var href = window.location.href.split('#')[0];\n\n _g = _parent.append('g');\n\n _chartBodyG = _g.append('g').attr('class', 'chart-body')\n .attr('transform', 'translate(' + _chart.margins().left + ', ' + _chart.margins().top + ')')\n .attr('clip-path', 'url(' + href + '#' + getClipPathId() + ')');\n\n return _g;\n };\n\n /**\n * Get or set the root g element. This method is usually used to retrieve the g element in order to\n * overlay custom svg drawing programatically. **Caution**: The root g element is usually generated\n * by dc.js internals, and resetting it might produce unpredictable result.\n * @method g\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {SVGElement} [gElement]\n * @returns {SVGElement|dc.coordinateGridMixin}\n */\n _chart.g = function (gElement) {\n if (!arguments.length) {\n return _g;\n }\n _g = gElement;\n return _chart;\n };\n\n /**\n * Set or get mouse zoom capability flag (default: false). When turned on the chart will be\n * zoomable using the mouse wheel. If the range selector chart is attached zooming will also update\n * the range selection brush on the associated range selector chart.\n * @method mouseZoomable\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [mouseZoomable=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.mouseZoomable = function (mouseZoomable) {\n if (!arguments.length) {\n return _mouseZoomable;\n }\n _mouseZoomable = mouseZoomable;\n return _chart;\n };\n\n /**\n * Retrieve the svg group for the chart body.\n * @method chartBodyG\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {SVGElement} [chartBodyG]\n * @returns {SVGElement}\n */\n _chart.chartBodyG = function (chartBodyG) {\n if (!arguments.length) {\n return _chartBodyG;\n }\n _chartBodyG = chartBodyG;\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Get or set the x scale. The x scale can be any d3\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md quantitive scale} or\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md ordinal scale}.\n * @method x\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @example\n * // set x to a linear scale\n * chart.x(d3.scale.linear().domain([-2500, 2500]))\n * // set x to a time scale to generate histogram\n * chart.x(d3.time.scale().domain([new Date(1985, 0, 1), new Date(2012, 11, 31)]))\n * @param {d3.scale} [xScale]\n * @returns {d3.scale|dc.coordinateGridMixin}\n */\n _chart.x = function (xScale) {\n if (!arguments.length) {\n return _x;\n }\n _x = xScale;\n _xOriginalDomain = _x.domain();\n _chart.rescale();\n return _chart;\n };\n\n _chart.xOriginalDomain = function () {\n return _xOriginalDomain;\n };\n\n /**\n * Set or get the xUnits function. The coordinate grid chart uses the xUnits function to calculate\n * the number of data projections on x axis such as the number of bars for a bar chart or the\n * number of dots for a line chart. This function is expected to return a Javascript array of all\n * data points on x axis, or the number of points on the axis. [d3 time range functions\n * d3.time.days, d3.time.months, and\n * d3.time.years](https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Intervals.md#aliases) are all valid xUnits\n * function. dc.js also provides a few units function, see the {@link dc.units Units Namespace} for\n * a list of built-in units functions.\n * @method xUnits\n * @memberof dc.coordinateGridMixin\n * @instance\n * @todo Add docs for utilities\n * @example\n * // set x units to count days\n * chart.xUnits(d3.time.days);\n * // set x units to count months\n * chart.xUnits(d3.time.months);\n *\n * // A custom xUnits function can be used as long as it follows the following interface:\n * // units in integer\n * function(start, end, xDomain) {\n * // simply calculates how many integers in the domain\n * return Math.abs(end - start);\n * };\n *\n * // fixed units\n * function(start, end, xDomain) {\n * // be aware using fixed units will disable the focus/zoom ability on the chart\n * return 1000;\n * @param {Function} [xUnits=dc.units.integers]\n * @returns {Function|dc.coordinateGridMixin}\n */\n _chart.xUnits = function (xUnits) {\n if (!arguments.length) {\n return _xUnits;\n }\n _xUnits = xUnits;\n return _chart;\n };\n\n /**\n * Set or get the x axis used by a particular coordinate grid chart instance. This function is most\n * useful when x axis customization is required. The x axis in dc.js is an instance of a\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3 axis object};\n * therefore it supports any valid d3 axis manipulation.\n *\n * **Caution**: The x axis is usually generated internally by dc; resetting it may cause\n * unexpected results. Note also that when used as a getter, this function is not chainable:\n * it returns the axis, not the chart,\n * {@link https://github.com/dc-js/dc.js/wiki/FAQ#why-does-everything-break-after-a-call-to-xaxis-or-yaxis\n * so attempting to call chart functions after calling `.xAxis()` will fail}.\n * @method xAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3.svg.axis}\n * @example\n * // customize x axis tick format\n * chart.xAxis().tickFormat(function(v) {return v + '%';});\n * // customize x axis tick values\n * chart.xAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [xAxis=d3.svg.axis().orient('bottom')]\n * @returns {d3.svg.axis|dc.coordinateGridMixin}\n */\n _chart.xAxis = function (xAxis) {\n if (!arguments.length) {\n return _xAxis;\n }\n _xAxis = xAxis;\n return _chart;\n };\n\n /**\n * Turn on/off elastic x axis behavior. If x axis elasticity is turned on, then the grid chart will\n * attempt to recalculate the x axis range whenever a redraw event is triggered.\n * @method elasticX\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [elasticX=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.elasticX = function (elasticX) {\n if (!arguments.length) {\n return _xElasticity;\n }\n _xElasticity = elasticX;\n return _chart;\n };\n\n /**\n * Set or get x axis padding for the elastic x axis. The padding will be added to both end of the x\n * axis if elasticX is turned on; otherwise it is ignored.\n *\n * Padding can be an integer or percentage in string (e.g. '10%'). Padding can be applied to\n * number or date x axes. When padding a date axis, an integer represents number of units being padded\n * and a percentage string will be treated the same as an integer. The unit will be determined by the\n * xAxisPaddingUnit variable.\n * @method xAxisPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number|String} [padding=0]\n * @returns {Number|String|dc.coordinateGridMixin}\n */\n _chart.xAxisPadding = function (padding) {\n if (!arguments.length) {\n return _xAxisPadding;\n }\n _xAxisPadding = padding;\n return _chart;\n };\n\n /**\n * Set or get x axis padding unit for the elastic x axis. The padding unit will determine which unit to\n * use when applying xAxis padding if elasticX is turned on and if x-axis uses a time dimension;\n * otherwise it is ignored.\n *\n * Padding unit is a string that will be used when the padding is calculated. Available parameters are\n * the available d3 time intervals; see\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Intervals.md#interval d3.time.interval}.\n * @method xAxisPaddingUnit\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {String} [unit='days']\n * @returns {String|dc.coordinateGridMixin}\n */\n _chart.xAxisPaddingUnit = function (unit) {\n if (!arguments.length) {\n return _xAxisPaddingUnit;\n }\n _xAxisPaddingUnit = unit;\n return _chart;\n };\n\n /**\n * Returns the number of units displayed on the x axis using the unit measure configured by\n * {@link dc.coordinateGridMixin#xUnits xUnits}.\n * @method xUnitCount\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {Number}\n */\n _chart.xUnitCount = function () {\n if (_unitCount === undefined) {\n var units = _chart.xUnits()(_chart.x().domain()[0], _chart.x().domain()[1], _chart.x().domain());\n\n if (units instanceof Array) {\n _unitCount = units.length;\n } else {\n _unitCount = units;\n }\n }\n\n return _unitCount;\n };\n\n /**\n * Gets or sets whether the chart should be drawn with a right axis instead of a left axis. When\n * used with a chart in a composite chart, allows both left and right Y axes to be shown on a\n * chart.\n * @method useRightYAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [useRightYAxis=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.useRightYAxis = function (useRightYAxis) {\n if (!arguments.length) {\n return _useRightYAxis;\n }\n _useRightYAxis = useRightYAxis;\n return _chart;\n };\n\n /**\n * Returns true if the chart is using ordinal xUnits ({@link dc.units.ordinal dc.units.ordinal}, or false\n * otherwise. Most charts behave differently with ordinal data and use the result of this method to\n * trigger the appropriate logic.\n * @method isOrdinal\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {Boolean}\n */\n _chart.isOrdinal = function () {\n return _chart.xUnits() === dc.units.ordinal;\n };\n\n _chart._useOuterPadding = function () {\n return true;\n };\n\n _chart._ordinalXDomain = function () {\n var groups = _chart._computeOrderedGroups(_chart.data());\n return groups.map(_chart.keyAccessor());\n };\n\n function compareDomains (d1, d2) {\n return !d1 || !d2 || d1.length !== d2.length ||\n d1.some(function (elem, i) { return (elem && d2[i]) ? elem.toString() !== d2[i].toString() : elem === d2[i]; });\n }\n\n function prepareXAxis (g, render) {\n if (!_chart.isOrdinal()) {\n if (_chart.elasticX()) {\n _x.domain([_chart.xAxisMin(), _chart.xAxisMax()]);\n }\n } else { // _chart.isOrdinal()\n if (_chart.elasticX() || _x.domain().length === 0) {\n _x.domain(_chart._ordinalXDomain());\n }\n }\n\n // has the domain changed?\n var xdom = _x.domain();\n if (render || compareDomains(_lastXDomain, xdom)) {\n _chart.rescale();\n }\n _lastXDomain = xdom;\n\n // please can't we always use rangeBands for bar charts?\n if (_chart.isOrdinal()) {\n _x.rangeBands([0, _chart.xAxisLength()], _rangeBandPadding,\n _chart._useOuterPadding() ? _outerRangeBandPadding : 0);\n } else {\n _x.range([0, _chart.xAxisLength()]);\n }\n\n _xAxis = _xAxis.scale(_chart.x());\n\n renderVerticalGridLines(g);\n }\n\n _chart.renderXAxis = function (g) {\n var axisXG = g.select('g.x');\n\n if (axisXG.empty()) {\n axisXG = g.append('g')\n .attr('class', 'axis x')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart._xAxisY() + ')');\n }\n\n var axisXLab = g.select('text.' + X_AXIS_LABEL_CLASS);\n if (axisXLab.empty() && _chart.xAxisLabel()) {\n axisXLab = g.append('text')\n .attr('class', X_AXIS_LABEL_CLASS)\n .attr('transform', 'translate(' + (_chart.margins().left + _chart.xAxisLength() / 2) + ',' +\n (_chart.height() - _xAxisLabelPadding) + ')')\n .attr('text-anchor', 'middle');\n }\n if (_chart.xAxisLabel() && axisXLab.text() !== _chart.xAxisLabel()) {\n axisXLab.text(_chart.xAxisLabel());\n }\n\n dc.transition(axisXG, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart._xAxisY() + ')')\n .call(_xAxis);\n dc.transition(axisXLab, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + (_chart.margins().left + _chart.xAxisLength() / 2) + ',' +\n (_chart.height() - _xAxisLabelPadding) + ')');\n };\n\n function renderVerticalGridLines (g) {\n var gridLineG = g.select('g.' + VERTICAL_CLASS);\n\n if (_renderVerticalGridLine) {\n if (gridLineG.empty()) {\n gridLineG = g.insert('g', ':first-child')\n .attr('class', GRID_LINE_CLASS + ' ' + VERTICAL_CLASS)\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n }\n\n var ticks = _xAxis.tickValues() ? _xAxis.tickValues() :\n (typeof _x.ticks === 'function' ? _x.ticks(_xAxis.ticks()[0]) : _x.domain());\n\n var lines = gridLineG.selectAll('line')\n .data(ticks);\n\n // enter\n var linesGEnter = lines.enter()\n .append('line')\n .attr('x1', function (d) {\n return _x(d);\n })\n .attr('y1', _chart._xAxisY() - _chart.margins().top)\n .attr('x2', function (d) {\n return _x(d);\n })\n .attr('y2', 0)\n .attr('opacity', 0);\n dc.transition(linesGEnter, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', 1);\n\n // update\n dc.transition(lines, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x1', function (d) {\n return _x(d);\n })\n .attr('y1', _chart._xAxisY() - _chart.margins().top)\n .attr('x2', function (d) {\n return _x(d);\n })\n .attr('y2', 0);\n\n // exit\n lines.exit().remove();\n } else {\n gridLineG.selectAll('line').remove();\n }\n }\n\n _chart._xAxisY = function () {\n return (_chart.height() - _chart.margins().bottom);\n };\n\n _chart.xAxisLength = function () {\n return _chart.effectiveWidth();\n };\n\n /**\n * Set or get the x axis label. If setting the label, you may optionally include additional padding to\n * the margin to make room for the label. By default the padded is set to 12 to accomodate the text height.\n * @method xAxisLabel\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {String} [labelText]\n * @param {Number} [padding=12]\n * @returns {String}\n */\n _chart.xAxisLabel = function (labelText, padding) {\n if (!arguments.length) {\n return _xAxisLabel;\n }\n _xAxisLabel = labelText;\n _chart.margins().bottom -= _xAxisLabelPadding;\n _xAxisLabelPadding = (padding === undefined) ? DEFAULT_AXIS_LABEL_PADDING : padding;\n _chart.margins().bottom += _xAxisLabelPadding;\n return _chart;\n };\n\n _chart._prepareYAxis = function (g) {\n if (_y === undefined || _chart.elasticY()) {\n if (_y === undefined) {\n _y = d3.scale.linear();\n }\n var min = _chart.yAxisMin() || 0,\n max = _chart.yAxisMax() || 0;\n _y.domain([min, max]).rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _y.range([_chart.yAxisHeight(), 0]);\n _yAxis = _yAxis.scale(_y);\n\n if (_useRightYAxis) {\n _yAxis.orient('right');\n }\n\n _chart._renderHorizontalGridLinesForAxis(g, _y, _yAxis);\n };\n\n _chart.renderYAxisLabel = function (axisClass, text, rotation, labelXPosition) {\n labelXPosition = labelXPosition || _yAxisLabelPadding;\n\n var axisYLab = _chart.g().select('text.' + Y_AXIS_LABEL_CLASS + '.' + axisClass + '-label');\n var labelYPosition = (_chart.margins().top + _chart.yAxisHeight() / 2);\n if (axisYLab.empty() && text) {\n axisYLab = _chart.g().append('text')\n .attr('transform', 'translate(' + labelXPosition + ',' + labelYPosition + '),rotate(' + rotation + ')')\n .attr('class', Y_AXIS_LABEL_CLASS + ' ' + axisClass + '-label')\n .attr('text-anchor', 'middle')\n .text(text);\n }\n if (text && axisYLab.text() !== text) {\n axisYLab.text(text);\n }\n dc.transition(axisYLab, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + labelXPosition + ',' + labelYPosition + '),rotate(' + rotation + ')');\n };\n\n _chart.renderYAxisAt = function (axisClass, axis, position) {\n var axisYG = _chart.g().select('g.' + axisClass);\n if (axisYG.empty()) {\n axisYG = _chart.g().append('g')\n .attr('class', 'axis ' + axisClass)\n .attr('transform', 'translate(' + position + ',' + _chart.margins().top + ')');\n }\n\n dc.transition(axisYG, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + position + ',' + _chart.margins().top + ')')\n .call(axis);\n };\n\n _chart.renderYAxis = function () {\n var axisPosition = _useRightYAxis ? (_chart.width() - _chart.margins().right) : _chart._yAxisX();\n _chart.renderYAxisAt('y', _yAxis, axisPosition);\n var labelPosition = _useRightYAxis ? (_chart.width() - _yAxisLabelPadding) : _yAxisLabelPadding;\n var rotation = _useRightYAxis ? 90 : -90;\n _chart.renderYAxisLabel('y', _chart.yAxisLabel(), rotation, labelPosition);\n };\n\n _chart._renderHorizontalGridLinesForAxis = function (g, scale, axis) {\n var gridLineG = g.select('g.' + HORIZONTAL_CLASS);\n\n if (_renderHorizontalGridLine) {\n var ticks = axis.tickValues() ? axis.tickValues() : scale.ticks(axis.ticks()[0]);\n\n if (gridLineG.empty()) {\n gridLineG = g.insert('g', ':first-child')\n .attr('class', GRID_LINE_CLASS + ' ' + HORIZONTAL_CLASS)\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n }\n\n var lines = gridLineG.selectAll('line')\n .data(ticks);\n\n // enter\n var linesGEnter = lines.enter()\n .append('line')\n .attr('x1', 1)\n .attr('y1', function (d) {\n return scale(d);\n })\n .attr('x2', _chart.xAxisLength())\n .attr('y2', function (d) {\n return scale(d);\n })\n .attr('opacity', 0);\n dc.transition(linesGEnter, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', 1);\n\n // update\n dc.transition(lines, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x1', 1)\n .attr('y1', function (d) {\n return scale(d);\n })\n .attr('x2', _chart.xAxisLength())\n .attr('y2', function (d) {\n return scale(d);\n });\n\n // exit\n lines.exit().remove();\n } else {\n gridLineG.selectAll('line').remove();\n }\n };\n\n _chart._yAxisX = function () {\n return _chart.useRightYAxis() ? _chart.width() - _chart.margins().right : _chart.margins().left;\n };\n\n /**\n * Set or get the y axis label. If setting the label, you may optionally include additional padding\n * to the margin to make room for the label. By default the padding is set to 12 to accommodate the\n * text height.\n * @method yAxisLabel\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {String} [labelText]\n * @param {Number} [padding=12]\n * @returns {String|dc.coordinateGridMixin}\n */\n _chart.yAxisLabel = function (labelText, padding) {\n if (!arguments.length) {\n return _yAxisLabel;\n }\n _yAxisLabel = labelText;\n _chart.margins().left -= _yAxisLabelPadding;\n _yAxisLabelPadding = (padding === undefined) ? DEFAULT_AXIS_LABEL_PADDING : padding;\n _chart.margins().left += _yAxisLabelPadding;\n return _chart;\n };\n\n /**\n * Get or set the y scale. The y scale is typically automatically determined by the chart implementation.\n * @method y\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @param {d3.scale} [yScale]\n * @returns {d3.scale|dc.coordinateGridMixin}\n */\n _chart.y = function (yScale) {\n if (!arguments.length) {\n return _y;\n }\n _y = yScale;\n _chart.rescale();\n return _chart;\n };\n\n /**\n * Set or get the y axis used by the coordinate grid chart instance. This function is most useful\n * when y axis customization is required. The y axis in dc.js is simply an instance of a [d3 axis\n * object](https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis); therefore it supports any\n * valid d3 axis manipulation.\n *\n * **Caution**: The y axis is usually generated internally by dc; resetting it may cause\n * unexpected results. Note also that when used as a getter, this function is not chainable: it\n * returns the axis, not the chart,\n * {@link https://github.com/dc-js/dc.js/wiki/FAQ#why-does-everything-break-after-a-call-to-xaxis-or-yaxis\n * so attempting to call chart functions after calling `.yAxis()` will fail}.\n * @method yAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3.svg.axis}\n * @example\n * // customize y axis tick format\n * chart.yAxis().tickFormat(function(v) {return v + '%';});\n * // customize y axis tick values\n * chart.yAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [yAxis=d3.svg.axis().orient('left')]\n * @returns {d3.svg.axis|dc.coordinateGridMixin}\n */\n _chart.yAxis = function (yAxis) {\n if (!arguments.length) {\n return _yAxis;\n }\n _yAxis = yAxis;\n return _chart;\n };\n\n /**\n * Turn on/off elastic y axis behavior. If y axis elasticity is turned on, then the grid chart will\n * attempt to recalculate the y axis range whenever a redraw event is triggered.\n * @method elasticY\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [elasticY=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.elasticY = function (elasticY) {\n if (!arguments.length) {\n return _yElasticity;\n }\n _yElasticity = elasticY;\n return _chart;\n };\n\n /**\n * Turn on/off horizontal grid lines.\n * @method renderHorizontalGridLines\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [renderHorizontalGridLines=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.renderHorizontalGridLines = function (renderHorizontalGridLines) {\n if (!arguments.length) {\n return _renderHorizontalGridLine;\n }\n _renderHorizontalGridLine = renderHorizontalGridLines;\n return _chart;\n };\n\n /**\n * Turn on/off vertical grid lines.\n * @method renderVerticalGridLines\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [renderVerticalGridLines=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.renderVerticalGridLines = function (renderVerticalGridLines) {\n if (!arguments.length) {\n return _renderVerticalGridLine;\n }\n _renderVerticalGridLine = renderVerticalGridLines;\n return _chart;\n };\n\n /**\n * Calculates the minimum x value to display in the chart. Includes xAxisPadding if set.\n * @method xAxisMin\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {*}\n */\n _chart.xAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.keyAccessor()(e);\n });\n return dc.utils.subtract(min, _xAxisPadding, _xAxisPaddingUnit);\n };\n\n /**\n * Calculates the maximum x value to display in the chart. Includes xAxisPadding if set.\n * @method xAxisMax\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {*}\n */\n _chart.xAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.keyAccessor()(e);\n });\n return dc.utils.add(max, _xAxisPadding, _xAxisPaddingUnit);\n };\n\n /**\n * Calculates the minimum y value to display in the chart. Includes yAxisPadding if set.\n * @method yAxisMin\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {*}\n */\n _chart.yAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.valueAccessor()(e);\n });\n return dc.utils.subtract(min, _yAxisPadding);\n };\n\n /**\n * Calculates the maximum y value to display in the chart. Includes yAxisPadding if set.\n * @method yAxisMax\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {*}\n */\n _chart.yAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.valueAccessor()(e);\n });\n return dc.utils.add(max, _yAxisPadding);\n };\n\n /**\n * Set or get y axis padding for the elastic y axis. The padding will be added to the top and\n * bottom of the y axis if elasticY is turned on; otherwise it is ignored.\n *\n * Padding can be an integer or percentage in string (e.g. '10%'). Padding can be applied to\n * number or date axes. When padding a date axis, an integer represents number of days being padded\n * and a percentage string will be treated the same as an integer.\n * @method yAxisPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number|String} [padding=0]\n * @returns {Number|dc.coordinateGridMixin}\n */\n _chart.yAxisPadding = function (padding) {\n if (!arguments.length) {\n return _yAxisPadding;\n }\n _yAxisPadding = padding;\n return _chart;\n };\n\n _chart.yAxisHeight = function () {\n return _chart.effectiveHeight();\n };\n\n /**\n * Set or get the rounding function used to quantize the selection when brushing is enabled.\n * @method round\n * @memberof dc.coordinateGridMixin\n * @instance\n * @example\n * // set x unit round to by month, this will make sure range selection brush will\n * // select whole months\n * chart.round(d3.time.month.round);\n * @param {Function} [round]\n * @returns {Function|dc.coordinateGridMixin}\n */\n _chart.round = function (round) {\n if (!arguments.length) {\n return _round;\n }\n _round = round;\n return _chart;\n };\n\n _chart._rangeBandPadding = function (_) {\n if (!arguments.length) {\n return _rangeBandPadding;\n }\n _rangeBandPadding = _;\n return _chart;\n };\n\n _chart._outerRangeBandPadding = function (_) {\n if (!arguments.length) {\n return _outerRangeBandPadding;\n }\n _outerRangeBandPadding = _;\n return _chart;\n };\n\n dc.override(_chart, 'filter', function (_) {\n if (!arguments.length) {\n return _chart._filter();\n }\n\n _chart._filter(_);\n\n if (_) {\n _chart.brush().extent(_);\n } else {\n _chart.brush().clear();\n }\n\n return _chart;\n });\n\n _chart.brush = function (_) {\n if (!arguments.length) {\n return _brush;\n }\n _brush = _;\n return _chart;\n };\n\n function brushHeight () {\n return _chart._xAxisY() - _chart.margins().top;\n }\n\n _chart.renderBrush = function (g) {\n if (_brushOn) {\n _brush.on('brush', _chart._brushing);\n _brush.on('brushstart', _chart._disableMouseZoom);\n _brush.on('brushend', configureMouseZoom);\n\n var gBrush = g.append('g')\n .attr('class', 'brush')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')')\n .call(_brush.x(_chart.x()));\n _chart.setBrushY(gBrush, false);\n _chart.setHandlePaths(gBrush);\n\n if (_chart.hasFilter()) {\n _chart.redrawBrush(g, false);\n }\n }\n };\n\n _chart.setHandlePaths = function (gBrush) {\n gBrush.selectAll('.resize').append('path').attr('d', _chart.resizeHandlePath);\n };\n\n _chart.setBrushY = function (gBrush) {\n gBrush.selectAll('rect')\n .attr('height', brushHeight());\n gBrush.selectAll('.resize path')\n .attr('d', _chart.resizeHandlePath);\n };\n\n _chart.extendBrush = function () {\n var extent = _brush.extent();\n if (_chart.round()) {\n extent[0] = extent.map(_chart.round())[0];\n extent[1] = extent.map(_chart.round())[1];\n\n _g.select('.brush')\n .call(_brush.extent(extent));\n }\n return extent;\n };\n\n _chart.brushIsEmpty = function (extent) {\n return _brush.empty() || !extent || extent[1] <= extent[0];\n };\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n\n _chart.redrawBrush(_g, false);\n\n if (_chart.brushIsEmpty(extent)) {\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n } else {\n var rangedFilter = dc.filters.RangedFilter(extent[0], extent[1]);\n\n dc.events.trigger(function () {\n _chart.replaceFilter(rangedFilter);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n }\n };\n\n _chart.redrawBrush = function (g, doTransition) {\n if (_brushOn) {\n if (_chart.filter() && _chart.brush().empty()) {\n _chart.brush().extent(_chart.filter());\n }\n\n var gBrush = dc.optionalTransition(doTransition, _chart.transitionDuration(), _chart.transitionDelay())(g.select('g.brush'));\n _chart.setBrushY(gBrush);\n gBrush.call(_chart.brush()\n .x(_chart.x())\n .extent(_chart.brush().extent()));\n }\n\n _chart.fadeDeselectedArea();\n };\n\n _chart.fadeDeselectedArea = function () {\n // do nothing, sub-chart should override this function\n };\n\n // borrowed from Crossfilter example\n _chart.resizeHandlePath = function (d) {\n var e = +(d === 'e'), x = e ? 1 : -1, y = brushHeight() / 3;\n return 'M' + (0.5 * x) + ',' + y +\n 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6) +\n 'V' + (2 * y - 6) +\n 'A6,6 0 0 ' + e + ' ' + (0.5 * x) + ',' + (2 * y) +\n 'Z' +\n 'M' + (2.5 * x) + ',' + (y + 8) +\n 'V' + (2 * y - 8) +\n 'M' + (4.5 * x) + ',' + (y + 8) +\n 'V' + (2 * y - 8);\n };\n\n function getClipPathId () {\n return _chart.anchorName().replace(/[ .#=\\[\\]\"]/g, '-') + '-clip';\n }\n\n /**\n * Get or set the padding in pixels for the clip path. Once set padding will be applied evenly to\n * the top, left, right, and bottom when the clip path is generated. If set to zero, the clip area\n * will be exactly the chart body area minus the margins.\n * @method clipPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number} [padding=5]\n * @returns {Number|dc.coordinateGridMixin}\n */\n _chart.clipPadding = function (padding) {\n if (!arguments.length) {\n return _clipPadding;\n }\n _clipPadding = padding;\n return _chart;\n };\n\n function generateClipPath () {\n var defs = dc.utils.appendOrSelect(_parent, 'defs');\n // cannot select <clippath> elements; bug in WebKit, must select by id\n // https://groups.google.com/forum/#!topic/d3-js/6EpAzQ2gU9I\n var id = getClipPathId();\n var chartBodyClip = dc.utils.appendOrSelect(defs, '#' + id, 'clipPath').attr('id', id);\n\n var padding = _clipPadding * 2;\n\n dc.utils.appendOrSelect(chartBodyClip, 'rect')\n .attr('width', _chart.xAxisLength() + padding)\n .attr('height', _chart.yAxisHeight() + padding)\n .attr('transform', 'translate(-' + _clipPadding + ', -' + _clipPadding + ')');\n }\n\n _chart._preprocessData = function () {};\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _chart._preprocessData();\n\n _chart._generateG();\n generateClipPath();\n\n drawChart(true);\n\n configureMouseZoom();\n\n return _chart;\n };\n\n _chart._doRedraw = function () {\n _chart._preprocessData();\n\n drawChart(false);\n generateClipPath();\n\n return _chart;\n };\n\n function drawChart (render) {\n if (_chart.isOrdinal()) {\n _brushOn = false;\n }\n\n prepareXAxis(_chart.g(), render);\n _chart._prepareYAxis(_chart.g());\n\n _chart.plotData();\n\n if (_chart.elasticX() || _resizing || render) {\n _chart.renderXAxis(_chart.g());\n }\n\n if (_chart.elasticY() || _resizing || render) {\n _chart.renderYAxis(_chart.g());\n }\n\n if (render) {\n _chart.renderBrush(_chart.g(), false);\n } else {\n _chart.redrawBrush(_chart.g(), _resizing);\n }\n _chart.fadeDeselectedArea();\n _resizing = false;\n }\n\n function configureMouseZoom () {\n if (_mouseZoomable) {\n _chart._enableMouseZoom();\n } else if (_hasBeenMouseZoomable) {\n _chart._disableMouseZoom();\n }\n }\n\n _chart._enableMouseZoom = function () {\n _hasBeenMouseZoomable = true;\n _zoom.x(_chart.x())\n .scaleExtent(_zoomScale)\n .size([_chart.width(), _chart.height()])\n .duration(_chart.transitionDuration());\n _chart.root().call(_zoom);\n };\n\n _chart._disableMouseZoom = function () {\n _chart.root().call(_nullZoom);\n };\n\n function zoomHandler () {\n _refocused = true;\n if (_zoomOutRestrict) {\n var constraint = _xOriginalDomain;\n if (_rangeChart) {\n constraint = intersectExtents(constraint, _rangeChart.x().domain());\n }\n var constrained = constrainExtent(_chart.x().domain(), constraint);\n if (constrained) {\n _chart.x().domain(constrained);\n }\n }\n\n var domain = _chart.x().domain();\n var domFilter = dc.filters.RangedFilter(domain[0], domain[1]);\n\n _chart.replaceFilter(domFilter);\n _chart.rescale();\n _chart.redraw();\n\n if (_rangeChart && !rangesEqual(_chart.filter(), _rangeChart.filter())) {\n dc.events.trigger(function () {\n _rangeChart.replaceFilter(domFilter);\n _rangeChart.redraw();\n });\n }\n\n _chart._invokeZoomedListener();\n\n dc.events.trigger(function () {\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n\n _refocused = !rangesEqual(domain, _xOriginalDomain);\n }\n\n function intersectExtents (ext1, ext2) {\n if (ext1[0] > ext2[1] || ext1[1] < ext2[0]) {\n console.warn('could not intersect extents');\n }\n return [Math.max(ext1[0], ext2[0]), Math.min(ext1[1], ext2[1])];\n }\n\n function constrainExtent (extent, constraint) {\n var size = extent[1] - extent[0];\n if (extent[0] < constraint[0]) {\n return [constraint[0], Math.min(constraint[1], dc.utils.add(constraint[0], size, 'millis'))];\n } else if (extent[1] > constraint[1]) {\n return [Math.max(constraint[0], dc.utils.subtract(constraint[1], size, 'millis')), constraint[1]];\n } else {\n return null;\n }\n }\n\n /**\n * Zoom this chart to focus on the given range. The given range should be an array containing only\n * 2 elements (`[start, end]`) defining a range in the x domain. If the range is not given or set\n * to null, then the zoom will be reset. _For focus to work elasticX has to be turned off;\n * otherwise focus will be ignored.\n * @method focus\n * @memberof dc.coordinateGridMixin\n * @instance\n * @example\n * chart.on('renderlet', function(chart) {\n * // smooth the rendering through event throttling\n * dc.events.trigger(function(){\n * // focus some other chart to the range selected by user on this chart\n * someOtherChart.focus(chart.filter());\n * });\n * })\n * @param {Array<Number>} [range]\n */\n _chart.focus = function (range) {\n if (hasRangeSelected(range)) {\n _chart.x().domain(range);\n } else {\n _chart.x().domain(_xOriginalDomain);\n }\n\n _zoom.x(_chart.x());\n zoomHandler();\n };\n\n _chart.refocused = function () {\n return _refocused;\n };\n\n _chart.focusChart = function (c) {\n if (!arguments.length) {\n return _focusChart;\n }\n _focusChart = c;\n _chart.on('filtered', function (chart) {\n if (!chart.filter()) {\n dc.events.trigger(function () {\n _focusChart.x().domain(_focusChart.xOriginalDomain());\n });\n } else if (!rangesEqual(chart.filter(), _focusChart.filter())) {\n dc.events.trigger(function () {\n _focusChart.focus(chart.filter());\n });\n }\n });\n return _chart;\n };\n\n function rangesEqual (range1, range2) {\n if (!range1 && !range2) {\n return true;\n } else if (!range1 || !range2) {\n return false;\n } else if (range1.length === 0 && range2.length === 0) {\n return true;\n } else if (range1[0].valueOf() === range2[0].valueOf() &&\n range1[1].valueOf() === range2[1].valueOf()) {\n return true;\n }\n return false;\n }\n\n /**\n * Turn on/off the brush-based range filter. When brushing is on then user can drag the mouse\n * across a chart with a quantitative scale to perform range filtering based on the extent of the\n * brush, or click on the bars of an ordinal bar chart or slices of a pie chart to filter and\n * un-filter them. However turning on the brush filter will disable other interactive elements on\n * the chart such as highlighting, tool tips, and reference lines. Zooming will still be possible\n * if enabled, but only via scrolling (panning will be disabled.)\n * @method brushOn\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [brushOn=true]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.brushOn = function (brushOn) {\n if (!arguments.length) {\n return _brushOn;\n }\n _brushOn = brushOn;\n return _chart;\n };\n\n function hasRangeSelected (range) {\n return range instanceof Array && range.length > 1;\n }\n\n return _chart;\n};\n","/**\n * Stack Mixin is an mixin that provides cross-chart support of stackability using d3.layout.stack.\n * @name stackMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.stackMixin}\n */\ndc.stackMixin = function (_chart) {\n\n function prepareValues (layer, layerIdx) {\n var valAccessor = layer.accessor || _chart.valueAccessor();\n layer.name = String(layer.name || layerIdx);\n layer.values = layer.group.all().map(function (d, i) {\n return {\n x: _chart.keyAccessor()(d, i),\n y: layer.hidden ? null : valAccessor(d, i),\n data: d,\n layer: layer.name,\n hidden: layer.hidden\n };\n });\n\n layer.values = layer.values.filter(domainFilter());\n return layer.values;\n }\n\n var _stackLayout = d3.layout.stack()\n .values(prepareValues);\n\n var _stack = [];\n var _titles = {};\n\n var _hidableStacks = false;\n var _evadeDomainFilter = false;\n\n function domainFilter () {\n if (!_chart.x() || _evadeDomainFilter) {\n return d3.functor(true);\n }\n var xDomain = _chart.x().domain();\n if (_chart.isOrdinal()) {\n // TODO #416\n //var domainSet = d3.set(xDomain);\n return function () {\n return true; //domainSet.has(p.x);\n };\n }\n if (_chart.elasticX()) {\n return function () { return true; };\n }\n return function (p) {\n //return true;\n return p.x >= xDomain[0] && p.x <= xDomain[xDomain.length - 1];\n };\n }\n\n /**\n * Stack a new crossfilter group onto this chart with an optional custom value accessor. All stacks\n * in the same chart will share the same key accessor and therefore the same set of keys.\n *\n * For example, in a stacked bar chart, the bars of each stack will be positioned using the same set\n * of keys on the x axis, while stacked vertically. If name is specified then it will be used to\n * generate the legend label.\n * @method stack\n * @memberof dc.stackMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group-map-reduce crossfilter.group}\n * @example\n * // stack group using default accessor\n * chart.stack(valueSumGroup)\n * // stack group using custom accessor\n * .stack(avgByDayGroup, function(d){return d.value.avgByDay;});\n * @param {crossfilter.group} group\n * @param {String} [name]\n * @param {Function} [accessor]\n * @returns {Array<{group: crossfilter.group, name: String, accessor: Function}>|dc.stackMixin}\n */\n _chart.stack = function (group, name, accessor) {\n if (!arguments.length) {\n return _stack;\n }\n\n if (arguments.length <= 2) {\n accessor = name;\n }\n\n var layer = {group: group};\n if (typeof name === 'string') {\n layer.name = name;\n }\n if (typeof accessor === 'function') {\n layer.accessor = accessor;\n }\n _stack.push(layer);\n\n return _chart;\n };\n\n dc.override(_chart, 'group', function (g, n, f) {\n if (!arguments.length) {\n return _chart._group();\n }\n _stack = [];\n _titles = {};\n _chart.stack(g, n);\n if (f) {\n _chart.valueAccessor(f);\n }\n return _chart._group(g, n);\n });\n\n /**\n * Allow named stacks to be hidden or shown by clicking on legend items.\n * This does not affect the behavior of hideStack or showStack.\n * @method hidableStacks\n * @memberof dc.stackMixin\n * @instance\n * @param {Boolean} [hidableStacks=false]\n * @returns {Boolean|dc.stackMixin}\n */\n _chart.hidableStacks = function (hidableStacks) {\n if (!arguments.length) {\n return _hidableStacks;\n }\n _hidableStacks = hidableStacks;\n return _chart;\n };\n\n function findLayerByName (n) {\n var i = _stack.map(dc.pluck('name')).indexOf(n);\n return _stack[i];\n }\n\n /**\n * Hide all stacks on the chart with the given name.\n * The chart must be re-rendered for this change to appear.\n * @method hideStack\n * @memberof dc.stackMixin\n * @instance\n * @param {String} stackName\n * @returns {dc.stackMixin}\n */\n _chart.hideStack = function (stackName) {\n var layer = findLayerByName(stackName);\n if (layer) {\n layer.hidden = true;\n }\n return _chart;\n };\n\n /**\n * Show all stacks on the chart with the given name.\n * The chart must be re-rendered for this change to appear.\n * @method showStack\n * @memberof dc.stackMixin\n * @instance\n * @param {String} stackName\n * @returns {dc.stackMixin}\n */\n _chart.showStack = function (stackName) {\n var layer = findLayerByName(stackName);\n if (layer) {\n layer.hidden = false;\n }\n return _chart;\n };\n\n _chart.getValueAccessorByIndex = function (index) {\n return _stack[index].accessor || _chart.valueAccessor();\n };\n\n _chart.yAxisMin = function () {\n var min = d3.min(flattenStack(), function (p) {\n return (p.y < 0) ? (p.y + p.y0) : p.y0;\n });\n\n return dc.utils.subtract(min, _chart.yAxisPadding());\n\n };\n\n _chart.yAxisMax = function () {\n var max = d3.max(flattenStack(), function (p) {\n return (p.y > 0) ? (p.y + p.y0) : p.y0;\n });\n\n return dc.utils.add(max, _chart.yAxisPadding());\n };\n\n function flattenStack () {\n var valueses = _chart.data().map(function (layer) { return layer.values; });\n return Array.prototype.concat.apply([], valueses);\n }\n\n _chart.xAxisMin = function () {\n var min = d3.min(flattenStack(), dc.pluck('x'));\n return dc.utils.subtract(min, _chart.xAxisPadding(), _chart.xAxisPaddingUnit());\n };\n\n _chart.xAxisMax = function () {\n var max = d3.max(flattenStack(), dc.pluck('x'));\n return dc.utils.add(max, _chart.xAxisPadding(), _chart.xAxisPaddingUnit());\n };\n\n /**\n * Set or get the title function. Chart class will use this function to render svg title (usually interpreted by\n * browser as tooltips) for each child element in the chart, i.e. a slice in a pie chart or a bubble in a bubble chart.\n * Almost every chart supports title function however in grid coordinate chart you need to turn off brush in order to\n * use title otherwise the brush layer will block tooltip trigger.\n *\n * If the first argument is a stack name, the title function will get or set the title for that stack. If stackName\n * is not provided, the first stack is implied.\n * @method title\n * @memberof dc.stackMixin\n * @instance\n * @example\n * // set a title function on 'first stack'\n * chart.title('first stack', function(d) { return d.key + ': ' + d.value; });\n * // get a title function from 'second stack'\n * var secondTitleFunction = chart.title('second stack');\n * @param {String} [stackName]\n * @param {Function} [titleAccessor]\n * @returns {String|dc.stackMixin}\n */\n dc.override(_chart, 'title', function (stackName, titleAccessor) {\n if (!stackName) {\n return _chart._title();\n }\n\n if (typeof stackName === 'function') {\n return _chart._title(stackName);\n }\n if (stackName === _chart._groupName && typeof titleAccessor === 'function') {\n return _chart._title(titleAccessor);\n }\n\n if (typeof titleAccessor !== 'function') {\n return _titles[stackName] || _chart._title();\n }\n\n _titles[stackName] = titleAccessor;\n\n return _chart;\n });\n\n /**\n * Gets or sets the stack layout algorithm, which computes a baseline for each stack and\n * propagates it to the next.\n * @method stackLayout\n * @memberof dc.stackMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Stack-Layout.md d3.layout.stack}\n * @param {Function} [stack=d3.layout.stack]\n * @returns {Function|dc.stackMixin}\n */\n _chart.stackLayout = function (stack) {\n if (!arguments.length) {\n return _stackLayout;\n }\n _stackLayout = stack;\n if (_stackLayout.values() === d3.layout.stack().values()) {\n _stackLayout.values(prepareValues);\n }\n return _chart;\n };\n\n /**\n * Since dc.js 2.0, there has been {@link https://github.com/dc-js/dc.js/issues/949 an issue}\n * where points are filtered to the current domain. While this is a useful optimization, it is\n * incorrectly implemented: the next point outside the domain is required in order to draw lines\n * that are clipped to the bounds, as well as bars that are partly clipped.\n *\n * A fix will be included in dc.js 2.1.x, but a workaround is needed for dc.js 2.0 and until\n * that fix is published, so set this flag to skip any filtering of points.\n *\n * Once the bug is fixed, this flag will have no effect, and it will be deprecated.\n * @method evadeDomainFilter\n * @memberof dc.stackMixin\n * @instance\n * @param {Boolean} [evadeDomainFilter=false]\n * @returns {Boolean|dc.stackMixin}\n */\n _chart.evadeDomainFilter = function (evadeDomainFilter) {\n if (!arguments.length) {\n return _evadeDomainFilter;\n }\n _evadeDomainFilter = evadeDomainFilter;\n return _chart;\n };\n\n function visability (l) {\n return !l.hidden;\n }\n\n _chart.data(function () {\n var layers = _stack.filter(visability);\n return layers.length ? _chart.stackLayout()(layers) : [];\n });\n\n _chart._ordinalXDomain = function () {\n var flat = flattenStack().map(dc.pluck('data'));\n var ordered = _chart._computeOrderedGroups(flat);\n return ordered.map(_chart.keyAccessor());\n };\n\n _chart.colorAccessor(function (d) {\n var layer = this.layer || this.name || d.name || d.layer;\n return layer;\n });\n\n _chart.legendables = function () {\n return _stack.map(function (layer, i) {\n return {\n chart: _chart,\n name: layer.name,\n hidden: layer.hidden || false,\n color: _chart.getColor.call(layer, layer.values, i)\n };\n });\n };\n\n _chart.isLegendableHidden = function (d) {\n var layer = findLayerByName(d.name);\n return layer ? layer.hidden : false;\n };\n\n _chart.legendToggle = function (d) {\n if (_hidableStacks) {\n if (_chart.isLegendableHidden(d)) {\n _chart.showStack(d.name);\n } else {\n _chart.hideStack(d.name);\n }\n //_chart.redraw();\n _chart.renderGroup();\n }\n };\n\n return _chart;\n};\n","/**\n * Cap is a mixin that groups small data elements below a _cap_ into an *others* grouping for both the\n * Row and Pie Charts.\n *\n * The top ordered elements in the group up to the cap amount will be kept in the chart, and the rest\n * will be replaced with an *others* element, with value equal to the sum of the replaced values. The\n * keys of the elements below the cap limit are recorded in order to filter by those keys when the\n * others* element is clicked.\n * @name capMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.capMixin}\n */\ndc.capMixin = function (_chart) {\n var _cap = Infinity, _takeFront = true;\n var _othersLabel = 'Others';\n\n // emulate old group.top(N) ordering\n _chart.ordering(function (kv) {\n return -kv.value;\n });\n\n var _othersGrouper = function (topItems, restItems) {\n var restItemsSum = d3.sum(restItems, _chart.valueAccessor()),\n restKeys = restItems.map(_chart.keyAccessor());\n if (restItemsSum > 0) {\n return topItems.concat([{\n others: restKeys,\n key: _chart.othersLabel(),\n value: restItemsSum\n }]);\n }\n return topItems;\n };\n\n _chart.cappedKeyAccessor = function (d, i) {\n if (d.others) {\n return d.key;\n }\n return _chart.keyAccessor()(d, i);\n };\n\n _chart.cappedValueAccessor = function (d, i) {\n if (d.others) {\n return d.value;\n }\n return _chart.valueAccessor()(d, i);\n };\n\n // return N \"top\" groups, where N is the cap, sorted by baseMixin.ordering\n // whether top means front or back depends on takeFront\n _chart.data(function (group) {\n if (_cap === Infinity) {\n return _chart._computeOrderedGroups(group.all());\n } else {\n var items = group.all(), rest;\n items = _chart._computeOrderedGroups(items); // sort by baseMixin.ordering\n\n if (_cap) {\n if (_takeFront) {\n rest = items.slice(_cap);\n items = items.slice(0, _cap);\n } else {\n var start = Math.max(0, items.length - _cap);\n rest = items.slice(0, start);\n items = items.slice(start);\n }\n }\n\n if (_othersGrouper) {\n return _othersGrouper(items, rest);\n }\n return items;\n }\n });\n\n /**\n * Get or set the count of elements to that will be included in the cap. If there is an\n * {@link dc.capMixin#othersGrouper othersGrouper}, any further elements will be combined in an\n * extra element with its name determined by {@link dc.capMixin#othersLabel othersLabel}.\n *\n * As of dc.js 2.1 and onward, the capped charts use\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_all group.all()}\n * and {@link dc.baseMixin#ordering baseMixin.ordering()} to determine the order of\n * elements. Then `cap` and {@link dc.capMixin#takeFront takeFront} determine how many elements\n * to keep, from which end of the resulting array.\n *\n * **Migration note:** Up through dc.js 2.0.*, capping used\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_top group.top(N)},\n * which selects the largest items according to\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_order group.order()}.\n * The chart then sorted the items according to {@link dc.baseMixin#ordering baseMixin.ordering()}.\n * So the two values essentially had to agree, but if the `group.order()` was incorrect (it's\n * easy to forget about), the wrong rows or slices would be displayed, in the correct order.\n *\n * If your chart previously relied on `group.order()`, use `chart.ordering()` instead. As of\n * 2.1.5, the ordering defaults to sorting from greatest to least like `group.top(N)` did.\n *\n * If you want to cap by one ordering but sort by another, please\n * [file an issue](https://github.com/dc-js/dc.js/issues/new) - it's still possible but we'll\n * need to work up an example.\n * @method cap\n * @memberof dc.capMixin\n * @instance\n * @param {Number} [count=Infinity]\n * @returns {Number|dc.capMixin}\n */\n _chart.cap = function (count) {\n if (!arguments.length) {\n return _cap;\n }\n _cap = count;\n return _chart;\n };\n\n /**\n * Get or set the direction of capping. If set, the chart takes the first\n * {@link dc.capMixin#cap cap} elements from the sorted array of elements; otherwise\n * it takes the last `cap` elements.\n * @method takeFront\n * @memberof dc.capMixin\n * @instance\n * @param {Boolean} [takeFront=true]\n * @returns {Boolean|dc.capMixin}\n */\n _chart.takeFront = function (takeFront) {\n if (!arguments.length) {\n return _takeFront;\n }\n _takeFront = takeFront;\n return _chart;\n };\n\n /**\n * Get or set the label for *Others* slice when slices cap is specified.\n * @method othersLabel\n * @memberof dc.capMixin\n * @instance\n * @param {String} [label=\"Others\"]\n * @returns {String|dc.capMixin}\n */\n _chart.othersLabel = function (label) {\n if (!arguments.length) {\n return _othersLabel;\n }\n _othersLabel = label;\n return _chart;\n };\n\n /**\n * Get or set the grouper function that will perform the insertion of data for the *Others* slice\n * if the slices cap is specified. If set to a falsy value, no others will be added.\n *\n * The grouper function takes an array of included (\"top\") items, and an array of the rest of\n * the items. By default the grouper function computes the sum of the rest.\n * @method othersGrouper\n * @memberof dc.capMixin\n * @instance\n * @example\n * // Do not show others\n * chart.othersGrouper(null);\n * // Default others grouper\n * chart.othersGrouper(function (topItems, restItems) {\n * var restItemsSum = d3.sum(restItems, _chart.valueAccessor()),\n * restKeys = restItems.map(_chart.keyAccessor());\n * if (restItemsSum > 0) {\n * return topItems.concat([{\n * others: restKeys,\n * key: _chart.othersLabel(),\n * value: restItemsSum\n * }]);\n * }\n * return topItems;\n * });\n * @param {Function} [grouperFunction]\n * @returns {Function|dc.capMixin}\n */\n _chart.othersGrouper = function (grouperFunction) {\n if (!arguments.length) {\n return _othersGrouper;\n }\n _othersGrouper = grouperFunction;\n return _chart;\n };\n\n dc.override(_chart, 'onClick', function (d) {\n if (d.others) {\n _chart.filter([d.others]);\n }\n _chart._onClick(d);\n });\n\n return _chart;\n};\n","/**\n * This Mixin provides reusable functionalities for any chart that needs to visualize data using bubbles.\n * @name bubbleMixin\n * @memberof dc\n * @mixin\n * @mixes dc.colorMixin\n * @param {Object} _chart\n * @returns {dc.bubbleMixin}\n */\ndc.bubbleMixin = function (_chart) {\n var _maxBubbleRelativeSize = 0.3;\n var _minRadiusWithLabel = 10;\n var _sortBubbleSize = false;\n var _elasticRadius = false;\n\n _chart.BUBBLE_NODE_CLASS = 'node';\n _chart.BUBBLE_CLASS = 'bubble';\n _chart.MIN_RADIUS = 10;\n\n _chart = dc.colorMixin(_chart);\n\n _chart.renderLabel(true);\n\n _chart.data(function (group) {\n var data = group.all();\n if (_sortBubbleSize) {\n // sort descending so smaller bubbles are on top\n var radiusAccessor = _chart.radiusValueAccessor();\n data.sort(function (a, b) { return d3.descending(radiusAccessor(a), radiusAccessor(b)); });\n }\n return data;\n });\n\n var _r = d3.scale.linear().domain([0, 100]);\n\n var _rValueAccessor = function (d) {\n return d.r;\n };\n\n /**\n * Get or set the bubble radius scale. By default the bubble chart uses\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md#linear d3.scale.linear().domain([0, 100])}\n * as its radius scale.\n * @method r\n * @memberof dc.bubbleMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @param {d3.scale} [bubbleRadiusScale=d3.scale.linear().domain([0, 100])]\n * @returns {d3.scale|dc.bubbleMixin}\n */\n _chart.r = function (bubbleRadiusScale) {\n if (!arguments.length) {\n return _r;\n }\n _r = bubbleRadiusScale;\n return _chart;\n };\n\n /**\n * Turn on or off the elastic bubble radius feature, or return the value of the flag. If this\n * feature is turned on, then bubble radii will be automatically rescaled to fit the chart better.\n * @method elasticRadius\n * @memberof dc.bubbleChart\n * @instance\n * @param {Boolean} [elasticRadius=false]\n * @returns {Boolean|dc.bubbleChart}\n */\n _chart.elasticRadius = function (elasticRadius) {\n if (!arguments.length) {\n return _elasticRadius;\n }\n _elasticRadius = elasticRadius;\n return _chart;\n };\n\n _chart.calculateRadiusDomain = function () {\n if (_elasticRadius) {\n _chart.r().domain([_chart.rMin(), _chart.rMax()]);\n }\n };\n\n /**\n * Get or set the radius value accessor function. If set, the radius value accessor function will\n * be used to retrieve a data value for each bubble. The data retrieved then will be mapped using\n * the r scale to the actual bubble radius. This allows you to encode a data dimension using bubble\n * size.\n * @method radiusValueAccessor\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Function} [radiusValueAccessor]\n * @returns {Function|dc.bubbleMixin}\n */\n _chart.radiusValueAccessor = function (radiusValueAccessor) {\n if (!arguments.length) {\n return _rValueAccessor;\n }\n _rValueAccessor = radiusValueAccessor;\n return _chart;\n };\n\n _chart.rMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.radiusValueAccessor()(e);\n });\n return min;\n };\n\n _chart.rMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.radiusValueAccessor()(e);\n });\n return max;\n };\n\n _chart.bubbleR = function (d) {\n var value = _chart.radiusValueAccessor()(d);\n var r = _chart.r()(value);\n if (isNaN(r) || value <= 0) {\n r = 0;\n }\n return r;\n };\n\n var labelFunction = function (d) {\n return _chart.label()(d);\n };\n\n var shouldLabel = function (d) {\n return (_chart.bubbleR(d) > _minRadiusWithLabel);\n };\n\n var labelOpacity = function (d) {\n return shouldLabel(d) ? 1 : 0;\n };\n\n var labelPointerEvent = function (d) {\n return shouldLabel(d) ? 'all' : 'none';\n };\n\n _chart._doRenderLabel = function (bubbleGEnter) {\n if (_chart.renderLabel()) {\n var label = bubbleGEnter.select('text');\n\n if (label.empty()) {\n label = bubbleGEnter.append('text')\n .attr('text-anchor', 'middle')\n .attr('dy', '.3em')\n .on('click', _chart.onClick);\n }\n\n label\n .attr('opacity', 0)\n .attr('pointer-events', labelPointerEvent)\n .text(labelFunction);\n dc.transition(label, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', labelOpacity);\n }\n };\n\n _chart.doUpdateLabels = function (bubbleGEnter) {\n if (_chart.renderLabel()) {\n var labels = bubbleGEnter.select('text')\n .attr('pointer-events', labelPointerEvent)\n .text(labelFunction);\n dc.transition(labels, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', labelOpacity);\n }\n };\n\n var titleFunction = function (d) {\n return _chart.title()(d);\n };\n\n _chart._doRenderTitles = function (g) {\n if (_chart.renderTitle()) {\n var title = g.select('title');\n\n if (title.empty()) {\n g.append('title').text(titleFunction);\n }\n }\n };\n\n _chart.doUpdateTitles = function (g) {\n if (_chart.renderTitle()) {\n g.select('title').text(titleFunction);\n }\n };\n\n /**\n * Turn on or off the bubble sorting feature, or return the value of the flag. If enabled,\n * bubbles will be sorted by their radius, with smaller bubbles in front.\n * @method sortBubbleSize\n * @memberof dc.bubbleChart\n * @instance\n * @param {Boolean} [sortBubbleSize=false]\n * @returns {Boolean|dc.bubbleChart}\n */\n _chart.sortBubbleSize = function (sortBubbleSize) {\n if (!arguments.length) {\n return _sortBubbleSize;\n }\n _sortBubbleSize = sortBubbleSize;\n return _chart;\n };\n\n /**\n * Get or set the minimum radius. This will be used to initialize the radius scale's range.\n * @method minRadius\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [radius=10]\n * @returns {Number|dc.bubbleMixin}\n */\n _chart.minRadius = function (radius) {\n if (!arguments.length) {\n return _chart.MIN_RADIUS;\n }\n _chart.MIN_RADIUS = radius;\n return _chart;\n };\n\n /**\n * Get or set the minimum radius for label rendering. If a bubble's radius is less than this value\n * then no label will be rendered.\n * @method minRadiusWithLabel\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [radius=10]\n * @returns {Number|dc.bubbleMixin}\n */\n\n _chart.minRadiusWithLabel = function (radius) {\n if (!arguments.length) {\n return _minRadiusWithLabel;\n }\n _minRadiusWithLabel = radius;\n return _chart;\n };\n\n /**\n * Get or set the maximum relative size of a bubble to the length of x axis. This value is useful\n * when the difference in radius between bubbles is too great.\n * @method maxBubbleRelativeSize\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [relativeSize=0.3]\n * @returns {Number|dc.bubbleMixin}\n */\n _chart.maxBubbleRelativeSize = function (relativeSize) {\n if (!arguments.length) {\n return _maxBubbleRelativeSize;\n }\n _maxBubbleRelativeSize = relativeSize;\n return _chart;\n };\n\n _chart.fadeDeselectedArea = function () {\n if (_chart.hasFilter()) {\n _chart.selectAll('g.' + _chart.BUBBLE_NODE_CLASS).each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.' + _chart.BUBBLE_NODE_CLASS).each(function () {\n _chart.resetHighlight(this);\n });\n }\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(d.key);\n };\n\n _chart.onClick = function (d) {\n var filter = d.key;\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n return _chart;\n};\n","/**\n * The pie chart implementation is usually used to visualize a small categorical distribution. The pie\n * chart uses keyAccessor to determine the slices, and valueAccessor to calculate the size of each\n * slice relative to the sum of all values. Slices are ordered by {@link dc.baseMixin#ordering ordering}\n * which defaults to sorting by key.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * @class pieChart\n * @memberof dc\n * @mixes dc.capMixin\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a pie chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.pieChart('#chart-container1');\n * // create a pie chart under #chart-container2 element using chart group A\n * var chart2 = dc.pieChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.pieChart}\n */\ndc.pieChart = function (parent, chartGroup) {\n var DEFAULT_MIN_ANGLE_FOR_LABEL = 0.5;\n\n var _sliceCssClass = 'pie-slice';\n var _labelCssClass = 'pie-label';\n var _sliceGroupCssClass = 'pie-slice-group';\n var _labelGroupCssClass = 'pie-label-group';\n var _emptyCssClass = 'empty-chart';\n var _emptyTitle = 'empty';\n\n var _radius,\n _givenRadius, // specified radius, if any\n _innerRadius = 0,\n _externalRadiusPadding = 0;\n\n var _g;\n var _cx;\n var _cy;\n var _minAngleForLabel = DEFAULT_MIN_ANGLE_FOR_LABEL;\n var _externalLabelRadius;\n var _drawPaths = false;\n var _chart = dc.capMixin(dc.colorMixin(dc.baseMixin({})));\n\n _chart.colorAccessor(_chart.cappedKeyAccessor);\n\n _chart.title(function (d) {\n return _chart.cappedKeyAccessor(d) + ': ' + _chart.cappedValueAccessor(d);\n });\n\n /**\n * Get or set the maximum number of slices the pie chart will generate. The top slices are determined by\n * value from high to low. Other slices exeeding the cap will be rolled up into one single *Others* slice.\n * @method slicesCap\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cap]\n * @returns {Number|dc.pieChart}\n */\n _chart.slicesCap = _chart.cap;\n\n _chart.label(_chart.cappedKeyAccessor);\n _chart.renderLabel(true);\n\n _chart.transitionDuration(350);\n _chart.transitionDelay(0);\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _g = _chart.svg()\n .append('g')\n .attr('transform', 'translate(' + _chart.cx() + ',' + _chart.cy() + ')');\n\n _g.append('g').attr('class', _sliceGroupCssClass);\n _g.append('g').attr('class', _labelGroupCssClass);\n\n drawChart();\n\n return _chart;\n };\n\n function drawChart () {\n // set radius from chart size if none given, or if given radius is too large\n var maxRadius = d3.min([_chart.width(), _chart.height()]) / 2;\n _radius = _givenRadius && _givenRadius < maxRadius ? _givenRadius : maxRadius;\n\n var arc = buildArcs();\n\n var pie = pieLayout();\n var pieData;\n // if we have data...\n if (d3.sum(_chart.data(), _chart.valueAccessor())) {\n pieData = pie(_chart.data());\n _g.classed(_emptyCssClass, false);\n } else {\n // otherwise we'd be getting NaNs, so override\n // note: abuse others for its ignoring the value accessor\n pieData = pie([{key: _emptyTitle, value: 1, others: [_emptyTitle]}]);\n _g.classed(_emptyCssClass, true);\n }\n\n if (_g) {\n var slices = _g.select('g.' + _sliceGroupCssClass)\n .selectAll('g.' + _sliceCssClass)\n .data(pieData);\n\n var labels = _g.select('g.' + _labelGroupCssClass)\n .selectAll('text.' + _labelCssClass)\n .data(pieData);\n\n createElements(slices, labels, arc, pieData);\n\n updateElements(pieData, arc);\n\n removeElements(slices, labels);\n\n highlightFilter();\n\n dc.transition(_g, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + _chart.cx() + ',' + _chart.cy() + ')');\n }\n }\n\n function createElements (slices, labels, arc, pieData) {\n var slicesEnter = createSliceNodes(slices);\n\n createSlicePath(slicesEnter, arc);\n\n createTitles(slicesEnter);\n\n createLabels(labels, pieData, arc);\n }\n\n function createSliceNodes (slices) {\n var slicesEnter = slices\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return _sliceCssClass + ' _' + i;\n });\n return slicesEnter;\n }\n\n function createSlicePath (slicesEnter, arc) {\n var slicePath = slicesEnter.append('path')\n .attr('fill', fill)\n .on('click', onClick)\n .attr('d', function (d, i) {\n return safeArc(d, i, arc);\n });\n\n var transition = dc.transition(slicePath, _chart.transitionDuration(), _chart.transitionDelay());\n if (transition.attrTween) {\n transition.attrTween('d', tweenPie);\n }\n }\n\n function createTitles (slicesEnter) {\n if (_chart.renderTitle()) {\n slicesEnter.append('title').text(function (d) {\n return _chart.title()(d.data);\n });\n }\n }\n\n _chart._applyLabelText = function (labels) {\n labels\n .text(function (d) {\n var data = d.data;\n if ((sliceHasNoData(data) || sliceTooSmall(d)) && !isSelectedSlice(d)) {\n return '';\n }\n return _chart.label()(d.data);\n });\n };\n\n function positionLabels (labels, arc) {\n _chart._applyLabelText(labels);\n dc.transition(labels, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', function (d) {\n return labelPosition(d, arc);\n })\n .attr('text-anchor', 'middle');\n }\n\n function highlightSlice (i, whether) {\n _chart.select('g.pie-slice._' + i)\n .classed('highlight', whether);\n }\n\n function createLabels (labels, pieData, arc) {\n if (_chart.renderLabel()) {\n var labelsEnter = labels\n .enter()\n .append('text')\n .attr('class', function (d, i) {\n var classes = _sliceCssClass + ' ' + _labelCssClass + ' _' + i;\n if (_externalLabelRadius) {\n classes += ' external';\n }\n return classes;\n })\n .on('click', onClick)\n .on('mouseover', function (d, i) {\n highlightSlice(i, true);\n })\n .on('mouseout', function (d, i) {\n highlightSlice(i, false);\n });\n positionLabels(labelsEnter, arc);\n if (_externalLabelRadius && _drawPaths) {\n updateLabelPaths(pieData, arc);\n }\n }\n }\n\n function updateLabelPaths (pieData, arc) {\n var polyline = _g.selectAll('polyline.' + _sliceCssClass)\n .data(pieData);\n\n polyline\n .enter()\n .append('polyline')\n .attr('class', function (d, i) {\n return 'pie-path _' + i + ' ' + _sliceCssClass;\n })\n .on('click', onClick)\n .on('mouseover', function (d, i) {\n highlightSlice(i, true);\n })\n .on('mouseout', function (d, i) {\n highlightSlice(i, false);\n });\n\n polyline.exit().remove();\n var arc2 = d3.svg.arc()\n .outerRadius(_radius - _externalRadiusPadding + _externalLabelRadius)\n .innerRadius(_radius - _externalRadiusPadding);\n var transition = dc.transition(polyline, _chart.transitionDuration(), _chart.transitionDelay());\n // this is one rare case where d3.selection differs from d3.transition\n if (transition.attrTween) {\n transition\n .attrTween('points', function (d) {\n var current = this._current || d;\n current = {startAngle: current.startAngle, endAngle: current.endAngle};\n var interpolate = d3.interpolate(current, d);\n this._current = interpolate(0);\n return function (t) {\n var d2 = interpolate(t);\n return [arc.centroid(d2), arc2.centroid(d2)];\n };\n });\n } else {\n transition.attr('points', function (d) {\n return [arc.centroid(d), arc2.centroid(d)];\n });\n }\n transition.style('visibility', function (d) {\n return d.endAngle - d.startAngle < 0.0001 ? 'hidden' : 'visible';\n });\n\n }\n\n function updateElements (pieData, arc) {\n updateSlicePaths(pieData, arc);\n updateLabels(pieData, arc);\n updateTitles(pieData);\n }\n\n function updateSlicePaths (pieData, arc) {\n var slicePaths = _g.selectAll('g.' + _sliceCssClass)\n .data(pieData)\n .select('path')\n .attr('d', function (d, i) {\n return safeArc(d, i, arc);\n });\n var transition = dc.transition(slicePaths, _chart.transitionDuration(), _chart.transitionDelay());\n if (transition.attrTween) {\n transition.attrTween('d', tweenPie);\n }\n transition.attr('fill', fill);\n }\n\n function updateLabels (pieData, arc) {\n if (_chart.renderLabel()) {\n var labels = _g.selectAll('text.' + _labelCssClass)\n .data(pieData);\n positionLabels(labels, arc);\n if (_externalLabelRadius && _drawPaths) {\n updateLabelPaths(pieData, arc);\n }\n }\n }\n\n function updateTitles (pieData) {\n if (_chart.renderTitle()) {\n _g.selectAll('g.' + _sliceCssClass)\n .data(pieData)\n .select('title')\n .text(function (d) {\n return _chart.title()(d.data);\n });\n }\n }\n\n function removeElements (slices, labels) {\n slices.exit().remove();\n labels.exit().remove();\n }\n\n function highlightFilter () {\n if (_chart.hasFilter()) {\n _chart.selectAll('g.' + _sliceCssClass).each(function (d) {\n if (isSelectedSlice(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.' + _sliceCssClass).each(function () {\n _chart.resetHighlight(this);\n });\n }\n }\n\n /**\n * Get or set the external radius padding of the pie chart. This will force the radius of the\n * pie chart to become smaller or larger depending on the value.\n * @method externalRadiusPadding\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [externalRadiusPadding=0]\n * @returns {Number|dc.pieChart}\n */\n _chart.externalRadiusPadding = function (externalRadiusPadding) {\n if (!arguments.length) {\n return _externalRadiusPadding;\n }\n _externalRadiusPadding = externalRadiusPadding;\n return _chart;\n };\n\n /**\n * Get or set the inner radius of the pie chart. If the inner radius is greater than 0px then the\n * pie chart will be rendered as a doughnut chart.\n * @method innerRadius\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [innerRadius=0]\n * @returns {Number|dc.pieChart}\n */\n _chart.innerRadius = function (innerRadius) {\n if (!arguments.length) {\n return _innerRadius;\n }\n _innerRadius = innerRadius;\n return _chart;\n };\n\n /**\n * Get or set the outer radius. If the radius is not set, it will be half of the minimum of the\n * chart width and height.\n * @method radius\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [radius]\n * @returns {Number|dc.pieChart}\n */\n _chart.radius = function (radius) {\n if (!arguments.length) {\n return _givenRadius;\n }\n _givenRadius = radius;\n return _chart;\n };\n\n /**\n * Get or set center x coordinate position. Default is center of svg.\n * @method cx\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cx]\n * @returns {Number|dc.pieChart}\n */\n _chart.cx = function (cx) {\n if (!arguments.length) {\n return (_cx || _chart.width() / 2);\n }\n _cx = cx;\n return _chart;\n };\n\n /**\n * Get or set center y coordinate position. Default is center of svg.\n * @method cy\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cy]\n * @returns {Number|dc.pieChart}\n */\n _chart.cy = function (cy) {\n if (!arguments.length) {\n return (_cy || _chart.height() / 2);\n }\n _cy = cy;\n return _chart;\n };\n\n function buildArcs () {\n return d3.svg.arc()\n .outerRadius(_radius - _externalRadiusPadding)\n .innerRadius(_innerRadius);\n }\n\n function isSelectedSlice (d) {\n return _chart.hasFilter(_chart.cappedKeyAccessor(d.data));\n }\n\n _chart._doRedraw = function () {\n drawChart();\n return _chart;\n };\n\n /**\n * Get or set the minimal slice angle for label rendering. Any slice with a smaller angle will not\n * display a slice label.\n * @method minAngleForLabel\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [minAngleForLabel=0.5]\n * @returns {Number|dc.pieChart}\n */\n _chart.minAngleForLabel = function (minAngleForLabel) {\n if (!arguments.length) {\n return _minAngleForLabel;\n }\n _minAngleForLabel = minAngleForLabel;\n return _chart;\n };\n\n function pieLayout () {\n return d3.layout.pie().sort(null).value(_chart.cappedValueAccessor);\n }\n\n function sliceTooSmall (d) {\n var angle = (d.endAngle - d.startAngle);\n return isNaN(angle) || angle < _minAngleForLabel;\n }\n\n function sliceHasNoData (d) {\n return _chart.cappedValueAccessor(d) === 0;\n }\n\n function tweenPie (b) {\n b.innerRadius = _innerRadius;\n var current = this._current;\n if (isOffCanvas(current)) {\n current = {startAngle: 0, endAngle: 0};\n } else {\n // only interpolate startAngle & endAngle, not the whole data object\n current = {startAngle: current.startAngle, endAngle: current.endAngle};\n }\n var i = d3.interpolate(current, b);\n this._current = i(0);\n return function (t) {\n return safeArc(i(t), 0, buildArcs());\n };\n }\n\n function isOffCanvas (current) {\n return !current || isNaN(current.startAngle) || isNaN(current.endAngle);\n }\n\n function fill (d, i) {\n return _chart.getColor(d.data, i);\n }\n\n function onClick (d, i) {\n if (_g.attr('class') !== _emptyCssClass) {\n _chart.onClick(d.data, i);\n }\n }\n\n function safeArc (d, i, arc) {\n var path = arc(d, i);\n if (path.indexOf('NaN') >= 0) {\n path = 'M0,0';\n }\n return path;\n }\n\n /**\n * Title to use for the only slice when there is no data.\n * @method emptyTitle\n * @memberof dc.pieChart\n * @instance\n * @param {String} [title]\n * @returns {String|dc.pieChart}\n */\n _chart.emptyTitle = function (title) {\n if (arguments.length === 0) {\n return _emptyTitle;\n }\n _emptyTitle = title;\n return _chart;\n };\n\n /**\n * Position slice labels offset from the outer edge of the chart.\n *\n * The argument specifies the extra radius to be added for slice labels.\n * @method externalLabels\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [externalLabelRadius]\n * @returns {Number|dc.pieChart}\n */\n _chart.externalLabels = function (externalLabelRadius) {\n if (arguments.length === 0) {\n return _externalLabelRadius;\n } else if (externalLabelRadius) {\n _externalLabelRadius = externalLabelRadius;\n } else {\n _externalLabelRadius = undefined;\n }\n\n return _chart;\n };\n\n /**\n * Get or set whether to draw lines from pie slices to their labels.\n *\n * @method drawPaths\n * @memberof dc.pieChart\n * @instance\n * @param {Boolean} [drawPaths]\n * @returns {Boolean|dc.pieChart}\n */\n _chart.drawPaths = function (drawPaths) {\n if (arguments.length === 0) {\n return _drawPaths;\n }\n _drawPaths = drawPaths;\n return _chart;\n };\n\n function labelPosition (d, arc) {\n var centroid;\n if (_externalLabelRadius) {\n centroid = d3.svg.arc()\n .outerRadius(_radius - _externalRadiusPadding + _externalLabelRadius)\n .innerRadius(_radius - _externalRadiusPadding + _externalLabelRadius)\n .centroid(d);\n } else {\n centroid = arc.centroid(d);\n }\n if (isNaN(centroid[0]) || isNaN(centroid[1])) {\n return 'translate(0,0)';\n } else {\n return 'translate(' + centroid + ')';\n }\n }\n\n _chart.legendables = function () {\n return _chart.data().map(function (d, i) {\n var legendable = {name: d.key, data: d.value, others: d.others, chart: _chart};\n legendable.color = _chart.getColor(d, i);\n return legendable;\n });\n };\n\n _chart.legendHighlight = function (d) {\n highlightSliceFromLegendable(d, true);\n };\n\n _chart.legendReset = function (d) {\n highlightSliceFromLegendable(d, false);\n };\n\n _chart.legendToggle = function (d) {\n _chart.onClick({key: d.name, others: d.others});\n };\n\n function highlightSliceFromLegendable (legendable, highlighted) {\n _chart.selectAll('g.pie-slice').each(function (d) {\n if (legendable.name === d.data.key) {\n d3.select(this).classed('highlight', highlighted);\n }\n });\n }\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Concrete bar chart/histogram implementation.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.com/dc.js/crime/index.html Canadian City Crime Stats}\n * @class barChart\n * @memberof dc\n * @mixes dc.stackMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a bar chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.barChart('#chart-container1');\n * // create a bar chart under #chart-container2 element using chart group A\n * var chart2 = dc.barChart('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.barChart(compositeChart);\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector}\n * specifying a dom block element such as a div; or a dom element or d3 selection. If the bar\n * chart is a sub-chart in a {@link dc.compositeChart Composite Chart} then pass in the parent\n * composite chart instance instead.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.barChart}\n */\ndc.barChart = function (parent, chartGroup) {\n var MIN_BAR_WIDTH = 1;\n var DEFAULT_GAP_BETWEEN_BARS = 2;\n var LABEL_PADDING = 3;\n\n var _chart = dc.stackMixin(dc.coordinateGridMixin({}));\n\n var _gap = DEFAULT_GAP_BETWEEN_BARS;\n var _centerBar = false;\n var _alwaysUseRounding = false;\n\n var _barWidth;\n\n dc.override(_chart, 'rescale', function () {\n _chart._rescale();\n _barWidth = undefined;\n return _chart;\n });\n\n dc.override(_chart, 'render', function () {\n if (_chart.round() && _centerBar && !_alwaysUseRounding) {\n dc.logger.warn('By default, brush rounding is disabled if bars are centered. ' +\n 'See dc.js bar chart API documentation for details.');\n }\n\n return _chart._render();\n });\n\n _chart.label(function (d) {\n return dc.utils.printSingleValue(d.y0 + d.y);\n }, false);\n\n _chart.plotData = function () {\n var layers = _chart.chartBodyG().selectAll('g.stack')\n .data(_chart.data());\n\n calculateBarWidth();\n\n layers\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return 'stack ' + '_' + i;\n });\n\n var last = layers.size() - 1;\n layers.each(function (d, i) {\n var layer = d3.select(this);\n\n renderBars(layer, i, d);\n\n if (_chart.renderLabel() && last === i) {\n renderLabels(layer, i, d);\n }\n });\n };\n\n function barHeight (d) {\n return dc.utils.safeNumber(Math.abs(_chart.y()(d.y + d.y0) - _chart.y()(d.y0)));\n }\n\n function renderLabels (layer, layerIndex, d) {\n var labels = layer.selectAll('text.barLabel')\n .data(d.values, dc.pluck('x'));\n\n labels.enter()\n .append('text')\n .attr('class', 'barLabel')\n .attr('text-anchor', 'middle');\n\n if (_chart.isOrdinal()) {\n labels.on('click', _chart.onClick);\n labels.attr('cursor', 'pointer');\n }\n\n dc.transition(labels, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x', function (d) {\n var x = _chart.x()(d.x);\n if (!_centerBar) {\n x += _barWidth / 2;\n }\n return dc.utils.safeNumber(x);\n })\n .attr('y', function (d) {\n var y = _chart.y()(d.y + d.y0);\n\n if (d.y < 0) {\n y -= barHeight(d);\n }\n\n return dc.utils.safeNumber(y - LABEL_PADDING);\n })\n .text(function (d) {\n return _chart.label()(d);\n });\n\n dc.transition(labels.exit(), _chart.transitionDuration(), _chart.transitionDelay())\n .attr('height', 0)\n .remove();\n }\n\n function renderBars (layer, layerIndex, d) {\n var bars = layer.selectAll('rect.bar')\n .data(d.values, dc.pluck('x'));\n\n var enter = bars.enter()\n .append('rect')\n .attr('class', 'bar')\n .attr('fill', dc.pluck('data', _chart.getColor))\n .attr('y', _chart.yAxisHeight())\n .attr('height', 0);\n\n if (_chart.renderTitle()) {\n enter.append('title').text(dc.pluck('data', _chart.title(d.name)));\n }\n\n if (_chart.isOrdinal()) {\n bars.on('click', _chart.onClick);\n }\n\n dc.transition(bars, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x', function (d) {\n var x = _chart.x()(d.x);\n if (_centerBar) {\n x -= _barWidth / 2;\n }\n if (_chart.isOrdinal() && _gap !== undefined) {\n x += _gap / 2;\n }\n return dc.utils.safeNumber(x);\n })\n .attr('y', function (d) {\n var y = _chart.y()(d.y + d.y0);\n\n if (d.y < 0) {\n y -= barHeight(d);\n }\n\n return dc.utils.safeNumber(y);\n })\n .attr('width', _barWidth)\n .attr('height', function (d) {\n return barHeight(d);\n })\n .attr('fill', dc.pluck('data', _chart.getColor))\n .select('title').text(dc.pluck('data', _chart.title(d.name)));\n\n dc.transition(bars.exit(), _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x', function (d) { return _chart.x()(d.x); })\n .attr('width', _barWidth * 0.9)\n .remove();\n }\n\n function calculateBarWidth () {\n if (_barWidth === undefined) {\n var numberOfBars = _chart.xUnitCount();\n\n // please can't we always use rangeBands for bar charts?\n if (_chart.isOrdinal() && _gap === undefined) {\n _barWidth = Math.floor(_chart.x().rangeBand());\n } else if (_gap) {\n _barWidth = Math.floor((_chart.xAxisLength() - (numberOfBars - 1) * _gap) / numberOfBars);\n } else {\n _barWidth = Math.floor(_chart.xAxisLength() / (1 + _chart.barPadding()) / numberOfBars);\n }\n\n if (_barWidth === Infinity || isNaN(_barWidth) || _barWidth < MIN_BAR_WIDTH) {\n _barWidth = MIN_BAR_WIDTH;\n }\n }\n }\n\n _chart.fadeDeselectedArea = function () {\n var bars = _chart.chartBodyG().selectAll('rect.bar');\n var extent = _chart.brush().extent();\n\n if (_chart.isOrdinal()) {\n if (_chart.hasFilter()) {\n bars.classed(dc.constants.SELECTED_CLASS, function (d) {\n return _chart.hasFilter(d.x);\n });\n bars.classed(dc.constants.DESELECTED_CLASS, function (d) {\n return !_chart.hasFilter(d.x);\n });\n } else {\n bars.classed(dc.constants.SELECTED_CLASS, false);\n bars.classed(dc.constants.DESELECTED_CLASS, false);\n }\n } else {\n if (!_chart.brushIsEmpty(extent)) {\n var start = extent[0];\n var end = extent[1];\n\n bars.classed(dc.constants.DESELECTED_CLASS, function (d) {\n return d.x < start || d.x >= end;\n });\n } else {\n bars.classed(dc.constants.DESELECTED_CLASS, false);\n }\n }\n };\n\n /**\n * Whether the bar chart will render each bar centered around the data position on the x-axis.\n * @method centerBar\n * @memberof dc.barChart\n * @instance\n * @param {Boolean} [centerBar=false]\n * @returns {Boolean|dc.barChart}\n */\n _chart.centerBar = function (centerBar) {\n if (!arguments.length) {\n return _centerBar;\n }\n _centerBar = centerBar;\n return _chart;\n };\n\n dc.override(_chart, 'onClick', function (d) {\n _chart._onClick(d.data);\n });\n\n /**\n * Get or set the spacing between bars as a fraction of bar size. Valid values are between 0-1.\n * Setting this value will also remove any previously set {@link dc.barChart#gap gap}. See the\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal_rangeBands d3 docs}\n * for a visual description of how the padding is applied.\n * @method barPadding\n * @memberof dc.barChart\n * @instance\n * @param {Number} [barPadding=0]\n * @returns {Number|dc.barChart}\n */\n _chart.barPadding = function (barPadding) {\n if (!arguments.length) {\n return _chart._rangeBandPadding();\n }\n _chart._rangeBandPadding(barPadding);\n _gap = undefined;\n return _chart;\n };\n\n _chart._useOuterPadding = function () {\n return _gap === undefined;\n };\n\n /**\n * Get or set the outer padding on an ordinal bar chart. This setting has no effect on non-ordinal charts.\n * Will pad the width by `padding * barWidth` on each side of the chart.\n * @method outerPadding\n * @memberof dc.barChart\n * @instance\n * @param {Number} [padding=0.5]\n * @returns {Number|dc.barChart}\n */\n _chart.outerPadding = _chart._outerRangeBandPadding;\n\n /**\n * Manually set fixed gap (in px) between bars instead of relying on the default auto-generated\n * gap. By default the bar chart implementation will calculate and set the gap automatically\n * based on the number of data points and the length of the x axis.\n * @method gap\n * @memberof dc.barChart\n * @instance\n * @param {Number} [gap=2]\n * @returns {Number|dc.barChart}\n */\n _chart.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _chart;\n };\n\n _chart.extendBrush = function () {\n var extent = _chart.brush().extent();\n if (_chart.round() && (!_centerBar || _alwaysUseRounding)) {\n extent[0] = extent.map(_chart.round())[0];\n extent[1] = extent.map(_chart.round())[1];\n\n _chart.chartBodyG().select('.brush')\n .call(_chart.brush().extent(extent));\n }\n\n return extent;\n };\n\n /**\n * Set or get whether rounding is enabled when bars are centered. If false, using\n * rounding with centered bars will result in a warning and rounding will be ignored. This flag\n * has no effect if bars are not {@link dc.barChart#centerBar centered}.\n * When using standard d3.js rounding methods, the brush often doesn't align correctly with\n * centered bars since the bars are offset. The rounding function must add an offset to\n * compensate, such as in the following example.\n * @method alwaysUseRounding\n * @memberof dc.barChart\n * @instance\n * @example\n * chart.round(function(n) { return Math.floor(n) + 0.5; });\n * @param {Boolean} [alwaysUseRounding=false]\n * @returns {Boolean|dc.barChart}\n */\n _chart.alwaysUseRounding = function (alwaysUseRounding) {\n if (!arguments.length) {\n return _alwaysUseRounding;\n }\n _alwaysUseRounding = alwaysUseRounding;\n return _chart;\n };\n\n function colorFilter (color, inv) {\n return function () {\n var item = d3.select(this);\n var match = item.attr('fill') === color;\n return inv ? !match : match;\n };\n }\n\n _chart.legendHighlight = function (d) {\n if (!_chart.isLegendableHidden(d)) {\n _chart.g().selectAll('rect.bar')\n .classed('highlight', colorFilter(d.color))\n .classed('fadeout', colorFilter(d.color, true));\n }\n };\n\n _chart.legendReset = function () {\n _chart.g().selectAll('rect.bar')\n .classed('highlight', false)\n .classed('fadeout', false);\n };\n\n dc.override(_chart, 'xAxisMax', function () {\n var max = this._xAxisMax();\n if ('resolution' in _chart.xUnits()) {\n var res = _chart.xUnits().resolution;\n max += res;\n }\n return max;\n });\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Concrete line/area chart implementation.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.com/dc.js/crime/index.html Canadian City Crime Stats}\n * @class lineChart\n * @memberof dc\n * @mixes dc.stackMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a line chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.lineChart('#chart-container1');\n * // create a line chart under #chart-container2 element using chart group A\n * var chart2 = dc.lineChart('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.lineChart(compositeChart);\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector}\n * specifying a dom block element such as a div; or a dom element or d3 selection. If the line\n * chart is a sub-chart in a {@link dc.compositeChart Composite Chart} then pass in the parent\n * composite chart instance instead.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.lineChart}\n */\ndc.lineChart = function (parent, chartGroup) {\n var DEFAULT_DOT_RADIUS = 5;\n var TOOLTIP_G_CLASS = 'dc-tooltip';\n var DOT_CIRCLE_CLASS = 'dot';\n var Y_AXIS_REF_LINE_CLASS = 'yRef';\n var X_AXIS_REF_LINE_CLASS = 'xRef';\n var DEFAULT_DOT_OPACITY = 1e-6;\n var LABEL_PADDING = 3;\n\n var _chart = dc.stackMixin(dc.coordinateGridMixin({}));\n var _renderArea = false;\n var _dotRadius = DEFAULT_DOT_RADIUS;\n var _dataPointRadius = null;\n var _dataPointFillOpacity = DEFAULT_DOT_OPACITY;\n var _dataPointStrokeOpacity = DEFAULT_DOT_OPACITY;\n var _interpolate = 'linear';\n var _tension = 0.7;\n var _defined;\n var _dashStyle;\n var _xyTipsOn = true;\n\n _chart.transitionDuration(500);\n _chart.transitionDelay(0);\n _chart._rangeBandPadding(1);\n\n _chart.plotData = function () {\n var chartBody = _chart.chartBodyG();\n var layersList = chartBody.select('g.stack-list');\n\n if (layersList.empty()) {\n layersList = chartBody.append('g').attr('class', 'stack-list');\n }\n\n var layers = layersList.selectAll('g.stack').data(_chart.data());\n\n var layersEnter = layers\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return 'stack ' + '_' + i;\n });\n\n drawLine(layersEnter, layers);\n\n drawArea(layersEnter, layers);\n\n drawDots(chartBody, layers);\n\n if (_chart.renderLabel()) {\n drawLabels(layers);\n }\n };\n\n /**\n * Gets or sets the interpolator to use for lines drawn, by string name, allowing e.g. step\n * functions, splines, and cubic interpolation. This is passed to\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_interpolate d3.svg.line.interpolate} and\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#area_interpolate d3.svg.area.interpolate},\n * where you can find a complete list of valid arguments.\n * @method interpolate\n * @memberof dc.lineChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_interpolate d3.svg.line.interpolate}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#area_interpolate d3.svg.area.interpolate}\n * @param {String} [interpolate='linear']\n * @returns {String|dc.lineChart}\n */\n _chart.interpolate = function (interpolate) {\n if (!arguments.length) {\n return _interpolate;\n }\n _interpolate = interpolate;\n return _chart;\n };\n\n /**\n * Gets or sets the tension to use for lines drawn, in the range 0 to 1.\n * This parameter further customizes the interpolation behavior. It is passed to\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_tension d3.svg.line.tension} and\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#area_tension d3.svg.area.tension}.\n * @method tension\n * @memberof dc.lineChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_interpolate d3.svg.line.interpolate}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#area_interpolate d3.svg.area.interpolate}\n * @param {Number} [tension=0.7]\n * @returns {Number|dc.lineChart}\n */\n _chart.tension = function (tension) {\n if (!arguments.length) {\n return _tension;\n }\n _tension = tension;\n return _chart;\n };\n\n /**\n * Gets or sets a function that will determine discontinuities in the line which should be\n * skipped: the path will be broken into separate subpaths if some points are undefined.\n * This function is passed to\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_defined d3.svg.line.defined}\n *\n * Note: crossfilter will sometimes coerce nulls to 0, so you may need to carefully write\n * custom reduce functions to get this to work, depending on your data. See\n * {@link https://github.com/dc-js/dc.js/issues/615#issuecomment-49089248 this GitHub comment}\n * for more details and an example.\n * @method defined\n * @memberof dc.lineChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_defined d3.svg.line.defined}\n * @param {Function} [defined]\n * @returns {Function|dc.lineChart}\n */\n _chart.defined = function (defined) {\n if (!arguments.length) {\n return _defined;\n }\n _defined = defined;\n return _chart;\n };\n\n /**\n * Set the line's d3 dashstyle. This value becomes the 'stroke-dasharray' of line. Defaults to empty\n * array (solid line).\n * @method dashStyle\n * @memberof dc.lineChart\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray stroke-dasharray}\n * @example\n * // create a Dash Dot Dot Dot\n * chart.dashStyle([3,1,1,1]);\n * @param {Array<Number>} [dashStyle=[]]\n * @returns {Array<Number>|dc.lineChart}\n */\n _chart.dashStyle = function (dashStyle) {\n if (!arguments.length) {\n return _dashStyle;\n }\n _dashStyle = dashStyle;\n return _chart;\n };\n\n /**\n * Get or set render area flag. If the flag is set to true then the chart will render the area\n * beneath each line and the line chart effectively becomes an area chart.\n * @method renderArea\n * @memberof dc.lineChart\n * @instance\n * @param {Boolean} [renderArea=false]\n * @returns {Boolean|dc.lineChart}\n */\n _chart.renderArea = function (renderArea) {\n if (!arguments.length) {\n return _renderArea;\n }\n _renderArea = renderArea;\n return _chart;\n };\n\n function colors (d, i) {\n return _chart.getColor.call(d, d.values, i);\n }\n\n function drawLine (layersEnter, layers) {\n var line = d3.svg.line()\n .x(function (d) {\n return _chart.x()(d.x);\n })\n .y(function (d) {\n return _chart.y()(d.y + d.y0);\n })\n .interpolate(_interpolate)\n .tension(_tension);\n if (_defined) {\n line.defined(_defined);\n }\n\n var path = layersEnter.append('path')\n .attr('class', 'line')\n .attr('stroke', colors);\n if (_dashStyle) {\n path.attr('stroke-dasharray', _dashStyle);\n }\n\n dc.transition(layers.select('path.line'), _chart.transitionDuration(), _chart.transitionDelay())\n //.ease('linear')\n .attr('stroke', colors)\n .attr('d', function (d) {\n return safeD(line(d.values));\n });\n }\n\n function drawArea (layersEnter, layers) {\n if (_renderArea) {\n var area = d3.svg.area()\n .x(function (d) {\n return _chart.x()(d.x);\n })\n .y(function (d) {\n return _chart.y()(d.y + d.y0);\n })\n .y0(function (d) {\n return _chart.y()(d.y0);\n })\n .interpolate(_interpolate)\n .tension(_tension);\n if (_defined) {\n area.defined(_defined);\n }\n\n layersEnter.append('path')\n .attr('class', 'area')\n .attr('fill', colors)\n .attr('d', function (d) {\n return safeD(area(d.values));\n });\n\n dc.transition(layers.select('path.area'), _chart.transitionDuration(), _chart.transitionDelay())\n //.ease('linear')\n .attr('fill', colors)\n .attr('d', function (d) {\n return safeD(area(d.values));\n });\n }\n }\n\n function safeD (d) {\n return (!d || d.indexOf('NaN') >= 0) ? 'M0,0' : d;\n }\n\n function drawDots (chartBody, layers) {\n if (_chart.xyTipsOn() === 'always' || (!_chart.brushOn() && _chart.xyTipsOn())) {\n var tooltipListClass = TOOLTIP_G_CLASS + '-list';\n var tooltips = chartBody.select('g.' + tooltipListClass);\n\n if (tooltips.empty()) {\n tooltips = chartBody.append('g').attr('class', tooltipListClass);\n }\n\n layers.each(function (d, layerIndex) {\n var points = d.values;\n if (_defined) {\n points = points.filter(_defined);\n }\n\n var g = tooltips.select('g.' + TOOLTIP_G_CLASS + '._' + layerIndex);\n if (g.empty()) {\n g = tooltips.append('g').attr('class', TOOLTIP_G_CLASS + ' _' + layerIndex);\n }\n\n createRefLines(g);\n\n var dots = g.selectAll('circle.' + DOT_CIRCLE_CLASS)\n .data(points, dc.pluck('x'));\n\n dots.enter()\n .append('circle')\n .attr('class', DOT_CIRCLE_CLASS)\n .attr('r', getDotRadius())\n .style('fill-opacity', _dataPointFillOpacity)\n .style('stroke-opacity', _dataPointStrokeOpacity)\n .attr('fill', _chart.getColor)\n .on('mousemove', function () {\n var dot = d3.select(this);\n showDot(dot);\n showRefLines(dot, g);\n })\n .on('mouseout', function () {\n var dot = d3.select(this);\n hideDot(dot);\n hideRefLines(g);\n });\n\n dots.call(renderTitle, d);\n\n dc.transition(dots, _chart.transitionDuration())\n .attr('cx', function (d) {\n return dc.utils.safeNumber(_chart.x()(d.x));\n })\n .attr('cy', function (d) {\n return dc.utils.safeNumber(_chart.y()(d.y + d.y0));\n })\n .attr('fill', _chart.getColor);\n\n dots.exit().remove();\n });\n }\n }\n\n _chart.label(function (d) {\n return dc.utils.printSingleValue(d.y0 + d.y);\n }, false);\n\n function drawLabels (layers) {\n layers.each(function (d, layerIndex) {\n var layer = d3.select(this);\n var labels = layer.selectAll('text.lineLabel')\n .data(d.values, dc.pluck('x'));\n\n labels.enter()\n .append('text')\n .attr('class', 'lineLabel')\n .attr('text-anchor', 'middle');\n\n dc.transition(labels, _chart.transitionDuration())\n .attr('x', function (d) {\n return dc.utils.safeNumber(_chart.x()(d.x));\n })\n .attr('y', function (d) {\n var y = _chart.y()(d.y + d.y0) - LABEL_PADDING;\n return dc.utils.safeNumber(y);\n })\n .text(function (d) {\n return _chart.label()(d);\n });\n\n dc.transition(labels.exit(), _chart.transitionDuration())\n .attr('height', 0)\n .remove();\n });\n }\n\n function createRefLines (g) {\n var yRefLine = g.select('path.' + Y_AXIS_REF_LINE_CLASS).empty() ?\n g.append('path').attr('class', Y_AXIS_REF_LINE_CLASS) : g.select('path.' + Y_AXIS_REF_LINE_CLASS);\n yRefLine.style('display', 'none').attr('stroke-dasharray', '5,5');\n\n var xRefLine = g.select('path.' + X_AXIS_REF_LINE_CLASS).empty() ?\n g.append('path').attr('class', X_AXIS_REF_LINE_CLASS) : g.select('path.' + X_AXIS_REF_LINE_CLASS);\n xRefLine.style('display', 'none').attr('stroke-dasharray', '5,5');\n }\n\n function showDot (dot) {\n dot.style('fill-opacity', 0.8);\n dot.style('stroke-opacity', 0.8);\n dot.attr('r', _dotRadius);\n return dot;\n }\n\n function showRefLines (dot, g) {\n var x = dot.attr('cx');\n var y = dot.attr('cy');\n var yAxisX = (_chart._yAxisX() - _chart.margins().left);\n var yAxisRefPathD = 'M' + yAxisX + ' ' + y + 'L' + (x) + ' ' + (y);\n var xAxisRefPathD = 'M' + x + ' ' + _chart.yAxisHeight() + 'L' + x + ' ' + y;\n g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', '').attr('d', yAxisRefPathD);\n g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', '').attr('d', xAxisRefPathD);\n }\n\n function getDotRadius () {\n return _dataPointRadius || _dotRadius;\n }\n\n function hideDot (dot) {\n dot.style('fill-opacity', _dataPointFillOpacity)\n .style('stroke-opacity', _dataPointStrokeOpacity)\n .attr('r', getDotRadius());\n }\n\n function hideRefLines (g) {\n g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', 'none');\n g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', 'none');\n }\n\n function renderTitle (dot, d) {\n if (_chart.renderTitle()) {\n dot.select('title').remove();\n dot.append('title').text(dc.pluck('data', _chart.title(d.name)));\n }\n }\n\n /**\n * Turn on/off the mouseover behavior of an individual data point which renders a circle and x/y axis\n * dashed lines back to each respective axis. This is ignored if the chart\n * {@link dc.coordinateGridMixin#brushOn brush} is on\n * @method xyTipsOn\n * @memberof dc.lineChart\n * @instance\n * @param {Boolean} [xyTipsOn=false]\n * @returns {Boolean|dc.lineChart}\n */\n _chart.xyTipsOn = function (xyTipsOn) {\n if (!arguments.length) {\n return _xyTipsOn;\n }\n _xyTipsOn = xyTipsOn;\n return _chart;\n };\n\n /**\n * Get or set the radius (in px) for dots displayed on the data points.\n * @method dotRadius\n * @memberof dc.lineChart\n * @instance\n * @param {Number} [dotRadius=5]\n * @returns {Number|dc.lineChart}\n */\n _chart.dotRadius = function (dotRadius) {\n if (!arguments.length) {\n return _dotRadius;\n }\n _dotRadius = dotRadius;\n return _chart;\n };\n\n /**\n * Always show individual dots for each datapoint.\n *\n * If `options` is falsy, it disables data point rendering. If no `options` are provided, the\n * current `options` values are instead returned.\n * @method renderDataPoints\n * @memberof dc.lineChart\n * @instance\n * @example\n * chart.renderDataPoints({radius: 2, fillOpacity: 0.8, strokeOpacity: 0.8})\n * @param {{fillOpacity: Number, strokeOpacity: Number, radius: Number}} [options={fillOpacity: 0.8, strokeOpacity: 0.8, radius: 2}]\n * @returns {{fillOpacity: Number, strokeOpacity: Number, radius: Number}|dc.lineChart}\n */\n _chart.renderDataPoints = function (options) {\n if (!arguments.length) {\n return {\n fillOpacity: _dataPointFillOpacity,\n strokeOpacity: _dataPointStrokeOpacity,\n radius: _dataPointRadius\n };\n } else if (!options) {\n _dataPointFillOpacity = DEFAULT_DOT_OPACITY;\n _dataPointStrokeOpacity = DEFAULT_DOT_OPACITY;\n _dataPointRadius = null;\n } else {\n _dataPointFillOpacity = options.fillOpacity || 0.8;\n _dataPointStrokeOpacity = options.strokeOpacity || 0.8;\n _dataPointRadius = options.radius || 2;\n }\n return _chart;\n };\n\n function colorFilter (color, dashstyle, inv) {\n return function () {\n var item = d3.select(this);\n var match = (item.attr('stroke') === color &&\n item.attr('stroke-dasharray') === ((dashstyle instanceof Array) ?\n dashstyle.join(',') : null)) || item.attr('fill') === color;\n return inv ? !match : match;\n };\n }\n\n _chart.legendHighlight = function (d) {\n if (!_chart.isLegendableHidden(d)) {\n _chart.g().selectAll('path.line, path.area')\n .classed('highlight', colorFilter(d.color, d.dashstyle))\n .classed('fadeout', colorFilter(d.color, d.dashstyle, true));\n }\n };\n\n _chart.legendReset = function () {\n _chart.g().selectAll('path.line, path.area')\n .classed('highlight', false)\n .classed('fadeout', false);\n };\n\n dc.override(_chart, 'legendables', function () {\n var legendables = _chart._legendables();\n if (!_dashStyle) {\n return legendables;\n }\n return legendables.map(function (l) {\n l.dashstyle = _dashStyle;\n return l;\n });\n });\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The data count widget is a simple widget designed to display the number of records selected by the\n * current filters out of the total number of records in the data set. Once created the data count widget\n * will automatically update the text content of child elements with the following classes:\n *\n * * `.total-count` - total number of records\n * * `.filter-count` - number of records matched by the current filters\n *\n * Note: this widget works best for the specific case of showing the number of records out of a\n * total. If you want a more general-purpose numeric display, please use the\n * {@link dc.numberDisplay} widget instead.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * @class dataCount\n * @memberof dc\n * @mixes dc.baseMixin\n * @example\n * var ndx = crossfilter(data);\n * var all = ndx.groupAll();\n *\n * dc.dataCount('.dc-data-count')\n * .dimension(ndx)\n * .group(all);\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.dataCount}\n */\ndc.dataCount = function (parent, chartGroup) {\n var _formatNumber = d3.format(',d');\n var _chart = dc.baseMixin({});\n var _html = {some: '', all: ''};\n\n /**\n * Gets or sets an optional object specifying HTML templates to use depending how many items are\n * selected. The text `%total-count` will replaced with the total number of records, and the text\n * `%filter-count` will be replaced with the number of selected records.\n * - all: HTML template to use if all items are selected\n * - some: HTML template to use if not all items are selected\n * @method html\n * @memberof dc.dataCount\n * @instance\n * @example\n * counter.html({\n * some: '%filter-count out of %total-count records selected',\n * all: 'All records selected. Click on charts to apply filters'\n * })\n * @param {{some:String, all: String}} [options]\n * @returns {{some:String, all: String}|dc.dataCount}\n */\n _chart.html = function (options) {\n if (!arguments.length) {\n return _html;\n }\n if (options.all) {\n _html.all = options.all;\n }\n if (options.some) {\n _html.some = options.some;\n }\n return _chart;\n };\n\n /**\n * Gets or sets an optional function to format the filter count and total count.\n * @method formatNumber\n * @memberof dc.dataCount\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md d3.format}\n * @example\n * counter.formatNumber(d3.format('.2g'))\n * @param {Function} [formatter=d3.format('.2g')]\n * @returns {Function|dc.dataCount}\n */\n _chart.formatNumber = function (formatter) {\n if (!arguments.length) {\n return _formatNumber;\n }\n _formatNumber = formatter;\n return _chart;\n };\n\n _chart._doRender = function () {\n var tot = _chart.dimension().size(),\n val = _chart.group().value();\n var all = _formatNumber(tot);\n var selected = _formatNumber(val);\n\n if ((tot === val) && (_html.all !== '')) {\n _chart.root().html(_html.all.replace('%total-count', all).replace('%filter-count', selected));\n } else if (_html.some !== '') {\n _chart.root().html(_html.some.replace('%total-count', all).replace('%filter-count', selected));\n } else {\n _chart.selectAll('.total-count').text(all);\n _chart.selectAll('.filter-count').text(selected);\n }\n return _chart;\n };\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The data table is a simple widget designed to list crossfilter focused data set (rows being\n * filtered) in a good old tabular fashion.\n *\n * Note: Unlike other charts, the data table (and data grid chart) use the {@link dc.dataTable#group group} attribute as a\n * keying function for {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#nest nesting} the data\n * together in groups. Do not pass in a crossfilter group as this will not work.\n *\n * Another interesting feature of the data table is that you can pass a crossfilter group to the `dimension`, as\n * long as you specify the {@link dc.dataTable#order order} as `d3.descending`, since the data\n * table will use `dimension.top()` to fetch the data in that case, and the method is equally\n * supported on the crossfilter group as the crossfilter dimension.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.io/dc.js/examples/table-on-aggregated-data.html dataTable on a crossfilter group}\n * ({@link https://github.com/dc-js/dc.js/blob/develop/web/examples/table-on-aggregated-data.html source})\n * @class dataTable\n * @memberof dc\n * @mixes dc.baseMixin\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.dataTable}\n */\ndc.dataTable = function (parent, chartGroup) {\n var LABEL_CSS_CLASS = 'dc-table-label';\n var ROW_CSS_CLASS = 'dc-table-row';\n var COLUMN_CSS_CLASS = 'dc-table-column';\n var GROUP_CSS_CLASS = 'dc-table-group';\n var HEAD_CSS_CLASS = 'dc-table-head';\n\n var _chart = dc.baseMixin({});\n\n var _size = 25;\n var _columns = [];\n var _sortBy = function (d) {\n return d;\n };\n var _order = d3.ascending;\n var _beginSlice = 0;\n var _endSlice;\n var _showGroups = true;\n\n _chart._doRender = function () {\n _chart.selectAll('tbody').remove();\n\n renderRows(renderGroups());\n\n return _chart;\n };\n\n _chart._doColumnValueFormat = function (v, d) {\n return ((typeof v === 'function') ?\n v(d) : // v as function\n ((typeof v === 'string') ?\n d[v] : // v is field name string\n v.format(d) // v is Object, use fn (element 2)\n )\n );\n };\n\n _chart._doColumnHeaderFormat = function (d) {\n // if 'function', convert to string representation\n // show a string capitalized\n // if an object then display its label string as-is.\n return (typeof d === 'function') ?\n _chart._doColumnHeaderFnToString(d) :\n ((typeof d === 'string') ?\n _chart._doColumnHeaderCapitalize(d) : String(d.label));\n };\n\n _chart._doColumnHeaderCapitalize = function (s) {\n // capitalize\n return s.charAt(0).toUpperCase() + s.slice(1);\n };\n\n _chart._doColumnHeaderFnToString = function (f) {\n // columnString(f) {\n var s = String(f);\n var i1 = s.indexOf('return ');\n if (i1 >= 0) {\n var i2 = s.lastIndexOf(';');\n if (i2 >= 0) {\n s = s.substring(i1 + 7, i2);\n var i3 = s.indexOf('numberFormat');\n if (i3 >= 0) {\n s = s.replace('numberFormat', '');\n }\n }\n }\n return s;\n };\n\n function renderGroups () {\n // The 'original' example uses all 'functions'.\n // If all 'functions' are used, then don't remove/add a header, and leave\n // the html alone. This preserves the functionality of earlier releases.\n // A 2nd option is a string representing a field in the data.\n // A third option is to supply an Object such as an array of 'information', and\n // supply your own _doColumnHeaderFormat and _doColumnValueFormat functions to\n // create what you need.\n var bAllFunctions = true;\n _columns.forEach(function (f) {\n bAllFunctions = bAllFunctions & (typeof f === 'function');\n });\n\n if (!bAllFunctions) {\n // ensure one thead\n var thead = _chart.selectAll('thead').data([0]);\n thead.enter().append('thead');\n thead.exit().remove();\n\n // with one tr\n var headrow = thead.selectAll('tr').data([0]);\n headrow.enter().append('tr');\n headrow.exit().remove();\n\n // with a th for each column\n var headcols = headrow.selectAll('th')\n .data(_columns);\n headcols.enter().append('th');\n headcols.exit().remove();\n\n headcols\n .attr('class', HEAD_CSS_CLASS)\n .html(function (d) {\n return (_chart._doColumnHeaderFormat(d));\n\n });\n }\n\n var groups = _chart.root().selectAll('tbody')\n .data(nestEntries(), function (d) {\n return _chart.keyAccessor()(d);\n });\n\n var rowGroup = groups\n .enter()\n .append('tbody');\n\n if (_showGroups === true) {\n rowGroup\n .append('tr')\n .attr('class', GROUP_CSS_CLASS)\n .append('td')\n .attr('class', LABEL_CSS_CLASS)\n .attr('colspan', _columns.length)\n .html(function (d) {\n return _chart.keyAccessor()(d);\n });\n }\n\n groups.exit().remove();\n\n return rowGroup;\n }\n\n function nestEntries () {\n var entries;\n if (_order === d3.ascending) {\n entries = _chart.dimension().bottom(_size);\n } else {\n entries = _chart.dimension().top(_size);\n }\n\n return d3.nest()\n .key(_chart.group())\n .sortKeys(_order)\n .entries(entries.sort(function (a, b) {\n return _order(_sortBy(a), _sortBy(b));\n }).slice(_beginSlice, _endSlice));\n }\n\n function renderRows (groups) {\n var rows = groups.order()\n .selectAll('tr.' + ROW_CSS_CLASS)\n .data(function (d) {\n return d.values;\n });\n\n var rowEnter = rows.enter()\n .append('tr')\n .attr('class', ROW_CSS_CLASS);\n\n _columns.forEach(function (v, i) {\n rowEnter.append('td')\n .attr('class', COLUMN_CSS_CLASS + ' _' + i)\n .html(function (d) {\n return _chart._doColumnValueFormat(v, d);\n });\n });\n\n rows.exit().remove();\n\n return rows;\n }\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set the group function for the data table. The group function takes a data row and\n * returns the key to specify to {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_nest d3.nest}\n * to split rows into groups.\n *\n * Do not pass in a crossfilter group as this will not work.\n * @method group\n * @memberof dc.dataTable\n * @instance\n * @example\n * // group rows by the value of their field\n * chart\n * .group(function(d) { return d.field; })\n * @param {Function} groupFunction Function taking a row of data and returning the nest key.\n * @returns {Function|dc.dataTable}\n */\n\n /**\n * Get or set the table size which determines the number of rows displayed by the widget.\n * @method size\n * @memberof dc.dataTable\n * @instance\n * @param {Number} [size=25]\n * @returns {Number|dc.dataTable}\n */\n _chart.size = function (size) {\n if (!arguments.length) {\n return _size;\n }\n _size = size;\n return _chart;\n };\n\n /**\n * Get or set the index of the beginning slice which determines which entries get displayed\n * by the widget. Useful when implementing pagination.\n *\n * Note: the sortBy function will determine how the rows are ordered for pagination purposes.\n\n * See the {@link http://dc-js.github.io/dc.js/examples/table-pagination.html table pagination example}\n * to see how to implement the pagination user interface using `beginSlice` and `endSlice`.\n * @method beginSlice\n * @memberof dc.dataTable\n * @instance\n * @param {Number} [beginSlice=0]\n * @returns {Number|dc.dataTable}\n */\n _chart.beginSlice = function (beginSlice) {\n if (!arguments.length) {\n return _beginSlice;\n }\n _beginSlice = beginSlice;\n return _chart;\n };\n\n /**\n * Get or set the index of the end slice which determines which entries get displayed by the\n * widget. Useful when implementing pagination. See {@link dc.dataTable#beginSlice `beginSlice`} for more information.\n * @method endSlice\n * @memberof dc.dataTable\n * @instance\n * @param {Number|undefined} [endSlice=undefined]\n * @returns {Number|dc.dataTable}\n */\n _chart.endSlice = function (endSlice) {\n if (!arguments.length) {\n return _endSlice;\n }\n _endSlice = endSlice;\n return _chart;\n };\n\n /**\n * Get or set column functions. The data table widget supports several methods of specifying the\n * columns to display.\n *\n * The original method uses an array of functions to generate dynamic columns. Column functions\n * are simple javascript functions with only one input argument `d` which represents a row in\n * the data set. The return value of these functions will be used to generate the content for\n * each cell. However, this method requires the HTML for the table to have a fixed set of column\n * headers.\n *\n * <pre><code>chart.columns([\n * function(d) { return d.date; },\n * function(d) { return d.open; },\n * function(d) { return d.close; },\n * function(d) { return numberFormat(d.close - d.open); },\n * function(d) { return d.volume; }\n * ]);\n * </code></pre>\n *\n * In the second method, you can list the columns to read from the data without specifying it as\n * a function, except where necessary (ie, computed columns). Note the data element name is\n * capitalized when displayed in the table header. You can also mix in functions as necessary,\n * using the third `{label, format}` form, as shown below.\n *\n * <pre><code>chart.columns([\n * \"date\", // d[\"date\"], ie, a field accessor; capitalized automatically\n * \"open\", // ...\n * \"close\", // ...\n * {\n * label: \"Change\",\n * format: function (d) {\n * return numberFormat(d.close - d.open);\n * }\n * },\n * \"volume\" // d[\"volume\"], ie, a field accessor; capitalized automatically\n * ]);\n * </code></pre>\n *\n * In the third example, we specify all fields using the `{label, format}` method:\n * <pre><code>chart.columns([\n * {\n * label: \"Date\",\n * format: function (d) { return d.date; }\n * },\n * {\n * label: \"Open\",\n * format: function (d) { return numberFormat(d.open); }\n * },\n * {\n * label: \"Close\",\n * format: function (d) { return numberFormat(d.close); }\n * },\n * {\n * label: \"Change\",\n * format: function (d) { return numberFormat(d.close - d.open); }\n * },\n * {\n * label: \"Volume\",\n * format: function (d) { return d.volume; }\n * }\n * ]);\n * </code></pre>\n *\n * You may wish to override the dataTable functions `_doColumnHeaderCapitalize` and\n * `_doColumnHeaderFnToString`, which are used internally to translate the column information or\n * function into a displayed header. The first one is used on the \"string\" column specifier; the\n * second is used to transform a stringified function into something displayable. For the Stock\n * example, the function for Change becomes the table header **d.close - d.open**.\n *\n * Finally, you can even specify a completely different form of column definition. To do this,\n * override `_chart._doColumnHeaderFormat` and `_chart._doColumnValueFormat` Be aware that\n * fields without numberFormat specification will be displayed just as they are stored in the\n * data, unformatted.\n * @method columns\n * @memberof dc.dataTable\n * @instance\n * @param {Array<Function>} [columns=[]]\n * @returns {Array<Function>}|dc.dataTable}\n */\n _chart.columns = function (columns) {\n if (!arguments.length) {\n return _columns;\n }\n _columns = columns;\n return _chart;\n };\n\n /**\n * Get or set sort-by function. This function works as a value accessor at row level and returns a\n * particular field to be sorted by.\n * @method sortBy\n * @memberof dc.dataTable\n * @instance\n * @example\n * chart.sortBy(function(d) {\n * return d.date;\n * });\n * @param {Function} [sortBy=identity function]\n * @returns {Function|dc.dataTable}\n */\n _chart.sortBy = function (sortBy) {\n if (!arguments.length) {\n return _sortBy;\n }\n _sortBy = sortBy;\n return _chart;\n };\n\n /**\n * Get or set sort order. If the order is `d3.ascending`, the data table will use\n * `dimension().bottom()` to fetch the data; otherwise it will use `dimension().top()`\n * @method order\n * @memberof dc.dataTable\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_ascending d3.ascending}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_descending d3.descending}\n * @example\n * chart.order(d3.descending);\n * @param {Function} [order=d3.ascending]\n * @returns {Function|dc.dataTable}\n */\n _chart.order = function (order) {\n if (!arguments.length) {\n return _order;\n }\n _order = order;\n return _chart;\n };\n\n /**\n * Get or set if group rows will be shown. The dataTable {@link dc.dataTable#group group}\n * function must be specified even if groups are not shown.\n * @method showGroups\n * @memberof dc.dataTable\n * @instance\n * @example\n * chart\n * .group([value], [name])\n * .showGroups(true|false);\n * @param {Boolean} [showGroups=true]\n * @returns {Boolean|dc.dataTable}\n */\n _chart.showGroups = function (showGroups) {\n if (!arguments.length) {\n return _showGroups;\n }\n _showGroups = showGroups;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Data grid is a simple widget designed to list the filtered records, providing\n * a simple way to define how the items are displayed.\n *\n * Note: Unlike other charts, the data grid chart (and data table) use the {@link dc.dataGrid#group group} attribute as a keying function\n * for {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#nest nesting} the data together in groups.\n * Do not pass in a crossfilter group as this will not work.\n *\n * Examples:\n * - {@link http://europarl.me/dc.js/web/ep/index.html List of members of the european parliament}\n * @class dataGrid\n * @memberof dc\n * @mixes dc.baseMixin\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.dataGrid}\n */\ndc.dataGrid = function (parent, chartGroup) {\n var LABEL_CSS_CLASS = 'dc-grid-label';\n var ITEM_CSS_CLASS = 'dc-grid-item';\n var GROUP_CSS_CLASS = 'dc-grid-group';\n var GRID_CSS_CLASS = 'dc-grid-top';\n\n var _chart = dc.baseMixin({});\n\n var _size = 999; // shouldn't be needed, but you might\n var _html = function (d) { return 'you need to provide an html() handling param: ' + JSON.stringify(d); };\n var _sortBy = function (d) {\n return d;\n };\n var _order = d3.ascending;\n var _beginSlice = 0, _endSlice;\n\n var _htmlGroup = function (d) {\n return '<div class=\\'' + GROUP_CSS_CLASS + '\\'><h1 class=\\'' + LABEL_CSS_CLASS + '\\'>' +\n _chart.keyAccessor()(d) + '</h1></div>';\n };\n\n _chart._doRender = function () {\n _chart.selectAll('div.' + GRID_CSS_CLASS).remove();\n\n renderItems(renderGroups());\n\n return _chart;\n };\n\n function renderGroups () {\n var groups = _chart.root().selectAll('div.' + GRID_CSS_CLASS)\n .data(nestEntries(), function (d) {\n return _chart.keyAccessor()(d);\n });\n\n var itemGroup = groups\n .enter()\n .append('div')\n .attr('class', GRID_CSS_CLASS);\n\n if (_htmlGroup) {\n itemGroup\n .html(function (d) {\n return _htmlGroup(d);\n });\n }\n\n groups.exit().remove();\n return itemGroup;\n }\n\n function nestEntries () {\n var entries = _chart.dimension().top(_size);\n\n return d3.nest()\n .key(_chart.group())\n .sortKeys(_order)\n .entries(entries.sort(function (a, b) {\n return _order(_sortBy(a), _sortBy(b));\n }).slice(_beginSlice, _endSlice));\n }\n\n function renderItems (groups) {\n var items = groups.order()\n .selectAll('div.' + ITEM_CSS_CLASS)\n .data(function (d) {\n return d.values;\n });\n\n items.enter()\n .append('div')\n .attr('class', ITEM_CSS_CLASS)\n .html(function (d) {\n return _html(d);\n });\n\n items.exit().remove();\n\n return items;\n }\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set the group function for the data grid. The group function takes a data row and\n * returns the key to specify to {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_nest d3.nest}\n * to split rows into groups.\n *\n * Do not pass in a crossfilter group as this will not work.\n * @method group\n * @memberof dc.dataGrid\n * @instance\n * @example\n * // group rows by the value of their field\n * chart\n * .group(function(d) { return d.field; })\n * @param {Function} groupFunction Function taking a row of data and returning the nest key.\n * @returns {Function|dc.dataTable}\n */\n\n /**\n * Get or set the index of the beginning slice which determines which entries get displayed by the widget.\n * Useful when implementing pagination.\n * @method beginSlice\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [beginSlice=0]\n * @returns {Number|dc.dataGrid}\n */\n _chart.beginSlice = function (beginSlice) {\n if (!arguments.length) {\n return _beginSlice;\n }\n _beginSlice = beginSlice;\n return _chart;\n };\n\n /**\n * Get or set the index of the end slice which determines which entries get displayed by the widget.\n * Useful when implementing pagination.\n * @method endSlice\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [endSlice]\n * @returns {Number|dc.dataGrid}\n */\n _chart.endSlice = function (endSlice) {\n if (!arguments.length) {\n return _endSlice;\n }\n _endSlice = endSlice;\n return _chart;\n };\n\n /**\n * Get or set the grid size which determines the number of items displayed by the widget.\n * @method size\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [size=999]\n * @returns {Number|dc.dataGrid}\n */\n _chart.size = function (size) {\n if (!arguments.length) {\n return _size;\n }\n _size = size;\n return _chart;\n };\n\n /**\n * Get or set the function that formats an item. The data grid widget uses a\n * function to generate dynamic html. Use your favourite templating engine or\n * generate the string directly.\n * @method html\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.html(function (d) { return '<div class='item '+data.exampleCategory+''>'+data.exampleString+'</div>';});\n * @param {Function} [html]\n * @returns {Function|dc.dataGrid}\n */\n _chart.html = function (html) {\n if (!arguments.length) {\n return _html;\n }\n _html = html;\n return _chart;\n };\n\n /**\n * Get or set the function that formats a group label.\n * @method htmlGroup\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.htmlGroup (function (d) { return '<h2>'.d.key . 'with ' . d.values.length .' items</h2>'});\n * @param {Function} [htmlGroup]\n * @returns {Function|dc.dataGrid}\n */\n _chart.htmlGroup = function (htmlGroup) {\n if (!arguments.length) {\n return _htmlGroup;\n }\n _htmlGroup = htmlGroup;\n return _chart;\n };\n\n /**\n * Get or set sort-by function. This function works as a value accessor at the item\n * level and returns a particular field to be sorted.\n * @method sortBy\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.sortBy(function(d) {\n * return d.date;\n * });\n * @param {Function} [sortByFunction]\n * @returns {Function|dc.dataGrid}\n */\n _chart.sortBy = function (sortByFunction) {\n if (!arguments.length) {\n return _sortBy;\n }\n _sortBy = sortByFunction;\n return _chart;\n };\n\n /**\n * Get or set sort the order function.\n * @method order\n * @memberof dc.dataGrid\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_ascending d3.ascending}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_descending d3.descending}\n * @example\n * chart.order(d3.descending);\n * @param {Function} [order=d3.ascending]\n * @returns {Function|dc.dataGrid}\n */\n _chart.order = function (order) {\n if (!arguments.length) {\n return _order;\n }\n _order = order;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A concrete implementation of a general purpose bubble chart that allows data visualization using the\n * following dimensions:\n * - x axis position\n * - y axis position\n * - bubble radius\n * - color\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.com/dc.js/vc/index.html US Venture Capital Landscape 2011}\n * @class bubbleChart\n * @memberof dc\n * @mixes dc.bubbleMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a bubble chart under #chart-container1 element using the default global chart group\n * var bubbleChart1 = dc.bubbleChart('#chart-container1');\n * // create a bubble chart under #chart-container2 element using chart group A\n * var bubbleChart2 = dc.bubbleChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.bubbleChart}\n */\ndc.bubbleChart = function (parent, chartGroup) {\n var _chart = dc.bubbleMixin(dc.coordinateGridMixin({}));\n\n _chart.transitionDuration(750);\n\n _chart.transitionDelay(0);\n\n var bubbleLocator = function (d) {\n return 'translate(' + (bubbleX(d)) + ',' + (bubbleY(d)) + ')';\n };\n\n _chart.plotData = function () {\n _chart.calculateRadiusDomain();\n _chart.r().range([_chart.MIN_RADIUS, _chart.xAxisLength() * _chart.maxBubbleRelativeSize()]);\n\n var data = _chart.data();\n var bubbleG = _chart.chartBodyG().selectAll('g.' + _chart.BUBBLE_NODE_CLASS)\n .data(data, function (d) { return d.key; });\n if (_chart.sortBubbleSize()) {\n // update dom order based on sort\n bubbleG.order();\n }\n\n renderNodes(bubbleG);\n\n updateNodes(bubbleG);\n\n removeNodes(bubbleG);\n\n _chart.fadeDeselectedArea();\n };\n\n function renderNodes (bubbleG) {\n var bubbleGEnter = bubbleG.enter().append('g');\n\n bubbleGEnter\n .attr('class', _chart.BUBBLE_NODE_CLASS)\n .attr('transform', bubbleLocator)\n .append('circle').attr('class', function (d, i) {\n return _chart.BUBBLE_CLASS + ' _' + i;\n })\n .on('click', _chart.onClick)\n .attr('fill', _chart.getColor)\n .attr('r', 0);\n dc.transition(bubbleG, _chart.transitionDuration(), _chart.transitionDelay())\n .select('circle.' + _chart.BUBBLE_CLASS)\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('opacity', function (d) {\n return (_chart.bubbleR(d) > 0) ? 1 : 0;\n });\n\n _chart._doRenderLabel(bubbleGEnter);\n\n _chart._doRenderTitles(bubbleGEnter);\n }\n\n function updateNodes (bubbleG) {\n dc.transition(bubbleG, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', bubbleLocator)\n .select('circle.' + _chart.BUBBLE_CLASS)\n .attr('fill', _chart.getColor)\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('opacity', function (d) {\n return (_chart.bubbleR(d) > 0) ? 1 : 0;\n });\n\n _chart.doUpdateLabels(bubbleG);\n _chart.doUpdateTitles(bubbleG);\n }\n\n function removeNodes (bubbleG) {\n bubbleG.exit().remove();\n }\n\n function bubbleX (d) {\n var x = _chart.x()(_chart.keyAccessor()(d));\n if (isNaN(x)) {\n x = 0;\n }\n return x;\n }\n\n function bubbleY (d) {\n var y = _chart.y()(_chart.valueAccessor()(d));\n if (isNaN(y)) {\n y = 0;\n }\n return y;\n }\n\n _chart.renderBrush = function () {\n // override default x axis brush from parent chart\n };\n\n _chart.redrawBrush = function () {\n // override default x axis brush from parent chart\n _chart.fadeDeselectedArea();\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Composite charts are a special kind of chart that render multiple charts on the same Coordinate\n * Grid. You can overlay (compose) different bar/line/area charts in a single composite chart to\n * achieve some quite flexible charting effects.\n * @class compositeChart\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a composite chart under #chart-container1 element using the default global chart group\n * var compositeChart1 = dc.compositeChart('#chart-container1');\n * // create a composite chart under #chart-container2 element using chart group A\n * var compositeChart2 = dc.compositeChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.compositeChart}\n */\ndc.compositeChart = function (parent, chartGroup) {\n\n var SUB_CHART_CLASS = 'sub';\n var DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING = 12;\n\n var _chart = dc.coordinateGridMixin({});\n var _children = [];\n\n var _childOptions = {};\n\n var _shareColors = false,\n _shareTitle = true,\n _alignYAxes = false;\n\n var _rightYAxis = d3.svg.axis(),\n _rightYAxisLabel = 0,\n _rightYAxisLabelPadding = DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING,\n _rightY,\n _rightAxisGridLines = false;\n\n _chart._mandatoryAttributes([]);\n _chart.transitionDuration(500);\n _chart.transitionDelay(0);\n\n dc.override(_chart, '_generateG', function () {\n var g = this.__generateG();\n\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n\n generateChildG(child, i);\n\n if (!child.dimension()) {\n child.dimension(_chart.dimension());\n }\n if (!child.group()) {\n child.group(_chart.group());\n }\n\n child.chartGroup(_chart.chartGroup());\n child.svg(_chart.svg());\n child.xUnits(_chart.xUnits());\n child.transitionDuration(_chart.transitionDuration(), _chart.transitionDelay());\n child.brushOn(_chart.brushOn());\n child.renderTitle(_chart.renderTitle());\n child.elasticX(_chart.elasticX());\n }\n\n return g;\n });\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n var brushIsEmpty = _chart.brushIsEmpty(extent);\n\n for (var i = 0; i < _children.length; ++i) {\n _children[i].replaceFilter(brushIsEmpty ? null : extent);\n }\n };\n\n _chart._prepareYAxis = function () {\n var left = (leftYAxisChildren().length !== 0);\n var right = (rightYAxisChildren().length !== 0);\n var ranges = calculateYAxisRanges(left, right);\n\n if (left) { prepareLeftYAxis(ranges); }\n if (right) { prepareRightYAxis(ranges); }\n\n if (leftYAxisChildren().length > 0 && !_rightAxisGridLines) {\n _chart._renderHorizontalGridLinesForAxis(_chart.g(), _chart.y(), _chart.yAxis());\n } else if (rightYAxisChildren().length > 0) {\n _chart._renderHorizontalGridLinesForAxis(_chart.g(), _rightY, _rightYAxis);\n }\n };\n\n _chart.renderYAxis = function () {\n if (leftYAxisChildren().length !== 0) {\n _chart.renderYAxisAt('y', _chart.yAxis(), _chart.margins().left);\n _chart.renderYAxisLabel('y', _chart.yAxisLabel(), -90);\n }\n\n if (rightYAxisChildren().length !== 0) {\n _chart.renderYAxisAt('yr', _chart.rightYAxis(), _chart.width() - _chart.margins().right);\n _chart.renderYAxisLabel('yr', _chart.rightYAxisLabel(), 90, _chart.width() - _rightYAxisLabelPadding);\n }\n };\n\n function calculateYAxisRanges (left, right) {\n var lyAxisMin, lyAxisMax, ryAxisMin, ryAxisMax;\n var ranges;\n\n if (left) {\n lyAxisMin = yAxisMin();\n lyAxisMax = yAxisMax();\n }\n\n if (right) {\n ryAxisMin = rightYAxisMin();\n ryAxisMax = rightYAxisMax();\n }\n\n if (_chart.alignYAxes() && left && right) {\n ranges = alignYAxisRanges(lyAxisMin, lyAxisMax, ryAxisMin, ryAxisMax);\n }\n\n return ranges || {\n lyAxisMin: lyAxisMin,\n lyAxisMax: lyAxisMax,\n ryAxisMin: ryAxisMin,\n ryAxisMax: ryAxisMax\n };\n }\n\n function alignYAxisRanges (lyAxisMin, lyAxisMax, ryAxisMin, ryAxisMax) {\n // since the two series will share a zero, each Y is just a multiple\n // of the other. and the ratio should be the ratio of the ranges of the\n // input data, so that they come out the same height. so we just min/max\n\n // note: both ranges already include zero due to the stack mixin (#667)\n // if #667 changes, we can reconsider whether we want data height or\n // height from zero to be equal. and it will be possible for the axes\n // to be aligned but not visible.\n var extentRatio = (ryAxisMax - ryAxisMin) / (lyAxisMax - lyAxisMin);\n\n return {\n lyAxisMin: Math.min(lyAxisMin, ryAxisMin / extentRatio),\n lyAxisMax: Math.max(lyAxisMax, ryAxisMax / extentRatio),\n ryAxisMin: Math.min(ryAxisMin, lyAxisMin * extentRatio),\n ryAxisMax: Math.max(ryAxisMax, lyAxisMax * extentRatio)\n };\n }\n\n function prepareRightYAxis (ranges) {\n var needDomain = _chart.rightY() === undefined || _chart.elasticY(),\n needRange = needDomain || _chart.resizing();\n if (_chart.rightY() === undefined) {\n _chart.rightY(d3.scale.linear());\n }\n if (needDomain) {\n _chart.rightY().domain([ranges.ryAxisMin, ranges.ryAxisMax]);\n }\n if (needRange) {\n _chart.rightY().rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _chart.rightY().range([_chart.yAxisHeight(), 0]);\n _chart.rightYAxis(_chart.rightYAxis().scale(_chart.rightY()));\n\n _chart.rightYAxis().orient('right');\n }\n\n function prepareLeftYAxis (ranges) {\n var needDomain = _chart.y() === undefined || _chart.elasticY(),\n needRange = needDomain || _chart.resizing();\n if (_chart.y() === undefined) {\n _chart.y(d3.scale.linear());\n }\n if (needDomain) {\n _chart.y().domain([ranges.lyAxisMin, ranges.lyAxisMax]);\n }\n if (needRange) {\n _chart.y().rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _chart.y().range([_chart.yAxisHeight(), 0]);\n _chart.yAxis(_chart.yAxis().scale(_chart.y()));\n\n _chart.yAxis().orient('left');\n }\n\n function generateChildG (child, i) {\n child._generateG(_chart.g());\n child.g().attr('class', SUB_CHART_CLASS + ' _' + i);\n }\n\n _chart.plotData = function () {\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n\n if (!child.g()) {\n generateChildG(child, i);\n }\n\n if (_shareColors) {\n child.colors(_chart.colors());\n }\n\n child.x(_chart.x());\n\n child.xAxis(_chart.xAxis());\n\n if (child.useRightYAxis()) {\n child.y(_chart.rightY());\n child.yAxis(_chart.rightYAxis());\n } else {\n child.y(_chart.y());\n child.yAxis(_chart.yAxis());\n }\n\n child.plotData();\n\n child._activateRenderlets();\n }\n };\n\n /**\n * Get or set whether to draw gridlines from the right y axis. Drawing from the left y axis is the\n * default behavior. This option is only respected when subcharts with both left and right y-axes\n * are present.\n * @method useRightAxisGridLines\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [useRightAxisGridLines=false]\n * @returns {Boolean|dc.compositeChart}\n */\n _chart.useRightAxisGridLines = function (useRightAxisGridLines) {\n if (!arguments) {\n return _rightAxisGridLines;\n }\n\n _rightAxisGridLines = useRightAxisGridLines;\n return _chart;\n };\n\n /**\n * Get or set chart-specific options for all child charts. This is equivalent to calling\n * {@link dc.baseMixin#options .options} on each child chart.\n * @method childOptions\n * @memberof dc.compositeChart\n * @instance\n * @param {Object} [childOptions]\n * @returns {Object|dc.compositeChart}\n */\n _chart.childOptions = function (childOptions) {\n if (!arguments.length) {\n return _childOptions;\n }\n _childOptions = childOptions;\n _children.forEach(function (child) {\n child.options(_childOptions);\n });\n return _chart;\n };\n\n _chart.fadeDeselectedArea = function () {\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n child.brush(_chart.brush());\n child.fadeDeselectedArea();\n }\n };\n\n /**\n * Set or get the right y axis label.\n * @method rightYAxisLabel\n * @memberof dc.compositeChart\n * @instance\n * @param {String} [rightYAxisLabel]\n * @param {Number} [padding]\n * @returns {String|dc.compositeChart}\n */\n _chart.rightYAxisLabel = function (rightYAxisLabel, padding) {\n if (!arguments.length) {\n return _rightYAxisLabel;\n }\n _rightYAxisLabel = rightYAxisLabel;\n _chart.margins().right -= _rightYAxisLabelPadding;\n _rightYAxisLabelPadding = (padding === undefined) ? DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING : padding;\n _chart.margins().right += _rightYAxisLabelPadding;\n return _chart;\n };\n\n /**\n * Combine the given charts into one single composite coordinate grid chart.\n * @method compose\n * @memberof dc.compositeChart\n * @instance\n * @example\n * moveChart.compose([\n * // when creating sub-chart you need to pass in the parent chart\n * dc.lineChart(moveChart)\n * .group(indexAvgByMonthGroup) // if group is missing then parent's group will be used\n * .valueAccessor(function (d){return d.value.avg;})\n * // most of the normal functions will continue to work in a composed chart\n * .renderArea(true)\n * .stack(monthlyMoveGroup, function (d){return d.value;})\n * .title(function (d){\n * var value = d.value.avg?d.value.avg:d.value;\n * if(isNaN(value)) value = 0;\n * return dateFormat(d.key) + '\\n' + numberFormat(value);\n * }),\n * dc.barChart(moveChart)\n * .group(volumeByMonthGroup)\n * .centerBar(true)\n * ]);\n * @param {Array<Chart>} [subChartArray]\n * @returns {dc.compositeChart}\n */\n _chart.compose = function (subChartArray) {\n _children = subChartArray;\n _children.forEach(function (child) {\n child.height(_chart.height());\n child.width(_chart.width());\n child.margins(_chart.margins());\n\n if (_shareTitle) {\n child.title(_chart.title());\n }\n\n child.options(_childOptions);\n });\n return _chart;\n };\n\n /**\n * Returns the child charts which are composed into the composite chart.\n * @method children\n * @memberof dc.compositeChart\n * @instance\n * @returns {Array<dc.baseMixin>}\n */\n _chart.children = function () {\n return _children;\n };\n\n /**\n * Get or set color sharing for the chart. If set, the {@link dc.colorMixin#colors .colors()} value from this chart\n * will be shared with composed children. Additionally if the child chart implements\n * Stackable and has not set a custom .colorAccessor, then it will generate a color\n * specific to its order in the composition.\n * @method shareColors\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [shareColors=false]\n * @returns {Boolean|dc.compositeChart}\n */\n _chart.shareColors = function (shareColors) {\n if (!arguments.length) {\n return _shareColors;\n }\n _shareColors = shareColors;\n return _chart;\n };\n\n /**\n * Get or set title sharing for the chart. If set, the {@link dc.baseMixin#title .title()} value from\n * this chart will be shared with composed children.\n * @method shareTitle\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [shareTitle=true]\n * @returns {Boolean|dc.compositeChart}\n */\n _chart.shareTitle = function (shareTitle) {\n if (!arguments.length) {\n return _shareTitle;\n }\n _shareTitle = shareTitle;\n return _chart;\n };\n\n /**\n * Get or set the y scale for the right axis. The right y scale is typically automatically\n * generated by the chart implementation.\n * @method rightY\n * @memberof dc.compositeChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @param {d3.scale} [yScale]\n * @returns {d3.scale|dc.compositeChart}\n */\n _chart.rightY = function (yScale) {\n if (!arguments.length) {\n return _rightY;\n }\n _rightY = yScale;\n _chart.rescale();\n return _chart;\n };\n\n /**\n * Get or set alignment between left and right y axes. A line connecting '0' on both y axis\n * will be parallel to x axis. This only has effect when {@link #dc.coordinateGridMixin+elasticY elasticY} is true.\n * @method alignYAxes\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [alignYAxes=false]\n * @returns {Chart}\n */\n _chart.alignYAxes = function (alignYAxes) {\n if (!arguments.length) {\n return _alignYAxes;\n }\n _alignYAxes = alignYAxes;\n _chart.rescale();\n return _chart;\n };\n\n function leftYAxisChildren () {\n return _children.filter(function (child) {\n return !child.useRightYAxis();\n });\n }\n\n function rightYAxisChildren () {\n return _children.filter(function (child) {\n return child.useRightYAxis();\n });\n }\n\n function getYAxisMin (charts) {\n return charts.map(function (c) {\n return c.yAxisMin();\n });\n }\n\n delete _chart.yAxisMin;\n function yAxisMin () {\n return d3.min(getYAxisMin(leftYAxisChildren()));\n }\n\n function rightYAxisMin () {\n return d3.min(getYAxisMin(rightYAxisChildren()));\n }\n\n function getYAxisMax (charts) {\n return charts.map(function (c) {\n return c.yAxisMax();\n });\n }\n\n delete _chart.yAxisMax;\n function yAxisMax () {\n return dc.utils.add(d3.max(getYAxisMax(leftYAxisChildren())), _chart.yAxisPadding());\n }\n\n function rightYAxisMax () {\n return dc.utils.add(d3.max(getYAxisMax(rightYAxisChildren())), _chart.yAxisPadding());\n }\n\n function getAllXAxisMinFromChildCharts () {\n return _children.map(function (c) {\n return c.xAxisMin();\n });\n }\n\n dc.override(_chart, 'xAxisMin', function () {\n return dc.utils.subtract(d3.min(getAllXAxisMinFromChildCharts()), _chart.xAxisPadding());\n });\n\n function getAllXAxisMaxFromChildCharts () {\n return _children.map(function (c) {\n return c.xAxisMax();\n });\n }\n\n dc.override(_chart, 'xAxisMax', function () {\n return dc.utils.add(d3.max(getAllXAxisMaxFromChildCharts()), _chart.xAxisPadding());\n });\n\n _chart.legendables = function () {\n return _children.reduce(function (items, child) {\n if (_shareColors) {\n child.colors(_chart.colors());\n }\n items.push.apply(items, child.legendables());\n return items;\n }, []);\n };\n\n _chart.legendHighlight = function (d) {\n for (var j = 0; j < _children.length; ++j) {\n var child = _children[j];\n child.legendHighlight(d);\n }\n };\n\n _chart.legendReset = function (d) {\n for (var j = 0; j < _children.length; ++j) {\n var child = _children[j];\n child.legendReset(d);\n }\n };\n\n _chart.legendToggle = function () {\n console.log('composite should not be getting legendToggle itself');\n };\n\n /**\n * Set or get the right y axis used by the composite chart. This function is most useful when y\n * axis customization is required. The y axis in dc.js is an instance of a [d3 axis\n * object](https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis) therefore it supports any valid\n * d3 axis manipulation.\n *\n * **Caution**: The y axis is usually generated internally by dc; resetting it may cause\n * unexpected results.\n * @method rightYAxis\n * @memberof dc.compositeChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3.svg.axis}\n * @example\n * // customize y axis tick format\n * chart.rightYAxis().tickFormat(function (v) {return v + '%';});\n * // customize y axis tick values\n * chart.rightYAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [rightYAxis]\n * @returns {d3.svg.axis|dc.compositeChart}\n */\n _chart.rightYAxis = function (rightYAxis) {\n if (!arguments.length) {\n return _rightYAxis;\n }\n _rightYAxis = rightYAxis;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A series chart is a chart that shows multiple series of data overlaid on one chart, where the\n * series is specified in the data. It is a specialization of Composite Chart and inherits all\n * composite features other than recomposing the chart.\n *\n * Examples:\n * - {@link http://dc-js.github.io/dc.js/examples/series.html Series Chart}\n * @class seriesChart\n * @memberof dc\n * @mixes dc.compositeChart\n * @example\n * // create a series chart under #chart-container1 element using the default global chart group\n * var seriesChart1 = dc.seriesChart(\"#chart-container1\");\n * // create a series chart under #chart-container2 element using chart group A\n * var seriesChart2 = dc.seriesChart(\"#chart-container2\", \"chartGroupA\");\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.seriesChart}\n */\ndc.seriesChart = function (parent, chartGroup) {\n var _chart = dc.compositeChart(parent, chartGroup);\n\n function keySort (a, b) {\n return d3.ascending(_chart.keyAccessor()(a), _chart.keyAccessor()(b));\n }\n\n var _charts = {};\n var _chartFunction = dc.lineChart;\n var _seriesAccessor;\n var _seriesSort = d3.ascending;\n var _valueSort = keySort;\n\n _chart._mandatoryAttributes().push('seriesAccessor', 'chart');\n _chart.shareColors(true);\n\n _chart._preprocessData = function () {\n var keep = [];\n var childrenChanged;\n var nester = d3.nest().key(_seriesAccessor);\n if (_seriesSort) {\n nester.sortKeys(_seriesSort);\n }\n if (_valueSort) {\n nester.sortValues(_valueSort);\n }\n var nesting = nester.entries(_chart.data());\n var children =\n nesting.map(function (sub, i) {\n var subChart = _charts[sub.key] || _chartFunction.call(_chart, _chart, chartGroup, sub.key, i);\n if (!_charts[sub.key]) {\n childrenChanged = true;\n }\n _charts[sub.key] = subChart;\n keep.push(sub.key);\n return subChart\n .dimension(_chart.dimension())\n .group({all: d3.functor(sub.values)}, sub.key)\n .keyAccessor(_chart.keyAccessor())\n .valueAccessor(_chart.valueAccessor())\n .brushOn(_chart.brushOn());\n });\n // this works around the fact compositeChart doesn't really\n // have a removal interface\n Object.keys(_charts)\n .filter(function (c) {return keep.indexOf(c) === -1;})\n .forEach(function (c) {\n clearChart(c);\n childrenChanged = true;\n });\n _chart._compose(children);\n if (childrenChanged && _chart.legend()) {\n _chart.legend().render();\n }\n };\n\n function clearChart (c) {\n if (_charts[c].g()) {\n _charts[c].g().remove();\n }\n delete _charts[c];\n }\n\n function resetChildren () {\n Object.keys(_charts).map(clearChart);\n _charts = {};\n }\n\n /**\n * Get or set the chart function, which generates the child charts.\n * @method chart\n * @memberof dc.seriesChart\n * @instance\n * @example\n * // put interpolation on the line charts used for the series\n * chart.chart(function(c) { return dc.lineChart(c).interpolate('basis'); })\n * // do a scatter series chart\n * chart.chart(dc.scatterPlot)\n * @param {Function} [chartFunction=dc.lineChart]\n * @returns {Function|dc.seriesChart}\n */\n _chart.chart = function (chartFunction) {\n if (!arguments.length) {\n return _chartFunction;\n }\n _chartFunction = chartFunction;\n resetChildren();\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Get or set accessor function for the displayed series. Given a datum, this function\n * should return the series that datum belongs to.\n * @method seriesAccessor\n * @memberof dc.seriesChart\n * @instance\n * @example\n * // simple series accessor\n * chart.seriesAccessor(function(d) { return \"Expt: \" + d.key[0]; })\n * @param {Function} [accessor]\n * @returns {Function|dc.seriesChart}\n */\n _chart.seriesAccessor = function (accessor) {\n if (!arguments.length) {\n return _seriesAccessor;\n }\n _seriesAccessor = accessor;\n resetChildren();\n return _chart;\n };\n\n /**\n * Get or set a function to sort the list of series by, given series values.\n * @method seriesSort\n * @memberof dc.seriesChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_ascending d3.ascending}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_descending d3.descending}\n * @example\n * chart.seriesSort(d3.descending);\n * @param {Function} [sortFunction=d3.ascending]\n * @returns {Function|dc.seriesChart}\n */\n _chart.seriesSort = function (sortFunction) {\n if (!arguments.length) {\n return _seriesSort;\n }\n _seriesSort = sortFunction;\n resetChildren();\n return _chart;\n };\n\n /**\n * Get or set a function to sort each series values by. By default this is the key accessor which,\n * for example, will ensure a lineChart series connects its points in increasing key/x order,\n * rather than haphazardly.\n * @method valueSort\n * @memberof dc.seriesChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_ascending d3.ascending}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_descending d3.descending}\n * @example\n * // Default value sort\n * _chart.valueSort(function keySort (a, b) {\n * return d3.ascending(_chart.keyAccessor()(a), _chart.keyAccessor()(b));\n * });\n * @param {Function} [sortFunction]\n * @returns {Function|dc.seriesChart}\n */\n _chart.valueSort = function (sortFunction) {\n if (!arguments.length) {\n return _valueSort;\n }\n _valueSort = sortFunction;\n resetChildren();\n return _chart;\n };\n\n // make compose private\n _chart._compose = _chart.compose;\n delete _chart.compose;\n\n return _chart;\n};\n","/**\n * The geo choropleth chart is designed as an easy way to create a crossfilter driven choropleth map\n * from GeoJson data. This chart implementation was inspired by\n * {@link http://bl.ocks.org/4060606 the great d3 choropleth example}.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/vc/index.html US Venture Capital Landscape 2011}\n * @class geoChoroplethChart\n * @memberof dc\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a choropleth chart under '#us-chart' element using the default global chart group\n * var chart1 = dc.geoChoroplethChart('#us-chart');\n * // create a choropleth chart under '#us-chart2' element using chart group A\n * var chart2 = dc.compositeChart('#us-chart2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.geoChoroplethChart}\n */\ndc.geoChoroplethChart = function (parent, chartGroup) {\n var _chart = dc.colorMixin(dc.baseMixin({}));\n\n _chart.colorAccessor(function (d) {\n return d || 0;\n });\n\n var _geoPath = d3.geo.path();\n var _projectionFlag;\n\n var _geoJsons = [];\n\n _chart._doRender = function () {\n _chart.resetSvg();\n for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) {\n var states = _chart.svg().append('g')\n .attr('class', 'layer' + layerIndex);\n\n var regionG = states.selectAll('g.' + geoJson(layerIndex).name)\n .data(geoJson(layerIndex).data)\n .enter()\n .append('g')\n .attr('class', geoJson(layerIndex).name);\n\n regionG\n .append('path')\n .attr('fill', 'white')\n .attr('d', _geoPath);\n\n regionG.append('title');\n\n plotData(layerIndex);\n }\n _projectionFlag = false;\n };\n\n function plotData (layerIndex) {\n var data = generateLayeredData();\n\n if (isDataLayer(layerIndex)) {\n var regionG = renderRegionG(layerIndex);\n\n renderPaths(regionG, layerIndex, data);\n\n renderTitle(regionG, layerIndex, data);\n }\n }\n\n function generateLayeredData () {\n var data = {};\n var groupAll = _chart.data();\n for (var i = 0; i < groupAll.length; ++i) {\n data[_chart.keyAccessor()(groupAll[i])] = _chart.valueAccessor()(groupAll[i]);\n }\n return data;\n }\n\n function isDataLayer (layerIndex) {\n return geoJson(layerIndex).keyAccessor;\n }\n\n function renderRegionG (layerIndex) {\n var regionG = _chart.svg()\n .selectAll(layerSelector(layerIndex))\n .classed('selected', function (d) {\n return isSelected(layerIndex, d);\n })\n .classed('deselected', function (d) {\n return isDeselected(layerIndex, d);\n })\n .attr('class', function (d) {\n var layerNameClass = geoJson(layerIndex).name;\n var regionClass = dc.utils.nameToId(geoJson(layerIndex).keyAccessor(d));\n var baseClasses = layerNameClass + ' ' + regionClass;\n if (isSelected(layerIndex, d)) {\n baseClasses += ' selected';\n }\n if (isDeselected(layerIndex, d)) {\n baseClasses += ' deselected';\n }\n return baseClasses;\n });\n return regionG;\n }\n\n function layerSelector (layerIndex) {\n return 'g.layer' + layerIndex + ' g.' + geoJson(layerIndex).name;\n }\n\n function isSelected (layerIndex, d) {\n return _chart.hasFilter() && _chart.hasFilter(getKey(layerIndex, d));\n }\n\n function isDeselected (layerIndex, d) {\n return _chart.hasFilter() && !_chart.hasFilter(getKey(layerIndex, d));\n }\n\n function getKey (layerIndex, d) {\n return geoJson(layerIndex).keyAccessor(d);\n }\n\n function geoJson (index) {\n return _geoJsons[index];\n }\n\n function renderPaths (regionG, layerIndex, data) {\n var paths = regionG\n .select('path')\n .attr('fill', function () {\n var currentFill = d3.select(this).attr('fill');\n if (currentFill) {\n return currentFill;\n }\n return 'none';\n })\n .on('click', function (d) {\n return _chart.onClick(d, layerIndex);\n });\n\n dc.transition(paths, _chart.transitionDuration(), _chart.transitionDelay()).attr('fill', function (d, i) {\n return _chart.getColor(data[geoJson(layerIndex).keyAccessor(d)], i);\n });\n }\n\n _chart.onClick = function (d, layerIndex) {\n var selectedRegion = geoJson(layerIndex).keyAccessor(d);\n dc.events.trigger(function () {\n _chart.filter(selectedRegion);\n _chart.redrawGroup();\n });\n };\n\n function renderTitle (regionG, layerIndex, data) {\n if (_chart.renderTitle()) {\n regionG.selectAll('title').text(function (d) {\n var key = getKey(layerIndex, d);\n var value = data[key];\n return _chart.title()({key: key, value: value});\n });\n }\n }\n\n _chart._doRedraw = function () {\n for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) {\n plotData(layerIndex);\n if (_projectionFlag) {\n _chart.svg().selectAll('g.' + geoJson(layerIndex).name + ' path').attr('d', _geoPath);\n }\n }\n _projectionFlag = false;\n };\n\n /**\n * **mandatory**\n *\n * Use this function to insert a new GeoJson map layer. This function can be invoked multiple times\n * if you have multiple GeoJson data layers to render on top of each other. If you overlay multiple\n * layers with the same name the new overlay will override the existing one.\n * @method overlayGeoJson\n * @memberof dc.geoChoroplethChart\n * @instance\n * @see {@link http://geojson.org/ GeoJSON}\n * @see {@link https://github.com/topojson/topojson/wiki TopoJSON}\n * @see {@link https://github.com/topojson/topojson-1.x-api-reference/blob/master/API-Reference.md#wiki-feature topojson.feature}\n * @example\n * // insert a layer for rendering US states\n * chart.overlayGeoJson(statesJson.features, 'state', function(d) {\n * return d.properties.name;\n * });\n * @param {geoJson} json - a geojson feed\n * @param {String} name - name of the layer\n * @param {Function} keyAccessor - accessor function used to extract 'key' from the GeoJson data. The key extracted by\n * this function should match the keys returned by the crossfilter groups.\n * @returns {dc.geoChoroplethChart}\n */\n _chart.overlayGeoJson = function (json, name, keyAccessor) {\n for (var i = 0; i < _geoJsons.length; ++i) {\n if (_geoJsons[i].name === name) {\n _geoJsons[i].data = json;\n _geoJsons[i].keyAccessor = keyAccessor;\n return _chart;\n }\n }\n _geoJsons.push({name: name, data: json, keyAccessor: keyAccessor});\n return _chart;\n };\n\n /**\n * Set custom geo projection function. See the available\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Projections.md d3 geo projection functions}.\n * @method projection\n * @memberof dc.geoChoroplethChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Projections.md d3.geo.projection}\n * @see {@link https://github.com/d3/d3-geo-projection Extended d3.geo.projection}\n * @param {d3.projection} [projection=d3.geo.albersUsa()]\n * @returns {dc.geoChoroplethChart}\n */\n _chart.projection = function (projection) {\n _geoPath.projection(projection);\n _projectionFlag = true;\n return _chart;\n };\n\n /**\n * Returns all GeoJson layers currently registered with this chart. The returned array is a\n * reference to this chart's internal data structure, so any modification to this array will also\n * modify this chart's internal registration.\n * @method geoJsons\n * @memberof dc.geoChoroplethChart\n * @instance\n * @returns {Array<{name:String, data: Object, accessor: Function}>}\n */\n _chart.geoJsons = function () {\n return _geoJsons;\n };\n\n /**\n * Returns the {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Paths.md#path d3.geo.path} object used to\n * render the projection and features. Can be useful for figuring out the bounding box of the\n * feature set and thus a way to calculate scale and translation for the projection.\n * @method geoPath\n * @memberof dc.geoChoroplethChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Paths.md#path d3.geo.path}\n * @returns {d3.geo.path}\n */\n _chart.geoPath = function () {\n return _geoPath;\n };\n\n /**\n * Remove a GeoJson layer from this chart by name\n * @method removeGeoJson\n * @memberof dc.geoChoroplethChart\n * @instance\n * @param {String} name\n * @returns {dc.geoChoroplethChart}\n */\n _chart.removeGeoJson = function (name) {\n var geoJsons = [];\n\n for (var i = 0; i < _geoJsons.length; ++i) {\n var layer = _geoJsons[i];\n if (layer.name !== name) {\n geoJsons.push(layer);\n }\n }\n\n _geoJsons = geoJsons;\n\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The bubble overlay chart is quite different from the typical bubble chart. With the bubble overlay\n * chart you can arbitrarily place bubbles on an existing svg or bitmap image, thus changing the\n * typical x and y positioning while retaining the capability to visualize data using bubble radius\n * and coloring.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/crime/index.html Canadian City Crime Stats}\n * @class bubbleOverlay\n * @memberof dc\n * @mixes dc.bubbleMixin\n * @mixes dc.baseMixin\n * @example\n * // create a bubble overlay chart on top of the '#chart-container1 svg' element using the default global chart group\n * var bubbleChart1 = dc.bubbleOverlayChart('#chart-container1').svg(d3.select('#chart-container1 svg'));\n * // create a bubble overlay chart on top of the '#chart-container2 svg' element using chart group A\n * var bubbleChart2 = dc.compositeChart('#chart-container2', 'chartGroupA').svg(d3.select('#chart-container2 svg'));\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.bubbleOverlay}\n */\ndc.bubbleOverlay = function (parent, chartGroup) {\n var BUBBLE_OVERLAY_CLASS = 'bubble-overlay';\n var BUBBLE_NODE_CLASS = 'node';\n var BUBBLE_CLASS = 'bubble';\n\n /**\n * **mandatory**\n *\n * Set the underlying svg image element. Unlike other dc charts this chart will not generate a svg\n * element; therefore the bubble overlay chart will not work if this function is not invoked. If the\n * underlying image is a bitmap, then an empty svg will need to be created on top of the image.\n * @method svg\n * @memberof dc.bubbleOverlay\n * @instance\n * @example\n * // set up underlying svg element\n * chart.svg(d3.select('#chart svg'));\n * @param {SVGElement|d3.selection} [imageElement]\n * @returns {dc.bubbleOverlay}\n */\n var _chart = dc.bubbleMixin(dc.baseMixin({}));\n var _g;\n var _points = [];\n\n _chart.transitionDuration(750);\n\n _chart.transitionDelay(0);\n\n _chart.radiusValueAccessor(function (d) {\n return d.value;\n });\n\n /**\n * **mandatory**\n *\n * Set up a data point on the overlay. The name of a data point should match a specific 'key' among\n * data groups generated using keyAccessor. If a match is found (point name <-> data group key)\n * then a bubble will be generated at the position specified by the function. x and y\n * value specified here are relative to the underlying svg.\n * @method point\n * @memberof dc.bubbleOverlay\n * @instance\n * @param {String} name\n * @param {Number} x\n * @param {Number} y\n * @returns {dc.bubbleOverlay}\n */\n _chart.point = function (name, x, y) {\n _points.push({name: name, x: x, y: y});\n return _chart;\n };\n\n _chart._doRender = function () {\n _g = initOverlayG();\n\n _chart.r().range([_chart.MIN_RADIUS, _chart.width() * _chart.maxBubbleRelativeSize()]);\n\n initializeBubbles();\n\n _chart.fadeDeselectedArea();\n\n return _chart;\n };\n\n function initOverlayG () {\n _g = _chart.select('g.' + BUBBLE_OVERLAY_CLASS);\n if (_g.empty()) {\n _g = _chart.svg().append('g').attr('class', BUBBLE_OVERLAY_CLASS);\n }\n return _g;\n }\n\n function initializeBubbles () {\n var data = mapData();\n _chart.calculateRadiusDomain();\n\n _points.forEach(function (point) {\n var nodeG = getNodeG(point, data);\n\n var circle = nodeG.select('circle.' + BUBBLE_CLASS);\n\n if (circle.empty()) {\n circle = nodeG.append('circle')\n .attr('class', BUBBLE_CLASS)\n .attr('r', 0)\n .attr('fill', _chart.getColor)\n .on('click', _chart.onClick);\n }\n\n dc.transition(circle, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n });\n\n _chart._doRenderLabel(nodeG);\n\n _chart._doRenderTitles(nodeG);\n });\n }\n\n function mapData () {\n var data = {};\n _chart.data().forEach(function (datum) {\n data[_chart.keyAccessor()(datum)] = datum;\n });\n return data;\n }\n\n function getNodeG (point, data) {\n var bubbleNodeClass = BUBBLE_NODE_CLASS + ' ' + dc.utils.nameToId(point.name);\n\n var nodeG = _g.select('g.' + dc.utils.nameToId(point.name));\n\n if (nodeG.empty()) {\n nodeG = _g.append('g')\n .attr('class', bubbleNodeClass)\n .attr('transform', 'translate(' + point.x + ',' + point.y + ')');\n }\n\n nodeG.datum(data[point.name]);\n\n return nodeG;\n }\n\n _chart._doRedraw = function () {\n updateBubbles();\n\n _chart.fadeDeselectedArea();\n\n return _chart;\n };\n\n function updateBubbles () {\n var data = mapData();\n _chart.calculateRadiusDomain();\n\n _points.forEach(function (point) {\n var nodeG = getNodeG(point, data);\n\n var circle = nodeG.select('circle.' + BUBBLE_CLASS);\n\n dc.transition(circle, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('fill', _chart.getColor);\n\n _chart.doUpdateLabels(nodeG);\n\n _chart.doUpdateTitles(nodeG);\n });\n }\n\n _chart.debug = function (flag) {\n if (flag) {\n var debugG = _chart.select('g.' + dc.constants.DEBUG_GROUP_CLASS);\n\n if (debugG.empty()) {\n debugG = _chart.svg()\n .append('g')\n .attr('class', dc.constants.DEBUG_GROUP_CLASS);\n }\n\n var debugText = debugG.append('text')\n .attr('x', 10)\n .attr('y', 20);\n\n debugG\n .append('rect')\n .attr('width', _chart.width())\n .attr('height', _chart.height())\n .on('mousemove', function () {\n var position = d3.mouse(debugG.node());\n var msg = position[0] + ', ' + position[1];\n debugText.text(msg);\n });\n } else {\n _chart.selectAll('.debug').remove();\n }\n\n return _chart;\n };\n\n _chart.anchor(parent, chartGroup);\n\n return _chart;\n};\n","/**\n * Concrete row chart implementation.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * @class rowChart\n * @memberof dc\n * @mixes dc.capMixin\n * @mixes dc.marginMixin\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a row chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.rowChart('#chart-container1');\n * // create a row chart under #chart-container2 element using chart group A\n * var chart2 = dc.rowChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.rowChart}\n */\ndc.rowChart = function (parent, chartGroup) {\n\n var _g;\n\n var _labelOffsetX = 10;\n var _labelOffsetY = 15;\n var _hasLabelOffsetY = false;\n var _dyOffset = '0.35em'; // this helps center labels https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#svg_text\n var _titleLabelOffsetX = 2;\n\n var _gap = 5;\n\n var _fixedBarHeight = false;\n var _rowCssClass = 'row';\n var _titleRowCssClass = 'titlerow';\n var _renderTitleLabel = false;\n\n var _chart = dc.capMixin(dc.marginMixin(dc.colorMixin(dc.baseMixin({}))));\n\n var _x;\n\n var _elasticX;\n\n var _xAxis = d3.svg.axis().orient('bottom');\n\n var _rowData;\n\n _chart.rowsCap = _chart.cap;\n\n function calculateAxisScale () {\n if (!_x || _elasticX) {\n var extent = d3.extent(_rowData, _chart.cappedValueAccessor);\n if (extent[0] > 0) {\n extent[0] = 0;\n }\n if (extent[1] < 0) {\n extent[1] = 0;\n }\n _x = d3.scale.linear().domain(extent)\n .range([0, _chart.effectiveWidth()]);\n }\n _xAxis.scale(_x);\n }\n\n function drawAxis () {\n var axisG = _g.select('g.axis');\n\n calculateAxisScale();\n\n if (axisG.empty()) {\n axisG = _g.append('g').attr('class', 'axis');\n }\n axisG.attr('transform', 'translate(0, ' + _chart.effectiveHeight() + ')');\n\n dc.transition(axisG, _chart.transitionDuration(), _chart.transitionDelay())\n .call(_xAxis);\n }\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _g = _chart.svg()\n .append('g')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n\n drawChart();\n\n return _chart;\n };\n\n _chart.title(function (d) {\n return _chart.cappedKeyAccessor(d) + ': ' + _chart.cappedValueAccessor(d);\n });\n\n _chart.label(_chart.cappedKeyAccessor);\n\n /**\n * Gets or sets the x scale. The x scale can be any d3\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md quantitive scale}.\n * @method x\n * @memberof dc.rowChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md quantitive scale}\n * @param {d3.scale} [scale]\n * @returns {d3.scale|dc.rowChart}\n */\n _chart.x = function (scale) {\n if (!arguments.length) {\n return _x;\n }\n _x = scale;\n return _chart;\n };\n\n function drawGridLines () {\n _g.selectAll('g.tick')\n .select('line.grid-line')\n .remove();\n\n _g.selectAll('g.tick')\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', 0)\n .attr('y2', function () {\n return -_chart.effectiveHeight();\n });\n }\n\n function drawChart () {\n _rowData = _chart.data();\n\n drawAxis();\n drawGridLines();\n\n var rows = _g.selectAll('g.' + _rowCssClass)\n .data(_rowData);\n\n createElements(rows);\n removeElements(rows);\n updateElements(rows);\n }\n\n function createElements (rows) {\n var rowEnter = rows.enter()\n .append('g')\n .attr('class', function (d, i) {\n return _rowCssClass + ' _' + i;\n });\n\n rowEnter.append('rect').attr('width', 0);\n\n createLabels(rowEnter);\n }\n\n function removeElements (rows) {\n rows.exit().remove();\n }\n\n function rootValue () {\n var root = _x(0);\n return (root === -Infinity || root !== root) ? _x(1) : root;\n }\n\n function updateElements (rows) {\n var n = _rowData.length;\n\n var height;\n if (!_fixedBarHeight) {\n height = (_chart.effectiveHeight() - (n + 1) * _gap) / n;\n } else {\n height = _fixedBarHeight;\n }\n\n // vertically align label in center unless they override the value via property setter\n if (!_hasLabelOffsetY) {\n _labelOffsetY = height / 2;\n }\n\n var rect = rows.attr('transform', function (d, i) {\n return 'translate(0,' + ((i + 1) * _gap + i * height) + ')';\n }).select('rect')\n .attr('height', height)\n .attr('fill', _chart.getColor)\n .on('click', onClick)\n .classed('deselected', function (d) {\n return (_chart.hasFilter()) ? !isSelectedRow(d) : false;\n })\n .classed('selected', function (d) {\n return (_chart.hasFilter()) ? isSelectedRow(d) : false;\n });\n\n dc.transition(rect, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('width', function (d) {\n return Math.abs(rootValue() - _x(_chart.valueAccessor()(d)));\n })\n .attr('transform', translateX);\n\n createTitles(rows);\n updateLabels(rows);\n }\n\n function createTitles (rows) {\n if (_chart.renderTitle()) {\n rows.select('title').remove();\n rows.append('title').text(_chart.title());\n }\n }\n\n function createLabels (rowEnter) {\n if (_chart.renderLabel()) {\n rowEnter.append('text')\n .on('click', onClick);\n }\n if (_chart.renderTitleLabel()) {\n rowEnter.append('text')\n .attr('class', _titleRowCssClass)\n .on('click', onClick);\n }\n }\n\n function updateLabels (rows) {\n if (_chart.renderLabel()) {\n var lab = rows.select('text')\n .attr('x', _labelOffsetX)\n .attr('y', _labelOffsetY)\n .attr('dy', _dyOffset)\n .on('click', onClick)\n .attr('class', function (d, i) {\n return _rowCssClass + ' _' + i;\n })\n .text(function (d) {\n return _chart.label()(d);\n });\n dc.transition(lab, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', translateX);\n }\n if (_chart.renderTitleLabel()) {\n var titlelab = rows.select('.' + _titleRowCssClass)\n .attr('x', _chart.effectiveWidth() - _titleLabelOffsetX)\n .attr('y', _labelOffsetY)\n .attr('dy', _dyOffset)\n .attr('text-anchor', 'end')\n .on('click', onClick)\n .attr('class', function (d, i) {\n return _titleRowCssClass + ' _' + i ;\n })\n .text(function (d) {\n return _chart.title()(d);\n });\n dc.transition(titlelab, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', translateX);\n }\n }\n\n /**\n * Turn on/off Title label rendering (values) using SVG style of text-anchor 'end'.\n * @method renderTitleLabel\n * @memberof dc.rowChart\n * @instance\n * @param {Boolean} [renderTitleLabel=false]\n * @returns {Boolean|dc.rowChart}\n */\n _chart.renderTitleLabel = function (renderTitleLabel) {\n if (!arguments.length) {\n return _renderTitleLabel;\n }\n _renderTitleLabel = renderTitleLabel;\n return _chart;\n };\n\n function onClick (d) {\n _chart.onClick(d);\n }\n\n function translateX (d) {\n var x = _x(_chart.cappedValueAccessor(d)),\n x0 = rootValue(),\n s = x > x0 ? x0 : x;\n return 'translate(' + s + ',0)';\n }\n\n _chart._doRedraw = function () {\n drawChart();\n return _chart;\n };\n\n /**\n * Get the x axis for the row chart instance. Note: not settable for row charts.\n * See the {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3 axis object}\n * documention for more information.\n * @method xAxis\n * @memberof dc.rowChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3.svg.axis}\n * @example\n * // customize x axis tick format\n * chart.xAxis().tickFormat(function (v) {return v + '%';});\n * // customize x axis tick values\n * chart.xAxis().tickValues([0, 100, 200, 300]);\n * @returns {d3.svg.axis}\n */\n _chart.xAxis = function () {\n return _xAxis;\n };\n\n /**\n * Get or set the fixed bar height. Default is [false] which will auto-scale bars.\n * For example, if you want to fix the height for a specific number of bars (useful in TopN charts)\n * you could fix height as follows (where count = total number of bars in your TopN and gap is\n * your vertical gap space).\n * @method fixedBarHeight\n * @memberof dc.rowChart\n * @instance\n * @example\n * chart.fixedBarHeight( chartheight - (count + 1) * gap / count);\n * @param {Boolean|Number} [fixedBarHeight=false]\n * @returns {Boolean|Number|dc.rowChart}\n */\n _chart.fixedBarHeight = function (fixedBarHeight) {\n if (!arguments.length) {\n return _fixedBarHeight;\n }\n _fixedBarHeight = fixedBarHeight;\n return _chart;\n };\n\n /**\n * Get or set the vertical gap space between rows on a particular row chart instance.\n * @method gap\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [gap=5]\n * @returns {Number|dc.rowChart}\n */\n _chart.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _chart;\n };\n\n /**\n * Get or set the elasticity on x axis. If this attribute is set to true, then the x axis will rescle to auto-fit the\n * data range when filtered.\n * @method elasticX\n * @memberof dc.rowChart\n * @instance\n * @param {Boolean} [elasticX]\n * @returns {Boolean|dc.rowChart}\n */\n _chart.elasticX = function (elasticX) {\n if (!arguments.length) {\n return _elasticX;\n }\n _elasticX = elasticX;\n return _chart;\n };\n\n /**\n * Get or set the x offset (horizontal space to the top left corner of a row) for labels on a particular row chart.\n * @method labelOffsetX\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [labelOffsetX=10]\n * @returns {Number|dc.rowChart}\n */\n _chart.labelOffsetX = function (labelOffsetX) {\n if (!arguments.length) {\n return _labelOffsetX;\n }\n _labelOffsetX = labelOffsetX;\n return _chart;\n };\n\n /**\n * Get or set the y offset (vertical space to the top left corner of a row) for labels on a particular row chart.\n * @method labelOffsetY\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [labelOffsety=15]\n * @returns {Number|dc.rowChart}\n */\n _chart.labelOffsetY = function (labelOffsety) {\n if (!arguments.length) {\n return _labelOffsetY;\n }\n _labelOffsetY = labelOffsety;\n _hasLabelOffsetY = true;\n return _chart;\n };\n\n /**\n * Get of set the x offset (horizontal space between right edge of row and right edge or text.\n * @method titleLabelOffsetX\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [titleLabelOffsetX=2]\n * @returns {Number|dc.rowChart}\n */\n _chart.titleLabelOffsetX = function (titleLabelOffsetX) {\n if (!arguments.length) {\n return _titleLabelOffsetX;\n }\n _titleLabelOffsetX = titleLabelOffsetX;\n return _chart;\n };\n\n function isSelectedRow (d) {\n return _chart.hasFilter(_chart.cappedKeyAccessor(d));\n }\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Legend is a attachable widget that can be added to other dc charts to render horizontal legend\n * labels.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.com/dc.js/crime/index.html Canadian City Crime Stats}\n * @class legend\n * @memberof dc\n * @example\n * chart.legend(dc.legend().x(400).y(10).itemHeight(13).gap(5))\n * @returns {dc.legend}\n */\ndc.legend = function () {\n var LABEL_GAP = 2;\n\n var _legend = {},\n _parent,\n _x = 0,\n _y = 0,\n _itemHeight = 12,\n _gap = 5,\n _horizontal = false,\n _legendWidth = 560,\n _itemWidth = 70,\n _autoItemWidth = false,\n _legendText = dc.pluck('name'),\n _maxItems;\n\n var _g;\n\n _legend.parent = function (p) {\n if (!arguments.length) {\n return _parent;\n }\n _parent = p;\n return _legend;\n };\n\n _legend.render = function () {\n _parent.svg().select('g.dc-legend').remove();\n _g = _parent.svg().append('g')\n .attr('class', 'dc-legend')\n .attr('transform', 'translate(' + _x + ',' + _y + ')');\n var legendables = _parent.legendables();\n\n if (_maxItems !== undefined) {\n legendables = legendables.slice(0, _maxItems);\n }\n\n var itemEnter = _g.selectAll('g.dc-legend-item')\n .data(legendables)\n .enter()\n .append('g')\n .attr('class', 'dc-legend-item')\n .on('mouseover', function (d) {\n _parent.legendHighlight(d);\n })\n .on('mouseout', function (d) {\n _parent.legendReset(d);\n })\n .on('click', function (d) {\n d.chart.legendToggle(d);\n });\n\n _g.selectAll('g.dc-legend-item')\n .classed('fadeout', function (d) {\n return d.chart.isLegendableHidden(d);\n });\n\n if (legendables.some(dc.pluck('dashstyle'))) {\n itemEnter\n .append('line')\n .attr('x1', 0)\n .attr('y1', _itemHeight / 2)\n .attr('x2', _itemHeight)\n .attr('y2', _itemHeight / 2)\n .attr('stroke-width', 2)\n .attr('stroke-dasharray', dc.pluck('dashstyle'))\n .attr('stroke', dc.pluck('color'));\n } else {\n itemEnter\n .append('rect')\n .attr('width', _itemHeight)\n .attr('height', _itemHeight)\n .attr('fill', function (d) {return d ? d.color : 'blue';});\n }\n\n itemEnter.append('text')\n .text(_legendText)\n .attr('x', _itemHeight + LABEL_GAP)\n .attr('y', function () {\n return _itemHeight / 2 + (this.clientHeight ? this.clientHeight : 13) / 2 - 2;\n });\n\n var _cumulativeLegendTextWidth = 0;\n var row = 0;\n itemEnter.attr('transform', function (d, i) {\n if (_horizontal) {\n var itemWidth = _autoItemWidth === true ? this.getBBox().width + _gap : _itemWidth;\n if ((_cumulativeLegendTextWidth + itemWidth) > _legendWidth && _cumulativeLegendTextWidth > 0) {\n ++row;\n _cumulativeLegendTextWidth = 0;\n }\n var translateBy = 'translate(' + _cumulativeLegendTextWidth + ',' + row * legendItemHeight() + ')';\n _cumulativeLegendTextWidth += itemWidth;\n return translateBy;\n } else {\n return 'translate(0,' + i * legendItemHeight() + ')';\n }\n });\n };\n\n function legendItemHeight () {\n return _gap + _itemHeight;\n }\n\n /**\n * Set or get x coordinate for legend widget.\n * @method x\n * @memberof dc.legend\n * @instance\n * @param {Number} [x=0]\n * @returns {Number|dc.legend}\n */\n _legend.x = function (x) {\n if (!arguments.length) {\n return _x;\n }\n _x = x;\n return _legend;\n };\n\n /**\n * Set or get y coordinate for legend widget.\n * @method y\n * @memberof dc.legend\n * @instance\n * @param {Number} [y=0]\n * @returns {Number|dc.legend}\n */\n _legend.y = function (y) {\n if (!arguments.length) {\n return _y;\n }\n _y = y;\n return _legend;\n };\n\n /**\n * Set or get gap between legend items.\n * @method gap\n * @memberof dc.legend\n * @instance\n * @param {Number} [gap=5]\n * @returns {Number|dc.legend}\n */\n _legend.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _legend;\n };\n\n /**\n * Set or get legend item height.\n * @method itemHeight\n * @memberof dc.legend\n * @instance\n * @param {Number} [itemHeight=12]\n * @returns {Number|dc.legend}\n */\n _legend.itemHeight = function (itemHeight) {\n if (!arguments.length) {\n return _itemHeight;\n }\n _itemHeight = itemHeight;\n return _legend;\n };\n\n /**\n * Position legend horizontally instead of vertically.\n * @method horizontal\n * @memberof dc.legend\n * @instance\n * @param {Boolean} [horizontal=false]\n * @returns {Boolean|dc.legend}\n */\n _legend.horizontal = function (horizontal) {\n if (!arguments.length) {\n return _horizontal;\n }\n _horizontal = horizontal;\n return _legend;\n };\n\n /**\n * Maximum width for horizontal legend.\n * @method legendWidth\n * @memberof dc.legend\n * @instance\n * @param {Number} [legendWidth=500]\n * @returns {Number|dc.legend}\n */\n _legend.legendWidth = function (legendWidth) {\n if (!arguments.length) {\n return _legendWidth;\n }\n _legendWidth = legendWidth;\n return _legend;\n };\n\n /**\n * Legend item width for horizontal legend.\n * @method itemWidth\n * @memberof dc.legend\n * @instance\n * @param {Number} [itemWidth=70]\n * @returns {Number|dc.legend}\n */\n _legend.itemWidth = function (itemWidth) {\n if (!arguments.length) {\n return _itemWidth;\n }\n _itemWidth = itemWidth;\n return _legend;\n };\n\n /**\n * Turn automatic width for legend items on or off. If true, {@link dc.legend#itemWidth itemWidth} is ignored.\n * This setting takes into account the {@link dc.legend#gap gap}.\n * @method autoItemWidth\n * @memberof dc.legend\n * @instance\n * @param {Boolean} [autoItemWidth=false]\n * @returns {Boolean|dc.legend}\n */\n _legend.autoItemWidth = function (autoItemWidth) {\n if (!arguments.length) {\n return _autoItemWidth;\n }\n _autoItemWidth = autoItemWidth;\n return _legend;\n };\n\n /**\n * Set or get the legend text function. The legend widget uses this function to render the legend\n * text for each item. If no function is specified the legend widget will display the names\n * associated with each group.\n * @method legendText\n * @memberof dc.legend\n * @instance\n * @param {Function} [legendText]\n * @returns {Function|dc.legend}\n * @example\n * // default legendText\n * legend.legendText(dc.pluck('name'))\n *\n * // create numbered legend items\n * chart.legend(dc.legend().legendText(function(d, i) { return i + '. ' + d.name; }))\n *\n * // create legend displaying group counts\n * chart.legend(dc.legend().legendText(function(d) { return d.name + ': ' d.data; }))\n **/\n _legend.legendText = function (legendText) {\n if (!arguments.length) {\n return _legendText;\n }\n _legendText = legendText;\n return _legend;\n };\n\n /**\n * Maximum number of legend items to display\n * @method maxItems\n * @memberof dc.legend\n * @instance\n * @param {Number} [maxItems]\n * @return {dc.legend}\n */\n _legend.maxItems = function (maxItems) {\n if (!arguments.length) {\n return _maxItems;\n }\n _maxItems = dc.utils.isNumber(maxItems) ? maxItems : undefined;\n return _legend;\n };\n\n return _legend;\n};\n","/**\n * A scatter plot chart\n *\n * Examples:\n * - {@link http://dc-js.github.io/dc.js/examples/scatter.html Scatter Chart}\n * - {@link http://dc-js.github.io/dc.js/examples/multi-scatter.html Multi-Scatter Chart}\n * @class scatterPlot\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a scatter plot under #chart-container1 element using the default global chart group\n * var chart1 = dc.scatterPlot('#chart-container1');\n * // create a scatter plot under #chart-container2 element using chart group A\n * var chart2 = dc.scatterPlot('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.scatterPlot(compositeChart);\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.scatterPlot}\n */\ndc.scatterPlot = function (parent, chartGroup) {\n var _chart = dc.coordinateGridMixin({});\n var _symbol = d3.svg.symbol();\n\n var _existenceAccessor = function (d) { return d.value; };\n\n var originalKeyAccessor = _chart.keyAccessor();\n _chart.keyAccessor(function (d) { return originalKeyAccessor(d)[0]; });\n _chart.valueAccessor(function (d) { return originalKeyAccessor(d)[1]; });\n _chart.colorAccessor(function () { return _chart._groupName; });\n\n _chart.title(function (d) {\n // this basically just counteracts the setting of its own key/value accessors\n // see https://github.com/dc-js/dc.js/issues/702\n return _chart.keyAccessor()(d) + ',' + _chart.valueAccessor()(d) + ': ' +\n _chart.existenceAccessor()(d);\n });\n\n var _locator = function (d) {\n return 'translate(' + _chart.x()(_chart.keyAccessor()(d)) + ',' +\n _chart.y()(_chart.valueAccessor()(d)) + ')';\n };\n\n var _highlightedSize = 7;\n var _symbolSize = 5;\n var _excludedSize = 3;\n var _excludedColor = null;\n var _excludedOpacity = 1.0;\n var _emptySize = 0;\n var _emptyOpacity = 0;\n var _nonemptyOpacity = 1;\n var _emptyColor = null;\n var _filtered = [];\n\n function elementSize (d, i) {\n if (!_existenceAccessor(d)) {\n return Math.pow(_emptySize, 2);\n } else if (_filtered[i]) {\n return Math.pow(_symbolSize, 2);\n } else {\n return Math.pow(_excludedSize, 2);\n }\n }\n _symbol.size(elementSize);\n\n dc.override(_chart, '_filter', function (filter) {\n if (!arguments.length) {\n return _chart.__filter();\n }\n\n return _chart.__filter(dc.filters.RangedTwoDimensionalFilter(filter));\n });\n\n _chart.plotData = function () {\n var symbols = _chart.chartBodyG().selectAll('path.symbol')\n .data(_chart.data());\n\n symbols\n .enter()\n .append('path')\n .attr('class', 'symbol')\n .attr('opacity', 0)\n .attr('fill', _chart.getColor)\n .attr('transform', _locator);\n\n symbols.call(renderTitles, _chart.data());\n\n symbols.each(function (d, i) {\n _filtered[i] = !_chart.filter() || _chart.filter().isFiltered([d.key[0], d.key[1]]);\n });\n\n dc.transition(symbols, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', function (d, i) {\n if (!_existenceAccessor(d)) {\n return _emptyOpacity;\n } else if (_filtered[i]) {\n return _nonemptyOpacity;\n } else {\n return _chart.excludedOpacity();\n }\n })\n .attr('fill', function (d, i) {\n if (_emptyColor && !_existenceAccessor(d)) {\n return _emptyColor;\n } else if (_chart.excludedColor() && !_filtered[i]) {\n return _chart.excludedColor();\n } else {\n return _chart.getColor(d);\n }\n })\n .attr('transform', _locator)\n .attr('d', _symbol);\n\n dc.transition(symbols.exit(), _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', 0).remove();\n };\n\n function renderTitles (symbol, d) {\n if (_chart.renderTitle()) {\n symbol.selectAll('title').remove();\n symbol.append('title').text(function (d) {\n return _chart.title()(d);\n });\n }\n }\n\n /**\n * Get or set the existence accessor. If a point exists, it is drawn with\n * {@link dc.scatterPlot#symbolSize symbolSize} radius and\n * opacity 1; if it does not exist, it is drawn with\n * {@link dc.scatterPlot#emptySize emptySize} radius and opacity 0. By default,\n * the existence accessor checks if the reduced value is truthy.\n * @method existenceAccessor\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link dc.scatterPlot#symbolSize symbolSize}\n * @see {@link dc.scatterPlot#emptySize emptySize}\n * @example\n * // default accessor\n * chart.existenceAccessor(function (d) { return d.value; });\n * @param {Function} [accessor]\n * @returns {Function|dc.scatterPlot}\n */\n _chart.existenceAccessor = function (accessor) {\n if (!arguments.length) {\n return _existenceAccessor;\n }\n _existenceAccessor = accessor;\n return this;\n };\n\n /**\n * Get or set the symbol type used for each point. By default the symbol is a circle.\n * Type can be a constant or an accessor.\n * @method symbol\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_type d3.svg.symbol.type}\n * @example\n * // Circle type\n * chart.symbol('circle');\n * // Square type\n * chart.symbol('square');\n * @param {String|Function} [type='circle']\n * @returns {String|Function|dc.scatterPlot}\n */\n _chart.symbol = function (type) {\n if (!arguments.length) {\n return _symbol.type();\n }\n _symbol.type(type);\n return _chart;\n };\n\n /**\n * Get or set the symbol generator. By default `dc.scatterPlot` will use\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol d3.svg.symbol()}\n * to generate symbols. `dc.scatterPlot` will set the\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size size accessor}\n * on the symbol generator.\n * @method customSymbol\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol d3.svg.symbol}\n * @see {@link https://stackoverflow.com/questions/25332120/create-additional-d3-js-symbols Create additional D3.js symbols}\n * @param {String|Function} [customSymbol=d3.svg.symbol()]\n * @returns {String|Function|dc.scatterPlot}\n */\n _chart.customSymbol = function (customSymbol) {\n if (!arguments.length) {\n return _symbol;\n }\n _symbol = customSymbol;\n _symbol.size(elementSize);\n return _chart;\n };\n\n /**\n * Set or get radius for symbols.\n * @method symbolSize\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size d3.svg.symbol.size}\n * @param {Number} [symbolSize=3]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.symbolSize = function (symbolSize) {\n if (!arguments.length) {\n return _symbolSize;\n }\n _symbolSize = symbolSize;\n return _chart;\n };\n\n /**\n * Set or get radius for highlighted symbols.\n * @method highlightedSize\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size d3.svg.symbol.size}\n * @param {Number} [highlightedSize=5]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.highlightedSize = function (highlightedSize) {\n if (!arguments.length) {\n return _highlightedSize;\n }\n _highlightedSize = highlightedSize;\n return _chart;\n };\n\n /**\n * Set or get size for symbols excluded from this chart's filter. If null, no\n * special size is applied for symbols based on their filter status.\n * @method excludedSize\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size d3.svg.symbol.size}\n * @param {Number} [excludedSize=null]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.excludedSize = function (excludedSize) {\n if (!arguments.length) {\n return _excludedSize;\n }\n _excludedSize = excludedSize;\n return _chart;\n };\n\n /**\n * Set or get color for symbols excluded from this chart's filter. If null, no\n * special color is applied for symbols based on their filter status.\n * @method excludedColor\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [excludedColor=null]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.excludedColor = function (excludedColor) {\n if (!arguments.length) {\n return _excludedColor;\n }\n _excludedColor = excludedColor;\n return _chart;\n };\n\n /**\n * Set or get opacity for symbols excluded from this chart's filter.\n * @method excludedOpacity\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [excludedOpacity=1.0]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.excludedOpacity = function (excludedOpacity) {\n if (!arguments.length) {\n return _excludedOpacity;\n }\n _excludedOpacity = excludedOpacity;\n return _chart;\n };\n\n /**\n * Set or get radius for symbols when the group is empty.\n * @method emptySize\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size d3.svg.symbol.size}\n * @param {Number} [emptySize=0]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.hiddenSize = _chart.emptySize = function (emptySize) {\n if (!arguments.length) {\n return _emptySize;\n }\n _emptySize = emptySize;\n return _chart;\n };\n\n /**\n * Set or get color for symbols when the group is empty. If null, just use the\n * {@link dc.colorMixin#colors colorMixin.colors} color scale zero value.\n * @name emptyColor\n * @memberof dc.scatterPlot\n * @instance\n * @param {String} [emptyColor=null]\n * @return {String}\n * @return {dc.scatterPlot}/\n */\n _chart.emptyColor = function (emptyColor) {\n if (!arguments.length) {\n return _emptyColor;\n }\n _emptyColor = emptyColor;\n return _chart;\n };\n\n /**\n * Set or get opacity for symbols when the group is empty.\n * @name emptyOpacity\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [emptyOpacity=0]\n * @return {Number}\n * @return {dc.scatterPlot}\n */\n _chart.emptyOpacity = function (emptyOpacity) {\n if (!arguments.length) {\n return _emptyOpacity;\n }\n _emptyOpacity = emptyOpacity;\n return _chart;\n };\n\n /**\n * Set or get opacity for symbols when the group is not empty.\n * @name nonemptyOpacity\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [nonemptyOpacity=1]\n * @return {Number}\n * @return {dc.scatterPlot}\n */\n _chart.nonemptyOpacity = function (nonemptyOpacity) {\n if (!arguments.length) {\n return _emptyOpacity;\n }\n _nonemptyOpacity = nonemptyOpacity;\n return _chart;\n };\n\n _chart.legendables = function () {\n return [{chart: _chart, name: _chart._groupName, color: _chart.getColor()}];\n };\n\n _chart.legendHighlight = function (d) {\n resizeSymbolsWhere(function (symbol) {\n return symbol.attr('fill') === d.color;\n }, _highlightedSize);\n _chart.chartBodyG().selectAll('.chart-body path.symbol').filter(function () {\n return d3.select(this).attr('fill') !== d.color;\n }).classed('fadeout', true);\n };\n\n _chart.legendReset = function (d) {\n resizeSymbolsWhere(function (symbol) {\n return symbol.attr('fill') === d.color;\n }, _symbolSize);\n _chart.chartBodyG().selectAll('.chart-body path.symbol').filter(function () {\n return d3.select(this).attr('fill') !== d.color;\n }).classed('fadeout', false);\n };\n\n function resizeSymbolsWhere (condition, size) {\n var symbols = _chart.chartBodyG().selectAll('.chart-body path.symbol').filter(function () {\n return condition(d3.select(this));\n });\n var oldSize = _symbol.size();\n _symbol.size(Math.pow(size, 2));\n dc.transition(symbols, _chart.transitionDuration(), _chart.transitionDelay()).attr('d', _symbol);\n _symbol.size(oldSize);\n }\n\n _chart.setHandlePaths = function () {\n // no handle paths for poly-brushes\n };\n\n _chart.extendBrush = function () {\n var extent = _chart.brush().extent();\n if (_chart.round()) {\n extent[0] = extent[0].map(_chart.round());\n extent[1] = extent[1].map(_chart.round());\n\n _chart.g().select('.brush')\n .call(_chart.brush().extent(extent));\n }\n return extent;\n };\n\n _chart.brushIsEmpty = function (extent) {\n return _chart.brush().empty() || !extent || extent[0][0] >= extent[1][0] || extent[0][1] >= extent[1][1];\n };\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n\n _chart.redrawBrush(_chart.g());\n\n if (_chart.brushIsEmpty(extent)) {\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.redrawGroup();\n });\n\n } else {\n var ranged2DFilter = dc.filters.RangedTwoDimensionalFilter(extent);\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.filter(ranged2DFilter);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n\n }\n };\n\n _chart.setBrushY = function (gBrush) {\n gBrush.call(_chart.brush().y(_chart.y()));\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A display of a single numeric value.\n * Unlike other charts, you do not need to set a dimension. Instead a group object must be provided and\n * a valueAccessor that returns a single value.\n * @class numberDisplay\n * @memberof dc\n * @mixes dc.baseMixin\n * @example\n * // create a number display under #chart-container1 element using the default global chart group\n * var display1 = dc.numberDisplay('#chart-container1');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.numberDisplay}\n */\ndc.numberDisplay = function (parent, chartGroup) {\n var SPAN_CLASS = 'number-display';\n var _formatNumber = d3.format('.2s');\n var _chart = dc.baseMixin({});\n var _html = {one: '', some: '', none: ''};\n var _lastValue;\n\n // dimension not required\n _chart._mandatoryAttributes(['group']);\n\n // default to ordering by value, to emulate old group.top(1) behavior when multiple groups\n _chart.ordering(function (kv) { return kv.value; });\n\n /**\n * Gets or sets an optional object specifying HTML templates to use depending on the number\n * displayed. The text `%number` will be replaced with the current value.\n * - one: HTML template to use if the number is 1\n * - zero: HTML template to use if the number is 0\n * - some: HTML template to use otherwise\n * @method html\n * @memberof dc.numberDisplay\n * @instance\n * @example\n * numberWidget.html({\n * one:'%number record',\n * some:'%number records',\n * none:'no records'})\n * @param {{one:String, some:String, none:String}} [html={one: '', some: '', none: ''}]\n * @returns {{one:String, some:String, none:String}|dc.numberDisplay}\n */\n _chart.html = function (html) {\n if (!arguments.length) {\n return _html;\n }\n if (html.none) {\n _html.none = html.none;//if none available\n } else if (html.one) {\n _html.none = html.one;//if none not available use one\n } else if (html.some) {\n _html.none = html.some;//if none and one not available use some\n }\n if (html.one) {\n _html.one = html.one;//if one available\n } else if (html.some) {\n _html.one = html.some;//if one not available use some\n }\n if (html.some) {\n _html.some = html.some;//if some available\n } else if (html.one) {\n _html.some = html.one;//if some not available use one\n }\n return _chart;\n };\n\n /**\n * Calculate and return the underlying value of the display.\n * @method value\n * @memberof dc.numberDisplay\n * @instance\n * @returns {Number}\n */\n _chart.value = function () {\n return _chart.data();\n };\n\n function maxBin (all) {\n if (!all.length) {\n return null;\n }\n var sorted = _chart._computeOrderedGroups(all);\n return sorted[sorted.length - 1];\n }\n _chart.data(function (group) {\n var valObj = group.value ? group.value() : maxBin(group.all());\n return _chart.valueAccessor()(valObj);\n });\n\n _chart.transitionDuration(250); // good default\n _chart.transitionDelay(0);\n\n _chart._doRender = function () {\n var newValue = _chart.value(),\n span = _chart.selectAll('.' + SPAN_CLASS);\n\n if (span.empty()) {\n span = span.data([0])\n .enter()\n .append('span')\n .attr('class', SPAN_CLASS);\n }\n\n span.transition()\n .duration(_chart.transitionDuration())\n .delay(_chart.transitionDelay())\n .ease('quad-out-in')\n .tween('text', function () {\n // [XA] don't try and interpolate from Infinity, else this breaks.\n var interpStart = isFinite(_lastValue) ? _lastValue : 0;\n var interp = d3.interpolateNumber(interpStart || 0, newValue);\n _lastValue = newValue;\n return function (t) {\n var html = null, num = _chart.formatNumber()(interp(t));\n if (newValue === 0 && (_html.none !== '')) {\n html = _html.none;\n } else if (newValue === 1 && (_html.one !== '')) {\n html = _html.one;\n } else if (_html.some !== '') {\n html = _html.some;\n }\n this.innerHTML = html ? html.replace('%number', num) : num;\n };\n });\n };\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set a function to format the value for the display.\n * @method formatNumber\n * @memberof dc.numberDisplay\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md d3.format}\n * @param {Function} [formatter=d3.format('.2s')]\n * @returns {Function|dc.numberDisplay}\n */\n _chart.formatNumber = function (formatter) {\n if (!arguments.length) {\n return _formatNumber;\n }\n _formatNumber = formatter;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A heat map is matrix that represents the values of two dimensions of data using colors.\n * @class heatMap\n * @memberof dc\n * @mixes dc.colorMixin\n * @mixes dc.marginMixin\n * @mixes dc.baseMixin\n * @example\n * // create a heat map under #chart-container1 element using the default global chart group\n * var heatMap1 = dc.heatMap('#chart-container1');\n * // create a heat map under #chart-container2 element using chart group A\n * var heatMap2 = dc.heatMap('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.heatMap}\n */\ndc.heatMap = function (parent, chartGroup) {\n\n var DEFAULT_BORDER_RADIUS = 6.75;\n\n var _chartBody;\n\n var _cols;\n var _rows;\n var _colOrdering = d3.ascending;\n var _rowOrdering = d3.ascending;\n var _colScale = d3.scale.ordinal();\n var _rowScale = d3.scale.ordinal();\n\n var _xBorderRadius = DEFAULT_BORDER_RADIUS;\n var _yBorderRadius = DEFAULT_BORDER_RADIUS;\n\n var _chart = dc.colorMixin(dc.marginMixin(dc.baseMixin({})));\n _chart._mandatoryAttributes(['group']);\n _chart.title(_chart.colorAccessor());\n\n var _colsLabel = function (d) {\n return d;\n };\n var _rowsLabel = function (d) {\n return d;\n };\n\n /**\n * Set or get the column label function. The chart class uses this function to render\n * column labels on the X axis. It is passed the column name.\n * @method colsLabel\n * @memberof dc.heatMap\n * @instance\n * @example\n * // the default label function just returns the name\n * chart.colsLabel(function(d) { return d; });\n * @param {Function} [labelFunction=function(d) { return d; }]\n * @returns {Function|dc.heatMap}\n */\n _chart.colsLabel = function (labelFunction) {\n if (!arguments.length) {\n return _colsLabel;\n }\n _colsLabel = labelFunction;\n return _chart;\n };\n\n /**\n * Set or get the row label function. The chart class uses this function to render\n * row labels on the Y axis. It is passed the row name.\n * @method rowsLabel\n * @memberof dc.heatMap\n * @instance\n * @example\n * // the default label function just returns the name\n * chart.rowsLabel(function(d) { return d; });\n * @param {Function} [labelFunction=function(d) { return d; }]\n * @returns {Function|dc.heatMap}\n */\n _chart.rowsLabel = function (labelFunction) {\n if (!arguments.length) {\n return _rowsLabel;\n }\n _rowsLabel = labelFunction;\n return _chart;\n };\n\n var _xAxisOnClick = function (d) { filterAxis(0, d); };\n var _yAxisOnClick = function (d) { filterAxis(1, d); };\n var _boxOnClick = function (d) {\n var filter = d.key;\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n function filterAxis (axis, value) {\n var cellsOnAxis = _chart.selectAll('.box-group').filter(function (d) {\n return d.key[axis] === value;\n });\n var unfilteredCellsOnAxis = cellsOnAxis.filter(function (d) {\n return !_chart.hasFilter(d.key);\n });\n dc.events.trigger(function () {\n var selection = unfilteredCellsOnAxis.empty() ? cellsOnAxis : unfilteredCellsOnAxis;\n var filters = selection.data().map(function (kv) {\n return dc.filters.TwoDimensionalFilter(kv.key);\n });\n _chart._filter([filters]);\n _chart.redrawGroup();\n });\n }\n\n dc.override(_chart, 'filter', function (filter) {\n if (!arguments.length) {\n return _chart._filter();\n }\n\n return _chart._filter(dc.filters.TwoDimensionalFilter(filter));\n });\n\n /**\n * Gets or sets the values used to create the rows of the heatmap, as an array. By default, all\n * the values will be fetched from the data using the value accessor.\n * @method rows\n * @memberof dc.heatMap\n * @instance\n * @param {Array<String|Number>} [rows]\n * @returns {Array<String|Number>|dc.heatMap}\n */\n\n _chart.rows = function (rows) {\n if (!arguments.length) {\n return _rows;\n }\n _rows = rows;\n return _chart;\n };\n\n /**\n #### .rowOrdering([orderFunction])\n Get or set an accessor to order the rows. Default is d3.ascending.\n */\n _chart.rowOrdering = function (_) {\n if (!arguments.length) {\n return _rowOrdering;\n }\n _rowOrdering = _;\n return _chart;\n };\n\n /**\n * Gets or sets the keys used to create the columns of the heatmap, as an array. By default, all\n * the values will be fetched from the data using the key accessor.\n * @method cols\n * @memberof dc.heatMap\n * @instance\n * @param {Array<String|Number>} [cols]\n * @returns {Array<String|Number>|dc.heatMap}\n */\n _chart.cols = function (cols) {\n if (!arguments.length) {\n return _cols;\n }\n _cols = cols;\n return _chart;\n };\n\n /**\n #### .colOrdering([orderFunction])\n Get or set an accessor to order the cols. Default is ascending.\n */\n _chart.colOrdering = function (_) {\n if (!arguments.length) {\n return _colOrdering;\n }\n _colOrdering = _;\n return _chart;\n };\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _chartBody = _chart.svg()\n .append('g')\n .attr('class', 'heatmap')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n\n return _chart._doRedraw();\n };\n\n _chart._doRedraw = function () {\n var data = _chart.data(),\n rows = _chart.rows() || data.map(_chart.valueAccessor()),\n cols = _chart.cols() || data.map(_chart.keyAccessor());\n if (_rowOrdering) {\n rows = rows.sort(_rowOrdering);\n }\n if (_colOrdering) {\n cols = cols.sort(_colOrdering);\n }\n rows = _rowScale.domain(rows);\n cols = _colScale.domain(cols);\n\n var rowCount = rows.domain().length,\n colCount = cols.domain().length,\n boxWidth = Math.floor(_chart.effectiveWidth() / colCount),\n boxHeight = Math.floor(_chart.effectiveHeight() / rowCount);\n\n cols.rangeRoundBands([0, _chart.effectiveWidth()]);\n rows.rangeRoundBands([_chart.effectiveHeight(), 0]);\n\n var boxes = _chartBody.selectAll('g.box-group').data(_chart.data(), function (d, i) {\n return _chart.keyAccessor()(d, i) + '\\0' + _chart.valueAccessor()(d, i);\n });\n var gEnter = boxes.enter().append('g')\n .attr('class', 'box-group');\n\n gEnter.append('rect')\n .attr('class', 'heat-box')\n .attr('fill', 'white')\n .on('click', _chart.boxOnClick());\n\n if (_chart.renderTitle()) {\n gEnter.append('title');\n boxes.select('title').text(_chart.title());\n }\n\n dc.transition(boxes.select('rect'), _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x', function (d, i) { return cols(_chart.keyAccessor()(d, i)); })\n .attr('y', function (d, i) { return rows(_chart.valueAccessor()(d, i)); })\n .attr('rx', _xBorderRadius)\n .attr('ry', _yBorderRadius)\n .attr('fill', _chart.getColor)\n .attr('width', boxWidth)\n .attr('height', boxHeight);\n\n boxes.exit().remove();\n\n var gCols = _chartBody.select('g.cols');\n if (gCols.empty()) {\n gCols = _chartBody.append('g').attr('class', 'cols axis');\n }\n var gColsText = gCols.selectAll('text').data(cols.domain());\n gColsText.enter().append('text')\n .attr('x', function (d) { return cols(d) + boxWidth / 2; })\n .style('text-anchor', 'middle')\n .attr('y', _chart.effectiveHeight())\n .attr('dy', 12)\n .on('click', _chart.xAxisOnClick())\n .text(_chart.colsLabel());\n dc.transition(gColsText, _chart.transitionDuration(), _chart.transitionDelay())\n .text(_chart.colsLabel())\n .attr('x', function (d) { return cols(d) + boxWidth / 2; })\n .attr('y', _chart.effectiveHeight());\n gColsText.exit().remove();\n var gRows = _chartBody.select('g.rows');\n if (gRows.empty()) {\n gRows = _chartBody.append('g').attr('class', 'rows axis');\n }\n var gRowsText = gRows.selectAll('text').data(rows.domain());\n gRowsText.enter().append('text')\n .attr('dy', 6)\n .style('text-anchor', 'end')\n .attr('x', 0)\n .attr('dx', -2)\n .on('click', _chart.yAxisOnClick())\n .text(_chart.rowsLabel());\n dc.transition(gRowsText, _chart.transitionDuration(), _chart.transitionDelay())\n .text(_chart.rowsLabel())\n .attr('y', function (d) { return rows(d) + boxHeight / 2; });\n gRowsText.exit().remove();\n\n if (_chart.hasFilter()) {\n _chart.selectAll('g.box-group').each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.box-group').each(function () {\n _chart.resetHighlight(this);\n });\n }\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when an individual cell is clicked in the heatmap.\n * By default, filtering of the cell will be toggled.\n * @method boxOnClick\n * @memberof dc.heatMap\n * @instance\n * @example\n * // default box on click handler\n * chart.boxOnClick(function (d) {\n * var filter = d.key;\n * dc.events.trigger(function () {\n * _chart.filter(filter);\n * _chart.redrawGroup();\n * });\n * });\n * @param {Function} [handler]\n * @returns {Function|dc.heatMap}\n */\n _chart.boxOnClick = function (handler) {\n if (!arguments.length) {\n return _boxOnClick;\n }\n _boxOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when a column tick is clicked in the x axis.\n * By default, if any cells in the column are unselected, the whole column will be selected,\n * otherwise the whole column will be unselected.\n * @method xAxisOnClick\n * @memberof dc.heatMap\n * @instance\n * @param {Function} [handler]\n * @returns {Function|dc.heatMap}\n */\n _chart.xAxisOnClick = function (handler) {\n if (!arguments.length) {\n return _xAxisOnClick;\n }\n _xAxisOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when a row tick is clicked in the y axis.\n * By default, if any cells in the row are unselected, the whole row will be selected,\n * otherwise the whole row will be unselected.\n * @method yAxisOnClick\n * @memberof dc.heatMap\n * @instance\n * @param {Function} [handler]\n * @returns {Function|dc.heatMap}\n */\n _chart.yAxisOnClick = function (handler) {\n if (!arguments.length) {\n return _yAxisOnClick;\n }\n _yAxisOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the X border radius. Set to 0 to get full rectangles.\n * @method xBorderRadius\n * @memberof dc.heatMap\n * @instance\n * @param {Number} [xBorderRadius=6.75]\n * @returns {Number|dc.heatMap}\n */\n _chart.xBorderRadius = function (xBorderRadius) {\n if (!arguments.length) {\n return _xBorderRadius;\n }\n _xBorderRadius = xBorderRadius;\n return _chart;\n };\n\n /**\n * Gets or sets the Y border radius. Set to 0 to get full rectangles.\n * @method yBorderRadius\n * @memberof dc.heatMap\n * @instance\n * @param {Number} [yBorderRadius=6.75]\n * @returns {Number|dc.heatMap}\n */\n _chart.yBorderRadius = function (yBorderRadius) {\n if (!arguments.length) {\n return _yBorderRadius;\n }\n _yBorderRadius = yBorderRadius;\n return _chart;\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(d.key);\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","// https://github.com/d3/d3-plugins/blob/master/box/box.js\n(function () {\n\n // Inspired by http://informationandvisualization.de/blog/box-plot\n d3.box = function () {\n var width = 1,\n height = 1,\n duration = 0,\n delay = 0,\n domain = null,\n value = Number,\n whiskers = boxWhiskers,\n quartiles = boxQuartiles,\n tickFormat = null;\n\n // For each small multiple…\n function box (g) {\n g.each(function (d, i) {\n d = d.map(value).sort(d3.ascending);\n var g = d3.select(this),\n n = d.length,\n min = d[0],\n max = d[n - 1];\n\n // Compute quartiles. Must return exactly 3 elements.\n var quartileData = d.quartiles = quartiles(d);\n\n // Compute whiskers. Must return exactly 2 elements, or null.\n var whiskerIndices = whiskers && whiskers.call(this, d, i),\n whiskerData = whiskerIndices && whiskerIndices.map(function (i) { return d[i]; });\n\n // Compute outliers. If no whiskers are specified, all data are 'outliers'.\n // We compute the outliers as indices, so that we can join across transitions!\n var outlierIndices = whiskerIndices ?\n d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n)) : d3.range(n);\n\n // Compute the new x-scale.\n var x1 = d3.scale.linear()\n .domain(domain && domain.call(this, d, i) || [min, max])\n .range([height, 0]);\n\n // Retrieve the old x-scale, if this is an update.\n var x0 = this.__chart__ || d3.scale.linear()\n .domain([0, Infinity])\n .range(x1.range());\n\n // Stash the new scale.\n this.__chart__ = x1;\n\n // Note: the box, median, and box tick elements are fixed in number,\n // so we only have to handle enter and update. In contrast, the outliers\n // and other elements are variable, so we need to exit them! Variable\n // elements also fade in and out.\n\n // Update center line: the vertical line spanning the whiskers.\n var center = g.selectAll('line.center')\n .data(whiskerData ? [whiskerData] : []);\n\n center.enter().insert('line', 'rect')\n .attr('class', 'center')\n .attr('x1', width / 2)\n .attr('y1', function (d) { return x0(d[0]); })\n .attr('x2', width / 2)\n .attr('y2', function (d) { return x0(d[1]); })\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .delay(delay)\n .style('opacity', 1)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); });\n\n center.transition()\n .duration(duration)\n .delay(delay)\n .style('opacity', 1)\n .attr('x1', width / 2)\n .attr('x2', width / 2)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); });\n\n center.exit().transition()\n .duration(duration)\n .delay(delay)\n .style('opacity', 1e-6)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); })\n .remove();\n\n // Update innerquartile box.\n var box = g.selectAll('rect.box')\n .data([quartileData]);\n\n box.enter().append('rect')\n .attr('class', 'box')\n .attr('x', 0)\n .attr('y', function (d) { return x0(d[2]); })\n .attr('width', width)\n .attr('height', function (d) { return x0(d[0]) - x0(d[2]); })\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y', function (d) { return x1(d[2]); })\n .attr('height', function (d) { return x1(d[0]) - x1(d[2]); });\n\n box.transition()\n .duration(duration)\n .delay(delay)\n .attr('width', width)\n .attr('y', function (d) { return x1(d[2]); })\n .attr('height', function (d) { return x1(d[0]) - x1(d[2]); });\n\n // Update median line.\n var medianLine = g.selectAll('line.median')\n .data([quartileData[1]]);\n\n medianLine.enter().append('line')\n .attr('class', 'median')\n .attr('x1', 0)\n .attr('y1', x0)\n .attr('x2', width)\n .attr('y2', x0)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y1', x1)\n .attr('y2', x1);\n\n medianLine.transition()\n .duration(duration)\n .delay(delay)\n .attr('x1', 0)\n .attr('x2', width)\n .attr('y1', x1)\n .attr('y2', x1);\n\n // Update whiskers.\n var whisker = g.selectAll('line.whisker')\n .data(whiskerData || []);\n\n whisker.enter().insert('line', 'circle, text')\n .attr('class', 'whisker')\n .attr('x1', 0)\n .attr('y1', x0)\n .attr('x2', width)\n .attr('y2', x0)\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1);\n\n whisker.transition()\n .duration(duration)\n .delay(delay)\n .attr('x1', 0)\n .attr('x2', width)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1);\n\n whisker.exit().transition()\n .duration(duration)\n .delay(delay)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1e-6)\n .remove();\n\n // Update outliers.\n var outlier = g.selectAll('circle.outlier')\n .data(outlierIndices, Number);\n\n outlier.enter().insert('circle', 'text')\n .attr('class', 'outlier')\n .attr('r', 5)\n .attr('cx', width / 2)\n .attr('cy', function (i) { return x0(d[i]); })\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1);\n\n outlier.transition()\n .duration(duration)\n .delay(delay)\n .attr('cx', width / 2)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1);\n\n outlier.exit().transition()\n .duration(duration)\n .delay(delay)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1e-6)\n .remove();\n\n // Compute the tick format.\n var format = tickFormat || x1.tickFormat(8);\n\n // Update box ticks.\n var boxTick = g.selectAll('text.box')\n .data(quartileData);\n\n boxTick.enter().append('text')\n .attr('class', 'box')\n .attr('dy', '.3em')\n .attr('dx', function (d, i) { return i & 1 ? 6 : -6; })\n .attr('x', function (d, i) { return i & 1 ? width : 0; })\n .attr('y', x0)\n .attr('text-anchor', function (d, i) { return i & 1 ? 'start' : 'end'; })\n .text(format)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y', x1);\n\n boxTick.transition()\n .duration(duration)\n .delay(delay)\n .text(format)\n .attr('x', function (d, i) { return i & 1 ? width : 0; })\n .attr('y', x1);\n\n // Update whisker ticks. These are handled separately from the box\n // ticks because they may or may not exist, and we want don't want\n // to join box ticks pre-transition with whisker ticks post-.\n var whiskerTick = g.selectAll('text.whisker')\n .data(whiskerData || []);\n\n whiskerTick.enter().append('text')\n .attr('class', 'whisker')\n .attr('dy', '.3em')\n .attr('dx', 6)\n .attr('x', width)\n .attr('y', x0)\n .text(format)\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y', x1)\n .style('opacity', 1);\n\n whiskerTick.transition()\n .duration(duration)\n .delay(delay)\n .text(format)\n .attr('x', width)\n .attr('y', x1)\n .style('opacity', 1);\n\n whiskerTick.exit().transition()\n .duration(duration)\n .delay(delay)\n .attr('y', x1)\n .style('opacity', 1e-6)\n .remove();\n });\n d3.timer.flush();\n }\n\n box.width = function (x) {\n if (!arguments.length) {\n return width;\n }\n width = x;\n return box;\n };\n\n box.height = function (x) {\n if (!arguments.length) {\n return height;\n }\n height = x;\n return box;\n };\n\n box.tickFormat = function (x) {\n if (!arguments.length) {\n return tickFormat;\n }\n tickFormat = x;\n return box;\n };\n\n box.duration = function (x) {\n if (!arguments.length) {\n return duration;\n }\n duration = x;\n return box;\n };\n\n box.domain = function (x) {\n if (!arguments.length) {\n return domain;\n }\n domain = x === null ? x : d3.functor(x);\n return box;\n };\n\n box.value = function (x) {\n if (!arguments.length) {\n return value;\n }\n value = x;\n return box;\n };\n\n box.whiskers = function (x) {\n if (!arguments.length) {\n return whiskers;\n }\n whiskers = x;\n return box;\n };\n\n box.quartiles = function (x) {\n if (!arguments.length) {\n return quartiles;\n }\n quartiles = x;\n return box;\n };\n\n return box;\n };\n\n function boxWhiskers (d) {\n return [0, d.length - 1];\n }\n\n function boxQuartiles (d) {\n return [\n d3.quantile(d, 0.25),\n d3.quantile(d, 0.5),\n d3.quantile(d, 0.75)\n ];\n }\n\n})();\n","\n/**\n * A box plot is a chart that depicts numerical data via their quartile ranges.\n *\n * Examples:\n * - {@link http://dc-js.github.io/dc.js/examples/box-plot-time.html Box plot time example}\n * - {@link http://dc-js.github.io/dc.js/examples/box-plot.html Box plot example}\n * @class boxPlot\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a box plot under #chart-container1 element using the default global chart group\n * var boxPlot1 = dc.boxPlot('#chart-container1');\n * // create a box plot under #chart-container2 element using chart group A\n * var boxPlot2 = dc.boxPlot('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.boxPlot}\n */\ndc.boxPlot = function (parent, chartGroup) {\n var _chart = dc.coordinateGridMixin({});\n\n // Returns a function to compute the interquartile range.\n function DEFAULT_WHISKERS_IQR (k) {\n return function (d) {\n var q1 = d.quartiles[0],\n q3 = d.quartiles[2],\n iqr = (q3 - q1) * k,\n i = -1,\n j = d.length;\n do { ++i; } while (d[i] < q1 - iqr);\n do { --j; } while (d[j] > q3 + iqr);\n return [i, j];\n };\n }\n\n var _whiskerIqrFactor = 1.5;\n var _whiskersIqr = DEFAULT_WHISKERS_IQR;\n var _whiskers = _whiskersIqr(_whiskerIqrFactor);\n\n var _box = d3.box();\n var _tickFormat = null;\n\n var _boxWidth = function (innerChartWidth, xUnits) {\n if (_chart.isOrdinal()) {\n return _chart.x().rangeBand();\n } else {\n return innerChartWidth / (1 + _chart.boxPadding()) / xUnits;\n }\n };\n\n // default padding to handle min/max whisker text\n _chart.yAxisPadding(12);\n\n // default to ordinal\n _chart.x(d3.scale.ordinal());\n _chart.xUnits(dc.units.ordinal);\n\n // valueAccessor should return an array of values that can be coerced into numbers\n // or if data is overloaded for a static array of arrays, it should be `Number`.\n // Empty arrays are not included.\n _chart.data(function (group) {\n return group.all().map(function (d) {\n d.map = function (accessor) { return accessor.call(d, d); };\n return d;\n }).filter(function (d) {\n var values = _chart.valueAccessor()(d);\n return values.length !== 0;\n });\n });\n\n /**\n * Get or set the spacing between boxes as a fraction of box size. Valid values are within 0-1.\n * See the {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal_rangeBands d3 docs}\n * for a visual description of how the padding is applied.\n * @method boxPadding\n * @memberof dc.boxPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal_rangeBands d3.scale.ordinal.rangeBands}\n * @param {Number} [padding=0.8]\n * @returns {Number|dc.boxPlot}\n */\n _chart.boxPadding = _chart._rangeBandPadding;\n _chart.boxPadding(0.8);\n\n /**\n * Get or set the outer padding on an ordinal box chart. This setting has no effect on non-ordinal charts\n * or on charts with a custom {@link dc.boxPlot#boxWidth .boxWidth}. Will pad the width by\n * `padding * barWidth` on each side of the chart.\n * @method outerPadding\n * @memberof dc.boxPlot\n * @instance\n * @param {Number} [padding=0.5]\n * @returns {Number|dc.boxPlot}\n */\n _chart.outerPadding = _chart._outerRangeBandPadding;\n _chart.outerPadding(0.5);\n\n /**\n * Get or set the numerical width of the boxplot box. The width may also be a function taking as\n * parameters the chart width excluding the right and left margins, as well as the number of x\n * units.\n * @example\n * // Using numerical parameter\n * chart.boxWidth(10);\n * // Using function\n * chart.boxWidth((innerChartWidth, xUnits) { ... });\n * @method boxWidth\n * @memberof dc.boxPlot\n * @instance\n * @param {Number|Function} [boxWidth=0.5]\n * @returns {Number|Function|dc.boxPlot}\n */\n _chart.boxWidth = function (boxWidth) {\n if (!arguments.length) {\n return _boxWidth;\n }\n _boxWidth = d3.functor(boxWidth);\n return _chart;\n };\n\n var boxTransform = function (d, i) {\n var xOffset = _chart.x()(_chart.keyAccessor()(d, i));\n return 'translate(' + xOffset + ', 0)';\n };\n\n _chart._preprocessData = function () {\n if (_chart.elasticX()) {\n _chart.x().domain([]);\n }\n };\n\n _chart.plotData = function () {\n var _calculatedBoxWidth = _boxWidth(_chart.effectiveWidth(), _chart.xUnitCount());\n\n _box.whiskers(_whiskers)\n .width(_calculatedBoxWidth)\n .height(_chart.effectiveHeight())\n .value(_chart.valueAccessor())\n .domain(_chart.y().domain())\n .duration(_chart.transitionDuration())\n .tickFormat(_tickFormat);\n\n var boxesG = _chart.chartBodyG().selectAll('g.box').data(_chart.data(), _chart.keyAccessor());\n\n renderBoxes(boxesG);\n updateBoxes(boxesG);\n removeBoxes(boxesG);\n\n _chart.fadeDeselectedArea();\n };\n\n function renderBoxes (boxesG) {\n var boxesGEnter = boxesG.enter().append('g');\n\n boxesGEnter\n .attr('class', 'box')\n .attr('transform', boxTransform)\n .call(_box)\n .on('click', function (d) {\n _chart.filter(_chart.keyAccessor()(d));\n _chart.redrawGroup();\n });\n }\n\n function updateBoxes (boxesG) {\n dc.transition(boxesG, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', boxTransform)\n .call(_box)\n .each(function () {\n d3.select(this).select('rect.box').attr('fill', _chart.getColor);\n });\n }\n\n function removeBoxes (boxesG) {\n boxesG.exit().remove().call(_box);\n }\n\n _chart.fadeDeselectedArea = function () {\n if (_chart.hasFilter()) {\n if (_chart.isOrdinal()) {\n _chart.g().selectAll('g.box').each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n var extent = _chart.brush().extent();\n var start = extent[0];\n var end = extent[1];\n var keyAccessor = _chart.keyAccessor();\n _chart.g().selectAll('g.box').each(function (d) {\n var key = keyAccessor(d);\n if (key < start || key >= end) {\n _chart.fadeDeselected(this);\n } else {\n _chart.highlightSelected(this);\n }\n });\n }\n } else {\n _chart.g().selectAll('g.box').each(function () {\n _chart.resetHighlight(this);\n });\n }\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(_chart.keyAccessor()(d));\n };\n\n _chart.yAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return d3.min(_chart.valueAccessor()(e));\n });\n return dc.utils.subtract(min, _chart.yAxisPadding());\n };\n\n _chart.yAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return d3.max(_chart.valueAccessor()(e));\n });\n return dc.utils.add(max, _chart.yAxisPadding());\n };\n\n /**\n * Set the numerical format of the boxplot median, whiskers and quartile labels. Defaults to\n * integer formatting.\n * @example\n * // format ticks to 2 decimal places\n * chart.tickFormat(d3.format('.2f'));\n * @method tickFormat\n * @memberof dc.boxPlot\n * @instance\n * @param {Function} [tickFormat]\n * @returns {Number|Function|dc.boxPlot}\n */\n _chart.tickFormat = function (tickFormat) {\n if (!arguments.length) {\n return _tickFormat;\n }\n _tickFormat = tickFormat;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The select menu is a simple widget designed to filter a dimension by selecting an option from\n * an HTML `<select/>` menu. The menu can be optionally turned into a multiselect.\n * @class selectMenu\n * @memberof dc\n * @mixes dc.baseMixin\n * @example\n * // create a select menu under #select-container using the default global chart group\n * var select = dc.selectMenu('#select-container')\n * .dimension(states)\n * .group(stateGroup);\n * // the option text can be set via the title() function\n * // by default the option text is '`key`: `value`'\n * select.title(function (d){\n * return 'STATE: ' + d.key;\n * })\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this widget should be placed in.\n * Interaction with the widget will only trigger events and redraws within its group.\n * @returns {selectMenu}\n **/\ndc.selectMenu = function (parent, chartGroup) {\n var SELECT_CSS_CLASS = 'dc-select-menu';\n var OPTION_CSS_CLASS = 'dc-select-option';\n\n var _chart = dc.baseMixin({});\n\n var _select;\n var _promptText = 'Select all';\n var _multiple = false;\n var _promptValue = null;\n var _numberVisible = null;\n var _order = function (a, b) {\n return _chart.keyAccessor()(a) > _chart.keyAccessor()(b) ?\n 1 : _chart.keyAccessor()(b) > _chart.keyAccessor()(a) ?\n -1 : 0;\n };\n\n var _filterDisplayed = function (d) {\n return _chart.valueAccessor()(d) > 0;\n };\n\n _chart.data(function (group) {\n return group.all().filter(_filterDisplayed);\n });\n\n _chart._doRender = function () {\n _chart.select('select').remove();\n _select = _chart.root().append('select')\n .classed(SELECT_CSS_CLASS, true);\n _select.append('option').text(_promptText).attr('value', '');\n\n _chart._doRedraw();\n return _chart;\n };\n // Fixing IE 11 crash when redrawing the chart\n // see here for list of IE user Agents :\n // http://www.useragentstring.com/pages/useragentstring.php?name=Internet+Explorer\n var ua = window.navigator.userAgent;\n // test for IE 11 but not a lower version (which contains MSIE in UA)\n if (ua.indexOf('Trident/') > 0 && ua.indexOf('MSIE') === -1) {\n _chart.redraw = _chart.render;\n }\n\n _chart._doRedraw = function () {\n setAttributes();\n renderOptions();\n // select the option(s) corresponding to current filter(s)\n if (_chart.hasFilter() && _multiple) {\n _select.selectAll('option')\n .property('selected', function (d) {\n return typeof d !== 'undefined' && _chart.filters().indexOf(String(_chart.keyAccessor()(d))) >= 0;\n });\n } else if (_chart.hasFilter()) {\n _select.property('value', _chart.filter());\n } else {\n _select.property('value', '');\n }\n return _chart;\n };\n\n function renderOptions () {\n var options = _select.selectAll('option.' + OPTION_CSS_CLASS)\n .data(_chart.data(), function (d) { return _chart.keyAccessor()(d); });\n\n options.enter()\n .append('option')\n .classed(OPTION_CSS_CLASS, true)\n .attr('value', function (d) { return _chart.keyAccessor()(d); });\n\n options.text(_chart.title());\n options.exit().remove();\n _select.selectAll('option.' + OPTION_CSS_CLASS).sort(_order);\n\n _select.on('change', onChange);\n return options;\n }\n\n function onChange (d, i) {\n var values;\n var target = d3.event.target;\n if (target.selectedOptions) {\n var selectedOptions = Array.prototype.slice.call(target.selectedOptions);\n values = selectedOptions.map(function (d) {\n return d.value;\n });\n } else { // IE and other browsers do not support selectedOptions\n // adapted from this polyfill: https://gist.github.com/brettz9/4212217\n var options = [].slice.call(d3.event.target.options);\n values = options.filter(function (option) {\n return option.selected;\n }).map(function (option) {\n return option.value;\n });\n }\n // console.log(values);\n // check if only prompt option is selected\n if (values.length === 1 && values[0] === '') {\n values = _promptValue || null;\n } else if (!_multiple && values.length === 1) {\n values = values[0];\n }\n _chart.onChange(values);\n }\n\n _chart.onChange = function (val) {\n if (val && _multiple) {\n _chart.replaceFilter([val]);\n } else if (val) {\n _chart.replaceFilter(val);\n } else {\n _chart.filterAll();\n }\n dc.events.trigger(function () {\n _chart.redrawGroup();\n });\n };\n\n function setAttributes () {\n if (_multiple) {\n _select.attr('multiple', true);\n } else {\n _select.attr('multiple', null);\n }\n if (_numberVisible !== null) {\n _select.attr('size', _numberVisible);\n } else {\n _select.attr('size', null);\n }\n }\n\n /**\n * Get or set the function that controls the ordering of option tags in the\n * select menu. By default options are ordered by the group key in ascending\n * order.\n * @name order\n * @memberof dc.selectMenu\n * @instance\n * @param {Function} [order]\n * @example\n * // order by the group's value\n * chart.order(function (a,b) {\n * return a.value > b.value ? 1 : b.value > a.value ? -1 : 0;\n * });\n **/\n _chart.order = function (order) {\n if (!arguments.length) {\n return _order;\n }\n _order = order;\n return _chart;\n };\n\n /**\n * Get or set the text displayed in the options used to prompt selection.\n * @name promptText\n * @memberof dc.selectMenu\n * @instance\n * @param {String} [promptText='Select all']\n * @example\n * chart.promptText('All states');\n **/\n _chart.promptText = function (_) {\n if (!arguments.length) {\n return _promptText;\n }\n _promptText = _;\n return _chart;\n };\n\n /**\n * Get or set the function that filters option tags prior to display. By default options\n * with a value of < 1 are not displayed.\n * @name filterDisplayed\n * @memberof dc.selectMenu\n * @instance\n * @param {function} [filterDisplayed]\n * @example\n * // display all options override the `filterDisplayed` function:\n * chart.filterDisplayed(function () {\n * return true;\n * });\n **/\n _chart.filterDisplayed = function (filterDisplayed) {\n if (!arguments.length) {\n return _filterDisplayed;\n }\n _filterDisplayed = filterDisplayed;\n return _chart;\n };\n\n /**\n * Controls the type of select menu. Setting it to true converts the underlying\n * HTML tag into a multiple select.\n * @name multiple\n * @memberof dc.selectMenu\n * @instance\n * @param {boolean} [multiple=false]\n * @example\n * chart.multiple(true);\n **/\n _chart.multiple = function (multiple) {\n if (!arguments.length) {\n return _multiple;\n }\n _multiple = multiple;\n\n return _chart;\n };\n\n /**\n * Controls the default value to be used for\n * [dimension.filter](https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension_filter)\n * when only the prompt value is selected. If `null` (the default), no filtering will occur when\n * just the prompt is selected.\n * @name promptValue\n * @memberof dc.selectMenu\n * @instance\n * @param {?*} [promptValue=null]\n **/\n _chart.promptValue = function (promptValue) {\n if (!arguments.length) {\n return _promptValue;\n }\n _promptValue = promptValue;\n\n return _chart;\n };\n\n /**\n * Controls the number of items to show in the select menu, when `.multiple()` is true. This\n * controls the [`size` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#Attributes) of\n * the `select` element. If `null` (the default), uses the browser's default height.\n * @name numberItems\n * @memberof dc.selectMenu\n * @instance\n * @param {?number} [numberVisible=null]\n * @example\n * chart.numberVisible(10);\n **/\n _chart.numberVisible = function (numberVisible) {\n if (!arguments.length) {\n return _numberVisible;\n }\n _numberVisible = numberVisible;\n\n return _chart;\n };\n\n _chart.size = dc.logger.deprecate(_chart.numberVisible, 'selectMenu.size is ambiguous - use numberVisible instead');\n\n return _chart.anchor(parent, chartGroup);\n};\n","// Renamed functions\n\ndc.abstractBubbleChart = dc.bubbleMixin;\ndc.baseChart = dc.baseMixin;\ndc.capped = dc.capMixin;\ndc.colorChart = dc.colorMixin;\ndc.coordinateGridChart = dc.coordinateGridMixin;\ndc.marginable = dc.marginMixin;\ndc.stackableChart = dc.stackMixin;\n\n// Expose d3 and crossfilter, so that clients in browserify\n// case can obtain them if they need them.\ndc.d3 = d3;\ndc.crossfilter = crossfilter;\n\nreturn dc;}\n if(typeof define === \"function\" && define.amd) {\n define([\"d3\", \"crossfilter2\"], _dc);\n } else if(typeof module === \"object\" && module.exports) {\n var _d3 = require('d3');\n var _crossfilter = require('crossfilter2');\n // When using npm + browserify, 'crossfilter' is a function,\n // since package.json specifies index.js as main function, and it\n // does special handling. When using bower + browserify,\n // there's no main in bower.json (in fact, there's no bower.json),\n // so we need to fix it.\n if (typeof _crossfilter !== \"function\") {\n _crossfilter = _crossfilter.crossfilter;\n }\n module.exports = _dc(_d3, _crossfilter);\n } else {\n this.dc = _dc(d3, crossfilter);\n }\n}\n)();\n"]} \ No newline at end of file +{"version":3,"sources":["src/banner.js","src/core.js","src/errors.js","src/utils.js","src/logger.js","src/events.js","src/filters.js","src/base-mixin.js","src/margin-mixin.js","src/color-mixin.js","src/coordinate-grid-mixin.js","src/stack-mixin.js","src/cap-mixin.js","src/bubble-mixin.js","src/pie-chart.js","src/bar-chart.js","src/line-chart.js","src/data-count.js","src/data-table.js","src/data-grid.js","src/bubble-chart.js","src/composite-chart.js","src/series-chart.js","src/geo-choropleth-chart.js","src/bubble-overlay.js","src/row-chart.js","src/legend.js","src/scatter-plot.js","src/number-display.js","src/heatmap.js","src/d3.box.js","src/box-plot.js","src/select-menu.js","src/footer.js"],"names":[],"mappings":"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","file":"dc.js","sourcesContent":["(function() { function _dc(d3, crossfilter) {\n'use strict';\n","/**\n * The entire dc.js library is scoped under the **dc** name space. It does not introduce\n * anything else into the global name space.\n *\n * Most `dc` functions are designed to allow function chaining, meaning they return the current chart\n * instance whenever it is appropriate. The getter forms of functions do not participate in function\n * chaining because they return values that are not the chart, although some,\n * such as {@link dc.baseMixin#svg .svg} and {@link dc.coordinateGridMixin#xAxis .xAxis},\n * return values that are themselves chainable d3 objects.\n * @namespace dc\n * @version 2.1.10\n * @example\n * // Example chaining\n * chart.width(300)\n * .height(300)\n * .filter('sunday');\n */\n/*jshint -W079*/\nvar dc = {\n version: '2.1.10',\n constants: {\n CHART_CLASS: 'dc-chart',\n DEBUG_GROUP_CLASS: 'debug',\n STACK_CLASS: 'stack',\n DESELECTED_CLASS: 'deselected',\n SELECTED_CLASS: 'selected',\n NODE_INDEX_NAME: '__index__',\n GROUP_INDEX_NAME: '__group_index__',\n DEFAULT_CHART_GROUP: '__default_chart_group__',\n EVENT_DELAY: 40,\n NEGLIGIBLE_NUMBER: 1e-10\n },\n _renderlet: null\n};\n/*jshint +W079*/\n\n/**\n * The dc.chartRegistry object maintains sets of all instantiated dc.js charts under named groups\n * and the default group.\n *\n * A chart group often corresponds to a crossfilter instance. It specifies\n * the set of charts which should be updated when a filter changes on one of the charts or when the\n * global functions {@link dc.filterAll dc.filterAll}, {@link dc.refocusAll dc.refocusAll},\n * {@link dc.renderAll dc.renderAll}, {@link dc.redrawAll dc.redrawAll}, or chart functions\n * {@link dc.baseMixin#renderGroup baseMixin.renderGroup},\n * {@link dc.baseMixin#redrawGroup baseMixin.redrawGroup} are called.\n *\n * @namespace chartRegistry\n * @memberof dc\n * @type {{has, register, deregister, clear, list}}\n */\ndc.chartRegistry = (function () {\n // chartGroup:string => charts:array\n var _chartMap = {};\n\n function initializeChartGroup (group) {\n if (!group) {\n group = dc.constants.DEFAULT_CHART_GROUP;\n }\n\n if (!_chartMap[group]) {\n _chartMap[group] = [];\n }\n\n return group;\n }\n\n return {\n /**\n * Determine if a given chart instance resides in any group in the registry.\n * @method has\n * @memberof dc.chartRegistry\n * @param {Object} chart dc.js chart instance\n * @returns {Boolean}\n */\n has: function (chart) {\n for (var e in _chartMap) {\n if (_chartMap[e].indexOf(chart) >= 0) {\n return true;\n }\n }\n return false;\n },\n\n /**\n * Add given chart instance to the given group, creating the group if necessary.\n * If no group is provided, the default group `dc.constants.DEFAULT_CHART_GROUP` will be used.\n * @method register\n * @memberof dc.chartRegistry\n * @param {Object} chart dc.js chart instance\n * @param {String} [group] Group name\n */\n register: function (chart, group) {\n group = initializeChartGroup(group);\n _chartMap[group].push(chart);\n },\n\n /**\n * Remove given chart instance from the given group, creating the group if necessary.\n * If no group is provided, the default group `dc.constants.DEFAULT_CHART_GROUP` will be used.\n * @method deregister\n * @memberof dc.chartRegistry\n * @param {Object} chart dc.js chart instance\n * @param {String} [group] Group name\n */\n deregister: function (chart, group) {\n group = initializeChartGroup(group);\n for (var i = 0; i < _chartMap[group].length; i++) {\n if (_chartMap[group][i].anchorName() === chart.anchorName()) {\n _chartMap[group].splice(i, 1);\n break;\n }\n }\n },\n\n /**\n * Clear given group if one is provided, otherwise clears all groups.\n * @method clear\n * @memberof dc.chartRegistry\n * @param {String} group Group name\n */\n clear: function (group) {\n if (group) {\n delete _chartMap[group];\n } else {\n _chartMap = {};\n }\n },\n\n /**\n * Get an array of each chart instance in the given group.\n * If no group is provided, the charts in the default group are returned.\n * @method list\n * @memberof dc.chartRegistry\n * @param {String} [group] Group name\n * @returns {Array<Object>}\n */\n list: function (group) {\n group = initializeChartGroup(group);\n return _chartMap[group];\n }\n };\n})();\n\n/**\n * Add given chart instance to the given group, creating the group if necessary.\n * If no group is provided, the default group `dc.constants.DEFAULT_CHART_GROUP` will be used.\n * @memberof dc\n * @method registerChart\n * @param {Object} chart dc.js chart instance\n * @param {String} [group] Group name\n */\ndc.registerChart = function (chart, group) {\n dc.chartRegistry.register(chart, group);\n};\n\n/**\n * Remove given chart instance from the given group, creating the group if necessary.\n * If no group is provided, the default group `dc.constants.DEFAULT_CHART_GROUP` will be used.\n * @memberof dc\n * @method deregisterChart\n * @param {Object} chart dc.js chart instance\n * @param {String} [group] Group name\n */\ndc.deregisterChart = function (chart, group) {\n dc.chartRegistry.deregister(chart, group);\n};\n\n/**\n * Determine if a given chart instance resides in any group in the registry.\n * @memberof dc\n * @method hasChart\n * @param {Object} chart dc.js chart instance\n * @returns {Boolean}\n */\ndc.hasChart = function (chart) {\n return dc.chartRegistry.has(chart);\n};\n\n/**\n * Clear given group if one is provided, otherwise clears all groups.\n * @memberof dc\n * @method deregisterAllCharts\n * @param {String} group Group name\n */\ndc.deregisterAllCharts = function (group) {\n dc.chartRegistry.clear(group);\n};\n\n/**\n * Clear all filters on all charts within the given chart group. If the chart group is not given then\n * only charts that belong to the default chart group will be reset.\n * @memberof dc\n * @method filterAll\n * @param {String} [group]\n */\ndc.filterAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].filterAll();\n }\n};\n\n/**\n * Reset zoom level / focus on all charts that belong to the given chart group. If the chart group is\n * not given then only charts that belong to the default chart group will be reset.\n * @memberof dc\n * @method refocusAll\n * @param {String} [group]\n */\ndc.refocusAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n if (charts[i].focus) {\n charts[i].focus();\n }\n }\n};\n\n/**\n * Re-render all charts belong to the given chart group. If the chart group is not given then only\n * charts that belong to the default chart group will be re-rendered.\n * @memberof dc\n * @method renderAll\n * @param {String} [group]\n */\ndc.renderAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].render();\n }\n\n if (dc._renderlet !== null) {\n dc._renderlet(group);\n }\n};\n\n/**\n * Redraw all charts belong to the given chart group. If the chart group is not given then only charts\n * that belong to the default chart group will be re-drawn. Redraw is different from re-render since\n * when redrawing dc tries to update the graphic incrementally, using transitions, instead of starting\n * from scratch.\n * @memberof dc\n * @method redrawAll\n * @param {String} [group]\n */\ndc.redrawAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].redraw();\n }\n\n if (dc._renderlet !== null) {\n dc._renderlet(group);\n }\n};\n\n/**\n * If this boolean is set truthy, all transitions will be disabled, and changes to the charts will happen\n * immediately.\n * @memberof dc\n * @member disableTransitions\n * @type {Boolean}\n * @default false\n */\ndc.disableTransitions = false;\n\n/**\n * Start a transition on a selection if transitions are globally enabled\n * ({@link dc.disableTransitions} is false) and the duration is greater than zero; otherwise return\n * the selection. Since most operations are the same on a d3 selection and a d3 transition, this\n * allows a common code path for both cases.\n * @memberof dc\n * @method transition\n * @param {d3.selection} selection - the selection to be transitioned\n * @param {Number|Function} [duration=250] - the duration of the transition in milliseconds, a\n * function returning the duration, or 0 for no transition\n * @param {Number|Function} [delay] - the delay of the transition in milliseconds, or a function\n * returning the delay, or 0 for no delay\n * @param {String} [name] - the name of the transition (if concurrent transitions on the same\n * elements are needed)\n * @returns {d3.transition|d3.selection}\n */\ndc.transition = function (selection, duration, delay, name) {\n if (dc.disableTransitions || duration <= 0) {\n return selection;\n }\n\n var s = selection.transition(name);\n\n if (duration >= 0 || duration !== undefined) {\n s = s.duration(duration);\n }\n if (delay >= 0 || delay !== undefined) {\n s = s.delay(delay);\n }\n\n return s;\n};\n\n/* somewhat silly, but to avoid duplicating logic */\ndc.optionalTransition = function (enable, duration, delay, name) {\n if (enable) {\n return function (selection) {\n return dc.transition(selection, duration, delay, name);\n };\n } else {\n return function (selection) {\n return selection;\n };\n }\n};\n\n// See http://stackoverflow.com/a/20773846\ndc.afterTransition = function (transition, callback) {\n if (transition.empty() || !transition.duration) {\n callback.call(transition);\n } else {\n var n = 0;\n transition\n .each(function () { ++n; })\n .each('end', function () {\n if (!--n) {\n callback.call(transition);\n }\n });\n }\n};\n\n/**\n * @namespace units\n * @memberof dc\n * @type {{}}\n */\ndc.units = {};\n\n/**\n * The default value for {@link dc.coordinateGridMixin#xUnits .xUnits} for the\n * {@link dc.coordinateGridMixin Coordinate Grid Chart} and should\n * be used when the x values are a sequence of integers.\n * It is a function that counts the number of integers in the range supplied in its start and end parameters.\n * @method integers\n * @memberof dc.units\n * @see {@link dc.coordinateGridMixin#xUnits coordinateGridMixin.xUnits}\n * @example\n * chart.xUnits(dc.units.integers) // already the default\n * @param {Number} start\n * @param {Number} end\n * @returns {Number}\n */\ndc.units.integers = function (start, end) {\n return Math.abs(end - start);\n};\n\n/**\n * This argument can be passed to the {@link dc.coordinateGridMixin#xUnits .xUnits} function of the to\n * specify ordinal units for the x axis. Usually this parameter is used in combination with passing\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md d3.scale.ordinal} to\n * {@link dc.coordinateGridMixin#x .x}.\n * It just returns the domain passed to it, which for ordinal charts is an array of all values.\n * @method ordinal\n * @memberof dc.units\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md d3.scale.ordinal}\n * @see {@link dc.coordinateGridMixin#xUnits coordinateGridMixin.xUnits}\n * @see {@link dc.coordinateGridMixin#x coordinateGridMixin.x}\n * @example\n * chart.xUnits(dc.units.ordinal)\n * .x(d3.scale.ordinal())\n * @param {*} start\n * @param {*} end\n * @param {Array<String>} domain\n * @returns {Array<String>}\n */\ndc.units.ordinal = function (start, end, domain) {\n return domain;\n};\n\n/**\n * @namespace fp\n * @memberof dc.units\n * @type {{}}\n */\ndc.units.fp = {};\n/**\n * This function generates an argument for the {@link dc.coordinateGridMixin Coordinate Grid Chart}\n * {@link dc.coordinateGridMixin#xUnits .xUnits} function specifying that the x values are floating-point\n * numbers with the given precision.\n * The returned function determines how many values at the given precision will fit into the range\n * supplied in its start and end parameters.\n * @method precision\n * @memberof dc.units.fp\n * @see {@link dc.coordinateGridMixin#xUnits coordinateGridMixin.xUnits}\n * @example\n * // specify values (and ticks) every 0.1 units\n * chart.xUnits(dc.units.fp.precision(0.1)\n * // there are 500 units between 0.5 and 1 if the precision is 0.001\n * var thousandths = dc.units.fp.precision(0.001);\n * thousandths(0.5, 1.0) // returns 500\n * @param {Number} precision\n * @returns {Function} start-end unit function\n */\ndc.units.fp.precision = function (precision) {\n var _f = function (s, e) {\n var d = Math.abs((e - s) / _f.resolution);\n if (dc.utils.isNegligible(d - Math.floor(d))) {\n return Math.floor(d);\n } else {\n return Math.ceil(d);\n }\n };\n _f.resolution = precision;\n return _f;\n};\n\ndc.round = {};\ndc.round.floor = function (n) {\n return Math.floor(n);\n};\ndc.round.ceil = function (n) {\n return Math.ceil(n);\n};\ndc.round.round = function (n) {\n return Math.round(n);\n};\n\ndc.override = function (obj, functionName, newFunction) {\n var existingFunction = obj[functionName];\n obj['_' + functionName] = existingFunction;\n obj[functionName] = newFunction;\n};\n\ndc.renderlet = function (_) {\n if (!arguments.length) {\n return dc._renderlet;\n }\n dc._renderlet = _;\n return dc;\n};\n\ndc.instanceOfChart = function (o) {\n return o instanceof Object && o.__dcFlag__ && true;\n};\n","dc.errors = {};\n\ndc.errors.Exception = function (msg) {\n var _msg = msg || 'Unexpected internal error';\n\n this.message = _msg;\n\n this.toString = function () {\n return _msg;\n };\n this.stack = (new Error()).stack;\n};\ndc.errors.Exception.prototype = Object.create(Error.prototype);\ndc.errors.Exception.prototype.constructor = dc.errors.Exception;\n\ndc.errors.InvalidStateException = function () {\n dc.errors.Exception.apply(this, arguments);\n};\n\ndc.errors.InvalidStateException.prototype = Object.create(dc.errors.Exception.prototype);\ndc.errors.InvalidStateException.prototype.constructor = dc.errors.InvalidStateException;\n\ndc.errors.BadArgumentException = function () {\n dc.errors.Exception.apply(this, arguments);\n};\n\ndc.errors.BadArgumentException.prototype = Object.create(dc.errors.Exception.prototype);\ndc.errors.BadArgumentException.prototype.constructor = dc.errors.BadArgumentException;\n","/**\n * The default date format for dc.js\n * @name dateFormat\n * @memberof dc\n * @type {Function}\n * @default d3.time.format('%m/%d/%Y')\n */\ndc.dateFormat = d3.time.format('%m/%d/%Y');\n\n/**\n * @namespace printers\n * @memberof dc\n * @type {{}}\n */\ndc.printers = {};\n\n/**\n * Converts a list of filters into a readable string.\n * @method filters\n * @memberof dc.printers\n * @param {Array<dc.filters>} filters\n * @returns {String}\n */\ndc.printers.filters = function (filters) {\n var s = '';\n\n for (var i = 0; i < filters.length; ++i) {\n if (i > 0) {\n s += ', ';\n }\n s += dc.printers.filter(filters[i]);\n }\n\n return s;\n};\n\n/**\n * Converts a filter into a readable string.\n * @method filter\n * @memberof dc.printers\n * @param {dc.filters|any|Array<any>} filter\n * @returns {String}\n */\ndc.printers.filter = function (filter) {\n var s = '';\n\n if (typeof filter !== 'undefined' && filter !== null) {\n if (filter instanceof Array) {\n if (filter.length >= 2) {\n s = '[' + dc.utils.printSingleValue(filter[0]) + ' -> ' + dc.utils.printSingleValue(filter[1]) + ']';\n } else if (filter.length >= 1) {\n s = dc.utils.printSingleValue(filter[0]);\n }\n } else {\n s = dc.utils.printSingleValue(filter);\n }\n }\n\n return s;\n};\n\n/**\n * Returns a function that given a string property name, can be used to pluck the property off an object. A function\n * can be passed as the second argument to also alter the data being returned.\n *\n * This can be a useful shorthand method to create accessor functions.\n * @method pluck\n * @memberof dc\n * @example\n * var xPluck = dc.pluck('x');\n * var objA = {x: 1};\n * xPluck(objA) // 1\n * @example\n * var xPosition = dc.pluck('x', function (x, i) {\n * // `this` is the original datum,\n * // `x` is the x property of the datum,\n * // `i` is the position in the array\n * return this.radius + x;\n * });\n * dc.selectAll('.circle').data(...).x(xPosition);\n * @param {String} n\n * @param {Function} [f]\n * @returns {Function}\n */\ndc.pluck = function (n, f) {\n if (!f) {\n return function (d) { return d[n]; };\n }\n return function (d, i) { return f.call(d, d[n], i); };\n};\n\n/**\n * @namespace utils\n * @memberof dc\n * @type {{}}\n */\ndc.utils = {};\n\n/**\n * Print a single value filter.\n * @method printSingleValue\n * @memberof dc.utils\n * @param {any} filter\n * @returns {String}\n */\ndc.utils.printSingleValue = function (filter) {\n var s = '' + filter;\n\n if (filter instanceof Date) {\n s = dc.dateFormat(filter);\n } else if (typeof(filter) === 'string') {\n s = filter;\n } else if (dc.utils.isFloat(filter)) {\n s = dc.utils.printSingleValue.fformat(filter);\n } else if (dc.utils.isInteger(filter)) {\n s = Math.round(filter);\n }\n\n return s;\n};\ndc.utils.printSingleValue.fformat = d3.format('.2f');\n\n/**\n * Arbitrary add one value to another.\n * @method add\n * @memberof dc.utils\n * @todo\n * These assume than any string r is a percentage (whether or not it includes %).\n * They also generate strange results if l is a string.\n * @param {String|Date|Number} l the value to modify\n * @param {Number} r the amount by which to modify the value\n * @param {String} [t] if `l` is a `Date`, the\n * [interval](https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Intervals.md#interval) in\n * the `d3.time` namespace\n * @returns {String|Date|Number}\n */\ndc.utils.add = function (l, r, t) {\n if (typeof r === 'string') {\n r = r.replace('%', '');\n }\n\n if (l instanceof Date) {\n if (typeof r === 'string') {\n r = +r;\n }\n if (t === 'millis') {\n return new Date(l.getTime() + r);\n }\n t = t || 'day';\n return d3.time[t].offset(l, r);\n } else if (typeof r === 'string') {\n var percentage = (+r / 100);\n return l > 0 ? l * (1 + percentage) : l * (1 - percentage);\n } else {\n return l + r;\n }\n};\n\n/**\n * Arbitrary subtract one value from another.\n * @method subtract\n * @memberof dc.utils\n * @todo\n * These assume than any string r is a percentage (whether or not it includes %).\n * They also generate strange results if l is a string.\n * @param {String|Date|Number} l the value to modify\n * @param {Number} r the amount by which to modify the value\n * @param {String} [t] if `l` is a `Date`, the\n * [interval](https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Intervals.md#interval) in\n * the `d3.time` namespace\n * @returns {String|Date|Number}\n */\ndc.utils.subtract = function (l, r, t) {\n if (typeof r === 'string') {\n r = r.replace('%', '');\n }\n\n if (l instanceof Date) {\n if (typeof r === 'string') {\n r = +r;\n }\n if (t === 'millis') {\n return new Date(l.getTime() - r);\n }\n t = t || 'day';\n return d3.time[t].offset(l, -r);\n } else if (typeof r === 'string') {\n var percentage = (+r / 100);\n return l < 0 ? l * (1 + percentage) : l * (1 - percentage);\n } else {\n return l - r;\n }\n};\n\n/**\n * Is the value a number?\n * @method isNumber\n * @memberof dc.utils\n * @param {any} n\n * @returns {Boolean}\n */\ndc.utils.isNumber = function (n) {\n return n === +n;\n};\n\n/**\n * Is the value a float?\n * @method isFloat\n * @memberof dc.utils\n * @param {any} n\n * @returns {Boolean}\n */\ndc.utils.isFloat = function (n) {\n return n === +n && n !== (n | 0);\n};\n\n/**\n * Is the value an integer?\n * @method isInteger\n * @memberof dc.utils\n * @param {any} n\n * @returns {Boolean}\n */\ndc.utils.isInteger = function (n) {\n return n === +n && n === (n | 0);\n};\n\n/**\n * Is the value very close to zero?\n * @method isNegligible\n * @memberof dc.utils\n * @param {any} n\n * @returns {Boolean}\n */\ndc.utils.isNegligible = function (n) {\n return !dc.utils.isNumber(n) || (n < dc.constants.NEGLIGIBLE_NUMBER && n > -dc.constants.NEGLIGIBLE_NUMBER);\n};\n\n/**\n * Ensure the value is no greater or less than the min/max values. If it is return the boundary value.\n * @method clamp\n * @memberof dc.utils\n * @param {any} val\n * @param {any} min\n * @param {any} max\n * @returns {any}\n */\ndc.utils.clamp = function (val, min, max) {\n return val < min ? min : (val > max ? max : val);\n};\n\n/**\n * Using a simple static counter, provide a unique integer id.\n * @method uniqueId\n * @memberof dc.utils\n * @returns {Number}\n */\nvar _idCounter = 0;\ndc.utils.uniqueId = function () {\n return ++_idCounter;\n};\n\n/**\n * Convert a name to an ID.\n * @method nameToId\n * @memberof dc.utils\n * @param {String} name\n * @returns {String}\n */\ndc.utils.nameToId = function (name) {\n return name.toLowerCase().replace(/[\\s]/g, '_').replace(/[\\.']/g, '');\n};\n\n/**\n * Append or select an item on a parent element.\n * @method appendOrSelect\n * @memberof dc.utils\n * @param {d3.selection} parent\n * @param {String} selector\n * @param {String} tag\n * @returns {d3.selection}\n */\ndc.utils.appendOrSelect = function (parent, selector, tag) {\n tag = tag || selector;\n var element = parent.select(selector);\n if (element.empty()) {\n element = parent.append(tag);\n }\n return element;\n};\n\n/**\n * Return the number if the value is a number; else 0.\n * @method safeNumber\n * @memberof dc.utils\n * @param {Number|any} n\n * @returns {Number}\n */\ndc.utils.safeNumber = function (n) { return dc.utils.isNumber(+n) ? +n : 0;};\n","dc.logger = {};\n\ndc.logger.enableDebugLog = false;\n\ndc.logger.warn = function (msg) {\n if (console) {\n if (console.warn) {\n console.warn(msg);\n } else if (console.log) {\n console.log(msg);\n }\n }\n\n return dc.logger;\n};\n\ndc.logger.debug = function (msg) {\n if (dc.logger.enableDebugLog && console) {\n if (console.debug) {\n console.debug(msg);\n } else if (console.log) {\n console.log(msg);\n }\n }\n\n return dc.logger;\n};\n\ndc.logger.deprecate = function (fn, msg) {\n // Allow logging of deprecation\n var warned = false;\n function deprecated () {\n if (!warned) {\n dc.logger.warn(msg);\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n return deprecated;\n};\n","dc.events = {\n current: null\n};\n\n/**\n * This function triggers a throttled event function with a specified delay (in milli-seconds). Events\n * that are triggered repetitively due to user interaction such brush dragging might flood the library\n * and invoke more renders than can be executed in time. Using this function to wrap your event\n * function allows the library to smooth out the rendering by throttling events and only responding to\n * the most recent event.\n * @name events.trigger\n * @memberof dc\n * @example\n * chart.on('renderlet', function(chart) {\n * // smooth the rendering through event throttling\n * dc.events.trigger(function(){\n * // focus some other chart to the range selected by user on this chart\n * someOtherChart.focus(chart.filter());\n * });\n * })\n * @param {Function} closure\n * @param {Number} [delay]\n */\ndc.events.trigger = function (closure, delay) {\n if (!delay) {\n closure();\n return;\n }\n\n dc.events.current = closure;\n\n setTimeout(function () {\n if (closure === dc.events.current) {\n closure();\n }\n }, delay);\n};\n","/**\n * The dc.js filters are functions which are passed into crossfilter to chose which records will be\n * accumulated to produce values for the charts. In the crossfilter model, any filters applied on one\n * dimension will affect all the other dimensions but not that one. dc always applies a filter\n * function to the dimension; the function combines multiple filters and if any of them accept a\n * record, it is filtered in.\n *\n * These filter constructors are used as appropriate by the various charts to implement brushing. We\n * mention below which chart uses which filter. In some cases, many instances of a filter will be added.\n *\n * Each of the dc.js filters is an object with the following properties:\n * * `isFiltered` - a function that returns true if a value is within the filter\n * * `filterType` - a string identifying the filter, here the name of the constructor\n *\n * Currently these filter objects are also arrays, but this is not a requirement. Custom filters\n * can be used as long as they have the properties above.\n * @namespace filters\n * @memberof dc\n * @type {{}}\n */\ndc.filters = {};\n\n/**\n * RangedFilter is a filter which accepts keys between `low` and `high`. It is used to implement X\n * axis brushing for the {@link dc.coordinateGridMixin coordinate grid charts}.\n *\n * Its `filterType` is 'RangedFilter'\n * @name RangedFilter\n * @memberof dc.filters\n * @param {Number} low\n * @param {Number} high\n * @returns {Array<Number>}\n * @constructor\n */\ndc.filters.RangedFilter = function (low, high) {\n var range = new Array(low, high);\n range.isFiltered = function (value) {\n return value >= this[0] && value < this[1];\n };\n range.filterType = 'RangedFilter';\n\n return range;\n};\n\n/**\n * TwoDimensionalFilter is a filter which accepts a single two-dimensional value. It is used by the\n * {@link dc.heatMap heat map chart} to include particular cells as they are clicked. (Rows and columns are\n * filtered by filtering all the cells in the row or column.)\n *\n * Its `filterType` is 'TwoDimensionalFilter'\n * @name TwoDimensionalFilter\n * @memberof dc.filters\n * @param {Array<Number>} filter\n * @returns {Array<Number>}\n * @constructor\n */\ndc.filters.TwoDimensionalFilter = function (filter) {\n if (filter === null) { return null; }\n\n var f = filter;\n f.isFiltered = function (value) {\n return value.length && value.length === f.length &&\n value[0] === f[0] && value[1] === f[1];\n };\n f.filterType = 'TwoDimensionalFilter';\n\n return f;\n};\n\n/**\n * The RangedTwoDimensionalFilter allows filtering all values which fit within a rectangular\n * region. It is used by the {@link dc.scatterPlot scatter plot} to implement rectangular brushing.\n *\n * It takes two two-dimensional points in the form `[[x1,y1],[x2,y2]]`, and normalizes them so that\n * `x1 <= x2` and `y1 <= y2`. It then returns a filter which accepts any points which are in the\n * rectangular range including the lower values but excluding the higher values.\n *\n * If an array of two values are given to the RangedTwoDimensionalFilter, it interprets the values as\n * two x coordinates `x1` and `x2` and returns a filter which accepts any points for which `x1 <= x <\n * x2`.\n *\n * Its `filterType` is 'RangedTwoDimensionalFilter'\n * @name RangedTwoDimensionalFilter\n * @memberof dc.filters\n * @param {Array<Array<Number>>} filter\n * @returns {Array<Array<Number>>}\n * @constructor\n */\ndc.filters.RangedTwoDimensionalFilter = function (filter) {\n if (filter === null) { return null; }\n\n var f = filter;\n var fromBottomLeft;\n\n if (f[0] instanceof Array) {\n fromBottomLeft = [\n [Math.min(filter[0][0], filter[1][0]), Math.min(filter[0][1], filter[1][1])],\n [Math.max(filter[0][0], filter[1][0]), Math.max(filter[0][1], filter[1][1])]\n ];\n } else {\n fromBottomLeft = [[filter[0], -Infinity], [filter[1], Infinity]];\n }\n\n f.isFiltered = function (value) {\n var x, y;\n\n if (value instanceof Array) {\n x = value[0];\n y = value[1];\n } else {\n x = value;\n y = fromBottomLeft[0][1];\n }\n\n return x >= fromBottomLeft[0][0] && x < fromBottomLeft[1][0] &&\n y >= fromBottomLeft[0][1] && y < fromBottomLeft[1][1];\n };\n f.filterType = 'RangedTwoDimensionalFilter';\n\n return f;\n};\n","/**\n * `dc.baseMixin` is an abstract functional object representing a basic `dc` chart object\n * for all chart and widget implementations. Methods from the {@link #dc.baseMixin dc.baseMixin} are inherited\n * and available on all chart implementations in the `dc` library.\n * @name baseMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.baseMixin}\n */\ndc.baseMixin = function (_chart) {\n _chart.__dcFlag__ = dc.utils.uniqueId();\n\n var _dimension;\n var _group;\n\n var _anchor;\n var _root;\n var _svg;\n var _isChild;\n\n var _minWidth = 200;\n var _defaultWidthCalc = function (element) {\n var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n return (width && width > _minWidth) ? width : _minWidth;\n };\n var _widthCalc = _defaultWidthCalc;\n\n var _minHeight = 200;\n var _defaultHeightCalc = function (element) {\n var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n return (height && height > _minHeight) ? height : _minHeight;\n };\n var _heightCalc = _defaultHeightCalc;\n var _width, _height;\n var _useViewBoxResizing = false;\n\n var _keyAccessor = dc.pluck('key');\n var _valueAccessor = dc.pluck('value');\n var _label = dc.pluck('key');\n\n var _ordering = dc.pluck('key');\n var _orderSort;\n\n var _renderLabel = false;\n\n var _title = function (d) {\n return _chart.keyAccessor()(d) + ': ' + _chart.valueAccessor()(d);\n };\n var _renderTitle = true;\n var _controlsUseVisibility = false;\n\n var _transitionDuration = 750;\n\n var _transitionDelay = 0;\n\n var _filterPrinter = dc.printers.filters;\n\n var _mandatoryAttributes = ['dimension', 'group'];\n\n var _chartGroup = dc.constants.DEFAULT_CHART_GROUP;\n\n var _listeners = d3.dispatch(\n 'preRender',\n 'postRender',\n 'preRedraw',\n 'postRedraw',\n 'filtered',\n 'zoomed',\n 'renderlet',\n 'pretransition');\n\n var _legend;\n var _commitHandler;\n\n var _filters = [];\n var _filterHandler = function (dimension, filters) {\n if (filters.length === 0) {\n dimension.filter(null);\n } else if (filters.length === 1 && !filters[0].isFiltered) {\n // single value and not a function-based filter\n dimension.filterExact(filters[0]);\n } else if (filters.length === 1 && filters[0].filterType === 'RangedFilter') {\n // single range-based filter\n dimension.filterRange(filters[0]);\n } else {\n dimension.filterFunction(function (d) {\n for (var i = 0; i < filters.length; i++) {\n var filter = filters[i];\n if (filter.isFiltered && filter.isFiltered(d)) {\n return true;\n } else if (filter <= d && filter >= d) {\n return true;\n }\n }\n return false;\n });\n }\n return filters;\n };\n\n var _data = function (group) {\n return group.all();\n };\n\n /**\n * Set or get the height attribute of a chart. The height is applied to the SVGElement generated by\n * the chart when rendered (or re-rendered). If a value is given, then it will be used to calculate\n * the new height and the chart returned for method chaining. The value can either be a numeric, a\n * function, or falsy. If no value is specified then the value of the current height attribute will\n * be returned.\n *\n * By default, without an explicit height being given, the chart will select the width of its\n * anchor element. If that isn't possible it defaults to 200 (provided by the\n * {@link dc.baseMixin#minHeight minHeight} property). Setting the value falsy will return\n * the chart to the default behavior.\n * @method height\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#minHeight minHeight}\n * @example\n * // Default height\n * chart.height(function (element) {\n * var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n * return (height && height > chart.minHeight()) ? height : chart.minHeight();\n * });\n *\n * chart.height(250); // Set the chart's height to 250px;\n * chart.height(function(anchor) { return doSomethingWith(anchor); }); // set the chart's height with a function\n * chart.height(null); // reset the height to the default auto calculation\n * @param {Number|Function} [height]\n * @returns {Number|dc.baseMixin}\n */\n _chart.height = function (height) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_height)) {\n // only calculate once\n _height = _heightCalc(_root.node());\n }\n return _height;\n }\n _heightCalc = d3.functor(height || _defaultHeightCalc);\n _height = undefined;\n return _chart;\n };\n\n /**\n * Set or get the width attribute of a chart.\n * @method width\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#height height}\n * @see {@link dc.baseMixin#minWidth minWidth}\n * @example\n * // Default width\n * chart.width(function (element) {\n * var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n * return (width && width > chart.minWidth()) ? width : chart.minWidth();\n * });\n * @param {Number|Function} [width]\n * @returns {Number|dc.baseMixin}\n */\n _chart.width = function (width) {\n if (!arguments.length) {\n if (!dc.utils.isNumber(_width)) {\n // only calculate once\n _width = _widthCalc(_root.node());\n }\n return _width;\n }\n _widthCalc = d3.functor(width || _defaultWidthCalc);\n _width = undefined;\n return _chart;\n };\n\n /**\n * Set or get the minimum width attribute of a chart. This only has effect when used with the default\n * {@link dc.baseMixin#width width} function.\n * @method minWidth\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#width width}\n * @param {Number} [minWidth=200]\n * @returns {Number|dc.baseMixin}\n */\n _chart.minWidth = function (minWidth) {\n if (!arguments.length) {\n return _minWidth;\n }\n _minWidth = minWidth;\n return _chart;\n };\n\n /**\n * Set or get the minimum height attribute of a chart. This only has effect when used with the default\n * {@link dc.baseMixin#height height} function.\n * @method minHeight\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#height height}\n * @param {Number} [minHeight=200]\n * @returns {Number|dc.baseMixin}\n */\n _chart.minHeight = function (minHeight) {\n if (!arguments.length) {\n return _minHeight;\n }\n _minHeight = minHeight;\n return _chart;\n };\n\n /**\n * Turn on/off using the SVG\n * {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/viewBox `viewBox` attribute}.\n * When enabled, `viewBox` will be set on the svg root element instead of `width` and `height`.\n * Requires that the chart aspect ratio be defined using chart.width(w) and chart.height(h).\n *\n * This will maintain the aspect ratio while enabling the chart to resize responsively to the\n * space given to the chart using CSS. For example, the chart can use `width: 100%; height:\n * 100%` or absolute positioning to resize to its parent div.\n *\n * Since the text will be sized as if the chart is drawn according to the width and height, and\n * will be resized if the chart is any other size, you need to set the chart width and height so\n * that the text looks good. In practice, 600x400 seems to work pretty well for most charts.\n *\n * You can see examples of this resizing strategy in the [Chart Resizing\n * Examples](http://dc-js.github.io/dc.js/resizing/); just add `?resize=viewbox` to any of the\n * one-chart examples to enable `useViewBoxResizing`.\n * @method useViewBoxResizing\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [useViewBoxResizing=false]\n * @returns {Boolean|dc.baseMixin}\n */\n _chart.useViewBoxResizing = function (useViewBoxResizing) {\n if (!arguments.length) {\n return _useViewBoxResizing;\n }\n _useViewBoxResizing = useViewBoxResizing;\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Set or get the dimension attribute of a chart. In `dc`, a dimension can be any valid\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension crossfilter dimension}\n *\n * If a value is given, then it will be used as the new dimension. If no value is specified then\n * the current dimension will be returned.\n * @method dimension\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension crossfilter.dimension}\n * @example\n * var index = crossfilter([]);\n * var dimension = index.dimension(dc.pluck('key'));\n * chart.dimension(dimension);\n * @param {crossfilter.dimension} [dimension]\n * @returns {crossfilter.dimension|dc.baseMixin}\n */\n _chart.dimension = function (dimension) {\n if (!arguments.length) {\n return _dimension;\n }\n _dimension = dimension;\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * Set the data callback or retrieve the chart's data set. The data callback is passed the chart's\n * group and by default will return\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_all group.all}.\n * This behavior may be modified to, for instance, return only the top 5 groups.\n * @method data\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // Default data function\n * chart.data(function (group) { return group.all(); });\n *\n * chart.data(function (group) { return group.top(5); });\n * @param {Function} [callback]\n * @returns {*|dc.baseMixin}\n */\n _chart.data = function (callback) {\n if (!arguments.length) {\n return _data.call(_chart, _group);\n }\n _data = d3.functor(callback);\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Set or get the group attribute of a chart. In `dc` a group is a\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group-map-reduce crossfilter group}.\n * Usually the group should be created from the particular dimension associated with the same chart. If a value is\n * given, then it will be used as the new group.\n *\n * If no value specified then the current group will be returned.\n * If `name` is specified then it will be used to generate legend label.\n * @method group\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group-map-reduce crossfilter.group}\n * @example\n * var index = crossfilter([]);\n * var dimension = index.dimension(dc.pluck('key'));\n * chart.dimension(dimension);\n * chart.group(dimension.group(crossfilter.reduceSum()));\n * @param {crossfilter.group} [group]\n * @param {String} [name]\n * @returns {crossfilter.group|dc.baseMixin}\n */\n _chart.group = function (group, name) {\n if (!arguments.length) {\n return _group;\n }\n _group = group;\n _chart._groupName = name;\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * Get or set an accessor to order ordinal dimensions. The chart uses\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#quicksort_by crossfilter.quicksort.by}\n * to sort elements; this accessor returns the value to order on.\n * @method ordering\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#quicksort_by crossfilter.quicksort.by}\n * @example\n * // Default ordering accessor\n * _chart.ordering(dc.pluck('key'));\n * @param {Function} [orderFunction]\n * @returns {Function|dc.baseMixin}\n */\n _chart.ordering = function (orderFunction) {\n if (!arguments.length) {\n return _ordering;\n }\n _ordering = orderFunction;\n _orderSort = crossfilter.quicksort.by(_ordering);\n _chart.expireCache();\n return _chart;\n };\n\n _chart._computeOrderedGroups = function (data) {\n var dataCopy = data.slice(0);\n\n if (dataCopy.length <= 1) {\n return dataCopy;\n }\n\n if (!_orderSort) {\n _orderSort = crossfilter.quicksort.by(_ordering);\n }\n\n return _orderSort(dataCopy, 0, dataCopy.length);\n };\n\n /**\n * Clear all filters associated with this chart. The same effect can be achieved by calling\n * {@link dc.baseMixin#filter chart.filter(null)}.\n * @method filterAll\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.filterAll = function () {\n return _chart.filter(null);\n };\n\n /**\n * Execute d3 single selection in the chart's scope using the given selector and return the d3\n * selection.\n *\n * This function is **not chainable** since it does not return a chart instance; however the d3\n * selection result can be chained to d3 function calls.\n * @method select\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#d3_select d3.select}\n * @example\n * // Has the same effect as d3.select('#chart-id').select(selector)\n * chart.select(selector)\n * @returns {d3.selection}\n */\n _chart.select = function (s) {\n return _root.select(s);\n };\n\n /**\n * Execute in scope d3 selectAll using the given selector and return d3 selection result.\n *\n * This function is **not chainable** since it does not return a chart instance; however the d3\n * selection result can be chained to d3 function calls.\n * @method selectAll\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#d3_selectAll d3.selectAll}\n * @example\n * // Has the same effect as d3.select('#chart-id').selectAll(selector)\n * chart.selectAll(selector)\n * @returns {d3.selection}\n */\n _chart.selectAll = function (s) {\n return _root ? _root.selectAll(s) : null;\n };\n\n /**\n * Set the root SVGElement to either be an existing chart's root; or any valid [d3 single\n * selector](https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements) specifying a dom\n * block element such as a div; or a dom element or d3 selection. Optionally registers the chart\n * within the chartGroup. This class is called internally on chart initialization, but be called\n * again to relocate the chart. However, it will orphan any previously created SVGElements.\n * @method anchor\n * @memberof dc.baseMixin\n * @instance\n * @param {anchorChart|anchorSelector|anchorNode} [parent]\n * @param {String} [chartGroup]\n * @returns {String|node|d3.selection|dc.baseMixin}\n */\n _chart.anchor = function (parent, chartGroup) {\n if (!arguments.length) {\n return _anchor;\n }\n if (dc.instanceOfChart(parent)) {\n _anchor = parent.anchor();\n _root = parent.root();\n _isChild = true;\n } else if (parent) {\n if (parent.select && parent.classed) { // detect d3 selection\n _anchor = parent.node();\n } else {\n _anchor = parent;\n }\n _root = d3.select(_anchor);\n _root.classed(dc.constants.CHART_CLASS, true);\n dc.registerChart(_chart, chartGroup);\n _isChild = false;\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _chart;\n };\n\n /**\n * Returns the DOM id for the chart's anchored location.\n * @method anchorName\n * @memberof dc.baseMixin\n * @instance\n * @returns {String}\n */\n _chart.anchorName = function () {\n var a = _chart.anchor();\n if (a && a.id) {\n return a.id;\n }\n if (a && a.replace) {\n return a.replace('#', '');\n }\n return 'dc-chart' + _chart.chartID();\n };\n\n /**\n * Returns the root element where a chart resides. Usually it will be the parent div element where\n * the SVGElement was created. You can also pass in a new root element however this is usually handled by\n * dc internally. Resetting the root element on a chart outside of dc internals may have\n * unexpected consequences.\n * @method root\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement HTMLElement}\n * @param {HTMLElement} [rootElement]\n * @returns {HTMLElement|dc.baseMixin}\n */\n _chart.root = function (rootElement) {\n if (!arguments.length) {\n return _root;\n }\n _root = rootElement;\n return _chart;\n };\n\n /**\n * Returns the top SVGElement for this specific chart. You can also pass in a new SVGElement,\n * however this is usually handled by dc internally. Resetting the SVGElement on a chart outside\n * of dc internals may have unexpected consequences.\n * @method svg\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SVGElement SVGElement}\n * @param {SVGElement|d3.selection} [svgElement]\n * @returns {SVGElement|d3.selection|dc.baseMixin}\n */\n _chart.svg = function (svgElement) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = svgElement;\n return _chart;\n };\n\n /**\n * Remove the chart's SVGElements from the dom and recreate the container SVGElement.\n * @method resetSvg\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SVGElement SVGElement}\n * @returns {SVGElement}\n */\n _chart.resetSvg = function () {\n _chart.select('svg').remove();\n return generateSvg();\n };\n\n function sizeSvg () {\n if (_svg) {\n if (!_useViewBoxResizing) {\n _svg\n .attr('width', _chart.width())\n .attr('height', _chart.height());\n } else if (!_svg.attr('viewBox')) {\n _svg\n .attr('viewBox', '0 0 ' + _chart.width() + ' ' + _chart.height());\n }\n }\n }\n\n function generateSvg () {\n _svg = _chart.root().append('svg');\n sizeSvg();\n return _svg;\n }\n\n /**\n * Set or get the filter printer function. The filter printer function is used to generate human\n * friendly text for filter value(s) associated with the chart instance. The text will get shown\n * in the `.filter element; see {@link dc.baseMixin#turnOnControls turnOnControls}.\n *\n * By default dc charts use a default filter printer {@link dc.printers.filters dc.printers.filters}\n * that provides simple printing support for both single value and ranged filters.\n * @method filterPrinter\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // for a chart with an ordinal brush, print the filters in upper case\n * chart.filterPrinter(function(filters) {\n * return filters.map(function(f) { return f.toUpperCase(); }).join(', ');\n * });\n * // for a chart with a range brush, print the filter as start and extent\n * chart.filterPrinter(function(filters) {\n * return 'start ' + dc.utils.printSingleValue(filters[0][0]) +\n * ' extent ' + dc.utils.printSingleValue(filters[0][1] - filters[0][0]);\n * });\n * @param {Function} [filterPrinterFunction=dc.printers.filters]\n * @returns {Function|dc.baseMixin}\n */\n _chart.filterPrinter = function (filterPrinterFunction) {\n if (!arguments.length) {\n return _filterPrinter;\n }\n _filterPrinter = filterPrinterFunction;\n return _chart;\n };\n\n /**\n * If set, use the `visibility` attribute instead of the `display` attribute for showing/hiding\n * chart reset and filter controls, for less disruption to the layout.\n * @method controlsUseVisibility\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [controlsUseVisibility=false]\n * @returns {Boolean|dc.baseMixin}\n **/\n _chart.controlsUseVisibility = function (useVisibility) {\n if (!arguments.length) {\n return _controlsUseVisibility;\n }\n _controlsUseVisibility = useVisibility;\n return _chart;\n };\n\n /**\n * Turn on optional control elements within the root element. dc currently supports the\n * following html control elements.\n * * root.selectAll('.reset') - elements are turned on if the chart has an active filter. This type\n * of control element is usually used to store a reset link to allow user to reset filter on a\n * certain chart. This element will be turned off automatically if the filter is cleared.\n * * root.selectAll('.filter') elements are turned on if the chart has an active filter. The text\n * content of this element is then replaced with the current filter value using the filter printer\n * function. This type of element will be turned off automatically if the filter is cleared.\n * @method turnOnControls\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.turnOnControls = function () {\n if (_root) {\n var attribute = _chart.controlsUseVisibility() ? 'visibility' : 'display';\n _chart.selectAll('.reset').style(attribute, null);\n _chart.selectAll('.filter').text(_filterPrinter(_chart.filters())).style(attribute, null);\n }\n return _chart;\n };\n\n /**\n * Turn off optional control elements within the root element.\n * @method turnOffControls\n * @memberof dc.baseMixin\n * @see {@link dc.baseMixin#turnOnControls turnOnControls}\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.turnOffControls = function () {\n if (_root) {\n var attribute = _chart.controlsUseVisibility() ? 'visibility' : 'display';\n var value = _chart.controlsUseVisibility() ? 'hidden' : 'none';\n _chart.selectAll('.reset').style(attribute, value);\n _chart.selectAll('.filter').style(attribute, value).text(_chart.filter());\n }\n return _chart;\n };\n\n /**\n * Set or get the animation transition duration (in milliseconds) for this chart instance.\n * @method transitionDuration\n * @memberof dc.baseMixin\n * @instance\n * @param {Number} [duration=750]\n * @returns {Number|dc.baseMixin}\n */\n _chart.transitionDuration = function (duration) {\n if (!arguments.length) {\n return _transitionDuration;\n }\n _transitionDuration = duration;\n return _chart;\n };\n\n /**\n * Set or get the animation transition delay (in milliseconds) for this chart instance.\n * @method transitionDelay\n * @memberof dc.baseMixin\n * @instance\n * @param {Number} [delay=0]\n * @returns {Number|dc.baseMixin}\n */\n _chart.transitionDelay = function (delay) {\n if (!arguments.length) {\n return _transitionDelay;\n }\n _transitionDelay = delay;\n return _chart;\n };\n\n _chart._mandatoryAttributes = function (_) {\n if (!arguments.length) {\n return _mandatoryAttributes;\n }\n _mandatoryAttributes = _;\n return _chart;\n };\n\n function checkForMandatoryAttributes (a) {\n if (!_chart[a] || !_chart[a]()) {\n throw new dc.errors.InvalidStateException('Mandatory attribute chart.' + a +\n ' is missing on chart[#' + _chart.anchorName() + ']');\n }\n }\n\n /**\n * Invoking this method will force the chart to re-render everything from scratch. Generally it\n * should only be used to render the chart for the first time on the page or if you want to make\n * sure everything is redrawn from scratch instead of relying on the default incremental redrawing\n * behaviour.\n * @method render\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.render = function () {\n _height = _width = undefined; // force recalculate\n _listeners.preRender(_chart);\n\n if (_mandatoryAttributes) {\n _mandatoryAttributes.forEach(checkForMandatoryAttributes);\n }\n\n var result = _chart._doRender();\n\n if (_legend) {\n _legend.render();\n }\n\n _chart._activateRenderlets('postRender');\n\n return result;\n };\n\n _chart._activateRenderlets = function (event) {\n _listeners.pretransition(_chart);\n if (_chart.transitionDuration() > 0 && _svg) {\n _svg.transition().duration(_chart.transitionDuration()).delay(_chart.transitionDelay())\n .each('end', function () {\n _listeners.renderlet(_chart);\n if (event) {\n _listeners[event](_chart);\n }\n });\n } else {\n _listeners.renderlet(_chart);\n if (event) {\n _listeners[event](_chart);\n }\n }\n };\n\n /**\n * Calling redraw will cause the chart to re-render data changes incrementally. If there is no\n * change in the underlying data dimension then calling this method will have no effect on the\n * chart. Most chart interaction in dc will automatically trigger this method through internal\n * events (in particular {@link dc.redrawAll dc.redrawAll}); therefore, you only need to\n * manually invoke this function if data is manipulated outside of dc's control (for example if\n * data is loaded in the background using\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#crossfilter_add crossfilter.add}).\n * @method redraw\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.redraw = function () {\n sizeSvg();\n _listeners.preRedraw(_chart);\n\n var result = _chart._doRedraw();\n\n if (_legend) {\n _legend.render();\n }\n\n _chart._activateRenderlets('postRedraw');\n\n return result;\n };\n\n /**\n * Gets/sets the commit handler. If the chart has a commit handler, the handler will be called when\n * the chart's filters have changed, in order to send the filter data asynchronously to a server.\n *\n * Unlike other functions in dc.js, the commit handler is asynchronous. It takes two arguments:\n * a flag indicating whether this is a render (true) or a redraw (false), and a callback to be\n * triggered once the commit is filtered. The callback has the standard node.js continuation signature\n * with error first and result second.\n * @method commitHandler\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.commitHandler = function (commitHandler) {\n if (!arguments.length) {\n return _commitHandler;\n }\n _commitHandler = commitHandler;\n return _chart;\n };\n\n /**\n * Redraws all charts in the same group as this chart, typically in reaction to a filter\n * change. If the chart has a {@link dc.baseMixin.commitFilter commitHandler}, it will\n * be executed and waited for.\n * @method redrawGroup\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.redrawGroup = function () {\n if (_commitHandler) {\n _commitHandler(false, function (error, result) {\n if (error) {\n console.log(error);\n } else {\n dc.redrawAll(_chart.chartGroup());\n }\n });\n } else {\n dc.redrawAll(_chart.chartGroup());\n }\n return _chart;\n };\n\n /**\n * Renders all charts in the same group as this chart. If the chart has a\n * {@link dc.baseMixin.commitFilter commitHandler}, it will be executed and waited for\n * @method renderGroup\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.renderGroup = function () {\n if (_commitHandler) {\n _commitHandler(false, function (error, result) {\n if (error) {\n console.log(error);\n } else {\n dc.renderAll(_chart.chartGroup());\n }\n });\n } else {\n dc.renderAll(_chart.chartGroup());\n }\n return _chart;\n };\n\n _chart._invokeFilteredListener = function (f) {\n if (f !== undefined) {\n _listeners.filtered(_chart, f);\n }\n };\n\n _chart._invokeZoomedListener = function () {\n _listeners.zoomed(_chart);\n };\n\n var _hasFilterHandler = function (filters, filter) {\n if (filter === null || typeof(filter) === 'undefined') {\n return filters.length > 0;\n }\n return filters.some(function (f) {\n return filter <= f && filter >= f;\n });\n };\n\n /**\n * Set or get the has-filter handler. The has-filter handler is a function that checks to see if\n * the chart's current filters (first argument) include a specific filter (second argument). Using a custom has-filter handler allows\n * you to change the way filters are checked for and replaced.\n * @method hasFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default has-filter handler\n * chart.hasFilterHandler(function (filters, filter) {\n * if (filter === null || typeof(filter) === 'undefined') {\n * return filters.length > 0;\n * }\n * return filters.some(function (f) {\n * return filter <= f && filter >= f;\n * });\n * });\n *\n * // custom filter handler (no-op)\n * chart.hasFilterHandler(function(filters, filter) {\n * return false;\n * });\n * @param {Function} [hasFilterHandler]\n * @returns {Function|dc.baseMixin}\n */\n _chart.hasFilterHandler = function (hasFilterHandler) {\n if (!arguments.length) {\n return _hasFilterHandler;\n }\n _hasFilterHandler = hasFilterHandler;\n return _chart;\n };\n\n /**\n * Check whether any active filter or a specific filter is associated with particular chart instance.\n * This function is **not chainable**.\n * @method hasFilter\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#hasFilterHandler hasFilterHandler}\n * @param {*} [filter]\n * @returns {Boolean}\n */\n _chart.hasFilter = function (filter) {\n return _hasFilterHandler(_filters, filter);\n };\n\n var _removeFilterHandler = function (filters, filter) {\n for (var i = 0; i < filters.length; i++) {\n if (filters[i] <= filter && filters[i] >= filter) {\n filters.splice(i, 1);\n break;\n }\n }\n return filters;\n };\n\n /**\n * Set or get the remove filter handler. The remove filter handler is a function that removes a\n * filter from the chart's current filters. Using a custom remove filter handler allows you to\n * change how filters are removed or perform additional work when removing a filter, e.g. when\n * using a filter server other than crossfilter.\n *\n * The handler should return a new or modified array as the result.\n * @method removeFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default remove filter handler\n * chart.removeFilterHandler(function (filters, filter) {\n * for (var i = 0; i < filters.length; i++) {\n * if (filters[i] <= filter && filters[i] >= filter) {\n * filters.splice(i, 1);\n * break;\n * }\n * }\n * return filters;\n * });\n *\n * // custom filter handler (no-op)\n * chart.removeFilterHandler(function(filters, filter) {\n * return filters;\n * });\n * @param {Function} [removeFilterHandler]\n * @returns {Function|dc.baseMixin}\n */\n _chart.removeFilterHandler = function (removeFilterHandler) {\n if (!arguments.length) {\n return _removeFilterHandler;\n }\n _removeFilterHandler = removeFilterHandler;\n return _chart;\n };\n\n var _addFilterHandler = function (filters, filter) {\n filters.push(filter);\n return filters;\n };\n\n /**\n * Set or get the add filter handler. The add filter handler is a function that adds a filter to\n * the chart's filter list. Using a custom add filter handler allows you to change the way filters\n * are added or perform additional work when adding a filter, e.g. when using a filter server other\n * than crossfilter.\n *\n * The handler should return a new or modified array as the result.\n * @method addFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default add filter handler\n * chart.addFilterHandler(function (filters, filter) {\n * filters.push(filter);\n * return filters;\n * });\n *\n * // custom filter handler (no-op)\n * chart.addFilterHandler(function(filters, filter) {\n * return filters;\n * });\n * @param {Function} [addFilterHandler]\n * @returns {Function|dc.baseMixin}\n */\n _chart.addFilterHandler = function (addFilterHandler) {\n if (!arguments.length) {\n return _addFilterHandler;\n }\n _addFilterHandler = addFilterHandler;\n return _chart;\n };\n\n var _resetFilterHandler = function (filters) {\n return [];\n };\n\n /**\n * Set or get the reset filter handler. The reset filter handler is a function that resets the\n * chart's filter list by returning a new list. Using a custom reset filter handler allows you to\n * change the way filters are reset, or perform additional work when resetting the filters,\n * e.g. when using a filter server other than crossfilter.\n *\n * The handler should return a new or modified array as the result.\n * @method resetFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default remove filter handler\n * function (filters) {\n * return [];\n * }\n *\n * // custom filter handler (no-op)\n * chart.resetFilterHandler(function(filters) {\n * return filters;\n * });\n * @param {Function} [resetFilterHandler]\n * @returns {dc.baseMixin}\n */\n _chart.resetFilterHandler = function (resetFilterHandler) {\n if (!arguments.length) {\n return _resetFilterHandler;\n }\n _resetFilterHandler = resetFilterHandler;\n return _chart;\n };\n\n function applyFilters (filters) {\n if (_chart.dimension() && _chart.dimension().filter) {\n var fs = _filterHandler(_chart.dimension(), filters);\n if (fs) {\n filters = fs;\n }\n }\n return filters;\n }\n\n /**\n * Replace the chart filter. This is equivalent to calling `chart.filter(null).filter(filter)`\n * but more efficient because the filter is only applied once.\n *\n * @method replaceFilter\n * @memberof dc.baseMixin\n * @instance\n * @param {*} [filter]\n * @returns {dc.baseMixin}\n **/\n _chart.replaceFilter = function (filter) {\n _filters = _resetFilterHandler(_filters);\n _chart.filter(filter);\n return _chart;\n };\n\n /**\n * Filter the chart by the given parameter, or return the current filter if no input parameter\n * is given.\n *\n * The filter parameter can take one of these forms:\n * * A single value: the value will be toggled (added if it is not present in the current\n * filters, removed if it is present)\n * * An array containing a single array of values (`[[value,value,value]]`): each value is\n * toggled\n * * When appropriate for the chart, a {@link dc.filters dc filter object} such as\n * * {@link dc.filters.RangedFilter `dc.filters.RangedFilter`} for the\n * {@link dc.coordinateGridMixin dc.coordinateGridMixin} charts\n * * {@link dc.filters.TwoDimensionalFilter `dc.filters.TwoDimensionalFilter`} for the\n * {@link dc.heatMap heat map}\n * * {@link dc.filters.RangedTwoDimensionalFilter `dc.filters.RangedTwoDimensionalFilter`}\n * for the {@link dc.scatterPlot scatter plot}\n * * `null`: the filter will be reset using the\n * {@link dc.baseMixin#resetFilterHandler resetFilterHandler}\n *\n * Note that this is always a toggle (even when it doesn't make sense for the filter type). If\n * you wish to replace the current filter, either call `chart.filter(null)` first - or it's more\n * efficient to call {@link dc.baseMixin#replaceFilter `chart.replaceFilter(filter)`} instead.\n *\n * Each toggle is executed by checking if the value is already present using the\n * {@link dc.baseMixin#hasFilterHandler hasFilterHandler}; if it is not present, it is added\n * using the {@link dc.baseMixin#addFilterHandler addFilterHandler}; if it is already present,\n * it is removed using the {@link dc.baseMixin#removeFilterHandler removeFilterHandler}.\n *\n * Once the filters array has been updated, the filters are applied to the\n * crossfilter dimension, using the {@link dc.baseMixin#filterHandler filterHandler}.\n *\n * Once you have set the filters, call {@link dc.baseMixin#redrawGroup `chart.redrawGroup()`}\n * (or {@link dc.redrawAll `dc.redrawAll()`}) to redraw the chart's group.\n * @method filter\n * @memberof dc.baseMixin\n * @instance\n * @see {@link dc.baseMixin#addFilterHandler addFilterHandler}\n * @see {@link dc.baseMixin#removeFilterHandler removeFilterHandler}\n * @see {@link dc.baseMixin#resetFilterHandler resetFilterHandler}\n * @see {@link dc.baseMixin#filterHandler filterHandler}\n * @example\n * // filter by a single string\n * chart.filter('Sunday');\n * // filter by a single age\n * chart.filter(18);\n * // filter by a set of states\n * chart.filter([['MA', 'TX', 'ND', 'WA']]);\n * // filter by range -- note the use of dc.filters.RangedFilter, which is different\n * // from the syntax for filtering a crossfilter dimension directly, dimension.filter([15,20])\n * chart.filter(dc.filters.RangedFilter(15,20));\n * @param {*} [filter]\n * @returns {dc.baseMixin}\n */\n _chart.filter = function (filter) {\n if (!arguments.length) {\n return _filters.length > 0 ? _filters[0] : null;\n }\n var filters = _filters;\n if (filter instanceof Array && filter[0] instanceof Array && !filter.isFiltered) {\n // toggle each filter\n filter[0].forEach(function (f) {\n if (_hasFilterHandler(filters, f)) {\n filters = _removeFilterHandler(filters, f);\n } else {\n filters = _addFilterHandler(filters, f);\n }\n });\n } else if (filter === null) {\n filters = _resetFilterHandler(filters);\n } else {\n if (_hasFilterHandler(filters, filter)) {\n filters = _removeFilterHandler(filters, filter);\n } else {\n filters = _addFilterHandler(filters, filter);\n }\n }\n _filters = applyFilters(filters);\n _chart._invokeFilteredListener(filter);\n\n if (_root !== null && _chart.hasFilter()) {\n _chart.turnOnControls();\n } else {\n _chart.turnOffControls();\n }\n\n return _chart;\n };\n\n /**\n * Returns all current filters. This method does not perform defensive cloning of the internal\n * filter array before returning, therefore any modification of the returned array will effect the\n * chart's internal filter storage.\n * @method filters\n * @memberof dc.baseMixin\n * @instance\n * @returns {Array<*>}\n */\n _chart.filters = function () {\n return _filters;\n };\n\n _chart.highlightSelected = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, true);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, false);\n };\n\n _chart.fadeDeselected = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, false);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, true);\n };\n\n _chart.resetHighlight = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, false);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, false);\n };\n\n /**\n * This function is passed to d3 as the onClick handler for each chart. The default behavior is to\n * filter on the clicked datum (passed to the callback) and redraw the chart group.\n * @method onClick\n * @memberof dc.baseMixin\n * @instance\n * @param {*} datum\n */\n _chart.onClick = function (datum) {\n var filter = _chart.keyAccessor()(datum);\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n /**\n * Set or get the filter handler. The filter handler is a function that performs the filter action\n * on a specific dimension. Using a custom filter handler allows you to perform additional logic\n * before or after filtering.\n * @method filterHandler\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension_filter crossfilter.dimension.filter}\n * @example\n * // the default filter handler handles all possible cases for the charts in dc.js\n * // you can replace it with something more specialized for your own chart\n * chart.filterHandler(function (dimension, filters) {\n * if (filters.length === 0) {\n * // the empty case (no filtering)\n * dimension.filter(null);\n * } else if (filters.length === 1 && !filters[0].isFiltered) {\n * // single value and not a function-based filter\n * dimension.filterExact(filters[0]);\n * } else if (filters.length === 1 && filters[0].filterType === 'RangedFilter') {\n * // single range-based filter\n * dimension.filterRange(filters[0]);\n * } else {\n * // an array of values, or an array of filter objects\n * dimension.filterFunction(function (d) {\n * for (var i = 0; i < filters.length; i++) {\n * var filter = filters[i];\n * if (filter.isFiltered && filter.isFiltered(d)) {\n * return true;\n * } else if (filter <= d && filter >= d) {\n * return true;\n * }\n * }\n * return false;\n * });\n * }\n * return filters;\n * });\n *\n * // custom filter handler\n * chart.filterHandler(function(dimension, filter){\n * var newFilter = filter + 10;\n * dimension.filter(newFilter);\n * return newFilter; // set the actual filter value to the new value\n * });\n * @param {Function} [filterHandler]\n * @returns {Function|dc.baseMixin}\n */\n _chart.filterHandler = function (filterHandler) {\n if (!arguments.length) {\n return _filterHandler;\n }\n _filterHandler = filterHandler;\n return _chart;\n };\n\n // abstract function stub\n _chart._doRender = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n _chart._doRedraw = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n _chart.legendables = function () {\n // do nothing in base, should be overridden by sub-function\n return [];\n };\n\n _chart.legendHighlight = function () {\n // do nothing in base, should be overridden by sub-function\n };\n\n _chart.legendReset = function () {\n // do nothing in base, should be overridden by sub-function\n };\n\n _chart.legendToggle = function () {\n // do nothing in base, should be overriden by sub-function\n };\n\n _chart.isLegendableHidden = function () {\n // do nothing in base, should be overridden by sub-function\n return false;\n };\n\n /**\n * Set or get the key accessor function. The key accessor function is used to retrieve the key\n * value from the crossfilter group. Key values are used differently in different charts, for\n * example keys correspond to slices in a pie chart and x axis positions in a grid coordinate chart.\n * @method keyAccessor\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default key accessor\n * chart.keyAccessor(function(d) { return d.key; });\n * // custom key accessor for a multi-value crossfilter reduction\n * chart.keyAccessor(function(p) { return p.value.absGain; });\n * @param {Function} [keyAccessor]\n * @returns {Function|dc.baseMixin}\n */\n _chart.keyAccessor = function (keyAccessor) {\n if (!arguments.length) {\n return _keyAccessor;\n }\n _keyAccessor = keyAccessor;\n return _chart;\n };\n\n /**\n * Set or get the value accessor function. The value accessor function is used to retrieve the\n * value from the crossfilter group. Group values are used differently in different charts, for\n * example values correspond to slice sizes in a pie chart and y axis positions in a grid\n * coordinate chart.\n * @method valueAccessor\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default value accessor\n * chart.valueAccessor(function(d) { return d.value; });\n * // custom value accessor for a multi-value crossfilter reduction\n * chart.valueAccessor(function(p) { return p.value.percentageGain; });\n * @param {Function} [valueAccessor]\n * @returns {Function|dc.baseMixin}\n */\n _chart.valueAccessor = function (valueAccessor) {\n if (!arguments.length) {\n return _valueAccessor;\n }\n _valueAccessor = valueAccessor;\n return _chart;\n };\n\n /**\n * Set or get the label function. The chart class will use this function to render labels for each\n * child element in the chart, e.g. slices in a pie chart or bubbles in a bubble chart. Not every\n * chart supports the label function, for example line chart does not use this function\n * at all. By default, enables labels; pass false for the second parameter if this is not desired.\n * @method label\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default label function just return the key\n * chart.label(function(d) { return d.key; });\n * // label function has access to the standard d3 data binding and can get quite complicated\n * chart.label(function(d) { return d.data.key + '(' + Math.floor(d.data.value / all.value() * 100) + '%)'; });\n * @param {Function} [labelFunction]\n * @param {Boolean} [enableLabels=true]\n * @returns {Function|dc.baseMixin}\n */\n _chart.label = function (labelFunction, enableLabels) {\n if (!arguments.length) {\n return _label;\n }\n _label = labelFunction;\n if ((enableLabels === undefined) || enableLabels) {\n _renderLabel = true;\n }\n return _chart;\n };\n\n /**\n * Turn on/off label rendering\n * @method renderLabel\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [renderLabel=false]\n * @returns {Boolean|dc.baseMixin}\n */\n _chart.renderLabel = function (renderLabel) {\n if (!arguments.length) {\n return _renderLabel;\n }\n _renderLabel = renderLabel;\n return _chart;\n };\n\n /**\n * Set or get the title function. The chart class will use this function to render the SVGElement title\n * (usually interpreted by browser as tooltips) for each child element in the chart, e.g. a slice\n * in a pie chart or a bubble in a bubble chart. Almost every chart supports the title function;\n * however in grid coordinate charts you need to turn off the brush in order to see titles, because\n * otherwise the brush layer will block tooltip triggering.\n * @method title\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default title function shows \"key: value\"\n * chart.title(function(d) { return d.key + ': ' + d.value; });\n * // title function has access to the standard d3 data binding and can get quite complicated\n * chart.title(function(p) {\n * return p.key.getFullYear()\n * + '\\n'\n * + 'Index Gain: ' + numberFormat(p.value.absGain) + '\\n'\n * + 'Index Gain in Percentage: ' + numberFormat(p.value.percentageGain) + '%\\n'\n * + 'Fluctuation / Index Ratio: ' + numberFormat(p.value.fluctuationPercentage) + '%';\n * });\n * @param {Function} [titleFunction]\n * @returns {Function|dc.baseMixin}\n */\n _chart.title = function (titleFunction) {\n if (!arguments.length) {\n return _title;\n }\n _title = titleFunction;\n return _chart;\n };\n\n /**\n * Turn on/off title rendering, or return the state of the render title flag if no arguments are\n * given.\n * @method renderTitle\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [renderTitle=true]\n * @returns {Boolean|dc.baseMixin}\n */\n _chart.renderTitle = function (renderTitle) {\n if (!arguments.length) {\n return _renderTitle;\n }\n _renderTitle = renderTitle;\n return _chart;\n };\n\n /**\n * A renderlet is similar to an event listener on rendering event. Multiple renderlets can be added\n * to an individual chart. Each time a chart is rerendered or redrawn the renderlets are invoked\n * right after the chart finishes its transitions, giving you a way to modify the SVGElements.\n * Renderlet functions take the chart instance as the only input parameter and you can\n * use the dc API or use raw d3 to achieve pretty much any effect.\n *\n * Use {@link dc.baseMixin#on on} with a 'renderlet' prefix.\n * Generates a random key for the renderlet, which makes it hard to remove.\n * @method renderlet\n * @memberof dc.baseMixin\n * @instance\n * @deprecated\n * @example\n * // do this instead of .renderlet(function(chart) { ... })\n * chart.on(\"renderlet\", function(chart){\n * // mix of dc API and d3 manipulation\n * chart.select('g.y').style('display', 'none');\n * // its a closure so you can also access other chart variable available in the closure scope\n * moveChart.filter(chart.filter());\n * });\n * @param {Function} renderletFunction\n * @returns {dc.baseMixin}\n */\n _chart.renderlet = dc.logger.deprecate(function (renderletFunction) {\n _chart.on('renderlet.' + dc.utils.uniqueId(), renderletFunction);\n return _chart;\n }, 'chart.renderlet has been deprecated. Please use chart.on(\"renderlet.<renderletKey>\", renderletFunction)');\n\n /**\n * Get or set the chart group to which this chart belongs. Chart groups are rendered or redrawn\n * together since it is expected they share the same underlying crossfilter data set.\n * @method chartGroup\n * @memberof dc.baseMixin\n * @instance\n * @param {String} [chartGroup]\n * @returns {String|dc.baseMixin}\n */\n _chart.chartGroup = function (chartGroup) {\n if (!arguments.length) {\n return _chartGroup;\n }\n if (!_isChild) {\n dc.deregisterChart(_chart, _chartGroup);\n }\n _chartGroup = chartGroup;\n if (!_isChild) {\n dc.registerChart(_chart, _chartGroup);\n }\n return _chart;\n };\n\n /**\n * Expire the internal chart cache. dc charts cache some data internally on a per chart basis to\n * speed up rendering and avoid unnecessary calculation; however it might be useful to clear the\n * cache if you have changed state which will affect rendering. For example, if you invoke\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#crossfilter_add crossfilter.add}\n * function or reset group or dimension after rendering, it is a good idea to\n * clear the cache to make sure charts are rendered properly.\n * @method expireCache\n * @memberof dc.baseMixin\n * @instance\n * @returns {dc.baseMixin}\n */\n _chart.expireCache = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n /**\n * Attach a dc.legend widget to this chart. The legend widget will automatically draw legend labels\n * based on the color setting and names associated with each group.\n * @method legend\n * @memberof dc.baseMixin\n * @instance\n * @example\n * chart.legend(dc.legend().x(400).y(10).itemHeight(13).gap(5))\n * @param {dc.legend} [legend]\n * @returns {dc.legend|dc.baseMixin}\n */\n _chart.legend = function (legend) {\n if (!arguments.length) {\n return _legend;\n }\n _legend = legend;\n _legend.parent(_chart);\n return _chart;\n };\n\n /**\n * Returns the internal numeric ID of the chart.\n * @method chartID\n * @memberof dc.baseMixin\n * @instance\n * @returns {String}\n */\n _chart.chartID = function () {\n return _chart.__dcFlag__;\n };\n\n /**\n * Set chart options using a configuration object. Each key in the object will cause the method of\n * the same name to be called with the value to set that attribute for the chart.\n * @method options\n * @memberof dc.baseMixin\n * @instance\n * @example\n * chart.options({dimension: myDimension, group: myGroup});\n * @param {{}} opts\n * @returns {dc.baseMixin}\n */\n _chart.options = function (opts) {\n var applyOptions = [\n 'anchor',\n 'group',\n 'xAxisLabel',\n 'yAxisLabel',\n 'stack',\n 'title',\n 'point',\n 'getColor',\n 'overlayGeoJson'\n ];\n\n for (var o in opts) {\n if (typeof(_chart[o]) === 'function') {\n if (opts[o] instanceof Array && applyOptions.indexOf(o) !== -1) {\n _chart[o].apply(_chart, opts[o]);\n } else {\n _chart[o].call(_chart, opts[o]);\n }\n } else {\n dc.logger.debug('Not a valid option setter name: ' + o);\n }\n }\n return _chart;\n };\n\n /**\n * All dc chart instance supports the following listeners.\n * Supports the following events:\n * * `renderlet` - This listener function will be invoked after transitions after redraw and render. Replaces the\n * deprecated {@link dc.baseMixin#renderlet renderlet} method.\n * * `pretransition` - Like `.on('renderlet', ...)` but the event is fired before transitions start.\n * * `preRender` - This listener function will be invoked before chart rendering.\n * * `postRender` - This listener function will be invoked after chart finish rendering including\n * all renderlets' logic.\n * * `preRedraw` - This listener function will be invoked before chart redrawing.\n * * `postRedraw` - This listener function will be invoked after chart finish redrawing\n * including all renderlets' logic.\n * * `filtered` - This listener function will be invoked after a filter is applied, added or removed.\n * * `zoomed` - This listener function will be invoked after a zoom is triggered.\n * @method on\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Internals.md#dispatch_on d3.dispatch.on}\n * @example\n * .on('renderlet', function(chart, filter){...})\n * .on('pretransition', function(chart, filter){...})\n * .on('preRender', function(chart){...})\n * .on('postRender', function(chart){...})\n * .on('preRedraw', function(chart){...})\n * .on('postRedraw', function(chart){...})\n * .on('filtered', function(chart, filter){...})\n * .on('zoomed', function(chart, filter){...})\n * @param {String} event\n * @param {Function} listener\n * @returns {dc.baseMixin}\n */\n _chart.on = function (event, listener) {\n _listeners.on(event, listener);\n return _chart;\n };\n\n return _chart;\n};\n","/**\n * Margin is a mixin that provides margin utility functions for both the Row Chart and Coordinate Grid\n * Charts.\n * @name marginMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.marginMixin}\n */\ndc.marginMixin = function (_chart) {\n var _margin = {top: 10, right: 50, bottom: 30, left: 30};\n\n /**\n * Get or set the margins for a particular coordinate grid chart instance. The margins is stored as\n * an associative Javascript array.\n * @method margins\n * @memberof dc.marginMixin\n * @instance\n * @example\n * var leftMargin = chart.margins().left; // 30 by default\n * chart.margins().left = 50;\n * leftMargin = chart.margins().left; // now 50\n * @param {{top: Number, right: Number, left: Number, bottom: Number}} [margins={top: 10, right: 50, bottom: 30, left: 30}]\n * @returns {{top: Number, right: Number, left: Number, bottom: Number}|dc.marginMixin}\n */\n _chart.margins = function (margins) {\n if (!arguments.length) {\n return _margin;\n }\n _margin = margins;\n return _chart;\n };\n\n _chart.effectiveWidth = function () {\n return _chart.width() - _chart.margins().left - _chart.margins().right;\n };\n\n _chart.effectiveHeight = function () {\n return _chart.height() - _chart.margins().top - _chart.margins().bottom;\n };\n\n return _chart;\n};\n","/**\n * The Color Mixin is an abstract chart functional class providing universal coloring support\n * as a mix-in for any concrete chart implementation.\n * @name colorMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.colorMixin}\n */\ndc.colorMixin = function (_chart) {\n var _colors = d3.scale.category20c();\n var _defaultAccessor = true;\n\n var _colorAccessor = function (d) { return _chart.keyAccessor()(d); };\n\n /**\n * Retrieve current color scale or set a new color scale. This methods accepts any function that\n * operates like a d3 scale.\n * @method colors\n * @memberof dc.colorMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @example\n * // alternate categorical scale\n * chart.colors(d3.scale.category20b());\n * // ordinal scale\n * chart.colors(d3.scale.ordinal().range(['red','green','blue']));\n * // convenience method, the same as above\n * chart.ordinalColors(['red','green','blue']);\n * // set a linear scale\n * chart.linearColors([\"#4575b4\", \"#ffffbf\", \"#a50026\"]);\n * @param {d3.scale} [colorScale=d3.scale.category20c()]\n * @returns {d3.scale|dc.colorMixin}\n */\n _chart.colors = function (colorScale) {\n if (!arguments.length) {\n return _colors;\n }\n if (colorScale instanceof Array) {\n _colors = d3.scale.quantize().range(colorScale); // deprecated legacy support, note: this fails for ordinal domains\n } else {\n _colors = d3.functor(colorScale);\n }\n return _chart;\n };\n\n /**\n * Convenience method to set the color scale to\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal d3.scale.ordinal} with\n * range `r`.\n * @method ordinalColors\n * @memberof dc.colorMixin\n * @instance\n * @param {Array<String>} r\n * @returns {dc.colorMixin}\n */\n _chart.ordinalColors = function (r) {\n return _chart.colors(d3.scale.ordinal().range(r));\n };\n\n /**\n * Convenience method to set the color scale to an Hcl interpolated linear scale with range `r`.\n * @method linearColors\n * @memberof dc.colorMixin\n * @instance\n * @param {Array<Number>} r\n * @returns {dc.colorMixin}\n */\n _chart.linearColors = function (r) {\n return _chart.colors(d3.scale.linear()\n .range(r)\n .interpolate(d3.interpolateHcl));\n };\n\n /**\n * Set or the get color accessor function. This function will be used to map a data point in a\n * crossfilter group to a color value on the color scale. The default function uses the key\n * accessor.\n * @method colorAccessor\n * @memberof dc.colorMixin\n * @instance\n * @example\n * // default index based color accessor\n * .colorAccessor(function (d, i){return i;})\n * // color accessor for a multi-value crossfilter reduction\n * .colorAccessor(function (d){return d.value.absGain;})\n * @param {Function} [colorAccessor]\n * @returns {Function|dc.colorMixin}\n */\n _chart.colorAccessor = function (colorAccessor) {\n if (!arguments.length) {\n return _colorAccessor;\n }\n _colorAccessor = colorAccessor;\n _defaultAccessor = false;\n return _chart;\n };\n\n // what is this?\n _chart.defaultColorAccessor = function () {\n return _defaultAccessor;\n };\n\n /**\n * Set or get the current domain for the color mapping function. The domain must be supplied as an\n * array.\n *\n * Note: previously this method accepted a callback function. Instead you may use a custom scale\n * set by {@link dc.colorMixin#colors .colors}.\n * @method colorDomain\n * @memberof dc.colorMixin\n * @instance\n * @param {Array<String>} [domain]\n * @returns {Array<String>|dc.colorMixin}\n */\n _chart.colorDomain = function (domain) {\n if (!arguments.length) {\n return _colors.domain();\n }\n _colors.domain(domain);\n return _chart;\n };\n\n /**\n * Set the domain by determining the min and max values as retrieved by\n * {@link dc.colorMixin#colorAccessor .colorAccessor} over the chart's dataset.\n * @method calculateColorDomain\n * @memberof dc.colorMixin\n * @instance\n * @returns {dc.colorMixin}\n */\n _chart.calculateColorDomain = function () {\n var newDomain = [d3.min(_chart.data(), _chart.colorAccessor()),\n d3.max(_chart.data(), _chart.colorAccessor())];\n _colors.domain(newDomain);\n return _chart;\n };\n\n /**\n * Get the color for the datum d and counter i. This is used internally by charts to retrieve a color.\n * @method getColor\n * @memberof dc.colorMixin\n * @instance\n * @param {*} d\n * @param {Number} [i]\n * @returns {String}\n */\n _chart.getColor = function (d, i) {\n return _colors(_colorAccessor.call(this, d, i));\n };\n\n /**\n * **Deprecated.** Get/set the color calculator. This actually replaces the\n * {@link dc.colorMixin#getColor getColor} method!\n *\n * This is not recommended, since using a {@link dc.colorMixin#colorAccessor colorAccessor} and\n * color scale ({@link dc.colorMixin#colors .colors}) is more powerful and idiomatic d3.\n * @method colorCalculator\n * @memberof dc.colorMixin\n * @instance\n * @param {*} [colorCalculator]\n * @returns {Function|dc.colorMixin}\n */\n _chart.colorCalculator = dc.logger.deprecate(function (colorCalculator) {\n if (!arguments.length) {\n return _chart.getColor;\n }\n _chart.getColor = colorCalculator;\n return _chart;\n }, 'colorMixin.colorCalculator has been deprecated. Please colorMixin.colors and colorMixin.colorAccessor instead');\n\n return _chart;\n};\n","/**\n * Coordinate Grid is an abstract base chart designed to support a number of coordinate grid based\n * concrete chart types, e.g. bar chart, line chart, and bubble chart.\n * @name coordinateGridMixin\n * @memberof dc\n * @mixin\n * @mixes dc.colorMixin\n * @mixes dc.marginMixin\n * @mixes dc.baseMixin\n * @param {Object} _chart\n * @returns {dc.coordinateGridMixin}\n */\ndc.coordinateGridMixin = function (_chart) {\n var GRID_LINE_CLASS = 'grid-line';\n var HORIZONTAL_CLASS = 'horizontal';\n var VERTICAL_CLASS = 'vertical';\n var Y_AXIS_LABEL_CLASS = 'y-axis-label';\n var X_AXIS_LABEL_CLASS = 'x-axis-label';\n var DEFAULT_AXIS_LABEL_PADDING = 12;\n\n _chart = dc.colorMixin(dc.marginMixin(dc.baseMixin(_chart)));\n\n _chart.colors(d3.scale.category10());\n _chart._mandatoryAttributes().push('x');\n var _parent;\n var _g;\n var _chartBodyG;\n\n var _x;\n var _xOriginalDomain;\n var _xAxis = d3.svg.axis().orient('bottom');\n var _xUnits = dc.units.integers;\n var _xAxisPadding = 0;\n var _xAxisPaddingUnit = 'day';\n var _xElasticity = false;\n var _xAxisLabel;\n var _xAxisLabelPadding = 0;\n var _lastXDomain;\n\n var _y;\n var _yAxis = d3.svg.axis().orient('left');\n var _yAxisPadding = 0;\n var _yElasticity = false;\n var _yAxisLabel;\n var _yAxisLabelPadding = 0;\n\n var _brush = d3.svg.brush();\n var _brushOn = true;\n var _round;\n\n var _renderHorizontalGridLine = false;\n var _renderVerticalGridLine = false;\n\n var _refocused = false, _resizing = false;\n var _unitCount;\n\n var _zoomScale = [1, Infinity];\n var _zoomOutRestrict = true;\n\n var _zoom = d3.behavior.zoom().on('zoom', zoomHandler);\n var _nullZoom = d3.behavior.zoom().on('zoom', null);\n var _hasBeenMouseZoomable = false;\n\n var _rangeChart;\n var _focusChart;\n\n var _mouseZoomable = false;\n var _clipPadding = 0;\n\n var _outerRangeBandPadding = 0.5;\n var _rangeBandPadding = 0;\n\n var _useRightYAxis = false;\n\n /**\n * When changing the domain of the x or y scale, it is necessary to tell the chart to recalculate\n * and redraw the axes. (`.rescale()` is called automatically when the x or y scale is replaced\n * with {@link dc.coordinateGridMixin+x .x()} or {@link dc.coordinateGridMixin#y .y()}, and has\n * no effect on elastic scales.)\n * @method rescale\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {dc.coordinateGridMixin}\n */\n _chart.rescale = function () {\n _unitCount = undefined;\n _resizing = true;\n return _chart;\n };\n\n _chart.resizing = function () {\n return _resizing;\n };\n\n /**\n * Get or set the range selection chart associated with this instance. Setting the range selection\n * chart using this function will automatically update its selection brush when the current chart\n * zooms in. In return the given range chart will also automatically attach this chart as its focus\n * chart hence zoom in when range brush updates.\n *\n * Usually the range and focus charts will share a dimension. The range chart will set the zoom\n * boundaries for the focus chart, so its dimension values must be compatible with the domain of\n * the focus chart.\n *\n * See the [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) example for this effect in action.\n * @method rangeChart\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {dc.coordinateGridMixin} [rangeChart]\n * @returns {dc.coordinateGridMixin}\n */\n _chart.rangeChart = function (rangeChart) {\n if (!arguments.length) {\n return _rangeChart;\n }\n _rangeChart = rangeChart;\n _rangeChart.focusChart(_chart);\n return _chart;\n };\n\n /**\n * Get or set the scale extent for mouse zooms.\n * @method zoomScale\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Array<Number|Date>} [extent=[1, Infinity]]\n * @returns {Array<Number|Date>|dc.coordinateGridMixin}\n */\n _chart.zoomScale = function (extent) {\n if (!arguments.length) {\n return _zoomScale;\n }\n _zoomScale = extent;\n return _chart;\n };\n\n /**\n * Get or set the zoom restriction for the chart. If true limits the zoom to origional domain of the chart.\n * @method zoomOutRestrict\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [zoomOutRestrict=true]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.zoomOutRestrict = function (zoomOutRestrict) {\n if (!arguments.length) {\n return _zoomOutRestrict;\n }\n _zoomScale[0] = zoomOutRestrict ? 1 : 0;\n _zoomOutRestrict = zoomOutRestrict;\n return _chart;\n };\n\n _chart._generateG = function (parent) {\n if (parent === undefined) {\n _parent = _chart.svg();\n } else {\n _parent = parent;\n }\n\n var href = window.location.href.split('#')[0];\n\n _g = _parent.append('g');\n\n _chartBodyG = _g.append('g').attr('class', 'chart-body')\n .attr('transform', 'translate(' + _chart.margins().left + ', ' + _chart.margins().top + ')')\n .attr('clip-path', 'url(' + href + '#' + getClipPathId() + ')');\n\n return _g;\n };\n\n /**\n * Get or set the root g element. This method is usually used to retrieve the g element in order to\n * overlay custom svg drawing programatically. **Caution**: The root g element is usually generated\n * by dc.js internals, and resetting it might produce unpredictable result.\n * @method g\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {SVGElement} [gElement]\n * @returns {SVGElement|dc.coordinateGridMixin}\n */\n _chart.g = function (gElement) {\n if (!arguments.length) {\n return _g;\n }\n _g = gElement;\n return _chart;\n };\n\n /**\n * Set or get mouse zoom capability flag (default: false). When turned on the chart will be\n * zoomable using the mouse wheel. If the range selector chart is attached zooming will also update\n * the range selection brush on the associated range selector chart.\n * @method mouseZoomable\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [mouseZoomable=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.mouseZoomable = function (mouseZoomable) {\n if (!arguments.length) {\n return _mouseZoomable;\n }\n _mouseZoomable = mouseZoomable;\n return _chart;\n };\n\n /**\n * Retrieve the svg group for the chart body.\n * @method chartBodyG\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {SVGElement} [chartBodyG]\n * @returns {SVGElement}\n */\n _chart.chartBodyG = function (chartBodyG) {\n if (!arguments.length) {\n return _chartBodyG;\n }\n _chartBodyG = chartBodyG;\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Get or set the x scale. The x scale can be any d3\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md quantitive scale} or\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md ordinal scale}.\n * @method x\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @example\n * // set x to a linear scale\n * chart.x(d3.scale.linear().domain([-2500, 2500]))\n * // set x to a time scale to generate histogram\n * chart.x(d3.time.scale().domain([new Date(1985, 0, 1), new Date(2012, 11, 31)]))\n * @param {d3.scale} [xScale]\n * @returns {d3.scale|dc.coordinateGridMixin}\n */\n _chart.x = function (xScale) {\n if (!arguments.length) {\n return _x;\n }\n _x = xScale;\n _xOriginalDomain = _x.domain();\n _chart.rescale();\n return _chart;\n };\n\n _chart.xOriginalDomain = function () {\n return _xOriginalDomain;\n };\n\n /**\n * Set or get the xUnits function. The coordinate grid chart uses the xUnits function to calculate\n * the number of data projections on x axis such as the number of bars for a bar chart or the\n * number of dots for a line chart. This function is expected to return a Javascript array of all\n * data points on x axis, or the number of points on the axis. [d3 time range functions\n * d3.time.days, d3.time.months, and\n * d3.time.years](https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Intervals.md#aliases) are all valid xUnits\n * function. dc.js also provides a few units function, see the {@link dc.units Units Namespace} for\n * a list of built-in units functions.\n * @method xUnits\n * @memberof dc.coordinateGridMixin\n * @instance\n * @todo Add docs for utilities\n * @example\n * // set x units to count days\n * chart.xUnits(d3.time.days);\n * // set x units to count months\n * chart.xUnits(d3.time.months);\n *\n * // A custom xUnits function can be used as long as it follows the following interface:\n * // units in integer\n * function(start, end, xDomain) {\n * // simply calculates how many integers in the domain\n * return Math.abs(end - start);\n * };\n *\n * // fixed units\n * function(start, end, xDomain) {\n * // be aware using fixed units will disable the focus/zoom ability on the chart\n * return 1000;\n * @param {Function} [xUnits=dc.units.integers]\n * @returns {Function|dc.coordinateGridMixin}\n */\n _chart.xUnits = function (xUnits) {\n if (!arguments.length) {\n return _xUnits;\n }\n _xUnits = xUnits;\n return _chart;\n };\n\n /**\n * Set or get the x axis used by a particular coordinate grid chart instance. This function is most\n * useful when x axis customization is required. The x axis in dc.js is an instance of a\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3 axis object};\n * therefore it supports any valid d3 axis manipulation.\n *\n * **Caution**: The x axis is usually generated internally by dc; resetting it may cause\n * unexpected results. Note also that when used as a getter, this function is not chainable:\n * it returns the axis, not the chart,\n * {@link https://github.com/dc-js/dc.js/wiki/FAQ#why-does-everything-break-after-a-call-to-xaxis-or-yaxis\n * so attempting to call chart functions after calling `.xAxis()` will fail}.\n * @method xAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3.svg.axis}\n * @example\n * // customize x axis tick format\n * chart.xAxis().tickFormat(function(v) {return v + '%';});\n * // customize x axis tick values\n * chart.xAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [xAxis=d3.svg.axis().orient('bottom')]\n * @returns {d3.svg.axis|dc.coordinateGridMixin}\n */\n _chart.xAxis = function (xAxis) {\n if (!arguments.length) {\n return _xAxis;\n }\n _xAxis = xAxis;\n return _chart;\n };\n\n /**\n * Turn on/off elastic x axis behavior. If x axis elasticity is turned on, then the grid chart will\n * attempt to recalculate the x axis range whenever a redraw event is triggered.\n * @method elasticX\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [elasticX=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.elasticX = function (elasticX) {\n if (!arguments.length) {\n return _xElasticity;\n }\n _xElasticity = elasticX;\n return _chart;\n };\n\n /**\n * Set or get x axis padding for the elastic x axis. The padding will be added to both end of the x\n * axis if elasticX is turned on; otherwise it is ignored.\n *\n * Padding can be an integer or percentage in string (e.g. '10%'). Padding can be applied to\n * number or date x axes. When padding a date axis, an integer represents number of units being padded\n * and a percentage string will be treated the same as an integer. The unit will be determined by the\n * xAxisPaddingUnit variable.\n * @method xAxisPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number|String} [padding=0]\n * @returns {Number|String|dc.coordinateGridMixin}\n */\n _chart.xAxisPadding = function (padding) {\n if (!arguments.length) {\n return _xAxisPadding;\n }\n _xAxisPadding = padding;\n return _chart;\n };\n\n /**\n * Set or get x axis padding unit for the elastic x axis. The padding unit will determine which unit to\n * use when applying xAxis padding if elasticX is turned on and if x-axis uses a time dimension;\n * otherwise it is ignored.\n *\n * Padding unit is a string that will be used when the padding is calculated. Available parameters are\n * the available d3 time intervals; see\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Intervals.md#interval d3.time.interval}.\n * @method xAxisPaddingUnit\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {String} [unit='days']\n * @returns {String|dc.coordinateGridMixin}\n */\n _chart.xAxisPaddingUnit = function (unit) {\n if (!arguments.length) {\n return _xAxisPaddingUnit;\n }\n _xAxisPaddingUnit = unit;\n return _chart;\n };\n\n /**\n * Returns the number of units displayed on the x axis using the unit measure configured by\n * {@link dc.coordinateGridMixin#xUnits xUnits}.\n * @method xUnitCount\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {Number}\n */\n _chart.xUnitCount = function () {\n if (_unitCount === undefined) {\n var units = _chart.xUnits()(_chart.x().domain()[0], _chart.x().domain()[1], _chart.x().domain());\n\n if (units instanceof Array) {\n _unitCount = units.length;\n } else {\n _unitCount = units;\n }\n }\n\n return _unitCount;\n };\n\n /**\n * Gets or sets whether the chart should be drawn with a right axis instead of a left axis. When\n * used with a chart in a composite chart, allows both left and right Y axes to be shown on a\n * chart.\n * @method useRightYAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [useRightYAxis=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.useRightYAxis = function (useRightYAxis) {\n if (!arguments.length) {\n return _useRightYAxis;\n }\n _useRightYAxis = useRightYAxis;\n return _chart;\n };\n\n /**\n * Returns true if the chart is using ordinal xUnits ({@link dc.units.ordinal dc.units.ordinal}, or false\n * otherwise. Most charts behave differently with ordinal data and use the result of this method to\n * trigger the appropriate logic.\n * @method isOrdinal\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {Boolean}\n */\n _chart.isOrdinal = function () {\n return _chart.xUnits() === dc.units.ordinal;\n };\n\n _chart._useOuterPadding = function () {\n return true;\n };\n\n _chart._ordinalXDomain = function () {\n var groups = _chart._computeOrderedGroups(_chart.data());\n return groups.map(_chart.keyAccessor());\n };\n\n function compareDomains (d1, d2) {\n return !d1 || !d2 || d1.length !== d2.length ||\n d1.some(function (elem, i) { return (elem && d2[i]) ? elem.toString() !== d2[i].toString() : elem === d2[i]; });\n }\n\n function prepareXAxis (g, render) {\n if (!_chart.isOrdinal()) {\n if (_chart.elasticX()) {\n _x.domain([_chart.xAxisMin(), _chart.xAxisMax()]);\n }\n } else { // _chart.isOrdinal()\n if (_chart.elasticX() || _x.domain().length === 0) {\n _x.domain(_chart._ordinalXDomain());\n }\n }\n\n // has the domain changed?\n var xdom = _x.domain();\n if (render || compareDomains(_lastXDomain, xdom)) {\n _chart.rescale();\n }\n _lastXDomain = xdom;\n\n // please can't we always use rangeBands for bar charts?\n if (_chart.isOrdinal()) {\n _x.rangeBands([0, _chart.xAxisLength()], _rangeBandPadding,\n _chart._useOuterPadding() ? _outerRangeBandPadding : 0);\n } else {\n _x.range([0, _chart.xAxisLength()]);\n }\n\n _xAxis = _xAxis.scale(_chart.x());\n\n renderVerticalGridLines(g);\n }\n\n _chart.renderXAxis = function (g) {\n var axisXG = g.select('g.x');\n\n if (axisXG.empty()) {\n axisXG = g.append('g')\n .attr('class', 'axis x')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart._xAxisY() + ')');\n }\n\n var axisXLab = g.select('text.' + X_AXIS_LABEL_CLASS);\n if (axisXLab.empty() && _chart.xAxisLabel()) {\n axisXLab = g.append('text')\n .attr('class', X_AXIS_LABEL_CLASS)\n .attr('transform', 'translate(' + (_chart.margins().left + _chart.xAxisLength() / 2) + ',' +\n (_chart.height() - _xAxisLabelPadding) + ')')\n .attr('text-anchor', 'middle');\n }\n if (_chart.xAxisLabel() && axisXLab.text() !== _chart.xAxisLabel()) {\n axisXLab.text(_chart.xAxisLabel());\n }\n\n dc.transition(axisXG, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart._xAxisY() + ')')\n .call(_xAxis);\n dc.transition(axisXLab, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + (_chart.margins().left + _chart.xAxisLength() / 2) + ',' +\n (_chart.height() - _xAxisLabelPadding) + ')');\n };\n\n function renderVerticalGridLines (g) {\n var gridLineG = g.select('g.' + VERTICAL_CLASS);\n\n if (_renderVerticalGridLine) {\n if (gridLineG.empty()) {\n gridLineG = g.insert('g', ':first-child')\n .attr('class', GRID_LINE_CLASS + ' ' + VERTICAL_CLASS)\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n }\n\n var ticks = _xAxis.tickValues() ? _xAxis.tickValues() :\n (typeof _x.ticks === 'function' ? _x.ticks(_xAxis.ticks()[0]) : _x.domain());\n\n var lines = gridLineG.selectAll('line')\n .data(ticks);\n\n // enter\n var linesGEnter = lines.enter()\n .append('line')\n .attr('x1', function (d) {\n return _x(d);\n })\n .attr('y1', _chart._xAxisY() - _chart.margins().top)\n .attr('x2', function (d) {\n return _x(d);\n })\n .attr('y2', 0)\n .attr('opacity', 0);\n dc.transition(linesGEnter, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', 1);\n\n // update\n dc.transition(lines, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x1', function (d) {\n return _x(d);\n })\n .attr('y1', _chart._xAxisY() - _chart.margins().top)\n .attr('x2', function (d) {\n return _x(d);\n })\n .attr('y2', 0);\n\n // exit\n lines.exit().remove();\n } else {\n gridLineG.selectAll('line').remove();\n }\n }\n\n _chart._xAxisY = function () {\n return (_chart.height() - _chart.margins().bottom);\n };\n\n _chart.xAxisLength = function () {\n return _chart.effectiveWidth();\n };\n\n /**\n * Set or get the x axis label. If setting the label, you may optionally include additional padding to\n * the margin to make room for the label. By default the padded is set to 12 to accomodate the text height.\n * @method xAxisLabel\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {String} [labelText]\n * @param {Number} [padding=12]\n * @returns {String}\n */\n _chart.xAxisLabel = function (labelText, padding) {\n if (!arguments.length) {\n return _xAxisLabel;\n }\n _xAxisLabel = labelText;\n _chart.margins().bottom -= _xAxisLabelPadding;\n _xAxisLabelPadding = (padding === undefined) ? DEFAULT_AXIS_LABEL_PADDING : padding;\n _chart.margins().bottom += _xAxisLabelPadding;\n return _chart;\n };\n\n _chart._prepareYAxis = function (g) {\n if (_y === undefined || _chart.elasticY()) {\n if (_y === undefined) {\n _y = d3.scale.linear();\n }\n var min = _chart.yAxisMin() || 0,\n max = _chart.yAxisMax() || 0;\n _y.domain([min, max]).rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _y.range([_chart.yAxisHeight(), 0]);\n _yAxis = _yAxis.scale(_y);\n\n if (_useRightYAxis) {\n _yAxis.orient('right');\n }\n\n _chart._renderHorizontalGridLinesForAxis(g, _y, _yAxis);\n };\n\n _chart.renderYAxisLabel = function (axisClass, text, rotation, labelXPosition) {\n labelXPosition = labelXPosition || _yAxisLabelPadding;\n\n var axisYLab = _chart.g().select('text.' + Y_AXIS_LABEL_CLASS + '.' + axisClass + '-label');\n var labelYPosition = (_chart.margins().top + _chart.yAxisHeight() / 2);\n if (axisYLab.empty() && text) {\n axisYLab = _chart.g().append('text')\n .attr('transform', 'translate(' + labelXPosition + ',' + labelYPosition + '),rotate(' + rotation + ')')\n .attr('class', Y_AXIS_LABEL_CLASS + ' ' + axisClass + '-label')\n .attr('text-anchor', 'middle')\n .text(text);\n }\n if (text && axisYLab.text() !== text) {\n axisYLab.text(text);\n }\n dc.transition(axisYLab, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + labelXPosition + ',' + labelYPosition + '),rotate(' + rotation + ')');\n };\n\n _chart.renderYAxisAt = function (axisClass, axis, position) {\n var axisYG = _chart.g().select('g.' + axisClass);\n if (axisYG.empty()) {\n axisYG = _chart.g().append('g')\n .attr('class', 'axis ' + axisClass)\n .attr('transform', 'translate(' + position + ',' + _chart.margins().top + ')');\n }\n\n dc.transition(axisYG, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + position + ',' + _chart.margins().top + ')')\n .call(axis);\n };\n\n _chart.renderYAxis = function () {\n var axisPosition = _useRightYAxis ? (_chart.width() - _chart.margins().right) : _chart._yAxisX();\n _chart.renderYAxisAt('y', _yAxis, axisPosition);\n var labelPosition = _useRightYAxis ? (_chart.width() - _yAxisLabelPadding) : _yAxisLabelPadding;\n var rotation = _useRightYAxis ? 90 : -90;\n _chart.renderYAxisLabel('y', _chart.yAxisLabel(), rotation, labelPosition);\n };\n\n _chart._renderHorizontalGridLinesForAxis = function (g, scale, axis) {\n var gridLineG = g.select('g.' + HORIZONTAL_CLASS);\n\n if (_renderHorizontalGridLine) {\n var ticks = axis.tickValues() ? axis.tickValues() : scale.ticks(axis.ticks()[0]);\n\n if (gridLineG.empty()) {\n gridLineG = g.insert('g', ':first-child')\n .attr('class', GRID_LINE_CLASS + ' ' + HORIZONTAL_CLASS)\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n }\n\n var lines = gridLineG.selectAll('line')\n .data(ticks);\n\n // enter\n var linesGEnter = lines.enter()\n .append('line')\n .attr('x1', 1)\n .attr('y1', function (d) {\n return scale(d);\n })\n .attr('x2', _chart.xAxisLength())\n .attr('y2', function (d) {\n return scale(d);\n })\n .attr('opacity', 0);\n dc.transition(linesGEnter, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', 1);\n\n // update\n dc.transition(lines, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x1', 1)\n .attr('y1', function (d) {\n return scale(d);\n })\n .attr('x2', _chart.xAxisLength())\n .attr('y2', function (d) {\n return scale(d);\n });\n\n // exit\n lines.exit().remove();\n } else {\n gridLineG.selectAll('line').remove();\n }\n };\n\n _chart._yAxisX = function () {\n return _chart.useRightYAxis() ? _chart.width() - _chart.margins().right : _chart.margins().left;\n };\n\n /**\n * Set or get the y axis label. If setting the label, you may optionally include additional padding\n * to the margin to make room for the label. By default the padding is set to 12 to accommodate the\n * text height.\n * @method yAxisLabel\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {String} [labelText]\n * @param {Number} [padding=12]\n * @returns {String|dc.coordinateGridMixin}\n */\n _chart.yAxisLabel = function (labelText, padding) {\n if (!arguments.length) {\n return _yAxisLabel;\n }\n _yAxisLabel = labelText;\n _chart.margins().left -= _yAxisLabelPadding;\n _yAxisLabelPadding = (padding === undefined) ? DEFAULT_AXIS_LABEL_PADDING : padding;\n _chart.margins().left += _yAxisLabelPadding;\n return _chart;\n };\n\n /**\n * Get or set the y scale. The y scale is typically automatically determined by the chart implementation.\n * @method y\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @param {d3.scale} [yScale]\n * @returns {d3.scale|dc.coordinateGridMixin}\n */\n _chart.y = function (yScale) {\n if (!arguments.length) {\n return _y;\n }\n _y = yScale;\n _chart.rescale();\n return _chart;\n };\n\n /**\n * Set or get the y axis used by the coordinate grid chart instance. This function is most useful\n * when y axis customization is required. The y axis in dc.js is simply an instance of a [d3 axis\n * object](https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis); therefore it supports any\n * valid d3 axis manipulation.\n *\n * **Caution**: The y axis is usually generated internally by dc; resetting it may cause\n * unexpected results. Note also that when used as a getter, this function is not chainable: it\n * returns the axis, not the chart,\n * {@link https://github.com/dc-js/dc.js/wiki/FAQ#why-does-everything-break-after-a-call-to-xaxis-or-yaxis\n * so attempting to call chart functions after calling `.yAxis()` will fail}.\n * @method yAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3.svg.axis}\n * @example\n * // customize y axis tick format\n * chart.yAxis().tickFormat(function(v) {return v + '%';});\n * // customize y axis tick values\n * chart.yAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [yAxis=d3.svg.axis().orient('left')]\n * @returns {d3.svg.axis|dc.coordinateGridMixin}\n */\n _chart.yAxis = function (yAxis) {\n if (!arguments.length) {\n return _yAxis;\n }\n _yAxis = yAxis;\n return _chart;\n };\n\n /**\n * Turn on/off elastic y axis behavior. If y axis elasticity is turned on, then the grid chart will\n * attempt to recalculate the y axis range whenever a redraw event is triggered.\n * @method elasticY\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [elasticY=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.elasticY = function (elasticY) {\n if (!arguments.length) {\n return _yElasticity;\n }\n _yElasticity = elasticY;\n return _chart;\n };\n\n /**\n * Turn on/off horizontal grid lines.\n * @method renderHorizontalGridLines\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [renderHorizontalGridLines=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.renderHorizontalGridLines = function (renderHorizontalGridLines) {\n if (!arguments.length) {\n return _renderHorizontalGridLine;\n }\n _renderHorizontalGridLine = renderHorizontalGridLines;\n return _chart;\n };\n\n /**\n * Turn on/off vertical grid lines.\n * @method renderVerticalGridLines\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [renderVerticalGridLines=false]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.renderVerticalGridLines = function (renderVerticalGridLines) {\n if (!arguments.length) {\n return _renderVerticalGridLine;\n }\n _renderVerticalGridLine = renderVerticalGridLines;\n return _chart;\n };\n\n /**\n * Calculates the minimum x value to display in the chart. Includes xAxisPadding if set.\n * @method xAxisMin\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {*}\n */\n _chart.xAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.keyAccessor()(e);\n });\n return dc.utils.subtract(min, _xAxisPadding, _xAxisPaddingUnit);\n };\n\n /**\n * Calculates the maximum x value to display in the chart. Includes xAxisPadding if set.\n * @method xAxisMax\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {*}\n */\n _chart.xAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.keyAccessor()(e);\n });\n return dc.utils.add(max, _xAxisPadding, _xAxisPaddingUnit);\n };\n\n /**\n * Calculates the minimum y value to display in the chart. Includes yAxisPadding if set.\n * @method yAxisMin\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {*}\n */\n _chart.yAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.valueAccessor()(e);\n });\n return dc.utils.subtract(min, _yAxisPadding);\n };\n\n /**\n * Calculates the maximum y value to display in the chart. Includes yAxisPadding if set.\n * @method yAxisMax\n * @memberof dc.coordinateGridMixin\n * @instance\n * @returns {*}\n */\n _chart.yAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.valueAccessor()(e);\n });\n return dc.utils.add(max, _yAxisPadding);\n };\n\n /**\n * Set or get y axis padding for the elastic y axis. The padding will be added to the top and\n * bottom of the y axis if elasticY is turned on; otherwise it is ignored.\n *\n * Padding can be an integer or percentage in string (e.g. '10%'). Padding can be applied to\n * number or date axes. When padding a date axis, an integer represents number of days being padded\n * and a percentage string will be treated the same as an integer.\n * @method yAxisPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number|String} [padding=0]\n * @returns {Number|dc.coordinateGridMixin}\n */\n _chart.yAxisPadding = function (padding) {\n if (!arguments.length) {\n return _yAxisPadding;\n }\n _yAxisPadding = padding;\n return _chart;\n };\n\n _chart.yAxisHeight = function () {\n return _chart.effectiveHeight();\n };\n\n /**\n * Set or get the rounding function used to quantize the selection when brushing is enabled.\n * @method round\n * @memberof dc.coordinateGridMixin\n * @instance\n * @example\n * // set x unit round to by month, this will make sure range selection brush will\n * // select whole months\n * chart.round(d3.time.month.round);\n * @param {Function} [round]\n * @returns {Function|dc.coordinateGridMixin}\n */\n _chart.round = function (round) {\n if (!arguments.length) {\n return _round;\n }\n _round = round;\n return _chart;\n };\n\n _chart._rangeBandPadding = function (_) {\n if (!arguments.length) {\n return _rangeBandPadding;\n }\n _rangeBandPadding = _;\n return _chart;\n };\n\n _chart._outerRangeBandPadding = function (_) {\n if (!arguments.length) {\n return _outerRangeBandPadding;\n }\n _outerRangeBandPadding = _;\n return _chart;\n };\n\n dc.override(_chart, 'filter', function (_) {\n if (!arguments.length) {\n return _chart._filter();\n }\n\n _chart._filter(_);\n\n if (_) {\n _chart.brush().extent(_);\n } else {\n _chart.brush().clear();\n }\n\n return _chart;\n });\n\n _chart.brush = function (_) {\n if (!arguments.length) {\n return _brush;\n }\n _brush = _;\n return _chart;\n };\n\n function brushHeight () {\n return _chart._xAxisY() - _chart.margins().top;\n }\n\n _chart.renderBrush = function (g) {\n if (_brushOn) {\n _brush.on('brush', _chart._brushing);\n _brush.on('brushstart', _chart._disableMouseZoom);\n _brush.on('brushend', configureMouseZoom);\n\n var gBrush = g.append('g')\n .attr('class', 'brush')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')')\n .call(_brush.x(_chart.x()));\n _chart.setBrushY(gBrush, false);\n _chart.setHandlePaths(gBrush);\n\n if (_chart.hasFilter()) {\n _chart.redrawBrush(g, false);\n }\n }\n };\n\n _chart.setHandlePaths = function (gBrush) {\n gBrush.selectAll('.resize').append('path').attr('d', _chart.resizeHandlePath);\n };\n\n _chart.setBrushY = function (gBrush) {\n gBrush.selectAll('rect')\n .attr('height', brushHeight());\n gBrush.selectAll('.resize path')\n .attr('d', _chart.resizeHandlePath);\n };\n\n _chart.extendBrush = function () {\n var extent = _brush.extent();\n if (_chart.round()) {\n extent[0] = extent.map(_chart.round())[0];\n extent[1] = extent.map(_chart.round())[1];\n\n _g.select('.brush')\n .call(_brush.extent(extent));\n }\n return extent;\n };\n\n _chart.brushIsEmpty = function (extent) {\n return _brush.empty() || !extent || extent[1] <= extent[0];\n };\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n\n _chart.redrawBrush(_g, false);\n\n if (_chart.brushIsEmpty(extent)) {\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n } else {\n var rangedFilter = dc.filters.RangedFilter(extent[0], extent[1]);\n\n dc.events.trigger(function () {\n _chart.replaceFilter(rangedFilter);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n }\n };\n\n _chart.redrawBrush = function (g, doTransition) {\n if (_brushOn) {\n if (_chart.filter() && _chart.brush().empty()) {\n _chart.brush().extent(_chart.filter());\n }\n\n var gBrush = dc.optionalTransition(doTransition, _chart.transitionDuration(), _chart.transitionDelay())(g.select('g.brush'));\n _chart.setBrushY(gBrush);\n gBrush.call(_chart.brush()\n .x(_chart.x())\n .extent(_chart.brush().extent()));\n }\n\n _chart.fadeDeselectedArea();\n };\n\n _chart.fadeDeselectedArea = function () {\n // do nothing, sub-chart should override this function\n };\n\n // borrowed from Crossfilter example\n _chart.resizeHandlePath = function (d) {\n var e = +(d === 'e'), x = e ? 1 : -1, y = brushHeight() / 3;\n return 'M' + (0.5 * x) + ',' + y +\n 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6) +\n 'V' + (2 * y - 6) +\n 'A6,6 0 0 ' + e + ' ' + (0.5 * x) + ',' + (2 * y) +\n 'Z' +\n 'M' + (2.5 * x) + ',' + (y + 8) +\n 'V' + (2 * y - 8) +\n 'M' + (4.5 * x) + ',' + (y + 8) +\n 'V' + (2 * y - 8);\n };\n\n function getClipPathId () {\n return _chart.anchorName().replace(/[ .#=\\[\\]\"]/g, '-') + '-clip';\n }\n\n /**\n * Get or set the padding in pixels for the clip path. Once set padding will be applied evenly to\n * the top, left, right, and bottom when the clip path is generated. If set to zero, the clip area\n * will be exactly the chart body area minus the margins.\n * @method clipPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number} [padding=5]\n * @returns {Number|dc.coordinateGridMixin}\n */\n _chart.clipPadding = function (padding) {\n if (!arguments.length) {\n return _clipPadding;\n }\n _clipPadding = padding;\n return _chart;\n };\n\n function generateClipPath () {\n var defs = dc.utils.appendOrSelect(_parent, 'defs');\n // cannot select <clippath> elements; bug in WebKit, must select by id\n // https://groups.google.com/forum/#!topic/d3-js/6EpAzQ2gU9I\n var id = getClipPathId();\n var chartBodyClip = dc.utils.appendOrSelect(defs, '#' + id, 'clipPath').attr('id', id);\n\n var padding = _clipPadding * 2;\n\n dc.utils.appendOrSelect(chartBodyClip, 'rect')\n .attr('width', _chart.xAxisLength() + padding)\n .attr('height', _chart.yAxisHeight() + padding)\n .attr('transform', 'translate(-' + _clipPadding + ', -' + _clipPadding + ')');\n }\n\n _chart._preprocessData = function () {};\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _chart._preprocessData();\n\n _chart._generateG();\n generateClipPath();\n\n drawChart(true);\n\n configureMouseZoom();\n\n return _chart;\n };\n\n _chart._doRedraw = function () {\n _chart._preprocessData();\n\n drawChart(false);\n generateClipPath();\n\n return _chart;\n };\n\n function drawChart (render) {\n if (_chart.isOrdinal()) {\n _brushOn = false;\n }\n\n prepareXAxis(_chart.g(), render);\n _chart._prepareYAxis(_chart.g());\n\n _chart.plotData();\n\n if (_chart.elasticX() || _resizing || render) {\n _chart.renderXAxis(_chart.g());\n }\n\n if (_chart.elasticY() || _resizing || render) {\n _chart.renderYAxis(_chart.g());\n }\n\n if (render) {\n _chart.renderBrush(_chart.g(), false);\n } else {\n _chart.redrawBrush(_chart.g(), _resizing);\n }\n _chart.fadeDeselectedArea();\n _resizing = false;\n }\n\n function configureMouseZoom () {\n if (_mouseZoomable) {\n _chart._enableMouseZoom();\n } else if (_hasBeenMouseZoomable) {\n _chart._disableMouseZoom();\n }\n }\n\n _chart._enableMouseZoom = function () {\n _hasBeenMouseZoomable = true;\n _zoom.x(_chart.x())\n .scaleExtent(_zoomScale)\n .size([_chart.width(), _chart.height()])\n .duration(_chart.transitionDuration());\n _chart.root().call(_zoom);\n };\n\n _chart._disableMouseZoom = function () {\n _chart.root().call(_nullZoom);\n };\n\n function zoomHandler () {\n _refocused = true;\n if (_zoomOutRestrict) {\n var constraint = _xOriginalDomain;\n if (_rangeChart) {\n constraint = intersectExtents(constraint, _rangeChart.x().domain());\n }\n var constrained = constrainExtent(_chart.x().domain(), constraint);\n if (constrained) {\n _chart.x().domain(constrained);\n }\n }\n\n var domain = _chart.x().domain();\n var domFilter = dc.filters.RangedFilter(domain[0], domain[1]);\n\n _chart.replaceFilter(domFilter);\n _chart.rescale();\n _chart.redraw();\n\n if (_rangeChart && !rangesEqual(_chart.filter(), _rangeChart.filter())) {\n dc.events.trigger(function () {\n _rangeChart.replaceFilter(domFilter);\n _rangeChart.redraw();\n });\n }\n\n _chart._invokeZoomedListener();\n\n dc.events.trigger(function () {\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n\n _refocused = !rangesEqual(domain, _xOriginalDomain);\n }\n\n function intersectExtents (ext1, ext2) {\n if (ext1[0] > ext2[1] || ext1[1] < ext2[0]) {\n console.warn('could not intersect extents');\n }\n return [Math.max(ext1[0], ext2[0]), Math.min(ext1[1], ext2[1])];\n }\n\n function constrainExtent (extent, constraint) {\n var size = extent[1] - extent[0];\n if (extent[0] < constraint[0]) {\n return [constraint[0], Math.min(constraint[1], dc.utils.add(constraint[0], size, 'millis'))];\n } else if (extent[1] > constraint[1]) {\n return [Math.max(constraint[0], dc.utils.subtract(constraint[1], size, 'millis')), constraint[1]];\n } else {\n return null;\n }\n }\n\n /**\n * Zoom this chart to focus on the given range. The given range should be an array containing only\n * 2 elements (`[start, end]`) defining a range in the x domain. If the range is not given or set\n * to null, then the zoom will be reset. _For focus to work elasticX has to be turned off;\n * otherwise focus will be ignored.\n * @method focus\n * @memberof dc.coordinateGridMixin\n * @instance\n * @example\n * chart.on('renderlet', function(chart) {\n * // smooth the rendering through event throttling\n * dc.events.trigger(function(){\n * // focus some other chart to the range selected by user on this chart\n * someOtherChart.focus(chart.filter());\n * });\n * })\n * @param {Array<Number>} [range]\n */\n _chart.focus = function (range) {\n if (hasRangeSelected(range)) {\n _chart.x().domain(range);\n } else {\n _chart.x().domain(_xOriginalDomain);\n }\n\n _zoom.x(_chart.x());\n zoomHandler();\n };\n\n _chart.refocused = function () {\n return _refocused;\n };\n\n _chart.focusChart = function (c) {\n if (!arguments.length) {\n return _focusChart;\n }\n _focusChart = c;\n _chart.on('filtered', function (chart) {\n if (!chart.filter()) {\n dc.events.trigger(function () {\n _focusChart.x().domain(_focusChart.xOriginalDomain());\n });\n } else if (!rangesEqual(chart.filter(), _focusChart.filter())) {\n dc.events.trigger(function () {\n _focusChart.focus(chart.filter());\n });\n }\n });\n return _chart;\n };\n\n function rangesEqual (range1, range2) {\n if (!range1 && !range2) {\n return true;\n } else if (!range1 || !range2) {\n return false;\n } else if (range1.length === 0 && range2.length === 0) {\n return true;\n } else if (range1[0].valueOf() === range2[0].valueOf() &&\n range1[1].valueOf() === range2[1].valueOf()) {\n return true;\n }\n return false;\n }\n\n /**\n * Turn on/off the brush-based range filter. When brushing is on then user can drag the mouse\n * across a chart with a quantitative scale to perform range filtering based on the extent of the\n * brush, or click on the bars of an ordinal bar chart or slices of a pie chart to filter and\n * un-filter them. However turning on the brush filter will disable other interactive elements on\n * the chart such as highlighting, tool tips, and reference lines. Zooming will still be possible\n * if enabled, but only via scrolling (panning will be disabled.)\n * @method brushOn\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [brushOn=true]\n * @returns {Boolean|dc.coordinateGridMixin}\n */\n _chart.brushOn = function (brushOn) {\n if (!arguments.length) {\n return _brushOn;\n }\n _brushOn = brushOn;\n return _chart;\n };\n\n function hasRangeSelected (range) {\n return range instanceof Array && range.length > 1;\n }\n\n return _chart;\n};\n","/**\n * Stack Mixin is an mixin that provides cross-chart support of stackability using d3.layout.stack.\n * @name stackMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.stackMixin}\n */\ndc.stackMixin = function (_chart) {\n\n function prepareValues (layer, layerIdx) {\n var valAccessor = layer.accessor || _chart.valueAccessor();\n layer.name = String(layer.name || layerIdx);\n layer.values = layer.group.all().map(function (d, i) {\n return {\n x: _chart.keyAccessor()(d, i),\n y: layer.hidden ? null : valAccessor(d, i),\n data: d,\n layer: layer.name,\n hidden: layer.hidden\n };\n });\n\n layer.values = layer.values.filter(domainFilter());\n return layer.values;\n }\n\n var _stackLayout = d3.layout.stack()\n .values(prepareValues);\n\n var _stack = [];\n var _titles = {};\n\n var _hidableStacks = false;\n var _evadeDomainFilter = false;\n\n function domainFilter () {\n if (!_chart.x() || _evadeDomainFilter) {\n return d3.functor(true);\n }\n var xDomain = _chart.x().domain();\n if (_chart.isOrdinal()) {\n // TODO #416\n //var domainSet = d3.set(xDomain);\n return function () {\n return true; //domainSet.has(p.x);\n };\n }\n if (_chart.elasticX()) {\n return function () { return true; };\n }\n return function (p) {\n //return true;\n return p.x >= xDomain[0] && p.x <= xDomain[xDomain.length - 1];\n };\n }\n\n /**\n * Stack a new crossfilter group onto this chart with an optional custom value accessor. All stacks\n * in the same chart will share the same key accessor and therefore the same set of keys.\n *\n * For example, in a stacked bar chart, the bars of each stack will be positioned using the same set\n * of keys on the x axis, while stacked vertically. If name is specified then it will be used to\n * generate the legend label.\n * @method stack\n * @memberof dc.stackMixin\n * @instance\n * @see {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group-map-reduce crossfilter.group}\n * @example\n * // stack group using default accessor\n * chart.stack(valueSumGroup)\n * // stack group using custom accessor\n * .stack(avgByDayGroup, function(d){return d.value.avgByDay;});\n * @param {crossfilter.group} group\n * @param {String} [name]\n * @param {Function} [accessor]\n * @returns {Array<{group: crossfilter.group, name: String, accessor: Function}>|dc.stackMixin}\n */\n _chart.stack = function (group, name, accessor) {\n if (!arguments.length) {\n return _stack;\n }\n\n if (arguments.length <= 2) {\n accessor = name;\n }\n\n var layer = {group: group};\n if (typeof name === 'string') {\n layer.name = name;\n }\n if (typeof accessor === 'function') {\n layer.accessor = accessor;\n }\n _stack.push(layer);\n\n return _chart;\n };\n\n dc.override(_chart, 'group', function (g, n, f) {\n if (!arguments.length) {\n return _chart._group();\n }\n _stack = [];\n _titles = {};\n _chart.stack(g, n);\n if (f) {\n _chart.valueAccessor(f);\n }\n return _chart._group(g, n);\n });\n\n /**\n * Allow named stacks to be hidden or shown by clicking on legend items.\n * This does not affect the behavior of hideStack or showStack.\n * @method hidableStacks\n * @memberof dc.stackMixin\n * @instance\n * @param {Boolean} [hidableStacks=false]\n * @returns {Boolean|dc.stackMixin}\n */\n _chart.hidableStacks = function (hidableStacks) {\n if (!arguments.length) {\n return _hidableStacks;\n }\n _hidableStacks = hidableStacks;\n return _chart;\n };\n\n function findLayerByName (n) {\n var i = _stack.map(dc.pluck('name')).indexOf(n);\n return _stack[i];\n }\n\n /**\n * Hide all stacks on the chart with the given name.\n * The chart must be re-rendered for this change to appear.\n * @method hideStack\n * @memberof dc.stackMixin\n * @instance\n * @param {String} stackName\n * @returns {dc.stackMixin}\n */\n _chart.hideStack = function (stackName) {\n var layer = findLayerByName(stackName);\n if (layer) {\n layer.hidden = true;\n }\n return _chart;\n };\n\n /**\n * Show all stacks on the chart with the given name.\n * The chart must be re-rendered for this change to appear.\n * @method showStack\n * @memberof dc.stackMixin\n * @instance\n * @param {String} stackName\n * @returns {dc.stackMixin}\n */\n _chart.showStack = function (stackName) {\n var layer = findLayerByName(stackName);\n if (layer) {\n layer.hidden = false;\n }\n return _chart;\n };\n\n _chart.getValueAccessorByIndex = function (index) {\n return _stack[index].accessor || _chart.valueAccessor();\n };\n\n _chart.yAxisMin = function () {\n var min = d3.min(flattenStack(), function (p) {\n return (p.y < 0) ? (p.y + p.y0) : p.y0;\n });\n\n return dc.utils.subtract(min, _chart.yAxisPadding());\n\n };\n\n _chart.yAxisMax = function () {\n var max = d3.max(flattenStack(), function (p) {\n return (p.y > 0) ? (p.y + p.y0) : p.y0;\n });\n\n return dc.utils.add(max, _chart.yAxisPadding());\n };\n\n function flattenStack () {\n var valueses = _chart.data().map(function (layer) { return layer.values; });\n return Array.prototype.concat.apply([], valueses);\n }\n\n _chart.xAxisMin = function () {\n var min = d3.min(flattenStack(), dc.pluck('x'));\n return dc.utils.subtract(min, _chart.xAxisPadding(), _chart.xAxisPaddingUnit());\n };\n\n _chart.xAxisMax = function () {\n var max = d3.max(flattenStack(), dc.pluck('x'));\n return dc.utils.add(max, _chart.xAxisPadding(), _chart.xAxisPaddingUnit());\n };\n\n /**\n * Set or get the title function. Chart class will use this function to render svg title (usually interpreted by\n * browser as tooltips) for each child element in the chart, i.e. a slice in a pie chart or a bubble in a bubble chart.\n * Almost every chart supports title function however in grid coordinate chart you need to turn off brush in order to\n * use title otherwise the brush layer will block tooltip trigger.\n *\n * If the first argument is a stack name, the title function will get or set the title for that stack. If stackName\n * is not provided, the first stack is implied.\n * @method title\n * @memberof dc.stackMixin\n * @instance\n * @example\n * // set a title function on 'first stack'\n * chart.title('first stack', function(d) { return d.key + ': ' + d.value; });\n * // get a title function from 'second stack'\n * var secondTitleFunction = chart.title('second stack');\n * @param {String} [stackName]\n * @param {Function} [titleAccessor]\n * @returns {String|dc.stackMixin}\n */\n dc.override(_chart, 'title', function (stackName, titleAccessor) {\n if (!stackName) {\n return _chart._title();\n }\n\n if (typeof stackName === 'function') {\n return _chart._title(stackName);\n }\n if (stackName === _chart._groupName && typeof titleAccessor === 'function') {\n return _chart._title(titleAccessor);\n }\n\n if (typeof titleAccessor !== 'function') {\n return _titles[stackName] || _chart._title();\n }\n\n _titles[stackName] = titleAccessor;\n\n return _chart;\n });\n\n /**\n * Gets or sets the stack layout algorithm, which computes a baseline for each stack and\n * propagates it to the next.\n * @method stackLayout\n * @memberof dc.stackMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Stack-Layout.md d3.layout.stack}\n * @param {Function} [stack=d3.layout.stack]\n * @returns {Function|dc.stackMixin}\n */\n _chart.stackLayout = function (stack) {\n if (!arguments.length) {\n return _stackLayout;\n }\n _stackLayout = stack;\n if (_stackLayout.values() === d3.layout.stack().values()) {\n _stackLayout.values(prepareValues);\n }\n return _chart;\n };\n\n /**\n * Since dc.js 2.0, there has been {@link https://github.com/dc-js/dc.js/issues/949 an issue}\n * where points are filtered to the current domain. While this is a useful optimization, it is\n * incorrectly implemented: the next point outside the domain is required in order to draw lines\n * that are clipped to the bounds, as well as bars that are partly clipped.\n *\n * A fix will be included in dc.js 2.1.x, but a workaround is needed for dc.js 2.0 and until\n * that fix is published, so set this flag to skip any filtering of points.\n *\n * Once the bug is fixed, this flag will have no effect, and it will be deprecated.\n * @method evadeDomainFilter\n * @memberof dc.stackMixin\n * @instance\n * @param {Boolean} [evadeDomainFilter=false]\n * @returns {Boolean|dc.stackMixin}\n */\n _chart.evadeDomainFilter = function (evadeDomainFilter) {\n if (!arguments.length) {\n return _evadeDomainFilter;\n }\n _evadeDomainFilter = evadeDomainFilter;\n return _chart;\n };\n\n function visability (l) {\n return !l.hidden;\n }\n\n _chart.data(function () {\n var layers = _stack.filter(visability);\n return layers.length ? _chart.stackLayout()(layers) : [];\n });\n\n _chart._ordinalXDomain = function () {\n var flat = flattenStack().map(dc.pluck('data'));\n var ordered = _chart._computeOrderedGroups(flat);\n return ordered.map(_chart.keyAccessor());\n };\n\n _chart.colorAccessor(function (d) {\n var layer = this.layer || this.name || d.name || d.layer;\n return layer;\n });\n\n _chart.legendables = function () {\n return _stack.map(function (layer, i) {\n return {\n chart: _chart,\n name: layer.name,\n hidden: layer.hidden || false,\n color: _chart.getColor.call(layer, layer.values, i)\n };\n });\n };\n\n _chart.isLegendableHidden = function (d) {\n var layer = findLayerByName(d.name);\n return layer ? layer.hidden : false;\n };\n\n _chart.legendToggle = function (d) {\n if (_hidableStacks) {\n if (_chart.isLegendableHidden(d)) {\n _chart.showStack(d.name);\n } else {\n _chart.hideStack(d.name);\n }\n //_chart.redraw();\n _chart.renderGroup();\n }\n };\n\n return _chart;\n};\n","/**\n * Cap is a mixin that groups small data elements below a _cap_ into an *others* grouping for both the\n * Row and Pie Charts.\n *\n * The top ordered elements in the group up to the cap amount will be kept in the chart, and the rest\n * will be replaced with an *others* element, with value equal to the sum of the replaced values. The\n * keys of the elements below the cap limit are recorded in order to filter by those keys when the\n * others* element is clicked.\n * @name capMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @returns {dc.capMixin}\n */\ndc.capMixin = function (_chart) {\n var _cap = Infinity, _takeFront = true;\n var _othersLabel = 'Others';\n\n // emulate old group.top(N) ordering\n _chart.ordering(function (kv) {\n return -kv.value;\n });\n\n var _othersGrouper = function (topItems, restItems) {\n var restItemsSum = d3.sum(restItems, _chart.valueAccessor()),\n restKeys = restItems.map(_chart.keyAccessor());\n if (restItemsSum > 0) {\n return topItems.concat([{\n others: restKeys,\n key: _chart.othersLabel(),\n value: restItemsSum\n }]);\n }\n return topItems;\n };\n\n _chart.cappedKeyAccessor = function (d, i) {\n if (d.others) {\n return d.key;\n }\n return _chart.keyAccessor()(d, i);\n };\n\n _chart.cappedValueAccessor = function (d, i) {\n if (d.others) {\n return d.value;\n }\n return _chart.valueAccessor()(d, i);\n };\n\n // return N \"top\" groups, where N is the cap, sorted by baseMixin.ordering\n // whether top means front or back depends on takeFront\n _chart.data(function (group) {\n if (_cap === Infinity) {\n return _chart._computeOrderedGroups(group.all());\n } else {\n var items = group.all(), rest;\n items = _chart._computeOrderedGroups(items); // sort by baseMixin.ordering\n\n if (_cap) {\n if (_takeFront) {\n rest = items.slice(_cap);\n items = items.slice(0, _cap);\n } else {\n var start = Math.max(0, items.length - _cap);\n rest = items.slice(0, start);\n items = items.slice(start);\n }\n }\n\n if (_othersGrouper) {\n return _othersGrouper(items, rest);\n }\n return items;\n }\n });\n\n /**\n * Get or set the count of elements to that will be included in the cap. If there is an\n * {@link dc.capMixin#othersGrouper othersGrouper}, any further elements will be combined in an\n * extra element with its name determined by {@link dc.capMixin#othersLabel othersLabel}.\n *\n * As of dc.js 2.1 and onward, the capped charts use\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_all group.all()}\n * and {@link dc.baseMixin#ordering baseMixin.ordering()} to determine the order of\n * elements. Then `cap` and {@link dc.capMixin#takeFront takeFront} determine how many elements\n * to keep, from which end of the resulting array.\n *\n * **Migration note:** Up through dc.js 2.0.*, capping used\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_top group.top(N)},\n * which selects the largest items according to\n * {@link https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_order group.order()}.\n * The chart then sorted the items according to {@link dc.baseMixin#ordering baseMixin.ordering()}.\n * So the two values essentially had to agree, but if the `group.order()` was incorrect (it's\n * easy to forget about), the wrong rows or slices would be displayed, in the correct order.\n *\n * If your chart previously relied on `group.order()`, use `chart.ordering()` instead. As of\n * 2.1.5, the ordering defaults to sorting from greatest to least like `group.top(N)` did.\n *\n * If you want to cap by one ordering but sort by another, please\n * [file an issue](https://github.com/dc-js/dc.js/issues/new) - it's still possible but we'll\n * need to work up an example.\n * @method cap\n * @memberof dc.capMixin\n * @instance\n * @param {Number} [count=Infinity]\n * @returns {Number|dc.capMixin}\n */\n _chart.cap = function (count) {\n if (!arguments.length) {\n return _cap;\n }\n _cap = count;\n return _chart;\n };\n\n /**\n * Get or set the direction of capping. If set, the chart takes the first\n * {@link dc.capMixin#cap cap} elements from the sorted array of elements; otherwise\n * it takes the last `cap` elements.\n * @method takeFront\n * @memberof dc.capMixin\n * @instance\n * @param {Boolean} [takeFront=true]\n * @returns {Boolean|dc.capMixin}\n */\n _chart.takeFront = function (takeFront) {\n if (!arguments.length) {\n return _takeFront;\n }\n _takeFront = takeFront;\n return _chart;\n };\n\n /**\n * Get or set the label for *Others* slice when slices cap is specified.\n * @method othersLabel\n * @memberof dc.capMixin\n * @instance\n * @param {String} [label=\"Others\"]\n * @returns {String|dc.capMixin}\n */\n _chart.othersLabel = function (label) {\n if (!arguments.length) {\n return _othersLabel;\n }\n _othersLabel = label;\n return _chart;\n };\n\n /**\n * Get or set the grouper function that will perform the insertion of data for the *Others* slice\n * if the slices cap is specified. If set to a falsy value, no others will be added.\n *\n * The grouper function takes an array of included (\"top\") items, and an array of the rest of\n * the items. By default the grouper function computes the sum of the rest.\n * @method othersGrouper\n * @memberof dc.capMixin\n * @instance\n * @example\n * // Do not show others\n * chart.othersGrouper(null);\n * // Default others grouper\n * chart.othersGrouper(function (topItems, restItems) {\n * var restItemsSum = d3.sum(restItems, _chart.valueAccessor()),\n * restKeys = restItems.map(_chart.keyAccessor());\n * if (restItemsSum > 0) {\n * return topItems.concat([{\n * others: restKeys,\n * key: _chart.othersLabel(),\n * value: restItemsSum\n * }]);\n * }\n * return topItems;\n * });\n * @param {Function} [grouperFunction]\n * @returns {Function|dc.capMixin}\n */\n _chart.othersGrouper = function (grouperFunction) {\n if (!arguments.length) {\n return _othersGrouper;\n }\n _othersGrouper = grouperFunction;\n return _chart;\n };\n\n dc.override(_chart, 'onClick', function (d) {\n if (d.others) {\n _chart.filter([d.others]);\n }\n _chart._onClick(d);\n });\n\n return _chart;\n};\n","/**\n * This Mixin provides reusable functionalities for any chart that needs to visualize data using bubbles.\n * @name bubbleMixin\n * @memberof dc\n * @mixin\n * @mixes dc.colorMixin\n * @param {Object} _chart\n * @returns {dc.bubbleMixin}\n */\ndc.bubbleMixin = function (_chart) {\n var _maxBubbleRelativeSize = 0.3;\n var _minRadiusWithLabel = 10;\n var _sortBubbleSize = false;\n var _elasticRadius = false;\n\n _chart.BUBBLE_NODE_CLASS = 'node';\n _chart.BUBBLE_CLASS = 'bubble';\n _chart.MIN_RADIUS = 10;\n\n _chart = dc.colorMixin(_chart);\n\n _chart.renderLabel(true);\n\n _chart.data(function (group) {\n var data = group.all();\n if (_sortBubbleSize) {\n // sort descending so smaller bubbles are on top\n var radiusAccessor = _chart.radiusValueAccessor();\n data.sort(function (a, b) { return d3.descending(radiusAccessor(a), radiusAccessor(b)); });\n }\n return data;\n });\n\n var _r = d3.scale.linear().domain([0, 100]);\n\n var _rValueAccessor = function (d) {\n return d.r;\n };\n\n /**\n * Get or set the bubble radius scale. By default the bubble chart uses\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md#linear d3.scale.linear().domain([0, 100])}\n * as its radius scale.\n * @method r\n * @memberof dc.bubbleMixin\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @param {d3.scale} [bubbleRadiusScale=d3.scale.linear().domain([0, 100])]\n * @returns {d3.scale|dc.bubbleMixin}\n */\n _chart.r = function (bubbleRadiusScale) {\n if (!arguments.length) {\n return _r;\n }\n _r = bubbleRadiusScale;\n return _chart;\n };\n\n /**\n * Turn on or off the elastic bubble radius feature, or return the value of the flag. If this\n * feature is turned on, then bubble radii will be automatically rescaled to fit the chart better.\n * @method elasticRadius\n * @memberof dc.bubbleChart\n * @instance\n * @param {Boolean} [elasticRadius=false]\n * @returns {Boolean|dc.bubbleChart}\n */\n _chart.elasticRadius = function (elasticRadius) {\n if (!arguments.length) {\n return _elasticRadius;\n }\n _elasticRadius = elasticRadius;\n return _chart;\n };\n\n _chart.calculateRadiusDomain = function () {\n if (_elasticRadius) {\n _chart.r().domain([_chart.rMin(), _chart.rMax()]);\n }\n };\n\n /**\n * Get or set the radius value accessor function. If set, the radius value accessor function will\n * be used to retrieve a data value for each bubble. The data retrieved then will be mapped using\n * the r scale to the actual bubble radius. This allows you to encode a data dimension using bubble\n * size.\n * @method radiusValueAccessor\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Function} [radiusValueAccessor]\n * @returns {Function|dc.bubbleMixin}\n */\n _chart.radiusValueAccessor = function (radiusValueAccessor) {\n if (!arguments.length) {\n return _rValueAccessor;\n }\n _rValueAccessor = radiusValueAccessor;\n return _chart;\n };\n\n _chart.rMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.radiusValueAccessor()(e);\n });\n return min;\n };\n\n _chart.rMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.radiusValueAccessor()(e);\n });\n return max;\n };\n\n _chart.bubbleR = function (d) {\n var value = _chart.radiusValueAccessor()(d);\n var r = _chart.r()(value);\n if (isNaN(r) || value <= 0) {\n r = 0;\n }\n return r;\n };\n\n var labelFunction = function (d) {\n return _chart.label()(d);\n };\n\n var shouldLabel = function (d) {\n return (_chart.bubbleR(d) > _minRadiusWithLabel);\n };\n\n var labelOpacity = function (d) {\n return shouldLabel(d) ? 1 : 0;\n };\n\n var labelPointerEvent = function (d) {\n return shouldLabel(d) ? 'all' : 'none';\n };\n\n _chart._doRenderLabel = function (bubbleGEnter) {\n if (_chart.renderLabel()) {\n var label = bubbleGEnter.select('text');\n\n if (label.empty()) {\n label = bubbleGEnter.append('text')\n .attr('text-anchor', 'middle')\n .attr('dy', '.3em')\n .on('click', _chart.onClick);\n }\n\n label\n .attr('opacity', 0)\n .attr('pointer-events', labelPointerEvent)\n .text(labelFunction);\n dc.transition(label, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', labelOpacity);\n }\n };\n\n _chart.doUpdateLabels = function (bubbleGEnter) {\n if (_chart.renderLabel()) {\n var labels = bubbleGEnter.select('text')\n .attr('pointer-events', labelPointerEvent)\n .text(labelFunction);\n dc.transition(labels, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', labelOpacity);\n }\n };\n\n var titleFunction = function (d) {\n return _chart.title()(d);\n };\n\n _chart._doRenderTitles = function (g) {\n if (_chart.renderTitle()) {\n var title = g.select('title');\n\n if (title.empty()) {\n g.append('title').text(titleFunction);\n }\n }\n };\n\n _chart.doUpdateTitles = function (g) {\n if (_chart.renderTitle()) {\n g.select('title').text(titleFunction);\n }\n };\n\n /**\n * Turn on or off the bubble sorting feature, or return the value of the flag. If enabled,\n * bubbles will be sorted by their radius, with smaller bubbles in front.\n * @method sortBubbleSize\n * @memberof dc.bubbleChart\n * @instance\n * @param {Boolean} [sortBubbleSize=false]\n * @returns {Boolean|dc.bubbleChart}\n */\n _chart.sortBubbleSize = function (sortBubbleSize) {\n if (!arguments.length) {\n return _sortBubbleSize;\n }\n _sortBubbleSize = sortBubbleSize;\n return _chart;\n };\n\n /**\n * Get or set the minimum radius. This will be used to initialize the radius scale's range.\n * @method minRadius\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [radius=10]\n * @returns {Number|dc.bubbleMixin}\n */\n _chart.minRadius = function (radius) {\n if (!arguments.length) {\n return _chart.MIN_RADIUS;\n }\n _chart.MIN_RADIUS = radius;\n return _chart;\n };\n\n /**\n * Get or set the minimum radius for label rendering. If a bubble's radius is less than this value\n * then no label will be rendered.\n * @method minRadiusWithLabel\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [radius=10]\n * @returns {Number|dc.bubbleMixin}\n */\n\n _chart.minRadiusWithLabel = function (radius) {\n if (!arguments.length) {\n return _minRadiusWithLabel;\n }\n _minRadiusWithLabel = radius;\n return _chart;\n };\n\n /**\n * Get or set the maximum relative size of a bubble to the length of x axis. This value is useful\n * when the difference in radius between bubbles is too great.\n * @method maxBubbleRelativeSize\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [relativeSize=0.3]\n * @returns {Number|dc.bubbleMixin}\n */\n _chart.maxBubbleRelativeSize = function (relativeSize) {\n if (!arguments.length) {\n return _maxBubbleRelativeSize;\n }\n _maxBubbleRelativeSize = relativeSize;\n return _chart;\n };\n\n _chart.fadeDeselectedArea = function () {\n if (_chart.hasFilter()) {\n _chart.selectAll('g.' + _chart.BUBBLE_NODE_CLASS).each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.' + _chart.BUBBLE_NODE_CLASS).each(function () {\n _chart.resetHighlight(this);\n });\n }\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(d.key);\n };\n\n _chart.onClick = function (d) {\n var filter = d.key;\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n return _chart;\n};\n","/**\n * The pie chart implementation is usually used to visualize a small categorical distribution. The pie\n * chart uses keyAccessor to determine the slices, and valueAccessor to calculate the size of each\n * slice relative to the sum of all values. Slices are ordered by {@link dc.baseMixin#ordering ordering}\n * which defaults to sorting by key.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * @class pieChart\n * @memberof dc\n * @mixes dc.capMixin\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a pie chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.pieChart('#chart-container1');\n * // create a pie chart under #chart-container2 element using chart group A\n * var chart2 = dc.pieChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.pieChart}\n */\ndc.pieChart = function (parent, chartGroup) {\n var DEFAULT_MIN_ANGLE_FOR_LABEL = 0.5;\n\n var _sliceCssClass = 'pie-slice';\n var _labelCssClass = 'pie-label';\n var _sliceGroupCssClass = 'pie-slice-group';\n var _labelGroupCssClass = 'pie-label-group';\n var _emptyCssClass = 'empty-chart';\n var _emptyTitle = 'empty';\n\n var _radius,\n _givenRadius, // specified radius, if any\n _innerRadius = 0,\n _externalRadiusPadding = 0;\n\n var _g;\n var _cx;\n var _cy;\n var _minAngleForLabel = DEFAULT_MIN_ANGLE_FOR_LABEL;\n var _externalLabelRadius;\n var _drawPaths = false;\n var _chart = dc.capMixin(dc.colorMixin(dc.baseMixin({})));\n\n _chart.colorAccessor(_chart.cappedKeyAccessor);\n\n _chart.title(function (d) {\n return _chart.cappedKeyAccessor(d) + ': ' + _chart.cappedValueAccessor(d);\n });\n\n /**\n * Get or set the maximum number of slices the pie chart will generate. The top slices are determined by\n * value from high to low. Other slices exeeding the cap will be rolled up into one single *Others* slice.\n * @method slicesCap\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cap]\n * @returns {Number|dc.pieChart}\n */\n _chart.slicesCap = _chart.cap;\n\n _chart.label(_chart.cappedKeyAccessor);\n _chart.renderLabel(true);\n\n _chart.transitionDuration(350);\n _chart.transitionDelay(0);\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _g = _chart.svg()\n .append('g')\n .attr('transform', 'translate(' + _chart.cx() + ',' + _chart.cy() + ')');\n\n _g.append('g').attr('class', _sliceGroupCssClass);\n _g.append('g').attr('class', _labelGroupCssClass);\n\n drawChart();\n\n return _chart;\n };\n\n function drawChart () {\n // set radius from chart size if none given, or if given radius is too large\n var maxRadius = d3.min([_chart.width(), _chart.height()]) / 2;\n _radius = _givenRadius && _givenRadius < maxRadius ? _givenRadius : maxRadius;\n\n var arc = buildArcs();\n\n var pie = pieLayout();\n var pieData;\n // if we have data...\n if (d3.sum(_chart.data(), _chart.valueAccessor())) {\n pieData = pie(_chart.data());\n _g.classed(_emptyCssClass, false);\n } else {\n // otherwise we'd be getting NaNs, so override\n // note: abuse others for its ignoring the value accessor\n pieData = pie([{key: _emptyTitle, value: 1, others: [_emptyTitle]}]);\n _g.classed(_emptyCssClass, true);\n }\n\n if (_g) {\n var slices = _g.select('g.' + _sliceGroupCssClass)\n .selectAll('g.' + _sliceCssClass)\n .data(pieData);\n\n var labels = _g.select('g.' + _labelGroupCssClass)\n .selectAll('text.' + _labelCssClass)\n .data(pieData);\n\n createElements(slices, labels, arc, pieData);\n\n updateElements(pieData, arc);\n\n removeElements(slices, labels);\n\n highlightFilter();\n\n dc.transition(_g, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', 'translate(' + _chart.cx() + ',' + _chart.cy() + ')');\n }\n }\n\n function createElements (slices, labels, arc, pieData) {\n var slicesEnter = createSliceNodes(slices);\n\n createSlicePath(slicesEnter, arc);\n\n createTitles(slicesEnter);\n\n createLabels(labels, pieData, arc);\n }\n\n function createSliceNodes (slices) {\n var slicesEnter = slices\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return _sliceCssClass + ' _' + i;\n });\n return slicesEnter;\n }\n\n function createSlicePath (slicesEnter, arc) {\n var slicePath = slicesEnter.append('path')\n .attr('fill', fill)\n .on('click', onClick)\n .attr('d', function (d, i) {\n return safeArc(d, i, arc);\n });\n\n var transition = dc.transition(slicePath, _chart.transitionDuration(), _chart.transitionDelay());\n if (transition.attrTween) {\n transition.attrTween('d', tweenPie);\n }\n }\n\n function createTitles (slicesEnter) {\n if (_chart.renderTitle()) {\n slicesEnter.append('title').text(function (d) {\n return _chart.title()(d.data);\n });\n }\n }\n\n _chart._applyLabelText = function (labels) {\n labels\n .text(function (d) {\n var data = d.data;\n if ((sliceHasNoData(data) || sliceTooSmall(d)) && !isSelectedSlice(d)) {\n return '';\n }\n return _chart.label()(d.data);\n });\n };\n\n function positionLabels (labels, arc) {\n _chart._applyLabelText(labels);\n dc.transition(labels, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', function (d) {\n return labelPosition(d, arc);\n })\n .attr('text-anchor', 'middle');\n }\n\n function highlightSlice (i, whether) {\n _chart.select('g.pie-slice._' + i)\n .classed('highlight', whether);\n }\n\n function createLabels (labels, pieData, arc) {\n if (_chart.renderLabel()) {\n var labelsEnter = labels\n .enter()\n .append('text')\n .attr('class', function (d, i) {\n var classes = _sliceCssClass + ' ' + _labelCssClass + ' _' + i;\n if (_externalLabelRadius) {\n classes += ' external';\n }\n return classes;\n })\n .on('click', onClick)\n .on('mouseover', function (d, i) {\n highlightSlice(i, true);\n })\n .on('mouseout', function (d, i) {\n highlightSlice(i, false);\n });\n positionLabels(labelsEnter, arc);\n if (_externalLabelRadius && _drawPaths) {\n updateLabelPaths(pieData, arc);\n }\n }\n }\n\n function updateLabelPaths (pieData, arc) {\n var polyline = _g.selectAll('polyline.' + _sliceCssClass)\n .data(pieData);\n\n polyline\n .enter()\n .append('polyline')\n .attr('class', function (d, i) {\n return 'pie-path _' + i + ' ' + _sliceCssClass;\n })\n .on('click', onClick)\n .on('mouseover', function (d, i) {\n highlightSlice(i, true);\n })\n .on('mouseout', function (d, i) {\n highlightSlice(i, false);\n });\n\n polyline.exit().remove();\n var arc2 = d3.svg.arc()\n .outerRadius(_radius - _externalRadiusPadding + _externalLabelRadius)\n .innerRadius(_radius - _externalRadiusPadding);\n var transition = dc.transition(polyline, _chart.transitionDuration(), _chart.transitionDelay());\n // this is one rare case where d3.selection differs from d3.transition\n if (transition.attrTween) {\n transition\n .attrTween('points', function (d) {\n var current = this._current || d;\n current = {startAngle: current.startAngle, endAngle: current.endAngle};\n var interpolate = d3.interpolate(current, d);\n this._current = interpolate(0);\n return function (t) {\n var d2 = interpolate(t);\n return [arc.centroid(d2), arc2.centroid(d2)];\n };\n });\n } else {\n transition.attr('points', function (d) {\n return [arc.centroid(d), arc2.centroid(d)];\n });\n }\n transition.style('visibility', function (d) {\n return d.endAngle - d.startAngle < 0.0001 ? 'hidden' : 'visible';\n });\n\n }\n\n function updateElements (pieData, arc) {\n updateSlicePaths(pieData, arc);\n updateLabels(pieData, arc);\n updateTitles(pieData);\n }\n\n function updateSlicePaths (pieData, arc) {\n var slicePaths = _g.selectAll('g.' + _sliceCssClass)\n .data(pieData)\n .select('path')\n .attr('d', function (d, i) {\n return safeArc(d, i, arc);\n });\n var transition = dc.transition(slicePaths, _chart.transitionDuration(), _chart.transitionDelay());\n if (transition.attrTween) {\n transition.attrTween('d', tweenPie);\n }\n transition.attr('fill', fill);\n }\n\n function updateLabels (pieData, arc) {\n if (_chart.renderLabel()) {\n var labels = _g.selectAll('text.' + _labelCssClass)\n .data(pieData);\n positionLabels(labels, arc);\n if (_externalLabelRadius && _drawPaths) {\n updateLabelPaths(pieData, arc);\n }\n }\n }\n\n function updateTitles (pieData) {\n if (_chart.renderTitle()) {\n _g.selectAll('g.' + _sliceCssClass)\n .data(pieData)\n .select('title')\n .text(function (d) {\n return _chart.title()(d.data);\n });\n }\n }\n\n function removeElements (slices, labels) {\n slices.exit().remove();\n labels.exit().remove();\n }\n\n function highlightFilter () {\n if (_chart.hasFilter()) {\n _chart.selectAll('g.' + _sliceCssClass).each(function (d) {\n if (isSelectedSlice(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.' + _sliceCssClass).each(function () {\n _chart.resetHighlight(this);\n });\n }\n }\n\n /**\n * Get or set the external radius padding of the pie chart. This will force the radius of the\n * pie chart to become smaller or larger depending on the value.\n * @method externalRadiusPadding\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [externalRadiusPadding=0]\n * @returns {Number|dc.pieChart}\n */\n _chart.externalRadiusPadding = function (externalRadiusPadding) {\n if (!arguments.length) {\n return _externalRadiusPadding;\n }\n _externalRadiusPadding = externalRadiusPadding;\n return _chart;\n };\n\n /**\n * Get or set the inner radius of the pie chart. If the inner radius is greater than 0px then the\n * pie chart will be rendered as a doughnut chart.\n * @method innerRadius\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [innerRadius=0]\n * @returns {Number|dc.pieChart}\n */\n _chart.innerRadius = function (innerRadius) {\n if (!arguments.length) {\n return _innerRadius;\n }\n _innerRadius = innerRadius;\n return _chart;\n };\n\n /**\n * Get or set the outer radius. If the radius is not set, it will be half of the minimum of the\n * chart width and height.\n * @method radius\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [radius]\n * @returns {Number|dc.pieChart}\n */\n _chart.radius = function (radius) {\n if (!arguments.length) {\n return _givenRadius;\n }\n _givenRadius = radius;\n return _chart;\n };\n\n /**\n * Get or set center x coordinate position. Default is center of svg.\n * @method cx\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cx]\n * @returns {Number|dc.pieChart}\n */\n _chart.cx = function (cx) {\n if (!arguments.length) {\n return (_cx || _chart.width() / 2);\n }\n _cx = cx;\n return _chart;\n };\n\n /**\n * Get or set center y coordinate position. Default is center of svg.\n * @method cy\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cy]\n * @returns {Number|dc.pieChart}\n */\n _chart.cy = function (cy) {\n if (!arguments.length) {\n return (_cy || _chart.height() / 2);\n }\n _cy = cy;\n return _chart;\n };\n\n function buildArcs () {\n return d3.svg.arc()\n .outerRadius(_radius - _externalRadiusPadding)\n .innerRadius(_innerRadius);\n }\n\n function isSelectedSlice (d) {\n return _chart.hasFilter(_chart.cappedKeyAccessor(d.data));\n }\n\n _chart._doRedraw = function () {\n drawChart();\n return _chart;\n };\n\n /**\n * Get or set the minimal slice angle for label rendering. Any slice with a smaller angle will not\n * display a slice label.\n * @method minAngleForLabel\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [minAngleForLabel=0.5]\n * @returns {Number|dc.pieChart}\n */\n _chart.minAngleForLabel = function (minAngleForLabel) {\n if (!arguments.length) {\n return _minAngleForLabel;\n }\n _minAngleForLabel = minAngleForLabel;\n return _chart;\n };\n\n function pieLayout () {\n return d3.layout.pie().sort(null).value(_chart.cappedValueAccessor);\n }\n\n function sliceTooSmall (d) {\n var angle = (d.endAngle - d.startAngle);\n return isNaN(angle) || angle < _minAngleForLabel;\n }\n\n function sliceHasNoData (d) {\n return _chart.cappedValueAccessor(d) === 0;\n }\n\n function tweenPie (b) {\n b.innerRadius = _innerRadius;\n var current = this._current;\n if (isOffCanvas(current)) {\n current = {startAngle: 0, endAngle: 0};\n } else {\n // only interpolate startAngle & endAngle, not the whole data object\n current = {startAngle: current.startAngle, endAngle: current.endAngle};\n }\n var i = d3.interpolate(current, b);\n this._current = i(0);\n return function (t) {\n return safeArc(i(t), 0, buildArcs());\n };\n }\n\n function isOffCanvas (current) {\n return !current || isNaN(current.startAngle) || isNaN(current.endAngle);\n }\n\n function fill (d, i) {\n return _chart.getColor(d.data, i);\n }\n\n function onClick (d, i) {\n if (_g.attr('class') !== _emptyCssClass) {\n _chart.onClick(d.data, i);\n }\n }\n\n function safeArc (d, i, arc) {\n var path = arc(d, i);\n if (path.indexOf('NaN') >= 0) {\n path = 'M0,0';\n }\n return path;\n }\n\n /**\n * Title to use for the only slice when there is no data.\n * @method emptyTitle\n * @memberof dc.pieChart\n * @instance\n * @param {String} [title]\n * @returns {String|dc.pieChart}\n */\n _chart.emptyTitle = function (title) {\n if (arguments.length === 0) {\n return _emptyTitle;\n }\n _emptyTitle = title;\n return _chart;\n };\n\n /**\n * Position slice labels offset from the outer edge of the chart.\n *\n * The argument specifies the extra radius to be added for slice labels.\n * @method externalLabels\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [externalLabelRadius]\n * @returns {Number|dc.pieChart}\n */\n _chart.externalLabels = function (externalLabelRadius) {\n if (arguments.length === 0) {\n return _externalLabelRadius;\n } else if (externalLabelRadius) {\n _externalLabelRadius = externalLabelRadius;\n } else {\n _externalLabelRadius = undefined;\n }\n\n return _chart;\n };\n\n /**\n * Get or set whether to draw lines from pie slices to their labels.\n *\n * @method drawPaths\n * @memberof dc.pieChart\n * @instance\n * @param {Boolean} [drawPaths]\n * @returns {Boolean|dc.pieChart}\n */\n _chart.drawPaths = function (drawPaths) {\n if (arguments.length === 0) {\n return _drawPaths;\n }\n _drawPaths = drawPaths;\n return _chart;\n };\n\n function labelPosition (d, arc) {\n var centroid;\n if (_externalLabelRadius) {\n centroid = d3.svg.arc()\n .outerRadius(_radius - _externalRadiusPadding + _externalLabelRadius)\n .innerRadius(_radius - _externalRadiusPadding + _externalLabelRadius)\n .centroid(d);\n } else {\n centroid = arc.centroid(d);\n }\n if (isNaN(centroid[0]) || isNaN(centroid[1])) {\n return 'translate(0,0)';\n } else {\n return 'translate(' + centroid + ')';\n }\n }\n\n _chart.legendables = function () {\n return _chart.data().map(function (d, i) {\n var legendable = {name: d.key, data: d.value, others: d.others, chart: _chart};\n legendable.color = _chart.getColor(d, i);\n return legendable;\n });\n };\n\n _chart.legendHighlight = function (d) {\n highlightSliceFromLegendable(d, true);\n };\n\n _chart.legendReset = function (d) {\n highlightSliceFromLegendable(d, false);\n };\n\n _chart.legendToggle = function (d) {\n _chart.onClick({key: d.name, others: d.others});\n };\n\n function highlightSliceFromLegendable (legendable, highlighted) {\n _chart.selectAll('g.pie-slice').each(function (d) {\n if (legendable.name === d.data.key) {\n d3.select(this).classed('highlight', highlighted);\n }\n });\n }\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Concrete bar chart/histogram implementation.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.com/dc.js/crime/index.html Canadian City Crime Stats}\n * @class barChart\n * @memberof dc\n * @mixes dc.stackMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a bar chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.barChart('#chart-container1');\n * // create a bar chart under #chart-container2 element using chart group A\n * var chart2 = dc.barChart('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.barChart(compositeChart);\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector}\n * specifying a dom block element such as a div; or a dom element or d3 selection. If the bar\n * chart is a sub-chart in a {@link dc.compositeChart Composite Chart} then pass in the parent\n * composite chart instance instead.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.barChart}\n */\ndc.barChart = function (parent, chartGroup) {\n var MIN_BAR_WIDTH = 1;\n var DEFAULT_GAP_BETWEEN_BARS = 2;\n var LABEL_PADDING = 3;\n\n var _chart = dc.stackMixin(dc.coordinateGridMixin({}));\n\n var _gap = DEFAULT_GAP_BETWEEN_BARS;\n var _centerBar = false;\n var _alwaysUseRounding = false;\n\n var _barWidth;\n\n dc.override(_chart, 'rescale', function () {\n _chart._rescale();\n _barWidth = undefined;\n return _chart;\n });\n\n dc.override(_chart, 'render', function () {\n if (_chart.round() && _centerBar && !_alwaysUseRounding) {\n dc.logger.warn('By default, brush rounding is disabled if bars are centered. ' +\n 'See dc.js bar chart API documentation for details.');\n }\n\n return _chart._render();\n });\n\n _chart.label(function (d) {\n return dc.utils.printSingleValue(d.y0 + d.y);\n }, false);\n\n _chart.plotData = function () {\n var layers = _chart.chartBodyG().selectAll('g.stack')\n .data(_chart.data());\n\n calculateBarWidth();\n\n layers\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return 'stack ' + '_' + i;\n });\n\n var last = layers.size() - 1;\n layers.each(function (d, i) {\n var layer = d3.select(this);\n\n renderBars(layer, i, d);\n\n if (_chart.renderLabel() && last === i) {\n renderLabels(layer, i, d);\n }\n });\n };\n\n function barHeight (d) {\n return dc.utils.safeNumber(Math.abs(_chart.y()(d.y + d.y0) - _chart.y()(d.y0)));\n }\n\n function renderLabels (layer, layerIndex, d) {\n var labels = layer.selectAll('text.barLabel')\n .data(d.values, dc.pluck('x'));\n\n labels.enter()\n .append('text')\n .attr('class', 'barLabel')\n .attr('text-anchor', 'middle');\n\n if (_chart.isOrdinal()) {\n labels.on('click', _chart.onClick);\n labels.attr('cursor', 'pointer');\n }\n\n dc.transition(labels, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x', function (d) {\n var x = _chart.x()(d.x);\n if (!_centerBar) {\n x += _barWidth / 2;\n }\n return dc.utils.safeNumber(x);\n })\n .attr('y', function (d) {\n var y = _chart.y()(d.y + d.y0);\n\n if (d.y < 0) {\n y -= barHeight(d);\n }\n\n return dc.utils.safeNumber(y - LABEL_PADDING);\n })\n .text(function (d) {\n return _chart.label()(d);\n });\n\n dc.transition(labels.exit(), _chart.transitionDuration(), _chart.transitionDelay())\n .attr('height', 0)\n .remove();\n }\n\n function renderBars (layer, layerIndex, d) {\n var bars = layer.selectAll('rect.bar')\n .data(d.values, dc.pluck('x'));\n\n var enter = bars.enter()\n .append('rect')\n .attr('class', 'bar')\n .attr('fill', dc.pluck('data', _chart.getColor))\n .attr('y', _chart.yAxisHeight())\n .attr('height', 0);\n\n if (_chart.renderTitle()) {\n enter.append('title').text(dc.pluck('data', _chart.title(d.name)));\n }\n\n if (_chart.isOrdinal()) {\n bars.on('click', _chart.onClick);\n }\n\n dc.transition(bars, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x', function (d) {\n var x = _chart.x()(d.x);\n if (_centerBar) {\n x -= _barWidth / 2;\n }\n if (_chart.isOrdinal() && _gap !== undefined) {\n x += _gap / 2;\n }\n return dc.utils.safeNumber(x);\n })\n .attr('y', function (d) {\n var y = _chart.y()(d.y + d.y0);\n\n if (d.y < 0) {\n y -= barHeight(d);\n }\n\n return dc.utils.safeNumber(y);\n })\n .attr('width', _barWidth)\n .attr('height', function (d) {\n return barHeight(d);\n })\n .attr('fill', dc.pluck('data', _chart.getColor))\n .select('title').text(dc.pluck('data', _chart.title(d.name)));\n\n dc.transition(bars.exit(), _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x', function (d) { return _chart.x()(d.x); })\n .attr('width', _barWidth * 0.9)\n .remove();\n }\n\n function calculateBarWidth () {\n if (_barWidth === undefined) {\n var numberOfBars = _chart.xUnitCount();\n\n // please can't we always use rangeBands for bar charts?\n if (_chart.isOrdinal() && _gap === undefined) {\n _barWidth = Math.floor(_chart.x().rangeBand());\n } else if (_gap) {\n _barWidth = Math.floor((_chart.xAxisLength() - (numberOfBars - 1) * _gap) / numberOfBars);\n } else {\n _barWidth = Math.floor(_chart.xAxisLength() / (1 + _chart.barPadding()) / numberOfBars);\n }\n\n if (_barWidth === Infinity || isNaN(_barWidth) || _barWidth < MIN_BAR_WIDTH) {\n _barWidth = MIN_BAR_WIDTH;\n }\n }\n }\n\n _chart.fadeDeselectedArea = function () {\n var bars = _chart.chartBodyG().selectAll('rect.bar');\n var extent = _chart.brush().extent();\n\n if (_chart.isOrdinal()) {\n if (_chart.hasFilter()) {\n bars.classed(dc.constants.SELECTED_CLASS, function (d) {\n return _chart.hasFilter(d.x);\n });\n bars.classed(dc.constants.DESELECTED_CLASS, function (d) {\n return !_chart.hasFilter(d.x);\n });\n } else {\n bars.classed(dc.constants.SELECTED_CLASS, false);\n bars.classed(dc.constants.DESELECTED_CLASS, false);\n }\n } else {\n if (!_chart.brushIsEmpty(extent)) {\n var start = extent[0];\n var end = extent[1];\n\n bars.classed(dc.constants.DESELECTED_CLASS, function (d) {\n return d.x < start || d.x >= end;\n });\n } else {\n bars.classed(dc.constants.DESELECTED_CLASS, false);\n }\n }\n };\n\n /**\n * Whether the bar chart will render each bar centered around the data position on the x-axis.\n * @method centerBar\n * @memberof dc.barChart\n * @instance\n * @param {Boolean} [centerBar=false]\n * @returns {Boolean|dc.barChart}\n */\n _chart.centerBar = function (centerBar) {\n if (!arguments.length) {\n return _centerBar;\n }\n _centerBar = centerBar;\n return _chart;\n };\n\n dc.override(_chart, 'onClick', function (d) {\n _chart._onClick(d.data);\n });\n\n /**\n * Get or set the spacing between bars as a fraction of bar size. Valid values are between 0-1.\n * Setting this value will also remove any previously set {@link dc.barChart#gap gap}. See the\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal_rangeBands d3 docs}\n * for a visual description of how the padding is applied.\n * @method barPadding\n * @memberof dc.barChart\n * @instance\n * @param {Number} [barPadding=0]\n * @returns {Number|dc.barChart}\n */\n _chart.barPadding = function (barPadding) {\n if (!arguments.length) {\n return _chart._rangeBandPadding();\n }\n _chart._rangeBandPadding(barPadding);\n _gap = undefined;\n return _chart;\n };\n\n _chart._useOuterPadding = function () {\n return _gap === undefined;\n };\n\n /**\n * Get or set the outer padding on an ordinal bar chart. This setting has no effect on non-ordinal charts.\n * Will pad the width by `padding * barWidth` on each side of the chart.\n * @method outerPadding\n * @memberof dc.barChart\n * @instance\n * @param {Number} [padding=0.5]\n * @returns {Number|dc.barChart}\n */\n _chart.outerPadding = _chart._outerRangeBandPadding;\n\n /**\n * Manually set fixed gap (in px) between bars instead of relying on the default auto-generated\n * gap. By default the bar chart implementation will calculate and set the gap automatically\n * based on the number of data points and the length of the x axis.\n * @method gap\n * @memberof dc.barChart\n * @instance\n * @param {Number} [gap=2]\n * @returns {Number|dc.barChart}\n */\n _chart.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _chart;\n };\n\n _chart.extendBrush = function () {\n var extent = _chart.brush().extent();\n if (_chart.round() && (!_centerBar || _alwaysUseRounding)) {\n extent[0] = extent.map(_chart.round())[0];\n extent[1] = extent.map(_chart.round())[1];\n\n _chart.chartBodyG().select('.brush')\n .call(_chart.brush().extent(extent));\n }\n\n return extent;\n };\n\n /**\n * Set or get whether rounding is enabled when bars are centered. If false, using\n * rounding with centered bars will result in a warning and rounding will be ignored. This flag\n * has no effect if bars are not {@link dc.barChart#centerBar centered}.\n * When using standard d3.js rounding methods, the brush often doesn't align correctly with\n * centered bars since the bars are offset. The rounding function must add an offset to\n * compensate, such as in the following example.\n * @method alwaysUseRounding\n * @memberof dc.barChart\n * @instance\n * @example\n * chart.round(function(n) { return Math.floor(n) + 0.5; });\n * @param {Boolean} [alwaysUseRounding=false]\n * @returns {Boolean|dc.barChart}\n */\n _chart.alwaysUseRounding = function (alwaysUseRounding) {\n if (!arguments.length) {\n return _alwaysUseRounding;\n }\n _alwaysUseRounding = alwaysUseRounding;\n return _chart;\n };\n\n function colorFilter (color, inv) {\n return function () {\n var item = d3.select(this);\n var match = item.attr('fill') === color;\n return inv ? !match : match;\n };\n }\n\n _chart.legendHighlight = function (d) {\n if (!_chart.isLegendableHidden(d)) {\n _chart.g().selectAll('rect.bar')\n .classed('highlight', colorFilter(d.color))\n .classed('fadeout', colorFilter(d.color, true));\n }\n };\n\n _chart.legendReset = function () {\n _chart.g().selectAll('rect.bar')\n .classed('highlight', false)\n .classed('fadeout', false);\n };\n\n dc.override(_chart, 'xAxisMax', function () {\n var max = this._xAxisMax();\n if ('resolution' in _chart.xUnits()) {\n var res = _chart.xUnits().resolution;\n max += res;\n }\n return max;\n });\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Concrete line/area chart implementation.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.com/dc.js/crime/index.html Canadian City Crime Stats}\n * @class lineChart\n * @memberof dc\n * @mixes dc.stackMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a line chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.lineChart('#chart-container1');\n * // create a line chart under #chart-container2 element using chart group A\n * var chart2 = dc.lineChart('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.lineChart(compositeChart);\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector}\n * specifying a dom block element such as a div; or a dom element or d3 selection. If the line\n * chart is a sub-chart in a {@link dc.compositeChart Composite Chart} then pass in the parent\n * composite chart instance instead.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.lineChart}\n */\ndc.lineChart = function (parent, chartGroup) {\n var DEFAULT_DOT_RADIUS = 5;\n var TOOLTIP_G_CLASS = 'dc-tooltip';\n var DOT_CIRCLE_CLASS = 'dot';\n var Y_AXIS_REF_LINE_CLASS = 'yRef';\n var X_AXIS_REF_LINE_CLASS = 'xRef';\n var DEFAULT_DOT_OPACITY = 1e-6;\n var LABEL_PADDING = 3;\n\n var _chart = dc.stackMixin(dc.coordinateGridMixin({}));\n var _renderArea = false;\n var _dotRadius = DEFAULT_DOT_RADIUS;\n var _dataPointRadius = null;\n var _dataPointFillOpacity = DEFAULT_DOT_OPACITY;\n var _dataPointStrokeOpacity = DEFAULT_DOT_OPACITY;\n var _interpolate = 'linear';\n var _tension = 0.7;\n var _defined;\n var _dashStyle;\n var _xyTipsOn = true;\n\n _chart.transitionDuration(500);\n _chart.transitionDelay(0);\n _chart._rangeBandPadding(1);\n\n _chart.plotData = function () {\n var chartBody = _chart.chartBodyG();\n var layersList = chartBody.select('g.stack-list');\n\n if (layersList.empty()) {\n layersList = chartBody.append('g').attr('class', 'stack-list');\n }\n\n var layers = layersList.selectAll('g.stack').data(_chart.data());\n\n var layersEnter = layers\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return 'stack ' + '_' + i;\n });\n\n drawLine(layersEnter, layers);\n\n drawArea(layersEnter, layers);\n\n drawDots(chartBody, layers);\n\n if (_chart.renderLabel()) {\n drawLabels(layers);\n }\n };\n\n /**\n * Gets or sets the interpolator to use for lines drawn, by string name, allowing e.g. step\n * functions, splines, and cubic interpolation. This is passed to\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_interpolate d3.svg.line.interpolate} and\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#area_interpolate d3.svg.area.interpolate},\n * where you can find a complete list of valid arguments.\n * @method interpolate\n * @memberof dc.lineChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_interpolate d3.svg.line.interpolate}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#area_interpolate d3.svg.area.interpolate}\n * @param {String} [interpolate='linear']\n * @returns {String|dc.lineChart}\n */\n _chart.interpolate = function (interpolate) {\n if (!arguments.length) {\n return _interpolate;\n }\n _interpolate = interpolate;\n return _chart;\n };\n\n /**\n * Gets or sets the tension to use for lines drawn, in the range 0 to 1.\n * This parameter further customizes the interpolation behavior. It is passed to\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_tension d3.svg.line.tension} and\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#area_tension d3.svg.area.tension}.\n * @method tension\n * @memberof dc.lineChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_interpolate d3.svg.line.interpolate}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#area_interpolate d3.svg.area.interpolate}\n * @param {Number} [tension=0.7]\n * @returns {Number|dc.lineChart}\n */\n _chart.tension = function (tension) {\n if (!arguments.length) {\n return _tension;\n }\n _tension = tension;\n return _chart;\n };\n\n /**\n * Gets or sets a function that will determine discontinuities in the line which should be\n * skipped: the path will be broken into separate subpaths if some points are undefined.\n * This function is passed to\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_defined d3.svg.line.defined}\n *\n * Note: crossfilter will sometimes coerce nulls to 0, so you may need to carefully write\n * custom reduce functions to get this to work, depending on your data. See\n * {@link https://github.com/dc-js/dc.js/issues/615#issuecomment-49089248 this GitHub comment}\n * for more details and an example.\n * @method defined\n * @memberof dc.lineChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#line_defined d3.svg.line.defined}\n * @param {Function} [defined]\n * @returns {Function|dc.lineChart}\n */\n _chart.defined = function (defined) {\n if (!arguments.length) {\n return _defined;\n }\n _defined = defined;\n return _chart;\n };\n\n /**\n * Set the line's d3 dashstyle. This value becomes the 'stroke-dasharray' of line. Defaults to empty\n * array (solid line).\n * @method dashStyle\n * @memberof dc.lineChart\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray stroke-dasharray}\n * @example\n * // create a Dash Dot Dot Dot\n * chart.dashStyle([3,1,1,1]);\n * @param {Array<Number>} [dashStyle=[]]\n * @returns {Array<Number>|dc.lineChart}\n */\n _chart.dashStyle = function (dashStyle) {\n if (!arguments.length) {\n return _dashStyle;\n }\n _dashStyle = dashStyle;\n return _chart;\n };\n\n /**\n * Get or set render area flag. If the flag is set to true then the chart will render the area\n * beneath each line and the line chart effectively becomes an area chart.\n * @method renderArea\n * @memberof dc.lineChart\n * @instance\n * @param {Boolean} [renderArea=false]\n * @returns {Boolean|dc.lineChart}\n */\n _chart.renderArea = function (renderArea) {\n if (!arguments.length) {\n return _renderArea;\n }\n _renderArea = renderArea;\n return _chart;\n };\n\n function colors (d, i) {\n return _chart.getColor.call(d, d.values, i);\n }\n\n function drawLine (layersEnter, layers) {\n var line = d3.svg.line()\n .x(function (d) {\n return _chart.x()(d.x);\n })\n .y(function (d) {\n return _chart.y()(d.y + d.y0);\n })\n .interpolate(_interpolate)\n .tension(_tension);\n if (_defined) {\n line.defined(_defined);\n }\n\n var path = layersEnter.append('path')\n .attr('class', 'line')\n .attr('stroke', colors);\n if (_dashStyle) {\n path.attr('stroke-dasharray', _dashStyle);\n }\n\n dc.transition(layers.select('path.line'), _chart.transitionDuration(), _chart.transitionDelay())\n //.ease('linear')\n .attr('stroke', colors)\n .attr('d', function (d) {\n return safeD(line(d.values));\n });\n }\n\n function drawArea (layersEnter, layers) {\n if (_renderArea) {\n var area = d3.svg.area()\n .x(function (d) {\n return _chart.x()(d.x);\n })\n .y(function (d) {\n return _chart.y()(d.y + d.y0);\n })\n .y0(function (d) {\n return _chart.y()(d.y0);\n })\n .interpolate(_interpolate)\n .tension(_tension);\n if (_defined) {\n area.defined(_defined);\n }\n\n layersEnter.append('path')\n .attr('class', 'area')\n .attr('fill', colors)\n .attr('d', function (d) {\n return safeD(area(d.values));\n });\n\n dc.transition(layers.select('path.area'), _chart.transitionDuration(), _chart.transitionDelay())\n //.ease('linear')\n .attr('fill', colors)\n .attr('d', function (d) {\n return safeD(area(d.values));\n });\n }\n }\n\n function safeD (d) {\n return (!d || d.indexOf('NaN') >= 0) ? 'M0,0' : d;\n }\n\n function drawDots (chartBody, layers) {\n if (_chart.xyTipsOn() === 'always' || (!_chart.brushOn() && _chart.xyTipsOn())) {\n var tooltipListClass = TOOLTIP_G_CLASS + '-list';\n var tooltips = chartBody.select('g.' + tooltipListClass);\n\n if (tooltips.empty()) {\n tooltips = chartBody.append('g').attr('class', tooltipListClass);\n }\n\n layers.each(function (d, layerIndex) {\n var points = d.values;\n if (_defined) {\n points = points.filter(_defined);\n }\n\n var g = tooltips.select('g.' + TOOLTIP_G_CLASS + '._' + layerIndex);\n if (g.empty()) {\n g = tooltips.append('g').attr('class', TOOLTIP_G_CLASS + ' _' + layerIndex);\n }\n\n createRefLines(g);\n\n var dots = g.selectAll('circle.' + DOT_CIRCLE_CLASS)\n .data(points, dc.pluck('x'));\n\n dots.enter()\n .append('circle')\n .attr('class', DOT_CIRCLE_CLASS)\n .attr('r', getDotRadius())\n .style('fill-opacity', _dataPointFillOpacity)\n .style('stroke-opacity', _dataPointStrokeOpacity)\n .attr('fill', _chart.getColor)\n .on('mousemove', function () {\n var dot = d3.select(this);\n showDot(dot);\n showRefLines(dot, g);\n })\n .on('mouseout', function () {\n var dot = d3.select(this);\n hideDot(dot);\n hideRefLines(g);\n });\n\n dots.call(renderTitle, d);\n\n dc.transition(dots, _chart.transitionDuration())\n .attr('cx', function (d) {\n return dc.utils.safeNumber(_chart.x()(d.x));\n })\n .attr('cy', function (d) {\n return dc.utils.safeNumber(_chart.y()(d.y + d.y0));\n })\n .attr('fill', _chart.getColor);\n\n dots.exit().remove();\n });\n }\n }\n\n _chart.label(function (d) {\n return dc.utils.printSingleValue(d.y0 + d.y);\n }, false);\n\n function drawLabels (layers) {\n layers.each(function (d, layerIndex) {\n var layer = d3.select(this);\n var labels = layer.selectAll('text.lineLabel')\n .data(d.values, dc.pluck('x'));\n\n labels.enter()\n .append('text')\n .attr('class', 'lineLabel')\n .attr('text-anchor', 'middle');\n\n dc.transition(labels, _chart.transitionDuration())\n .attr('x', function (d) {\n return dc.utils.safeNumber(_chart.x()(d.x));\n })\n .attr('y', function (d) {\n var y = _chart.y()(d.y + d.y0) - LABEL_PADDING;\n return dc.utils.safeNumber(y);\n })\n .text(function (d) {\n return _chart.label()(d);\n });\n\n dc.transition(labels.exit(), _chart.transitionDuration())\n .attr('height', 0)\n .remove();\n });\n }\n\n function createRefLines (g) {\n var yRefLine = g.select('path.' + Y_AXIS_REF_LINE_CLASS).empty() ?\n g.append('path').attr('class', Y_AXIS_REF_LINE_CLASS) : g.select('path.' + Y_AXIS_REF_LINE_CLASS);\n yRefLine.style('display', 'none').attr('stroke-dasharray', '5,5');\n\n var xRefLine = g.select('path.' + X_AXIS_REF_LINE_CLASS).empty() ?\n g.append('path').attr('class', X_AXIS_REF_LINE_CLASS) : g.select('path.' + X_AXIS_REF_LINE_CLASS);\n xRefLine.style('display', 'none').attr('stroke-dasharray', '5,5');\n }\n\n function showDot (dot) {\n dot.style('fill-opacity', 0.8);\n dot.style('stroke-opacity', 0.8);\n dot.attr('r', _dotRadius);\n return dot;\n }\n\n function showRefLines (dot, g) {\n var x = dot.attr('cx');\n var y = dot.attr('cy');\n var yAxisX = (_chart._yAxisX() - _chart.margins().left);\n var yAxisRefPathD = 'M' + yAxisX + ' ' + y + 'L' + (x) + ' ' + (y);\n var xAxisRefPathD = 'M' + x + ' ' + _chart.yAxisHeight() + 'L' + x + ' ' + y;\n g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', '').attr('d', yAxisRefPathD);\n g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', '').attr('d', xAxisRefPathD);\n }\n\n function getDotRadius () {\n return _dataPointRadius || _dotRadius;\n }\n\n function hideDot (dot) {\n dot.style('fill-opacity', _dataPointFillOpacity)\n .style('stroke-opacity', _dataPointStrokeOpacity)\n .attr('r', getDotRadius());\n }\n\n function hideRefLines (g) {\n g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', 'none');\n g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', 'none');\n }\n\n function renderTitle (dot, d) {\n if (_chart.renderTitle()) {\n dot.select('title').remove();\n dot.append('title').text(dc.pluck('data', _chart.title(d.name)));\n }\n }\n\n /**\n * Turn on/off the mouseover behavior of an individual data point which renders a circle and x/y axis\n * dashed lines back to each respective axis. This is ignored if the chart\n * {@link dc.coordinateGridMixin#brushOn brush} is on\n * @method xyTipsOn\n * @memberof dc.lineChart\n * @instance\n * @param {Boolean} [xyTipsOn=false]\n * @returns {Boolean|dc.lineChart}\n */\n _chart.xyTipsOn = function (xyTipsOn) {\n if (!arguments.length) {\n return _xyTipsOn;\n }\n _xyTipsOn = xyTipsOn;\n return _chart;\n };\n\n /**\n * Get or set the radius (in px) for dots displayed on the data points.\n * @method dotRadius\n * @memberof dc.lineChart\n * @instance\n * @param {Number} [dotRadius=5]\n * @returns {Number|dc.lineChart}\n */\n _chart.dotRadius = function (dotRadius) {\n if (!arguments.length) {\n return _dotRadius;\n }\n _dotRadius = dotRadius;\n return _chart;\n };\n\n /**\n * Always show individual dots for each datapoint.\n *\n * If `options` is falsy, it disables data point rendering. If no `options` are provided, the\n * current `options` values are instead returned.\n * @method renderDataPoints\n * @memberof dc.lineChart\n * @instance\n * @example\n * chart.renderDataPoints({radius: 2, fillOpacity: 0.8, strokeOpacity: 0.8})\n * @param {{fillOpacity: Number, strokeOpacity: Number, radius: Number}} [options={fillOpacity: 0.8, strokeOpacity: 0.8, radius: 2}]\n * @returns {{fillOpacity: Number, strokeOpacity: Number, radius: Number}|dc.lineChart}\n */\n _chart.renderDataPoints = function (options) {\n if (!arguments.length) {\n return {\n fillOpacity: _dataPointFillOpacity,\n strokeOpacity: _dataPointStrokeOpacity,\n radius: _dataPointRadius\n };\n } else if (!options) {\n _dataPointFillOpacity = DEFAULT_DOT_OPACITY;\n _dataPointStrokeOpacity = DEFAULT_DOT_OPACITY;\n _dataPointRadius = null;\n } else {\n _dataPointFillOpacity = options.fillOpacity || 0.8;\n _dataPointStrokeOpacity = options.strokeOpacity || 0.8;\n _dataPointRadius = options.radius || 2;\n }\n return _chart;\n };\n\n function colorFilter (color, dashstyle, inv) {\n return function () {\n var item = d3.select(this);\n var match = (item.attr('stroke') === color &&\n item.attr('stroke-dasharray') === ((dashstyle instanceof Array) ?\n dashstyle.join(',') : null)) || item.attr('fill') === color;\n return inv ? !match : match;\n };\n }\n\n _chart.legendHighlight = function (d) {\n if (!_chart.isLegendableHidden(d)) {\n _chart.g().selectAll('path.line, path.area')\n .classed('highlight', colorFilter(d.color, d.dashstyle))\n .classed('fadeout', colorFilter(d.color, d.dashstyle, true));\n }\n };\n\n _chart.legendReset = function () {\n _chart.g().selectAll('path.line, path.area')\n .classed('highlight', false)\n .classed('fadeout', false);\n };\n\n dc.override(_chart, 'legendables', function () {\n var legendables = _chart._legendables();\n if (!_dashStyle) {\n return legendables;\n }\n return legendables.map(function (l) {\n l.dashstyle = _dashStyle;\n return l;\n });\n });\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The data count widget is a simple widget designed to display the number of records selected by the\n * current filters out of the total number of records in the data set. Once created the data count widget\n * will automatically update the text content of child elements with the following classes:\n *\n * * `.total-count` - total number of records\n * * `.filter-count` - number of records matched by the current filters\n *\n * Note: this widget works best for the specific case of showing the number of records out of a\n * total. If you want a more general-purpose numeric display, please use the\n * {@link dc.numberDisplay} widget instead.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * @class dataCount\n * @memberof dc\n * @mixes dc.baseMixin\n * @example\n * var ndx = crossfilter(data);\n * var all = ndx.groupAll();\n *\n * dc.dataCount('.dc-data-count')\n * .dimension(ndx)\n * .group(all);\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.dataCount}\n */\ndc.dataCount = function (parent, chartGroup) {\n var _formatNumber = d3.format(',d');\n var _chart = dc.baseMixin({});\n var _html = {some: '', all: ''};\n\n /**\n * Gets or sets an optional object specifying HTML templates to use depending how many items are\n * selected. The text `%total-count` will replaced with the total number of records, and the text\n * `%filter-count` will be replaced with the number of selected records.\n * - all: HTML template to use if all items are selected\n * - some: HTML template to use if not all items are selected\n * @method html\n * @memberof dc.dataCount\n * @instance\n * @example\n * counter.html({\n * some: '%filter-count out of %total-count records selected',\n * all: 'All records selected. Click on charts to apply filters'\n * })\n * @param {{some:String, all: String}} [options]\n * @returns {{some:String, all: String}|dc.dataCount}\n */\n _chart.html = function (options) {\n if (!arguments.length) {\n return _html;\n }\n if (options.all) {\n _html.all = options.all;\n }\n if (options.some) {\n _html.some = options.some;\n }\n return _chart;\n };\n\n /**\n * Gets or sets an optional function to format the filter count and total count.\n * @method formatNumber\n * @memberof dc.dataCount\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md d3.format}\n * @example\n * counter.formatNumber(d3.format('.2g'))\n * @param {Function} [formatter=d3.format('.2g')]\n * @returns {Function|dc.dataCount}\n */\n _chart.formatNumber = function (formatter) {\n if (!arguments.length) {\n return _formatNumber;\n }\n _formatNumber = formatter;\n return _chart;\n };\n\n _chart._doRender = function () {\n var tot = _chart.dimension().size(),\n val = _chart.group().value();\n var all = _formatNumber(tot);\n var selected = _formatNumber(val);\n\n if ((tot === val) && (_html.all !== '')) {\n _chart.root().html(_html.all.replace('%total-count', all).replace('%filter-count', selected));\n } else if (_html.some !== '') {\n _chart.root().html(_html.some.replace('%total-count', all).replace('%filter-count', selected));\n } else {\n _chart.selectAll('.total-count').text(all);\n _chart.selectAll('.filter-count').text(selected);\n }\n return _chart;\n };\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The data table is a simple widget designed to list crossfilter focused data set (rows being\n * filtered) in a good old tabular fashion.\n *\n * Note: Unlike other charts, the data table (and data grid chart) use the {@link dc.dataTable#group group} attribute as a\n * keying function for {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#nest nesting} the data\n * together in groups. Do not pass in a crossfilter group as this will not work.\n *\n * Another interesting feature of the data table is that you can pass a crossfilter group to the `dimension`, as\n * long as you specify the {@link dc.dataTable#order order} as `d3.descending`, since the data\n * table will use `dimension.top()` to fetch the data in that case, and the method is equally\n * supported on the crossfilter group as the crossfilter dimension.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.io/dc.js/examples/table-on-aggregated-data.html dataTable on a crossfilter group}\n * ({@link https://github.com/dc-js/dc.js/blob/develop/web/examples/table-on-aggregated-data.html source})\n * @class dataTable\n * @memberof dc\n * @mixes dc.baseMixin\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.dataTable}\n */\ndc.dataTable = function (parent, chartGroup) {\n var LABEL_CSS_CLASS = 'dc-table-label';\n var ROW_CSS_CLASS = 'dc-table-row';\n var COLUMN_CSS_CLASS = 'dc-table-column';\n var GROUP_CSS_CLASS = 'dc-table-group';\n var HEAD_CSS_CLASS = 'dc-table-head';\n\n var _chart = dc.baseMixin({});\n\n var _size = 25;\n var _columns = [];\n var _sortBy = function (d) {\n return d;\n };\n var _order = d3.ascending;\n var _beginSlice = 0;\n var _endSlice;\n var _showGroups = true;\n\n _chart._doRender = function () {\n _chart.selectAll('tbody').remove();\n\n renderRows(renderGroups());\n\n return _chart;\n };\n\n _chart._doColumnValueFormat = function (v, d) {\n return ((typeof v === 'function') ?\n v(d) : // v as function\n ((typeof v === 'string') ?\n d[v] : // v is field name string\n v.format(d) // v is Object, use fn (element 2)\n )\n );\n };\n\n _chart._doColumnHeaderFormat = function (d) {\n // if 'function', convert to string representation\n // show a string capitalized\n // if an object then display its label string as-is.\n return (typeof d === 'function') ?\n _chart._doColumnHeaderFnToString(d) :\n ((typeof d === 'string') ?\n _chart._doColumnHeaderCapitalize(d) : String(d.label));\n };\n\n _chart._doColumnHeaderCapitalize = function (s) {\n // capitalize\n return s.charAt(0).toUpperCase() + s.slice(1);\n };\n\n _chart._doColumnHeaderFnToString = function (f) {\n // columnString(f) {\n var s = String(f);\n var i1 = s.indexOf('return ');\n if (i1 >= 0) {\n var i2 = s.lastIndexOf(';');\n if (i2 >= 0) {\n s = s.substring(i1 + 7, i2);\n var i3 = s.indexOf('numberFormat');\n if (i3 >= 0) {\n s = s.replace('numberFormat', '');\n }\n }\n }\n return s;\n };\n\n function renderGroups () {\n // The 'original' example uses all 'functions'.\n // If all 'functions' are used, then don't remove/add a header, and leave\n // the html alone. This preserves the functionality of earlier releases.\n // A 2nd option is a string representing a field in the data.\n // A third option is to supply an Object such as an array of 'information', and\n // supply your own _doColumnHeaderFormat and _doColumnValueFormat functions to\n // create what you need.\n var bAllFunctions = true;\n _columns.forEach(function (f) {\n bAllFunctions = bAllFunctions & (typeof f === 'function');\n });\n\n if (!bAllFunctions) {\n // ensure one thead\n var thead = _chart.selectAll('thead').data([0]);\n thead.enter().append('thead');\n thead.exit().remove();\n\n // with one tr\n var headrow = thead.selectAll('tr').data([0]);\n headrow.enter().append('tr');\n headrow.exit().remove();\n\n // with a th for each column\n var headcols = headrow.selectAll('th')\n .data(_columns);\n headcols.enter().append('th');\n headcols.exit().remove();\n\n headcols\n .attr('class', HEAD_CSS_CLASS)\n .html(function (d) {\n return (_chart._doColumnHeaderFormat(d));\n\n });\n }\n\n var groups = _chart.root().selectAll('tbody')\n .data(nestEntries(), function (d) {\n return _chart.keyAccessor()(d);\n });\n\n var rowGroup = groups\n .enter()\n .append('tbody');\n\n if (_showGroups === true) {\n rowGroup\n .append('tr')\n .attr('class', GROUP_CSS_CLASS)\n .append('td')\n .attr('class', LABEL_CSS_CLASS)\n .attr('colspan', _columns.length)\n .html(function (d) {\n return _chart.keyAccessor()(d);\n });\n }\n\n groups.exit().remove();\n\n return rowGroup;\n }\n\n function nestEntries () {\n var entries;\n if (_order === d3.ascending) {\n entries = _chart.dimension().bottom(_size);\n } else {\n entries = _chart.dimension().top(_size);\n }\n\n return d3.nest()\n .key(_chart.group())\n .sortKeys(_order)\n .entries(entries.sort(function (a, b) {\n return _order(_sortBy(a), _sortBy(b));\n }).slice(_beginSlice, _endSlice));\n }\n\n function renderRows (groups) {\n var rows = groups.order()\n .selectAll('tr.' + ROW_CSS_CLASS)\n .data(function (d) {\n return d.values;\n });\n\n var rowEnter = rows.enter()\n .append('tr')\n .attr('class', ROW_CSS_CLASS);\n\n _columns.forEach(function (v, i) {\n rowEnter.append('td')\n .attr('class', COLUMN_CSS_CLASS + ' _' + i)\n .html(function (d) {\n return _chart._doColumnValueFormat(v, d);\n });\n });\n\n rows.exit().remove();\n\n return rows;\n }\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set the group function for the data table. The group function takes a data row and\n * returns the key to specify to {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_nest d3.nest}\n * to split rows into groups.\n *\n * Do not pass in a crossfilter group as this will not work.\n * @method group\n * @memberof dc.dataTable\n * @instance\n * @example\n * // group rows by the value of their field\n * chart\n * .group(function(d) { return d.field; })\n * @param {Function} groupFunction Function taking a row of data and returning the nest key.\n * @returns {Function|dc.dataTable}\n */\n\n /**\n * Get or set the table size which determines the number of rows displayed by the widget.\n * @method size\n * @memberof dc.dataTable\n * @instance\n * @param {Number} [size=25]\n * @returns {Number|dc.dataTable}\n */\n _chart.size = function (size) {\n if (!arguments.length) {\n return _size;\n }\n _size = size;\n return _chart;\n };\n\n /**\n * Get or set the index of the beginning slice which determines which entries get displayed\n * by the widget. Useful when implementing pagination.\n *\n * Note: the sortBy function will determine how the rows are ordered for pagination purposes.\n\n * See the {@link http://dc-js.github.io/dc.js/examples/table-pagination.html table pagination example}\n * to see how to implement the pagination user interface using `beginSlice` and `endSlice`.\n * @method beginSlice\n * @memberof dc.dataTable\n * @instance\n * @param {Number} [beginSlice=0]\n * @returns {Number|dc.dataTable}\n */\n _chart.beginSlice = function (beginSlice) {\n if (!arguments.length) {\n return _beginSlice;\n }\n _beginSlice = beginSlice;\n return _chart;\n };\n\n /**\n * Get or set the index of the end slice which determines which entries get displayed by the\n * widget. Useful when implementing pagination. See {@link dc.dataTable#beginSlice `beginSlice`} for more information.\n * @method endSlice\n * @memberof dc.dataTable\n * @instance\n * @param {Number|undefined} [endSlice=undefined]\n * @returns {Number|dc.dataTable}\n */\n _chart.endSlice = function (endSlice) {\n if (!arguments.length) {\n return _endSlice;\n }\n _endSlice = endSlice;\n return _chart;\n };\n\n /**\n * Get or set column functions. The data table widget supports several methods of specifying the\n * columns to display.\n *\n * The original method uses an array of functions to generate dynamic columns. Column functions\n * are simple javascript functions with only one input argument `d` which represents a row in\n * the data set. The return value of these functions will be used to generate the content for\n * each cell. However, this method requires the HTML for the table to have a fixed set of column\n * headers.\n *\n * <pre><code>chart.columns([\n * function(d) { return d.date; },\n * function(d) { return d.open; },\n * function(d) { return d.close; },\n * function(d) { return numberFormat(d.close - d.open); },\n * function(d) { return d.volume; }\n * ]);\n * </code></pre>\n *\n * In the second method, you can list the columns to read from the data without specifying it as\n * a function, except where necessary (ie, computed columns). Note the data element name is\n * capitalized when displayed in the table header. You can also mix in functions as necessary,\n * using the third `{label, format}` form, as shown below.\n *\n * <pre><code>chart.columns([\n * \"date\", // d[\"date\"], ie, a field accessor; capitalized automatically\n * \"open\", // ...\n * \"close\", // ...\n * {\n * label: \"Change\",\n * format: function (d) {\n * return numberFormat(d.close - d.open);\n * }\n * },\n * \"volume\" // d[\"volume\"], ie, a field accessor; capitalized automatically\n * ]);\n * </code></pre>\n *\n * In the third example, we specify all fields using the `{label, format}` method:\n * <pre><code>chart.columns([\n * {\n * label: \"Date\",\n * format: function (d) { return d.date; }\n * },\n * {\n * label: \"Open\",\n * format: function (d) { return numberFormat(d.open); }\n * },\n * {\n * label: \"Close\",\n * format: function (d) { return numberFormat(d.close); }\n * },\n * {\n * label: \"Change\",\n * format: function (d) { return numberFormat(d.close - d.open); }\n * },\n * {\n * label: \"Volume\",\n * format: function (d) { return d.volume; }\n * }\n * ]);\n * </code></pre>\n *\n * You may wish to override the dataTable functions `_doColumnHeaderCapitalize` and\n * `_doColumnHeaderFnToString`, which are used internally to translate the column information or\n * function into a displayed header. The first one is used on the \"string\" column specifier; the\n * second is used to transform a stringified function into something displayable. For the Stock\n * example, the function for Change becomes the table header **d.close - d.open**.\n *\n * Finally, you can even specify a completely different form of column definition. To do this,\n * override `_chart._doColumnHeaderFormat` and `_chart._doColumnValueFormat` Be aware that\n * fields without numberFormat specification will be displayed just as they are stored in the\n * data, unformatted.\n * @method columns\n * @memberof dc.dataTable\n * @instance\n * @param {Array<Function>} [columns=[]]\n * @returns {Array<Function>}|dc.dataTable}\n */\n _chart.columns = function (columns) {\n if (!arguments.length) {\n return _columns;\n }\n _columns = columns;\n return _chart;\n };\n\n /**\n * Get or set sort-by function. This function works as a value accessor at row level and returns a\n * particular field to be sorted by.\n * @method sortBy\n * @memberof dc.dataTable\n * @instance\n * @example\n * chart.sortBy(function(d) {\n * return d.date;\n * });\n * @param {Function} [sortBy=identity function]\n * @returns {Function|dc.dataTable}\n */\n _chart.sortBy = function (sortBy) {\n if (!arguments.length) {\n return _sortBy;\n }\n _sortBy = sortBy;\n return _chart;\n };\n\n /**\n * Get or set sort order. If the order is `d3.ascending`, the data table will use\n * `dimension().bottom()` to fetch the data; otherwise it will use `dimension().top()`\n * @method order\n * @memberof dc.dataTable\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_ascending d3.ascending}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_descending d3.descending}\n * @example\n * chart.order(d3.descending);\n * @param {Function} [order=d3.ascending]\n * @returns {Function|dc.dataTable}\n */\n _chart.order = function (order) {\n if (!arguments.length) {\n return _order;\n }\n _order = order;\n return _chart;\n };\n\n /**\n * Get or set if group rows will be shown. The dataTable {@link dc.dataTable#group group}\n * function must be specified even if groups are not shown.\n * @method showGroups\n * @memberof dc.dataTable\n * @instance\n * @example\n * chart\n * .group([value], [name])\n * .showGroups(true|false);\n * @param {Boolean} [showGroups=true]\n * @returns {Boolean|dc.dataTable}\n */\n _chart.showGroups = function (showGroups) {\n if (!arguments.length) {\n return _showGroups;\n }\n _showGroups = showGroups;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Data grid is a simple widget designed to list the filtered records, providing\n * a simple way to define how the items are displayed.\n *\n * Note: Unlike other charts, the data grid chart (and data table) use the {@link dc.dataGrid#group group} attribute as a keying function\n * for {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#nest nesting} the data together in groups.\n * Do not pass in a crossfilter group as this will not work.\n *\n * Examples:\n * - {@link http://europarl.me/dc.js/web/ep/index.html List of members of the european parliament}\n * @class dataGrid\n * @memberof dc\n * @mixes dc.baseMixin\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.dataGrid}\n */\ndc.dataGrid = function (parent, chartGroup) {\n var LABEL_CSS_CLASS = 'dc-grid-label';\n var ITEM_CSS_CLASS = 'dc-grid-item';\n var GROUP_CSS_CLASS = 'dc-grid-group';\n var GRID_CSS_CLASS = 'dc-grid-top';\n\n var _chart = dc.baseMixin({});\n\n var _size = 999; // shouldn't be needed, but you might\n var _html = function (d) { return 'you need to provide an html() handling param: ' + JSON.stringify(d); };\n var _sortBy = function (d) {\n return d;\n };\n var _order = d3.ascending;\n var _beginSlice = 0, _endSlice;\n\n var _htmlGroup = function (d) {\n return '<div class=\\'' + GROUP_CSS_CLASS + '\\'><h1 class=\\'' + LABEL_CSS_CLASS + '\\'>' +\n _chart.keyAccessor()(d) + '</h1></div>';\n };\n\n _chart._doRender = function () {\n _chart.selectAll('div.' + GRID_CSS_CLASS).remove();\n\n renderItems(renderGroups());\n\n return _chart;\n };\n\n function renderGroups () {\n var groups = _chart.root().selectAll('div.' + GRID_CSS_CLASS)\n .data(nestEntries(), function (d) {\n return _chart.keyAccessor()(d);\n });\n\n var itemGroup = groups\n .enter()\n .append('div')\n .attr('class', GRID_CSS_CLASS);\n\n if (_htmlGroup) {\n itemGroup\n .html(function (d) {\n return _htmlGroup(d);\n });\n }\n\n groups.exit().remove();\n return itemGroup;\n }\n\n function nestEntries () {\n var entries = _chart.dimension().top(_size);\n\n return d3.nest()\n .key(_chart.group())\n .sortKeys(_order)\n .entries(entries.sort(function (a, b) {\n return _order(_sortBy(a), _sortBy(b));\n }).slice(_beginSlice, _endSlice));\n }\n\n function renderItems (groups) {\n var items = groups.order()\n .selectAll('div.' + ITEM_CSS_CLASS)\n .data(function (d) {\n return d.values;\n });\n\n items.enter()\n .append('div')\n .attr('class', ITEM_CSS_CLASS)\n .html(function (d) {\n return _html(d);\n });\n\n items.exit().remove();\n\n return items;\n }\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set the group function for the data grid. The group function takes a data row and\n * returns the key to specify to {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_nest d3.nest}\n * to split rows into groups.\n *\n * Do not pass in a crossfilter group as this will not work.\n * @method group\n * @memberof dc.dataGrid\n * @instance\n * @example\n * // group rows by the value of their field\n * chart\n * .group(function(d) { return d.field; })\n * @param {Function} groupFunction Function taking a row of data and returning the nest key.\n * @returns {Function|dc.dataTable}\n */\n\n /**\n * Get or set the index of the beginning slice which determines which entries get displayed by the widget.\n * Useful when implementing pagination.\n * @method beginSlice\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [beginSlice=0]\n * @returns {Number|dc.dataGrid}\n */\n _chart.beginSlice = function (beginSlice) {\n if (!arguments.length) {\n return _beginSlice;\n }\n _beginSlice = beginSlice;\n return _chart;\n };\n\n /**\n * Get or set the index of the end slice which determines which entries get displayed by the widget.\n * Useful when implementing pagination.\n * @method endSlice\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [endSlice]\n * @returns {Number|dc.dataGrid}\n */\n _chart.endSlice = function (endSlice) {\n if (!arguments.length) {\n return _endSlice;\n }\n _endSlice = endSlice;\n return _chart;\n };\n\n /**\n * Get or set the grid size which determines the number of items displayed by the widget.\n * @method size\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [size=999]\n * @returns {Number|dc.dataGrid}\n */\n _chart.size = function (size) {\n if (!arguments.length) {\n return _size;\n }\n _size = size;\n return _chart;\n };\n\n /**\n * Get or set the function that formats an item. The data grid widget uses a\n * function to generate dynamic html. Use your favourite templating engine or\n * generate the string directly.\n * @method html\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.html(function (d) { return '<div class='item '+data.exampleCategory+''>'+data.exampleString+'</div>';});\n * @param {Function} [html]\n * @returns {Function|dc.dataGrid}\n */\n _chart.html = function (html) {\n if (!arguments.length) {\n return _html;\n }\n _html = html;\n return _chart;\n };\n\n /**\n * Get or set the function that formats a group label.\n * @method htmlGroup\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.htmlGroup (function (d) { return '<h2>'.d.key . 'with ' . d.values.length .' items</h2>'});\n * @param {Function} [htmlGroup]\n * @returns {Function|dc.dataGrid}\n */\n _chart.htmlGroup = function (htmlGroup) {\n if (!arguments.length) {\n return _htmlGroup;\n }\n _htmlGroup = htmlGroup;\n return _chart;\n };\n\n /**\n * Get or set sort-by function. This function works as a value accessor at the item\n * level and returns a particular field to be sorted.\n * @method sortBy\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.sortBy(function(d) {\n * return d.date;\n * });\n * @param {Function} [sortByFunction]\n * @returns {Function|dc.dataGrid}\n */\n _chart.sortBy = function (sortByFunction) {\n if (!arguments.length) {\n return _sortBy;\n }\n _sortBy = sortByFunction;\n return _chart;\n };\n\n /**\n * Get or set sort the order function.\n * @method order\n * @memberof dc.dataGrid\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_ascending d3.ascending}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_descending d3.descending}\n * @example\n * chart.order(d3.descending);\n * @param {Function} [order=d3.ascending]\n * @returns {Function|dc.dataGrid}\n */\n _chart.order = function (order) {\n if (!arguments.length) {\n return _order;\n }\n _order = order;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A concrete implementation of a general purpose bubble chart that allows data visualization using the\n * following dimensions:\n * - x axis position\n * - y axis position\n * - bubble radius\n * - color\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.com/dc.js/vc/index.html US Venture Capital Landscape 2011}\n * @class bubbleChart\n * @memberof dc\n * @mixes dc.bubbleMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a bubble chart under #chart-container1 element using the default global chart group\n * var bubbleChart1 = dc.bubbleChart('#chart-container1');\n * // create a bubble chart under #chart-container2 element using chart group A\n * var bubbleChart2 = dc.bubbleChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.bubbleChart}\n */\ndc.bubbleChart = function (parent, chartGroup) {\n var _chart = dc.bubbleMixin(dc.coordinateGridMixin({}));\n\n _chart.transitionDuration(750);\n\n _chart.transitionDelay(0);\n\n var bubbleLocator = function (d) {\n return 'translate(' + (bubbleX(d)) + ',' + (bubbleY(d)) + ')';\n };\n\n _chart.plotData = function () {\n _chart.calculateRadiusDomain();\n _chart.r().range([_chart.MIN_RADIUS, _chart.xAxisLength() * _chart.maxBubbleRelativeSize()]);\n\n var data = _chart.data();\n var bubbleG = _chart.chartBodyG().selectAll('g.' + _chart.BUBBLE_NODE_CLASS)\n .data(data, function (d) { return d.key; });\n if (_chart.sortBubbleSize()) {\n // update dom order based on sort\n bubbleG.order();\n }\n\n renderNodes(bubbleG);\n\n updateNodes(bubbleG);\n\n removeNodes(bubbleG);\n\n _chart.fadeDeselectedArea();\n };\n\n function renderNodes (bubbleG) {\n var bubbleGEnter = bubbleG.enter().append('g');\n\n bubbleGEnter\n .attr('class', _chart.BUBBLE_NODE_CLASS)\n .attr('transform', bubbleLocator)\n .append('circle').attr('class', function (d, i) {\n return _chart.BUBBLE_CLASS + ' _' + i;\n })\n .on('click', _chart.onClick)\n .attr('fill', _chart.getColor)\n .attr('r', 0);\n dc.transition(bubbleG, _chart.transitionDuration(), _chart.transitionDelay())\n .select('circle.' + _chart.BUBBLE_CLASS)\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('opacity', function (d) {\n return (_chart.bubbleR(d) > 0) ? 1 : 0;\n });\n\n _chart._doRenderLabel(bubbleGEnter);\n\n _chart._doRenderTitles(bubbleGEnter);\n }\n\n function updateNodes (bubbleG) {\n dc.transition(bubbleG, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', bubbleLocator)\n .select('circle.' + _chart.BUBBLE_CLASS)\n .attr('fill', _chart.getColor)\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('opacity', function (d) {\n return (_chart.bubbleR(d) > 0) ? 1 : 0;\n });\n\n _chart.doUpdateLabels(bubbleG);\n _chart.doUpdateTitles(bubbleG);\n }\n\n function removeNodes (bubbleG) {\n bubbleG.exit().remove();\n }\n\n function bubbleX (d) {\n var x = _chart.x()(_chart.keyAccessor()(d));\n if (isNaN(x)) {\n x = 0;\n }\n return x;\n }\n\n function bubbleY (d) {\n var y = _chart.y()(_chart.valueAccessor()(d));\n if (isNaN(y)) {\n y = 0;\n }\n return y;\n }\n\n _chart.renderBrush = function () {\n // override default x axis brush from parent chart\n };\n\n _chart.redrawBrush = function () {\n // override default x axis brush from parent chart\n _chart.fadeDeselectedArea();\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Composite charts are a special kind of chart that render multiple charts on the same Coordinate\n * Grid. You can overlay (compose) different bar/line/area charts in a single composite chart to\n * achieve some quite flexible charting effects.\n * @class compositeChart\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a composite chart under #chart-container1 element using the default global chart group\n * var compositeChart1 = dc.compositeChart('#chart-container1');\n * // create a composite chart under #chart-container2 element using chart group A\n * var compositeChart2 = dc.compositeChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.compositeChart}\n */\ndc.compositeChart = function (parent, chartGroup) {\n\n var SUB_CHART_CLASS = 'sub';\n var DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING = 12;\n\n var _chart = dc.coordinateGridMixin({});\n var _children = [];\n\n var _childOptions = {};\n\n var _shareColors = false,\n _shareTitle = true,\n _alignYAxes = false;\n\n var _rightYAxis = d3.svg.axis(),\n _rightYAxisLabel = 0,\n _rightYAxisLabelPadding = DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING,\n _rightY,\n _rightAxisGridLines = false;\n\n _chart._mandatoryAttributes([]);\n _chart.transitionDuration(500);\n _chart.transitionDelay(0);\n\n dc.override(_chart, '_generateG', function () {\n var g = this.__generateG();\n\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n\n generateChildG(child, i);\n\n if (!child.dimension()) {\n child.dimension(_chart.dimension());\n }\n if (!child.group()) {\n child.group(_chart.group());\n }\n\n child.chartGroup(_chart.chartGroup());\n child.svg(_chart.svg());\n child.xUnits(_chart.xUnits());\n child.transitionDuration(_chart.transitionDuration(), _chart.transitionDelay());\n child.brushOn(_chart.brushOn());\n child.renderTitle(_chart.renderTitle());\n child.elasticX(_chart.elasticX());\n }\n\n return g;\n });\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n var brushIsEmpty = _chart.brushIsEmpty(extent);\n\n for (var i = 0; i < _children.length; ++i) {\n _children[i].replaceFilter(brushIsEmpty ? null : extent);\n }\n };\n\n _chart._prepareYAxis = function () {\n var left = (leftYAxisChildren().length !== 0);\n var right = (rightYAxisChildren().length !== 0);\n var ranges = calculateYAxisRanges(left, right);\n\n if (left) { prepareLeftYAxis(ranges); }\n if (right) { prepareRightYAxis(ranges); }\n\n if (leftYAxisChildren().length > 0 && !_rightAxisGridLines) {\n _chart._renderHorizontalGridLinesForAxis(_chart.g(), _chart.y(), _chart.yAxis());\n } else if (rightYAxisChildren().length > 0) {\n _chart._renderHorizontalGridLinesForAxis(_chart.g(), _rightY, _rightYAxis);\n }\n };\n\n _chart.renderYAxis = function () {\n if (leftYAxisChildren().length !== 0) {\n _chart.renderYAxisAt('y', _chart.yAxis(), _chart.margins().left);\n _chart.renderYAxisLabel('y', _chart.yAxisLabel(), -90);\n }\n\n if (rightYAxisChildren().length !== 0) {\n _chart.renderYAxisAt('yr', _chart.rightYAxis(), _chart.width() - _chart.margins().right);\n _chart.renderYAxisLabel('yr', _chart.rightYAxisLabel(), 90, _chart.width() - _rightYAxisLabelPadding);\n }\n };\n\n function calculateYAxisRanges (left, right) {\n var lyAxisMin, lyAxisMax, ryAxisMin, ryAxisMax;\n var ranges;\n\n if (left) {\n lyAxisMin = yAxisMin();\n lyAxisMax = yAxisMax();\n }\n\n if (right) {\n ryAxisMin = rightYAxisMin();\n ryAxisMax = rightYAxisMax();\n }\n\n if (_chart.alignYAxes() && left && right) {\n ranges = alignYAxisRanges(lyAxisMin, lyAxisMax, ryAxisMin, ryAxisMax);\n }\n\n return ranges || {\n lyAxisMin: lyAxisMin,\n lyAxisMax: lyAxisMax,\n ryAxisMin: ryAxisMin,\n ryAxisMax: ryAxisMax\n };\n }\n\n function alignYAxisRanges (lyAxisMin, lyAxisMax, ryAxisMin, ryAxisMax) {\n // since the two series will share a zero, each Y is just a multiple\n // of the other. and the ratio should be the ratio of the ranges of the\n // input data, so that they come out the same height. so we just min/max\n\n // note: both ranges already include zero due to the stack mixin (#667)\n // if #667 changes, we can reconsider whether we want data height or\n // height from zero to be equal. and it will be possible for the axes\n // to be aligned but not visible.\n var extentRatio = (ryAxisMax - ryAxisMin) / (lyAxisMax - lyAxisMin);\n\n return {\n lyAxisMin: Math.min(lyAxisMin, ryAxisMin / extentRatio),\n lyAxisMax: Math.max(lyAxisMax, ryAxisMax / extentRatio),\n ryAxisMin: Math.min(ryAxisMin, lyAxisMin * extentRatio),\n ryAxisMax: Math.max(ryAxisMax, lyAxisMax * extentRatio)\n };\n }\n\n function prepareRightYAxis (ranges) {\n var needDomain = _chart.rightY() === undefined || _chart.elasticY(),\n needRange = needDomain || _chart.resizing();\n if (_chart.rightY() === undefined) {\n _chart.rightY(d3.scale.linear());\n }\n if (needDomain) {\n _chart.rightY().domain([ranges.ryAxisMin, ranges.ryAxisMax]);\n }\n if (needRange) {\n _chart.rightY().rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _chart.rightY().range([_chart.yAxisHeight(), 0]);\n _chart.rightYAxis(_chart.rightYAxis().scale(_chart.rightY()));\n\n _chart.rightYAxis().orient('right');\n }\n\n function prepareLeftYAxis (ranges) {\n var needDomain = _chart.y() === undefined || _chart.elasticY(),\n needRange = needDomain || _chart.resizing();\n if (_chart.y() === undefined) {\n _chart.y(d3.scale.linear());\n }\n if (needDomain) {\n _chart.y().domain([ranges.lyAxisMin, ranges.lyAxisMax]);\n }\n if (needRange) {\n _chart.y().rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _chart.y().range([_chart.yAxisHeight(), 0]);\n _chart.yAxis(_chart.yAxis().scale(_chart.y()));\n\n _chart.yAxis().orient('left');\n }\n\n function generateChildG (child, i) {\n child._generateG(_chart.g());\n child.g().attr('class', SUB_CHART_CLASS + ' _' + i);\n }\n\n _chart.plotData = function () {\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n\n if (!child.g()) {\n generateChildG(child, i);\n }\n\n if (_shareColors) {\n child.colors(_chart.colors());\n }\n\n child.x(_chart.x());\n\n child.xAxis(_chart.xAxis());\n\n if (child.useRightYAxis()) {\n child.y(_chart.rightY());\n child.yAxis(_chart.rightYAxis());\n } else {\n child.y(_chart.y());\n child.yAxis(_chart.yAxis());\n }\n\n child.plotData();\n\n child._activateRenderlets();\n }\n };\n\n /**\n * Get or set whether to draw gridlines from the right y axis. Drawing from the left y axis is the\n * default behavior. This option is only respected when subcharts with both left and right y-axes\n * are present.\n * @method useRightAxisGridLines\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [useRightAxisGridLines=false]\n * @returns {Boolean|dc.compositeChart}\n */\n _chart.useRightAxisGridLines = function (useRightAxisGridLines) {\n if (!arguments) {\n return _rightAxisGridLines;\n }\n\n _rightAxisGridLines = useRightAxisGridLines;\n return _chart;\n };\n\n /**\n * Get or set chart-specific options for all child charts. This is equivalent to calling\n * {@link dc.baseMixin#options .options} on each child chart.\n * @method childOptions\n * @memberof dc.compositeChart\n * @instance\n * @param {Object} [childOptions]\n * @returns {Object|dc.compositeChart}\n */\n _chart.childOptions = function (childOptions) {\n if (!arguments.length) {\n return _childOptions;\n }\n _childOptions = childOptions;\n _children.forEach(function (child) {\n child.options(_childOptions);\n });\n return _chart;\n };\n\n _chart.fadeDeselectedArea = function () {\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n child.brush(_chart.brush());\n child.fadeDeselectedArea();\n }\n };\n\n /**\n * Set or get the right y axis label.\n * @method rightYAxisLabel\n * @memberof dc.compositeChart\n * @instance\n * @param {String} [rightYAxisLabel]\n * @param {Number} [padding]\n * @returns {String|dc.compositeChart}\n */\n _chart.rightYAxisLabel = function (rightYAxisLabel, padding) {\n if (!arguments.length) {\n return _rightYAxisLabel;\n }\n _rightYAxisLabel = rightYAxisLabel;\n _chart.margins().right -= _rightYAxisLabelPadding;\n _rightYAxisLabelPadding = (padding === undefined) ? DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING : padding;\n _chart.margins().right += _rightYAxisLabelPadding;\n return _chart;\n };\n\n /**\n * Combine the given charts into one single composite coordinate grid chart.\n * @method compose\n * @memberof dc.compositeChart\n * @instance\n * @example\n * moveChart.compose([\n * // when creating sub-chart you need to pass in the parent chart\n * dc.lineChart(moveChart)\n * .group(indexAvgByMonthGroup) // if group is missing then parent's group will be used\n * .valueAccessor(function (d){return d.value.avg;})\n * // most of the normal functions will continue to work in a composed chart\n * .renderArea(true)\n * .stack(monthlyMoveGroup, function (d){return d.value;})\n * .title(function (d){\n * var value = d.value.avg?d.value.avg:d.value;\n * if(isNaN(value)) value = 0;\n * return dateFormat(d.key) + '\\n' + numberFormat(value);\n * }),\n * dc.barChart(moveChart)\n * .group(volumeByMonthGroup)\n * .centerBar(true)\n * ]);\n * @param {Array<Chart>} [subChartArray]\n * @returns {dc.compositeChart}\n */\n _chart.compose = function (subChartArray) {\n _children = subChartArray;\n _children.forEach(function (child) {\n child.height(_chart.height());\n child.width(_chart.width());\n child.margins(_chart.margins());\n\n if (_shareTitle) {\n child.title(_chart.title());\n }\n\n child.options(_childOptions);\n });\n return _chart;\n };\n\n /**\n * Returns the child charts which are composed into the composite chart.\n * @method children\n * @memberof dc.compositeChart\n * @instance\n * @returns {Array<dc.baseMixin>}\n */\n _chart.children = function () {\n return _children;\n };\n\n /**\n * Get or set color sharing for the chart. If set, the {@link dc.colorMixin#colors .colors()} value from this chart\n * will be shared with composed children. Additionally if the child chart implements\n * Stackable and has not set a custom .colorAccessor, then it will generate a color\n * specific to its order in the composition.\n * @method shareColors\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [shareColors=false]\n * @returns {Boolean|dc.compositeChart}\n */\n _chart.shareColors = function (shareColors) {\n if (!arguments.length) {\n return _shareColors;\n }\n _shareColors = shareColors;\n return _chart;\n };\n\n /**\n * Get or set title sharing for the chart. If set, the {@link dc.baseMixin#title .title()} value from\n * this chart will be shared with composed children.\n * @method shareTitle\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [shareTitle=true]\n * @returns {Boolean|dc.compositeChart}\n */\n _chart.shareTitle = function (shareTitle) {\n if (!arguments.length) {\n return _shareTitle;\n }\n _shareTitle = shareTitle;\n return _chart;\n };\n\n /**\n * Get or set the y scale for the right axis. The right y scale is typically automatically\n * generated by the chart implementation.\n * @method rightY\n * @memberof dc.compositeChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Scales.md d3.scale}\n * @param {d3.scale} [yScale]\n * @returns {d3.scale|dc.compositeChart}\n */\n _chart.rightY = function (yScale) {\n if (!arguments.length) {\n return _rightY;\n }\n _rightY = yScale;\n _chart.rescale();\n return _chart;\n };\n\n /**\n * Get or set alignment between left and right y axes. A line connecting '0' on both y axis\n * will be parallel to x axis. This only has effect when {@link #dc.coordinateGridMixin+elasticY elasticY} is true.\n * @method alignYAxes\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [alignYAxes=false]\n * @returns {Chart}\n */\n _chart.alignYAxes = function (alignYAxes) {\n if (!arguments.length) {\n return _alignYAxes;\n }\n _alignYAxes = alignYAxes;\n _chart.rescale();\n return _chart;\n };\n\n function leftYAxisChildren () {\n return _children.filter(function (child) {\n return !child.useRightYAxis();\n });\n }\n\n function rightYAxisChildren () {\n return _children.filter(function (child) {\n return child.useRightYAxis();\n });\n }\n\n function getYAxisMin (charts) {\n return charts.map(function (c) {\n return c.yAxisMin();\n });\n }\n\n delete _chart.yAxisMin;\n function yAxisMin () {\n return d3.min(getYAxisMin(leftYAxisChildren()));\n }\n\n function rightYAxisMin () {\n return d3.min(getYAxisMin(rightYAxisChildren()));\n }\n\n function getYAxisMax (charts) {\n return charts.map(function (c) {\n return c.yAxisMax();\n });\n }\n\n delete _chart.yAxisMax;\n function yAxisMax () {\n return dc.utils.add(d3.max(getYAxisMax(leftYAxisChildren())), _chart.yAxisPadding());\n }\n\n function rightYAxisMax () {\n return dc.utils.add(d3.max(getYAxisMax(rightYAxisChildren())), _chart.yAxisPadding());\n }\n\n function getAllXAxisMinFromChildCharts () {\n return _children.map(function (c) {\n return c.xAxisMin();\n });\n }\n\n dc.override(_chart, 'xAxisMin', function () {\n return dc.utils.subtract(d3.min(getAllXAxisMinFromChildCharts()), _chart.xAxisPadding());\n });\n\n function getAllXAxisMaxFromChildCharts () {\n return _children.map(function (c) {\n return c.xAxisMax();\n });\n }\n\n dc.override(_chart, 'xAxisMax', function () {\n return dc.utils.add(d3.max(getAllXAxisMaxFromChildCharts()), _chart.xAxisPadding());\n });\n\n _chart.legendables = function () {\n return _children.reduce(function (items, child) {\n if (_shareColors) {\n child.colors(_chart.colors());\n }\n items.push.apply(items, child.legendables());\n return items;\n }, []);\n };\n\n _chart.legendHighlight = function (d) {\n for (var j = 0; j < _children.length; ++j) {\n var child = _children[j];\n child.legendHighlight(d);\n }\n };\n\n _chart.legendReset = function (d) {\n for (var j = 0; j < _children.length; ++j) {\n var child = _children[j];\n child.legendReset(d);\n }\n };\n\n _chart.legendToggle = function () {\n console.log('composite should not be getting legendToggle itself');\n };\n\n /**\n * Set or get the right y axis used by the composite chart. This function is most useful when y\n * axis customization is required. The y axis in dc.js is an instance of a [d3 axis\n * object](https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis) therefore it supports any valid\n * d3 axis manipulation.\n *\n * **Caution**: The y axis is usually generated internally by dc; resetting it may cause\n * unexpected results.\n * @method rightYAxis\n * @memberof dc.compositeChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3.svg.axis}\n * @example\n * // customize y axis tick format\n * chart.rightYAxis().tickFormat(function (v) {return v + '%';});\n * // customize y axis tick values\n * chart.rightYAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [rightYAxis]\n * @returns {d3.svg.axis|dc.compositeChart}\n */\n _chart.rightYAxis = function (rightYAxis) {\n if (!arguments.length) {\n return _rightYAxis;\n }\n _rightYAxis = rightYAxis;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A series chart is a chart that shows multiple series of data overlaid on one chart, where the\n * series is specified in the data. It is a specialization of Composite Chart and inherits all\n * composite features other than recomposing the chart.\n *\n * Examples:\n * - {@link http://dc-js.github.io/dc.js/examples/series.html Series Chart}\n * @class seriesChart\n * @memberof dc\n * @mixes dc.compositeChart\n * @example\n * // create a series chart under #chart-container1 element using the default global chart group\n * var seriesChart1 = dc.seriesChart(\"#chart-container1\");\n * // create a series chart under #chart-container2 element using chart group A\n * var seriesChart2 = dc.seriesChart(\"#chart-container2\", \"chartGroupA\");\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.seriesChart}\n */\ndc.seriesChart = function (parent, chartGroup) {\n var _chart = dc.compositeChart(parent, chartGroup);\n\n function keySort (a, b) {\n return d3.ascending(_chart.keyAccessor()(a), _chart.keyAccessor()(b));\n }\n\n var _charts = {};\n var _chartFunction = dc.lineChart;\n var _seriesAccessor;\n var _seriesSort = d3.ascending;\n var _valueSort = keySort;\n\n _chart._mandatoryAttributes().push('seriesAccessor', 'chart');\n _chart.shareColors(true);\n\n _chart._preprocessData = function () {\n var keep = [];\n var childrenChanged;\n var nester = d3.nest().key(_seriesAccessor);\n if (_seriesSort) {\n nester.sortKeys(_seriesSort);\n }\n if (_valueSort) {\n nester.sortValues(_valueSort);\n }\n var nesting = nester.entries(_chart.data());\n var children =\n nesting.map(function (sub, i) {\n var subChart = _charts[sub.key] || _chartFunction.call(_chart, _chart, chartGroup, sub.key, i);\n if (!_charts[sub.key]) {\n childrenChanged = true;\n }\n _charts[sub.key] = subChart;\n keep.push(sub.key);\n return subChart\n .dimension(_chart.dimension())\n .group({all: d3.functor(sub.values)}, sub.key)\n .keyAccessor(_chart.keyAccessor())\n .valueAccessor(_chart.valueAccessor())\n .brushOn(_chart.brushOn());\n });\n // this works around the fact compositeChart doesn't really\n // have a removal interface\n Object.keys(_charts)\n .filter(function (c) {return keep.indexOf(c) === -1;})\n .forEach(function (c) {\n clearChart(c);\n childrenChanged = true;\n });\n _chart._compose(children);\n if (childrenChanged && _chart.legend()) {\n _chart.legend().render();\n }\n };\n\n function clearChart (c) {\n if (_charts[c].g()) {\n _charts[c].g().remove();\n }\n delete _charts[c];\n }\n\n function resetChildren () {\n Object.keys(_charts).map(clearChart);\n _charts = {};\n }\n\n /**\n * Get or set the chart function, which generates the child charts.\n * @method chart\n * @memberof dc.seriesChart\n * @instance\n * @example\n * // put interpolation on the line charts used for the series\n * chart.chart(function(c) { return dc.lineChart(c).interpolate('basis'); })\n * // do a scatter series chart\n * chart.chart(dc.scatterPlot)\n * @param {Function} [chartFunction=dc.lineChart]\n * @returns {Function|dc.seriesChart}\n */\n _chart.chart = function (chartFunction) {\n if (!arguments.length) {\n return _chartFunction;\n }\n _chartFunction = chartFunction;\n resetChildren();\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Get or set accessor function for the displayed series. Given a datum, this function\n * should return the series that datum belongs to.\n * @method seriesAccessor\n * @memberof dc.seriesChart\n * @instance\n * @example\n * // simple series accessor\n * chart.seriesAccessor(function(d) { return \"Expt: \" + d.key[0]; })\n * @param {Function} [accessor]\n * @returns {Function|dc.seriesChart}\n */\n _chart.seriesAccessor = function (accessor) {\n if (!arguments.length) {\n return _seriesAccessor;\n }\n _seriesAccessor = accessor;\n resetChildren();\n return _chart;\n };\n\n /**\n * Get or set a function to sort the list of series by, given series values.\n * @method seriesSort\n * @memberof dc.seriesChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_ascending d3.ascending}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_descending d3.descending}\n * @example\n * chart.seriesSort(d3.descending);\n * @param {Function} [sortFunction=d3.ascending]\n * @returns {Function|dc.seriesChart}\n */\n _chart.seriesSort = function (sortFunction) {\n if (!arguments.length) {\n return _seriesSort;\n }\n _seriesSort = sortFunction;\n resetChildren();\n return _chart;\n };\n\n /**\n * Get or set a function to sort each series values by. By default this is the key accessor which,\n * for example, will ensure a lineChart series connects its points in increasing key/x order,\n * rather than haphazardly.\n * @method valueSort\n * @memberof dc.seriesChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_ascending d3.ascending}\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Arrays.md#d3_descending d3.descending}\n * @example\n * // Default value sort\n * _chart.valueSort(function keySort (a, b) {\n * return d3.ascending(_chart.keyAccessor()(a), _chart.keyAccessor()(b));\n * });\n * @param {Function} [sortFunction]\n * @returns {Function|dc.seriesChart}\n */\n _chart.valueSort = function (sortFunction) {\n if (!arguments.length) {\n return _valueSort;\n }\n _valueSort = sortFunction;\n resetChildren();\n return _chart;\n };\n\n // make compose private\n _chart._compose = _chart.compose;\n delete _chart.compose;\n\n return _chart;\n};\n","/**\n * The geo choropleth chart is designed as an easy way to create a crossfilter driven choropleth map\n * from GeoJson data. This chart implementation was inspired by\n * {@link http://bl.ocks.org/4060606 the great d3 choropleth example}.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/vc/index.html US Venture Capital Landscape 2011}\n * @class geoChoroplethChart\n * @memberof dc\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a choropleth chart under '#us-chart' element using the default global chart group\n * var chart1 = dc.geoChoroplethChart('#us-chart');\n * // create a choropleth chart under '#us-chart2' element using chart group A\n * var chart2 = dc.compositeChart('#us-chart2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.geoChoroplethChart}\n */\ndc.geoChoroplethChart = function (parent, chartGroup) {\n var _chart = dc.colorMixin(dc.baseMixin({}));\n\n _chart.colorAccessor(function (d) {\n return d || 0;\n });\n\n var _geoPath = d3.geo.path();\n var _projectionFlag;\n\n var _geoJsons = [];\n\n _chart._doRender = function () {\n _chart.resetSvg();\n for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) {\n var states = _chart.svg().append('g')\n .attr('class', 'layer' + layerIndex);\n\n var regionG = states.selectAll('g.' + geoJson(layerIndex).name)\n .data(geoJson(layerIndex).data)\n .enter()\n .append('g')\n .attr('class', geoJson(layerIndex).name);\n\n regionG\n .append('path')\n .attr('fill', 'white')\n .attr('d', _geoPath);\n\n regionG.append('title');\n\n plotData(layerIndex);\n }\n _projectionFlag = false;\n };\n\n function plotData (layerIndex) {\n var data = generateLayeredData();\n\n if (isDataLayer(layerIndex)) {\n var regionG = renderRegionG(layerIndex);\n\n renderPaths(regionG, layerIndex, data);\n\n renderTitle(regionG, layerIndex, data);\n }\n }\n\n function generateLayeredData () {\n var data = {};\n var groupAll = _chart.data();\n for (var i = 0; i < groupAll.length; ++i) {\n data[_chart.keyAccessor()(groupAll[i])] = _chart.valueAccessor()(groupAll[i]);\n }\n return data;\n }\n\n function isDataLayer (layerIndex) {\n return geoJson(layerIndex).keyAccessor;\n }\n\n function renderRegionG (layerIndex) {\n var regionG = _chart.svg()\n .selectAll(layerSelector(layerIndex))\n .classed('selected', function (d) {\n return isSelected(layerIndex, d);\n })\n .classed('deselected', function (d) {\n return isDeselected(layerIndex, d);\n })\n .attr('class', function (d) {\n var layerNameClass = geoJson(layerIndex).name;\n var regionClass = dc.utils.nameToId(geoJson(layerIndex).keyAccessor(d));\n var baseClasses = layerNameClass + ' ' + regionClass;\n if (isSelected(layerIndex, d)) {\n baseClasses += ' selected';\n }\n if (isDeselected(layerIndex, d)) {\n baseClasses += ' deselected';\n }\n return baseClasses;\n });\n return regionG;\n }\n\n function layerSelector (layerIndex) {\n return 'g.layer' + layerIndex + ' g.' + geoJson(layerIndex).name;\n }\n\n function isSelected (layerIndex, d) {\n return _chart.hasFilter() && _chart.hasFilter(getKey(layerIndex, d));\n }\n\n function isDeselected (layerIndex, d) {\n return _chart.hasFilter() && !_chart.hasFilter(getKey(layerIndex, d));\n }\n\n function getKey (layerIndex, d) {\n return geoJson(layerIndex).keyAccessor(d);\n }\n\n function geoJson (index) {\n return _geoJsons[index];\n }\n\n function renderPaths (regionG, layerIndex, data) {\n var paths = regionG\n .select('path')\n .attr('fill', function () {\n var currentFill = d3.select(this).attr('fill');\n if (currentFill) {\n return currentFill;\n }\n return 'none';\n })\n .on('click', function (d) {\n return _chart.onClick(d, layerIndex);\n });\n\n dc.transition(paths, _chart.transitionDuration(), _chart.transitionDelay()).attr('fill', function (d, i) {\n return _chart.getColor(data[geoJson(layerIndex).keyAccessor(d)], i);\n });\n }\n\n _chart.onClick = function (d, layerIndex) {\n var selectedRegion = geoJson(layerIndex).keyAccessor(d);\n dc.events.trigger(function () {\n _chart.filter(selectedRegion);\n _chart.redrawGroup();\n });\n };\n\n function renderTitle (regionG, layerIndex, data) {\n if (_chart.renderTitle()) {\n regionG.selectAll('title').text(function (d) {\n var key = getKey(layerIndex, d);\n var value = data[key];\n return _chart.title()({key: key, value: value});\n });\n }\n }\n\n _chart._doRedraw = function () {\n for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) {\n plotData(layerIndex);\n if (_projectionFlag) {\n _chart.svg().selectAll('g.' + geoJson(layerIndex).name + ' path').attr('d', _geoPath);\n }\n }\n _projectionFlag = false;\n };\n\n /**\n * **mandatory**\n *\n * Use this function to insert a new GeoJson map layer. This function can be invoked multiple times\n * if you have multiple GeoJson data layers to render on top of each other. If you overlay multiple\n * layers with the same name the new overlay will override the existing one.\n * @method overlayGeoJson\n * @memberof dc.geoChoroplethChart\n * @instance\n * @see {@link http://geojson.org/ GeoJSON}\n * @see {@link https://github.com/topojson/topojson/wiki TopoJSON}\n * @see {@link https://github.com/topojson/topojson-1.x-api-reference/blob/master/API-Reference.md#wiki-feature topojson.feature}\n * @example\n * // insert a layer for rendering US states\n * chart.overlayGeoJson(statesJson.features, 'state', function(d) {\n * return d.properties.name;\n * });\n * @param {geoJson} json - a geojson feed\n * @param {String} name - name of the layer\n * @param {Function} keyAccessor - accessor function used to extract 'key' from the GeoJson data. The key extracted by\n * this function should match the keys returned by the crossfilter groups.\n * @returns {dc.geoChoroplethChart}\n */\n _chart.overlayGeoJson = function (json, name, keyAccessor) {\n for (var i = 0; i < _geoJsons.length; ++i) {\n if (_geoJsons[i].name === name) {\n _geoJsons[i].data = json;\n _geoJsons[i].keyAccessor = keyAccessor;\n return _chart;\n }\n }\n _geoJsons.push({name: name, data: json, keyAccessor: keyAccessor});\n return _chart;\n };\n\n /**\n * Set custom geo projection function. See the available\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Projections.md d3 geo projection functions}.\n * @method projection\n * @memberof dc.geoChoroplethChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Projections.md d3.geo.projection}\n * @see {@link https://github.com/d3/d3-geo-projection Extended d3.geo.projection}\n * @param {d3.projection} [projection=d3.geo.albersUsa()]\n * @returns {dc.geoChoroplethChart}\n */\n _chart.projection = function (projection) {\n _geoPath.projection(projection);\n _projectionFlag = true;\n return _chart;\n };\n\n /**\n * Returns all GeoJson layers currently registered with this chart. The returned array is a\n * reference to this chart's internal data structure, so any modification to this array will also\n * modify this chart's internal registration.\n * @method geoJsons\n * @memberof dc.geoChoroplethChart\n * @instance\n * @returns {Array<{name:String, data: Object, accessor: Function}>}\n */\n _chart.geoJsons = function () {\n return _geoJsons;\n };\n\n /**\n * Returns the {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Paths.md#path d3.geo.path} object used to\n * render the projection and features. Can be useful for figuring out the bounding box of the\n * feature set and thus a way to calculate scale and translation for the projection.\n * @method geoPath\n * @memberof dc.geoChoroplethChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Paths.md#path d3.geo.path}\n * @returns {d3.geo.path}\n */\n _chart.geoPath = function () {\n return _geoPath;\n };\n\n /**\n * Remove a GeoJson layer from this chart by name\n * @method removeGeoJson\n * @memberof dc.geoChoroplethChart\n * @instance\n * @param {String} name\n * @returns {dc.geoChoroplethChart}\n */\n _chart.removeGeoJson = function (name) {\n var geoJsons = [];\n\n for (var i = 0; i < _geoJsons.length; ++i) {\n var layer = _geoJsons[i];\n if (layer.name !== name) {\n geoJsons.push(layer);\n }\n }\n\n _geoJsons = geoJsons;\n\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The bubble overlay chart is quite different from the typical bubble chart. With the bubble overlay\n * chart you can arbitrarily place bubbles on an existing svg or bitmap image, thus changing the\n * typical x and y positioning while retaining the capability to visualize data using bubble radius\n * and coloring.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/crime/index.html Canadian City Crime Stats}\n * @class bubbleOverlay\n * @memberof dc\n * @mixes dc.bubbleMixin\n * @mixes dc.baseMixin\n * @example\n * // create a bubble overlay chart on top of the '#chart-container1 svg' element using the default global chart group\n * var bubbleChart1 = dc.bubbleOverlayChart('#chart-container1').svg(d3.select('#chart-container1 svg'));\n * // create a bubble overlay chart on top of the '#chart-container2 svg' element using chart group A\n * var bubbleChart2 = dc.compositeChart('#chart-container2', 'chartGroupA').svg(d3.select('#chart-container2 svg'));\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.bubbleOverlay}\n */\ndc.bubbleOverlay = function (parent, chartGroup) {\n var BUBBLE_OVERLAY_CLASS = 'bubble-overlay';\n var BUBBLE_NODE_CLASS = 'node';\n var BUBBLE_CLASS = 'bubble';\n\n /**\n * **mandatory**\n *\n * Set the underlying svg image element. Unlike other dc charts this chart will not generate a svg\n * element; therefore the bubble overlay chart will not work if this function is not invoked. If the\n * underlying image is a bitmap, then an empty svg will need to be created on top of the image.\n * @method svg\n * @memberof dc.bubbleOverlay\n * @instance\n * @example\n * // set up underlying svg element\n * chart.svg(d3.select('#chart svg'));\n * @param {SVGElement|d3.selection} [imageElement]\n * @returns {dc.bubbleOverlay}\n */\n var _chart = dc.bubbleMixin(dc.baseMixin({}));\n var _g;\n var _points = [];\n\n _chart.transitionDuration(750);\n\n _chart.transitionDelay(0);\n\n _chart.radiusValueAccessor(function (d) {\n return d.value;\n });\n\n /**\n * **mandatory**\n *\n * Set up a data point on the overlay. The name of a data point should match a specific 'key' among\n * data groups generated using keyAccessor. If a match is found (point name <-> data group key)\n * then a bubble will be generated at the position specified by the function. x and y\n * value specified here are relative to the underlying svg.\n * @method point\n * @memberof dc.bubbleOverlay\n * @instance\n * @param {String} name\n * @param {Number} x\n * @param {Number} y\n * @returns {dc.bubbleOverlay}\n */\n _chart.point = function (name, x, y) {\n _points.push({name: name, x: x, y: y});\n return _chart;\n };\n\n _chart._doRender = function () {\n _g = initOverlayG();\n\n _chart.r().range([_chart.MIN_RADIUS, _chart.width() * _chart.maxBubbleRelativeSize()]);\n\n initializeBubbles();\n\n _chart.fadeDeselectedArea();\n\n return _chart;\n };\n\n function initOverlayG () {\n _g = _chart.select('g.' + BUBBLE_OVERLAY_CLASS);\n if (_g.empty()) {\n _g = _chart.svg().append('g').attr('class', BUBBLE_OVERLAY_CLASS);\n }\n return _g;\n }\n\n function initializeBubbles () {\n var data = mapData();\n _chart.calculateRadiusDomain();\n\n _points.forEach(function (point) {\n var nodeG = getNodeG(point, data);\n\n var circle = nodeG.select('circle.' + BUBBLE_CLASS);\n\n if (circle.empty()) {\n circle = nodeG.append('circle')\n .attr('class', BUBBLE_CLASS)\n .attr('r', 0)\n .attr('fill', _chart.getColor)\n .on('click', _chart.onClick);\n }\n\n dc.transition(circle, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n });\n\n _chart._doRenderLabel(nodeG);\n\n _chart._doRenderTitles(nodeG);\n });\n }\n\n function mapData () {\n var data = {};\n _chart.data().forEach(function (datum) {\n data[_chart.keyAccessor()(datum)] = datum;\n });\n return data;\n }\n\n function getNodeG (point, data) {\n var bubbleNodeClass = BUBBLE_NODE_CLASS + ' ' + dc.utils.nameToId(point.name);\n\n var nodeG = _g.select('g.' + dc.utils.nameToId(point.name));\n\n if (nodeG.empty()) {\n nodeG = _g.append('g')\n .attr('class', bubbleNodeClass)\n .attr('transform', 'translate(' + point.x + ',' + point.y + ')');\n }\n\n nodeG.datum(data[point.name]);\n\n return nodeG;\n }\n\n _chart._doRedraw = function () {\n updateBubbles();\n\n _chart.fadeDeselectedArea();\n\n return _chart;\n };\n\n function updateBubbles () {\n var data = mapData();\n _chart.calculateRadiusDomain();\n\n _points.forEach(function (point) {\n var nodeG = getNodeG(point, data);\n\n var circle = nodeG.select('circle.' + BUBBLE_CLASS);\n\n dc.transition(circle, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('fill', _chart.getColor);\n\n _chart.doUpdateLabels(nodeG);\n\n _chart.doUpdateTitles(nodeG);\n });\n }\n\n _chart.debug = function (flag) {\n if (flag) {\n var debugG = _chart.select('g.' + dc.constants.DEBUG_GROUP_CLASS);\n\n if (debugG.empty()) {\n debugG = _chart.svg()\n .append('g')\n .attr('class', dc.constants.DEBUG_GROUP_CLASS);\n }\n\n var debugText = debugG.append('text')\n .attr('x', 10)\n .attr('y', 20);\n\n debugG\n .append('rect')\n .attr('width', _chart.width())\n .attr('height', _chart.height())\n .on('mousemove', function () {\n var position = d3.mouse(debugG.node());\n var msg = position[0] + ', ' + position[1];\n debugText.text(msg);\n });\n } else {\n _chart.selectAll('.debug').remove();\n }\n\n return _chart;\n };\n\n _chart.anchor(parent, chartGroup);\n\n return _chart;\n};\n","/**\n * Concrete row chart implementation.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * @class rowChart\n * @memberof dc\n * @mixes dc.capMixin\n * @mixes dc.marginMixin\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a row chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.rowChart('#chart-container1');\n * // create a row chart under #chart-container2 element using chart group A\n * var chart2 = dc.rowChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.rowChart}\n */\ndc.rowChart = function (parent, chartGroup) {\n\n var _g;\n\n var _labelOffsetX = 10;\n var _labelOffsetY = 15;\n var _hasLabelOffsetY = false;\n var _dyOffset = '0.35em'; // this helps center labels https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#svg_text\n var _titleLabelOffsetX = 2;\n\n var _gap = 5;\n\n var _fixedBarHeight = false;\n var _rowCssClass = 'row';\n var _titleRowCssClass = 'titlerow';\n var _renderTitleLabel = false;\n\n var _chart = dc.capMixin(dc.marginMixin(dc.colorMixin(dc.baseMixin({}))));\n\n var _x;\n\n var _elasticX;\n\n var _xAxis = d3.svg.axis().orient('bottom');\n\n var _rowData;\n\n _chart.rowsCap = _chart.cap;\n\n function calculateAxisScale () {\n if (!_x || _elasticX) {\n var extent = d3.extent(_rowData, _chart.cappedValueAccessor);\n if (extent[0] > 0) {\n extent[0] = 0;\n }\n if (extent[1] < 0) {\n extent[1] = 0;\n }\n _x = d3.scale.linear().domain(extent)\n .range([0, _chart.effectiveWidth()]);\n }\n _xAxis.scale(_x);\n }\n\n function drawAxis () {\n var axisG = _g.select('g.axis');\n\n calculateAxisScale();\n\n if (axisG.empty()) {\n axisG = _g.append('g').attr('class', 'axis');\n }\n axisG.attr('transform', 'translate(0, ' + _chart.effectiveHeight() + ')');\n\n dc.transition(axisG, _chart.transitionDuration(), _chart.transitionDelay())\n .call(_xAxis);\n }\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _g = _chart.svg()\n .append('g')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n\n drawChart();\n\n return _chart;\n };\n\n _chart.title(function (d) {\n return _chart.cappedKeyAccessor(d) + ': ' + _chart.cappedValueAccessor(d);\n });\n\n _chart.label(_chart.cappedKeyAccessor);\n\n /**\n * Gets or sets the x scale. The x scale can be any d3\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md quantitive scale}.\n * @method x\n * @memberof dc.rowChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Quantitative-Scales.md quantitive scale}\n * @param {d3.scale} [scale]\n * @returns {d3.scale|dc.rowChart}\n */\n _chart.x = function (scale) {\n if (!arguments.length) {\n return _x;\n }\n _x = scale;\n return _chart;\n };\n\n function drawGridLines () {\n _g.selectAll('g.tick')\n .select('line.grid-line')\n .remove();\n\n _g.selectAll('g.tick')\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', 0)\n .attr('y2', function () {\n return -_chart.effectiveHeight();\n });\n }\n\n function drawChart () {\n _rowData = _chart.data();\n\n drawAxis();\n drawGridLines();\n\n var rows = _g.selectAll('g.' + _rowCssClass)\n .data(_rowData);\n\n createElements(rows);\n removeElements(rows);\n updateElements(rows);\n }\n\n function createElements (rows) {\n var rowEnter = rows.enter()\n .append('g')\n .attr('class', function (d, i) {\n return _rowCssClass + ' _' + i;\n });\n\n rowEnter.append('rect').attr('width', 0);\n\n createLabels(rowEnter);\n }\n\n function removeElements (rows) {\n rows.exit().remove();\n }\n\n function rootValue () {\n var root = _x(0);\n return (root === -Infinity || root !== root) ? _x(1) : root;\n }\n\n function updateElements (rows) {\n var n = _rowData.length;\n\n var height;\n if (!_fixedBarHeight) {\n height = (_chart.effectiveHeight() - (n + 1) * _gap) / n;\n } else {\n height = _fixedBarHeight;\n }\n\n // vertically align label in center unless they override the value via property setter\n if (!_hasLabelOffsetY) {\n _labelOffsetY = height / 2;\n }\n\n var rect = rows.attr('transform', function (d, i) {\n return 'translate(0,' + ((i + 1) * _gap + i * height) + ')';\n }).select('rect')\n .attr('height', height)\n .attr('fill', _chart.getColor)\n .on('click', onClick)\n .classed('deselected', function (d) {\n return (_chart.hasFilter()) ? !isSelectedRow(d) : false;\n })\n .classed('selected', function (d) {\n return (_chart.hasFilter()) ? isSelectedRow(d) : false;\n });\n\n dc.transition(rect, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('width', function (d) {\n return Math.abs(rootValue() - _x(_chart.valueAccessor()(d)));\n })\n .attr('transform', translateX);\n\n createTitles(rows);\n updateLabels(rows);\n }\n\n function createTitles (rows) {\n if (_chart.renderTitle()) {\n rows.select('title').remove();\n rows.append('title').text(_chart.title());\n }\n }\n\n function createLabels (rowEnter) {\n if (_chart.renderLabel()) {\n rowEnter.append('text')\n .on('click', onClick);\n }\n if (_chart.renderTitleLabel()) {\n rowEnter.append('text')\n .attr('class', _titleRowCssClass)\n .on('click', onClick);\n }\n }\n\n function updateLabels (rows) {\n if (_chart.renderLabel()) {\n var lab = rows.select('text')\n .attr('x', _labelOffsetX)\n .attr('y', _labelOffsetY)\n .attr('dy', _dyOffset)\n .on('click', onClick)\n .attr('class', function (d, i) {\n return _rowCssClass + ' _' + i;\n })\n .text(function (d) {\n return _chart.label()(d);\n });\n dc.transition(lab, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', translateX);\n }\n if (_chart.renderTitleLabel()) {\n var titlelab = rows.select('.' + _titleRowCssClass)\n .attr('x', _chart.effectiveWidth() - _titleLabelOffsetX)\n .attr('y', _labelOffsetY)\n .attr('dy', _dyOffset)\n .attr('text-anchor', 'end')\n .on('click', onClick)\n .attr('class', function (d, i) {\n return _titleRowCssClass + ' _' + i ;\n })\n .text(function (d) {\n return _chart.title()(d);\n });\n dc.transition(titlelab, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', translateX);\n }\n }\n\n /**\n * Turn on/off Title label rendering (values) using SVG style of text-anchor 'end'.\n * @method renderTitleLabel\n * @memberof dc.rowChart\n * @instance\n * @param {Boolean} [renderTitleLabel=false]\n * @returns {Boolean|dc.rowChart}\n */\n _chart.renderTitleLabel = function (renderTitleLabel) {\n if (!arguments.length) {\n return _renderTitleLabel;\n }\n _renderTitleLabel = renderTitleLabel;\n return _chart;\n };\n\n function onClick (d) {\n _chart.onClick(d);\n }\n\n function translateX (d) {\n var x = _x(_chart.cappedValueAccessor(d)),\n x0 = rootValue(),\n s = x > x0 ? x0 : x;\n return 'translate(' + s + ',0)';\n }\n\n _chart._doRedraw = function () {\n drawChart();\n return _chart;\n };\n\n /**\n * Get the x axis for the row chart instance. Note: not settable for row charts.\n * See the {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3 axis object}\n * documention for more information.\n * @method xAxis\n * @memberof dc.rowChart\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Axes.md#axis d3.svg.axis}\n * @example\n * // customize x axis tick format\n * chart.xAxis().tickFormat(function (v) {return v + '%';});\n * // customize x axis tick values\n * chart.xAxis().tickValues([0, 100, 200, 300]);\n * @returns {d3.svg.axis}\n */\n _chart.xAxis = function () {\n return _xAxis;\n };\n\n /**\n * Get or set the fixed bar height. Default is [false] which will auto-scale bars.\n * For example, if you want to fix the height for a specific number of bars (useful in TopN charts)\n * you could fix height as follows (where count = total number of bars in your TopN and gap is\n * your vertical gap space).\n * @method fixedBarHeight\n * @memberof dc.rowChart\n * @instance\n * @example\n * chart.fixedBarHeight( chartheight - (count + 1) * gap / count);\n * @param {Boolean|Number} [fixedBarHeight=false]\n * @returns {Boolean|Number|dc.rowChart}\n */\n _chart.fixedBarHeight = function (fixedBarHeight) {\n if (!arguments.length) {\n return _fixedBarHeight;\n }\n _fixedBarHeight = fixedBarHeight;\n return _chart;\n };\n\n /**\n * Get or set the vertical gap space between rows on a particular row chart instance.\n * @method gap\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [gap=5]\n * @returns {Number|dc.rowChart}\n */\n _chart.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _chart;\n };\n\n /**\n * Get or set the elasticity on x axis. If this attribute is set to true, then the x axis will rescle to auto-fit the\n * data range when filtered.\n * @method elasticX\n * @memberof dc.rowChart\n * @instance\n * @param {Boolean} [elasticX]\n * @returns {Boolean|dc.rowChart}\n */\n _chart.elasticX = function (elasticX) {\n if (!arguments.length) {\n return _elasticX;\n }\n _elasticX = elasticX;\n return _chart;\n };\n\n /**\n * Get or set the x offset (horizontal space to the top left corner of a row) for labels on a particular row chart.\n * @method labelOffsetX\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [labelOffsetX=10]\n * @returns {Number|dc.rowChart}\n */\n _chart.labelOffsetX = function (labelOffsetX) {\n if (!arguments.length) {\n return _labelOffsetX;\n }\n _labelOffsetX = labelOffsetX;\n return _chart;\n };\n\n /**\n * Get or set the y offset (vertical space to the top left corner of a row) for labels on a particular row chart.\n * @method labelOffsetY\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [labelOffsety=15]\n * @returns {Number|dc.rowChart}\n */\n _chart.labelOffsetY = function (labelOffsety) {\n if (!arguments.length) {\n return _labelOffsetY;\n }\n _labelOffsetY = labelOffsety;\n _hasLabelOffsetY = true;\n return _chart;\n };\n\n /**\n * Get of set the x offset (horizontal space between right edge of row and right edge or text.\n * @method titleLabelOffsetX\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [titleLabelOffsetX=2]\n * @returns {Number|dc.rowChart}\n */\n _chart.titleLabelOffsetX = function (titleLabelOffsetX) {\n if (!arguments.length) {\n return _titleLabelOffsetX;\n }\n _titleLabelOffsetX = titleLabelOffsetX;\n return _chart;\n };\n\n function isSelectedRow (d) {\n return _chart.hasFilter(_chart.cappedKeyAccessor(d));\n }\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Legend is a attachable widget that can be added to other dc charts to render horizontal legend\n * labels.\n *\n * Examples:\n * - {@link http://dc-js.github.com/dc.js/ Nasdaq 100 Index}\n * - {@link http://dc-js.github.com/dc.js/crime/index.html Canadian City Crime Stats}\n * @class legend\n * @memberof dc\n * @example\n * chart.legend(dc.legend().x(400).y(10).itemHeight(13).gap(5))\n * @returns {dc.legend}\n */\ndc.legend = function () {\n var LABEL_GAP = 2;\n\n var _legend = {},\n _parent,\n _x = 0,\n _y = 0,\n _itemHeight = 12,\n _gap = 5,\n _horizontal = false,\n _legendWidth = 560,\n _itemWidth = 70,\n _autoItemWidth = false,\n _legendText = dc.pluck('name'),\n _maxItems;\n\n var _g;\n\n _legend.parent = function (p) {\n if (!arguments.length) {\n return _parent;\n }\n _parent = p;\n return _legend;\n };\n\n _legend.render = function () {\n _parent.svg().select('g.dc-legend').remove();\n _g = _parent.svg().append('g')\n .attr('class', 'dc-legend')\n .attr('transform', 'translate(' + _x + ',' + _y + ')');\n var legendables = _parent.legendables();\n\n if (_maxItems !== undefined) {\n legendables = legendables.slice(0, _maxItems);\n }\n\n var itemEnter = _g.selectAll('g.dc-legend-item')\n .data(legendables)\n .enter()\n .append('g')\n .attr('class', 'dc-legend-item')\n .on('mouseover', function (d) {\n _parent.legendHighlight(d);\n })\n .on('mouseout', function (d) {\n _parent.legendReset(d);\n })\n .on('click', function (d) {\n d.chart.legendToggle(d);\n });\n\n _g.selectAll('g.dc-legend-item')\n .classed('fadeout', function (d) {\n return d.chart.isLegendableHidden(d);\n });\n\n if (legendables.some(dc.pluck('dashstyle'))) {\n itemEnter\n .append('line')\n .attr('x1', 0)\n .attr('y1', _itemHeight / 2)\n .attr('x2', _itemHeight)\n .attr('y2', _itemHeight / 2)\n .attr('stroke-width', 2)\n .attr('stroke-dasharray', dc.pluck('dashstyle'))\n .attr('stroke', dc.pluck('color'));\n } else {\n itemEnter\n .append('rect')\n .attr('width', _itemHeight)\n .attr('height', _itemHeight)\n .attr('fill', function (d) {return d ? d.color : 'blue';});\n }\n\n itemEnter.append('text')\n .text(_legendText)\n .attr('x', _itemHeight + LABEL_GAP)\n .attr('y', function () {\n return _itemHeight / 2 + (this.clientHeight ? this.clientHeight : 13) / 2 - 2;\n });\n\n var _cumulativeLegendTextWidth = 0;\n var row = 0;\n itemEnter.attr('transform', function (d, i) {\n if (_horizontal) {\n var itemWidth = _autoItemWidth === true ? this.getBBox().width + _gap : _itemWidth;\n if ((_cumulativeLegendTextWidth + itemWidth) > _legendWidth && _cumulativeLegendTextWidth > 0) {\n ++row;\n _cumulativeLegendTextWidth = 0;\n }\n var translateBy = 'translate(' + _cumulativeLegendTextWidth + ',' + row * legendItemHeight() + ')';\n _cumulativeLegendTextWidth += itemWidth;\n return translateBy;\n } else {\n return 'translate(0,' + i * legendItemHeight() + ')';\n }\n });\n };\n\n function legendItemHeight () {\n return _gap + _itemHeight;\n }\n\n /**\n * Set or get x coordinate for legend widget.\n * @method x\n * @memberof dc.legend\n * @instance\n * @param {Number} [x=0]\n * @returns {Number|dc.legend}\n */\n _legend.x = function (x) {\n if (!arguments.length) {\n return _x;\n }\n _x = x;\n return _legend;\n };\n\n /**\n * Set or get y coordinate for legend widget.\n * @method y\n * @memberof dc.legend\n * @instance\n * @param {Number} [y=0]\n * @returns {Number|dc.legend}\n */\n _legend.y = function (y) {\n if (!arguments.length) {\n return _y;\n }\n _y = y;\n return _legend;\n };\n\n /**\n * Set or get gap between legend items.\n * @method gap\n * @memberof dc.legend\n * @instance\n * @param {Number} [gap=5]\n * @returns {Number|dc.legend}\n */\n _legend.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _legend;\n };\n\n /**\n * Set or get legend item height.\n * @method itemHeight\n * @memberof dc.legend\n * @instance\n * @param {Number} [itemHeight=12]\n * @returns {Number|dc.legend}\n */\n _legend.itemHeight = function (itemHeight) {\n if (!arguments.length) {\n return _itemHeight;\n }\n _itemHeight = itemHeight;\n return _legend;\n };\n\n /**\n * Position legend horizontally instead of vertically.\n * @method horizontal\n * @memberof dc.legend\n * @instance\n * @param {Boolean} [horizontal=false]\n * @returns {Boolean|dc.legend}\n */\n _legend.horizontal = function (horizontal) {\n if (!arguments.length) {\n return _horizontal;\n }\n _horizontal = horizontal;\n return _legend;\n };\n\n /**\n * Maximum width for horizontal legend.\n * @method legendWidth\n * @memberof dc.legend\n * @instance\n * @param {Number} [legendWidth=500]\n * @returns {Number|dc.legend}\n */\n _legend.legendWidth = function (legendWidth) {\n if (!arguments.length) {\n return _legendWidth;\n }\n _legendWidth = legendWidth;\n return _legend;\n };\n\n /**\n * Legend item width for horizontal legend.\n * @method itemWidth\n * @memberof dc.legend\n * @instance\n * @param {Number} [itemWidth=70]\n * @returns {Number|dc.legend}\n */\n _legend.itemWidth = function (itemWidth) {\n if (!arguments.length) {\n return _itemWidth;\n }\n _itemWidth = itemWidth;\n return _legend;\n };\n\n /**\n * Turn automatic width for legend items on or off. If true, {@link dc.legend#itemWidth itemWidth} is ignored.\n * This setting takes into account the {@link dc.legend#gap gap}.\n * @method autoItemWidth\n * @memberof dc.legend\n * @instance\n * @param {Boolean} [autoItemWidth=false]\n * @returns {Boolean|dc.legend}\n */\n _legend.autoItemWidth = function (autoItemWidth) {\n if (!arguments.length) {\n return _autoItemWidth;\n }\n _autoItemWidth = autoItemWidth;\n return _legend;\n };\n\n /**\n * Set or get the legend text function. The legend widget uses this function to render the legend\n * text for each item. If no function is specified the legend widget will display the names\n * associated with each group.\n * @method legendText\n * @memberof dc.legend\n * @instance\n * @param {Function} [legendText]\n * @returns {Function|dc.legend}\n * @example\n * // default legendText\n * legend.legendText(dc.pluck('name'))\n *\n * // create numbered legend items\n * chart.legend(dc.legend().legendText(function(d, i) { return i + '. ' + d.name; }))\n *\n * // create legend displaying group counts\n * chart.legend(dc.legend().legendText(function(d) { return d.name + ': ' d.data; }))\n **/\n _legend.legendText = function (legendText) {\n if (!arguments.length) {\n return _legendText;\n }\n _legendText = legendText;\n return _legend;\n };\n\n /**\n * Maximum number of legend items to display\n * @method maxItems\n * @memberof dc.legend\n * @instance\n * @param {Number} [maxItems]\n * @return {dc.legend}\n */\n _legend.maxItems = function (maxItems) {\n if (!arguments.length) {\n return _maxItems;\n }\n _maxItems = dc.utils.isNumber(maxItems) ? maxItems : undefined;\n return _legend;\n };\n\n return _legend;\n};\n","/**\n * A scatter plot chart\n *\n * Examples:\n * - {@link http://dc-js.github.io/dc.js/examples/scatter.html Scatter Chart}\n * - {@link http://dc-js.github.io/dc.js/examples/multi-scatter.html Multi-Scatter Chart}\n * @class scatterPlot\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a scatter plot under #chart-container1 element using the default global chart group\n * var chart1 = dc.scatterPlot('#chart-container1');\n * // create a scatter plot under #chart-container2 element using chart group A\n * var chart2 = dc.scatterPlot('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.scatterPlot(compositeChart);\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.scatterPlot}\n */\ndc.scatterPlot = function (parent, chartGroup) {\n var _chart = dc.coordinateGridMixin({});\n var _symbol = d3.svg.symbol();\n\n var _existenceAccessor = function (d) { return d.value; };\n\n var originalKeyAccessor = _chart.keyAccessor();\n _chart.keyAccessor(function (d) { return originalKeyAccessor(d)[0]; });\n _chart.valueAccessor(function (d) { return originalKeyAccessor(d)[1]; });\n _chart.colorAccessor(function () { return _chart._groupName; });\n\n _chart.title(function (d) {\n // this basically just counteracts the setting of its own key/value accessors\n // see https://github.com/dc-js/dc.js/issues/702\n return _chart.keyAccessor()(d) + ',' + _chart.valueAccessor()(d) + ': ' +\n _chart.existenceAccessor()(d);\n });\n\n var _locator = function (d) {\n return 'translate(' + _chart.x()(_chart.keyAccessor()(d)) + ',' +\n _chart.y()(_chart.valueAccessor()(d)) + ')';\n };\n\n var _highlightedSize = 7;\n var _symbolSize = 5;\n var _excludedSize = 3;\n var _excludedColor = null;\n var _excludedOpacity = 1.0;\n var _emptySize = 0;\n var _emptyOpacity = 0;\n var _nonemptyOpacity = 1;\n var _emptyColor = null;\n var _filtered = [];\n\n function elementSize (d, i) {\n if (!_existenceAccessor(d)) {\n return Math.pow(_emptySize, 2);\n } else if (_filtered[i]) {\n return Math.pow(_symbolSize, 2);\n } else {\n return Math.pow(_excludedSize, 2);\n }\n }\n _symbol.size(elementSize);\n\n dc.override(_chart, '_filter', function (filter) {\n if (!arguments.length) {\n return _chart.__filter();\n }\n\n return _chart.__filter(dc.filters.RangedTwoDimensionalFilter(filter));\n });\n\n _chart.plotData = function () {\n var symbols = _chart.chartBodyG().selectAll('path.symbol')\n .data(_chart.data());\n\n symbols\n .enter()\n .append('path')\n .attr('class', 'symbol')\n .attr('opacity', 0)\n .attr('fill', _chart.getColor)\n .attr('transform', _locator);\n\n symbols.call(renderTitles, _chart.data());\n\n symbols.each(function (d, i) {\n _filtered[i] = !_chart.filter() || _chart.filter().isFiltered([d.key[0], d.key[1]]);\n });\n\n dc.transition(symbols, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', function (d, i) {\n if (!_existenceAccessor(d)) {\n return _emptyOpacity;\n } else if (_filtered[i]) {\n return _nonemptyOpacity;\n } else {\n return _chart.excludedOpacity();\n }\n })\n .attr('fill', function (d, i) {\n if (_emptyColor && !_existenceAccessor(d)) {\n return _emptyColor;\n } else if (_chart.excludedColor() && !_filtered[i]) {\n return _chart.excludedColor();\n } else {\n return _chart.getColor(d);\n }\n })\n .attr('transform', _locator)\n .attr('d', _symbol);\n\n dc.transition(symbols.exit(), _chart.transitionDuration(), _chart.transitionDelay())\n .attr('opacity', 0).remove();\n };\n\n function renderTitles (symbol, d) {\n if (_chart.renderTitle()) {\n symbol.selectAll('title').remove();\n symbol.append('title').text(function (d) {\n return _chart.title()(d);\n });\n }\n }\n\n /**\n * Get or set the existence accessor. If a point exists, it is drawn with\n * {@link dc.scatterPlot#symbolSize symbolSize} radius and\n * opacity 1; if it does not exist, it is drawn with\n * {@link dc.scatterPlot#emptySize emptySize} radius and opacity 0. By default,\n * the existence accessor checks if the reduced value is truthy.\n * @method existenceAccessor\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link dc.scatterPlot#symbolSize symbolSize}\n * @see {@link dc.scatterPlot#emptySize emptySize}\n * @example\n * // default accessor\n * chart.existenceAccessor(function (d) { return d.value; });\n * @param {Function} [accessor]\n * @returns {Function|dc.scatterPlot}\n */\n _chart.existenceAccessor = function (accessor) {\n if (!arguments.length) {\n return _existenceAccessor;\n }\n _existenceAccessor = accessor;\n return this;\n };\n\n /**\n * Get or set the symbol type used for each point. By default the symbol is a circle.\n * Type can be a constant or an accessor.\n * @method symbol\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_type d3.svg.symbol.type}\n * @example\n * // Circle type\n * chart.symbol('circle');\n * // Square type\n * chart.symbol('square');\n * @param {String|Function} [type='circle']\n * @returns {String|Function|dc.scatterPlot}\n */\n _chart.symbol = function (type) {\n if (!arguments.length) {\n return _symbol.type();\n }\n _symbol.type(type);\n return _chart;\n };\n\n /**\n * Get or set the symbol generator. By default `dc.scatterPlot` will use\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol d3.svg.symbol()}\n * to generate symbols. `dc.scatterPlot` will set the\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size size accessor}\n * on the symbol generator.\n * @method customSymbol\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol d3.svg.symbol}\n * @see {@link https://stackoverflow.com/questions/25332120/create-additional-d3-js-symbols Create additional D3.js symbols}\n * @param {String|Function} [customSymbol=d3.svg.symbol()]\n * @returns {String|Function|dc.scatterPlot}\n */\n _chart.customSymbol = function (customSymbol) {\n if (!arguments.length) {\n return _symbol;\n }\n _symbol = customSymbol;\n _symbol.size(elementSize);\n return _chart;\n };\n\n /**\n * Set or get radius for symbols.\n * @method symbolSize\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size d3.svg.symbol.size}\n * @param {Number} [symbolSize=3]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.symbolSize = function (symbolSize) {\n if (!arguments.length) {\n return _symbolSize;\n }\n _symbolSize = symbolSize;\n return _chart;\n };\n\n /**\n * Set or get radius for highlighted symbols.\n * @method highlightedSize\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size d3.svg.symbol.size}\n * @param {Number} [highlightedSize=5]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.highlightedSize = function (highlightedSize) {\n if (!arguments.length) {\n return _highlightedSize;\n }\n _highlightedSize = highlightedSize;\n return _chart;\n };\n\n /**\n * Set or get size for symbols excluded from this chart's filter. If null, no\n * special size is applied for symbols based on their filter status.\n * @method excludedSize\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size d3.svg.symbol.size}\n * @param {Number} [excludedSize=null]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.excludedSize = function (excludedSize) {\n if (!arguments.length) {\n return _excludedSize;\n }\n _excludedSize = excludedSize;\n return _chart;\n };\n\n /**\n * Set or get color for symbols excluded from this chart's filter. If null, no\n * special color is applied for symbols based on their filter status.\n * @method excludedColor\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [excludedColor=null]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.excludedColor = function (excludedColor) {\n if (!arguments.length) {\n return _excludedColor;\n }\n _excludedColor = excludedColor;\n return _chart;\n };\n\n /**\n * Set or get opacity for symbols excluded from this chart's filter.\n * @method excludedOpacity\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [excludedOpacity=1.0]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.excludedOpacity = function (excludedOpacity) {\n if (!arguments.length) {\n return _excludedOpacity;\n }\n _excludedOpacity = excludedOpacity;\n return _chart;\n };\n\n /**\n * Set or get radius for symbols when the group is empty.\n * @method emptySize\n * @memberof dc.scatterPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/SVG-Shapes.md#symbol_size d3.svg.symbol.size}\n * @param {Number} [emptySize=0]\n * @returns {Number|dc.scatterPlot}\n */\n _chart.hiddenSize = _chart.emptySize = function (emptySize) {\n if (!arguments.length) {\n return _emptySize;\n }\n _emptySize = emptySize;\n return _chart;\n };\n\n /**\n * Set or get color for symbols when the group is empty. If null, just use the\n * {@link dc.colorMixin#colors colorMixin.colors} color scale zero value.\n * @name emptyColor\n * @memberof dc.scatterPlot\n * @instance\n * @param {String} [emptyColor=null]\n * @return {String}\n * @return {dc.scatterPlot}/\n */\n _chart.emptyColor = function (emptyColor) {\n if (!arguments.length) {\n return _emptyColor;\n }\n _emptyColor = emptyColor;\n return _chart;\n };\n\n /**\n * Set or get opacity for symbols when the group is empty.\n * @name emptyOpacity\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [emptyOpacity=0]\n * @return {Number}\n * @return {dc.scatterPlot}\n */\n _chart.emptyOpacity = function (emptyOpacity) {\n if (!arguments.length) {\n return _emptyOpacity;\n }\n _emptyOpacity = emptyOpacity;\n return _chart;\n };\n\n /**\n * Set or get opacity for symbols when the group is not empty.\n * @name nonemptyOpacity\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [nonemptyOpacity=1]\n * @return {Number}\n * @return {dc.scatterPlot}\n */\n _chart.nonemptyOpacity = function (nonemptyOpacity) {\n if (!arguments.length) {\n return _emptyOpacity;\n }\n _nonemptyOpacity = nonemptyOpacity;\n return _chart;\n };\n\n _chart.legendables = function () {\n return [{chart: _chart, name: _chart._groupName, color: _chart.getColor()}];\n };\n\n _chart.legendHighlight = function (d) {\n resizeSymbolsWhere(function (symbol) {\n return symbol.attr('fill') === d.color;\n }, _highlightedSize);\n _chart.chartBodyG().selectAll('.chart-body path.symbol').filter(function () {\n return d3.select(this).attr('fill') !== d.color;\n }).classed('fadeout', true);\n };\n\n _chart.legendReset = function (d) {\n resizeSymbolsWhere(function (symbol) {\n return symbol.attr('fill') === d.color;\n }, _symbolSize);\n _chart.chartBodyG().selectAll('.chart-body path.symbol').filter(function () {\n return d3.select(this).attr('fill') !== d.color;\n }).classed('fadeout', false);\n };\n\n function resizeSymbolsWhere (condition, size) {\n var symbols = _chart.chartBodyG().selectAll('.chart-body path.symbol').filter(function () {\n return condition(d3.select(this));\n });\n var oldSize = _symbol.size();\n _symbol.size(Math.pow(size, 2));\n dc.transition(symbols, _chart.transitionDuration(), _chart.transitionDelay()).attr('d', _symbol);\n _symbol.size(oldSize);\n }\n\n _chart.setHandlePaths = function () {\n // no handle paths for poly-brushes\n };\n\n _chart.extendBrush = function () {\n var extent = _chart.brush().extent();\n if (_chart.round()) {\n extent[0] = extent[0].map(_chart.round());\n extent[1] = extent[1].map(_chart.round());\n\n _chart.g().select('.brush')\n .call(_chart.brush().extent(extent));\n }\n return extent;\n };\n\n _chart.brushIsEmpty = function (extent) {\n return _chart.brush().empty() || !extent || extent[0][0] >= extent[1][0] || extent[0][1] >= extent[1][1];\n };\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n\n _chart.redrawBrush(_chart.g());\n\n if (_chart.brushIsEmpty(extent)) {\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.redrawGroup();\n });\n\n } else {\n var ranged2DFilter = dc.filters.RangedTwoDimensionalFilter(extent);\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.filter(ranged2DFilter);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n\n }\n };\n\n _chart.setBrushY = function (gBrush) {\n gBrush.call(_chart.brush().y(_chart.y()));\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A display of a single numeric value.\n * Unlike other charts, you do not need to set a dimension. Instead a group object must be provided and\n * a valueAccessor that returns a single value.\n * @class numberDisplay\n * @memberof dc\n * @mixes dc.baseMixin\n * @example\n * // create a number display under #chart-container1 element using the default global chart group\n * var display1 = dc.numberDisplay('#chart-container1');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.numberDisplay}\n */\ndc.numberDisplay = function (parent, chartGroup) {\n var SPAN_CLASS = 'number-display';\n var _formatNumber = d3.format('.2s');\n var _chart = dc.baseMixin({});\n var _html = {one: '', some: '', none: ''};\n var _lastValue;\n\n // dimension not required\n _chart._mandatoryAttributes(['group']);\n\n // default to ordering by value, to emulate old group.top(1) behavior when multiple groups\n _chart.ordering(function (kv) { return kv.value; });\n\n /**\n * Gets or sets an optional object specifying HTML templates to use depending on the number\n * displayed. The text `%number` will be replaced with the current value.\n * - one: HTML template to use if the number is 1\n * - zero: HTML template to use if the number is 0\n * - some: HTML template to use otherwise\n * @method html\n * @memberof dc.numberDisplay\n * @instance\n * @example\n * numberWidget.html({\n * one:'%number record',\n * some:'%number records',\n * none:'no records'})\n * @param {{one:String, some:String, none:String}} [html={one: '', some: '', none: ''}]\n * @returns {{one:String, some:String, none:String}|dc.numberDisplay}\n */\n _chart.html = function (html) {\n if (!arguments.length) {\n return _html;\n }\n if (html.none) {\n _html.none = html.none;//if none available\n } else if (html.one) {\n _html.none = html.one;//if none not available use one\n } else if (html.some) {\n _html.none = html.some;//if none and one not available use some\n }\n if (html.one) {\n _html.one = html.one;//if one available\n } else if (html.some) {\n _html.one = html.some;//if one not available use some\n }\n if (html.some) {\n _html.some = html.some;//if some available\n } else if (html.one) {\n _html.some = html.one;//if some not available use one\n }\n return _chart;\n };\n\n /**\n * Calculate and return the underlying value of the display.\n * @method value\n * @memberof dc.numberDisplay\n * @instance\n * @returns {Number}\n */\n _chart.value = function () {\n return _chart.data();\n };\n\n function maxBin (all) {\n if (!all.length) {\n return null;\n }\n var sorted = _chart._computeOrderedGroups(all);\n return sorted[sorted.length - 1];\n }\n _chart.data(function (group) {\n var valObj = group.value ? group.value() : maxBin(group.all());\n return _chart.valueAccessor()(valObj);\n });\n\n _chart.transitionDuration(250); // good default\n _chart.transitionDelay(0);\n\n _chart._doRender = function () {\n var newValue = _chart.value(),\n span = _chart.selectAll('.' + SPAN_CLASS);\n\n if (span.empty()) {\n span = span.data([0])\n .enter()\n .append('span')\n .attr('class', SPAN_CLASS);\n }\n\n span.transition()\n .duration(_chart.transitionDuration())\n .delay(_chart.transitionDelay())\n .ease('quad-out-in')\n .tween('text', function () {\n // [XA] don't try and interpolate from Infinity, else this breaks.\n var interpStart = isFinite(_lastValue) ? _lastValue : 0;\n var interp = d3.interpolateNumber(interpStart || 0, newValue);\n _lastValue = newValue;\n return function (t) {\n var html = null, num = _chart.formatNumber()(interp(t));\n if (newValue === 0 && (_html.none !== '')) {\n html = _html.none;\n } else if (newValue === 1 && (_html.one !== '')) {\n html = _html.one;\n } else if (_html.some !== '') {\n html = _html.some;\n }\n this.innerHTML = html ? html.replace('%number', num) : num;\n };\n });\n };\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set a function to format the value for the display.\n * @method formatNumber\n * @memberof dc.numberDisplay\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md d3.format}\n * @param {Function} [formatter=d3.format('.2s')]\n * @returns {Function|dc.numberDisplay}\n */\n _chart.formatNumber = function (formatter) {\n if (!arguments.length) {\n return _formatNumber;\n }\n _formatNumber = formatter;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A heat map is matrix that represents the values of two dimensions of data using colors.\n * @class heatMap\n * @memberof dc\n * @mixes dc.colorMixin\n * @mixes dc.marginMixin\n * @mixes dc.baseMixin\n * @example\n * // create a heat map under #chart-container1 element using the default global chart group\n * var heatMap1 = dc.heatMap('#chart-container1');\n * // create a heat map under #chart-container2 element using chart group A\n * var heatMap2 = dc.heatMap('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.heatMap}\n */\ndc.heatMap = function (parent, chartGroup) {\n\n var DEFAULT_BORDER_RADIUS = 6.75;\n\n var _chartBody;\n\n var _cols;\n var _rows;\n var _colOrdering = d3.ascending;\n var _rowOrdering = d3.ascending;\n var _colScale = d3.scale.ordinal();\n var _rowScale = d3.scale.ordinal();\n\n var _xBorderRadius = DEFAULT_BORDER_RADIUS;\n var _yBorderRadius = DEFAULT_BORDER_RADIUS;\n\n var _chart = dc.colorMixin(dc.marginMixin(dc.baseMixin({})));\n _chart._mandatoryAttributes(['group']);\n _chart.title(_chart.colorAccessor());\n\n var _colsLabel = function (d) {\n return d;\n };\n var _rowsLabel = function (d) {\n return d;\n };\n\n /**\n * Set or get the column label function. The chart class uses this function to render\n * column labels on the X axis. It is passed the column name.\n * @method colsLabel\n * @memberof dc.heatMap\n * @instance\n * @example\n * // the default label function just returns the name\n * chart.colsLabel(function(d) { return d; });\n * @param {Function} [labelFunction=function(d) { return d; }]\n * @returns {Function|dc.heatMap}\n */\n _chart.colsLabel = function (labelFunction) {\n if (!arguments.length) {\n return _colsLabel;\n }\n _colsLabel = labelFunction;\n return _chart;\n };\n\n /**\n * Set or get the row label function. The chart class uses this function to render\n * row labels on the Y axis. It is passed the row name.\n * @method rowsLabel\n * @memberof dc.heatMap\n * @instance\n * @example\n * // the default label function just returns the name\n * chart.rowsLabel(function(d) { return d; });\n * @param {Function} [labelFunction=function(d) { return d; }]\n * @returns {Function|dc.heatMap}\n */\n _chart.rowsLabel = function (labelFunction) {\n if (!arguments.length) {\n return _rowsLabel;\n }\n _rowsLabel = labelFunction;\n return _chart;\n };\n\n var _xAxisOnClick = function (d) { filterAxis(0, d); };\n var _yAxisOnClick = function (d) { filterAxis(1, d); };\n var _boxOnClick = function (d) {\n var filter = d.key;\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n function filterAxis (axis, value) {\n var cellsOnAxis = _chart.selectAll('.box-group').filter(function (d) {\n return d.key[axis] === value;\n });\n var unfilteredCellsOnAxis = cellsOnAxis.filter(function (d) {\n return !_chart.hasFilter(d.key);\n });\n dc.events.trigger(function () {\n var selection = unfilteredCellsOnAxis.empty() ? cellsOnAxis : unfilteredCellsOnAxis;\n var filters = selection.data().map(function (kv) {\n return dc.filters.TwoDimensionalFilter(kv.key);\n });\n _chart._filter([filters]);\n _chart.redrawGroup();\n });\n }\n\n dc.override(_chart, 'filter', function (filter) {\n if (!arguments.length) {\n return _chart._filter();\n }\n\n return _chart._filter(dc.filters.TwoDimensionalFilter(filter));\n });\n\n /**\n * Gets or sets the values used to create the rows of the heatmap, as an array. By default, all\n * the values will be fetched from the data using the value accessor.\n * @method rows\n * @memberof dc.heatMap\n * @instance\n * @param {Array<String|Number>} [rows]\n * @returns {Array<String|Number>|dc.heatMap}\n */\n\n _chart.rows = function (rows) {\n if (!arguments.length) {\n return _rows;\n }\n _rows = rows;\n return _chart;\n };\n\n /**\n #### .rowOrdering([orderFunction])\n Get or set an accessor to order the rows. Default is d3.ascending.\n */\n _chart.rowOrdering = function (_) {\n if (!arguments.length) {\n return _rowOrdering;\n }\n _rowOrdering = _;\n return _chart;\n };\n\n /**\n * Gets or sets the keys used to create the columns of the heatmap, as an array. By default, all\n * the values will be fetched from the data using the key accessor.\n * @method cols\n * @memberof dc.heatMap\n * @instance\n * @param {Array<String|Number>} [cols]\n * @returns {Array<String|Number>|dc.heatMap}\n */\n _chart.cols = function (cols) {\n if (!arguments.length) {\n return _cols;\n }\n _cols = cols;\n return _chart;\n };\n\n /**\n #### .colOrdering([orderFunction])\n Get or set an accessor to order the cols. Default is ascending.\n */\n _chart.colOrdering = function (_) {\n if (!arguments.length) {\n return _colOrdering;\n }\n _colOrdering = _;\n return _chart;\n };\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _chartBody = _chart.svg()\n .append('g')\n .attr('class', 'heatmap')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n\n return _chart._doRedraw();\n };\n\n _chart._doRedraw = function () {\n var data = _chart.data(),\n rows = _chart.rows() || data.map(_chart.valueAccessor()),\n cols = _chart.cols() || data.map(_chart.keyAccessor());\n if (_rowOrdering) {\n rows = rows.sort(_rowOrdering);\n }\n if (_colOrdering) {\n cols = cols.sort(_colOrdering);\n }\n rows = _rowScale.domain(rows);\n cols = _colScale.domain(cols);\n\n var rowCount = rows.domain().length,\n colCount = cols.domain().length,\n boxWidth = Math.floor(_chart.effectiveWidth() / colCount),\n boxHeight = Math.floor(_chart.effectiveHeight() / rowCount);\n\n cols.rangeRoundBands([0, _chart.effectiveWidth()]);\n rows.rangeRoundBands([_chart.effectiveHeight(), 0]);\n\n var boxes = _chartBody.selectAll('g.box-group').data(_chart.data(), function (d, i) {\n return _chart.keyAccessor()(d, i) + '\\0' + _chart.valueAccessor()(d, i);\n });\n var gEnter = boxes.enter().append('g')\n .attr('class', 'box-group');\n\n gEnter.append('rect')\n .attr('class', 'heat-box')\n .attr('fill', 'white')\n .on('click', _chart.boxOnClick());\n\n if (_chart.renderTitle()) {\n gEnter.append('title');\n boxes.select('title').text(_chart.title());\n }\n\n dc.transition(boxes.select('rect'), _chart.transitionDuration(), _chart.transitionDelay())\n .attr('x', function (d, i) { return cols(_chart.keyAccessor()(d, i)); })\n .attr('y', function (d, i) { return rows(_chart.valueAccessor()(d, i)); })\n .attr('rx', _xBorderRadius)\n .attr('ry', _yBorderRadius)\n .attr('fill', _chart.getColor)\n .attr('width', boxWidth)\n .attr('height', boxHeight);\n\n boxes.exit().remove();\n\n var gCols = _chartBody.select('g.cols');\n if (gCols.empty()) {\n gCols = _chartBody.append('g').attr('class', 'cols axis');\n }\n var gColsText = gCols.selectAll('text').data(cols.domain());\n gColsText.enter().append('text')\n .attr('x', function (d) { return cols(d) + boxWidth / 2; })\n .style('text-anchor', 'middle')\n .attr('y', _chart.effectiveHeight())\n .attr('dy', 12)\n .on('click', _chart.xAxisOnClick())\n .text(_chart.colsLabel());\n dc.transition(gColsText, _chart.transitionDuration(), _chart.transitionDelay())\n .text(_chart.colsLabel())\n .attr('x', function (d) { return cols(d) + boxWidth / 2; })\n .attr('y', _chart.effectiveHeight());\n gColsText.exit().remove();\n var gRows = _chartBody.select('g.rows');\n if (gRows.empty()) {\n gRows = _chartBody.append('g').attr('class', 'rows axis');\n }\n var gRowsText = gRows.selectAll('text').data(rows.domain());\n gRowsText.enter().append('text')\n .attr('dy', 6)\n .style('text-anchor', 'end')\n .attr('x', 0)\n .attr('dx', -2)\n .on('click', _chart.yAxisOnClick())\n .text(_chart.rowsLabel());\n dc.transition(gRowsText, _chart.transitionDuration(), _chart.transitionDelay())\n .text(_chart.rowsLabel())\n .attr('y', function (d) { return rows(d) + boxHeight / 2; });\n gRowsText.exit().remove();\n\n if (_chart.hasFilter()) {\n _chart.selectAll('g.box-group').each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.box-group').each(function () {\n _chart.resetHighlight(this);\n });\n }\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when an individual cell is clicked in the heatmap.\n * By default, filtering of the cell will be toggled.\n * @method boxOnClick\n * @memberof dc.heatMap\n * @instance\n * @example\n * // default box on click handler\n * chart.boxOnClick(function (d) {\n * var filter = d.key;\n * dc.events.trigger(function () {\n * _chart.filter(filter);\n * _chart.redrawGroup();\n * });\n * });\n * @param {Function} [handler]\n * @returns {Function|dc.heatMap}\n */\n _chart.boxOnClick = function (handler) {\n if (!arguments.length) {\n return _boxOnClick;\n }\n _boxOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when a column tick is clicked in the x axis.\n * By default, if any cells in the column are unselected, the whole column will be selected,\n * otherwise the whole column will be unselected.\n * @method xAxisOnClick\n * @memberof dc.heatMap\n * @instance\n * @param {Function} [handler]\n * @returns {Function|dc.heatMap}\n */\n _chart.xAxisOnClick = function (handler) {\n if (!arguments.length) {\n return _xAxisOnClick;\n }\n _xAxisOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when a row tick is clicked in the y axis.\n * By default, if any cells in the row are unselected, the whole row will be selected,\n * otherwise the whole row will be unselected.\n * @method yAxisOnClick\n * @memberof dc.heatMap\n * @instance\n * @param {Function} [handler]\n * @returns {Function|dc.heatMap}\n */\n _chart.yAxisOnClick = function (handler) {\n if (!arguments.length) {\n return _yAxisOnClick;\n }\n _yAxisOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the X border radius. Set to 0 to get full rectangles.\n * @method xBorderRadius\n * @memberof dc.heatMap\n * @instance\n * @param {Number} [xBorderRadius=6.75]\n * @returns {Number|dc.heatMap}\n */\n _chart.xBorderRadius = function (xBorderRadius) {\n if (!arguments.length) {\n return _xBorderRadius;\n }\n _xBorderRadius = xBorderRadius;\n return _chart;\n };\n\n /**\n * Gets or sets the Y border radius. Set to 0 to get full rectangles.\n * @method yBorderRadius\n * @memberof dc.heatMap\n * @instance\n * @param {Number} [yBorderRadius=6.75]\n * @returns {Number|dc.heatMap}\n */\n _chart.yBorderRadius = function (yBorderRadius) {\n if (!arguments.length) {\n return _yBorderRadius;\n }\n _yBorderRadius = yBorderRadius;\n return _chart;\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(d.key);\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","// https://github.com/d3/d3-plugins/blob/master/box/box.js\n(function () {\n\n // Inspired by http://informationandvisualization.de/blog/box-plot\n d3.box = function () {\n var width = 1,\n height = 1,\n duration = 0,\n delay = 0,\n domain = null,\n value = Number,\n whiskers = boxWhiskers,\n quartiles = boxQuartiles,\n tickFormat = null;\n\n // For each small multiple…\n function box (g) {\n g.each(function (d, i) {\n d = d.map(value).sort(d3.ascending);\n var g = d3.select(this),\n n = d.length,\n min = d[0],\n max = d[n - 1];\n\n // Compute quartiles. Must return exactly 3 elements.\n var quartileData = d.quartiles = quartiles(d);\n\n // Compute whiskers. Must return exactly 2 elements, or null.\n var whiskerIndices = whiskers && whiskers.call(this, d, i),\n whiskerData = whiskerIndices && whiskerIndices.map(function (i) { return d[i]; });\n\n // Compute outliers. If no whiskers are specified, all data are 'outliers'.\n // We compute the outliers as indices, so that we can join across transitions!\n var outlierIndices = whiskerIndices ?\n d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n)) : d3.range(n);\n\n // Compute the new x-scale.\n var x1 = d3.scale.linear()\n .domain(domain && domain.call(this, d, i) || [min, max])\n .range([height, 0]);\n\n // Retrieve the old x-scale, if this is an update.\n var x0 = this.__chart__ || d3.scale.linear()\n .domain([0, Infinity])\n .range(x1.range());\n\n // Stash the new scale.\n this.__chart__ = x1;\n\n // Note: the box, median, and box tick elements are fixed in number,\n // so we only have to handle enter and update. In contrast, the outliers\n // and other elements are variable, so we need to exit them! Variable\n // elements also fade in and out.\n\n // Update center line: the vertical line spanning the whiskers.\n var center = g.selectAll('line.center')\n .data(whiskerData ? [whiskerData] : []);\n\n center.enter().insert('line', 'rect')\n .attr('class', 'center')\n .attr('x1', width / 2)\n .attr('y1', function (d) { return x0(d[0]); })\n .attr('x2', width / 2)\n .attr('y2', function (d) { return x0(d[1]); })\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .delay(delay)\n .style('opacity', 1)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); });\n\n center.transition()\n .duration(duration)\n .delay(delay)\n .style('opacity', 1)\n .attr('x1', width / 2)\n .attr('x2', width / 2)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); });\n\n center.exit().transition()\n .duration(duration)\n .delay(delay)\n .style('opacity', 1e-6)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); })\n .remove();\n\n // Update innerquartile box.\n var box = g.selectAll('rect.box')\n .data([quartileData]);\n\n box.enter().append('rect')\n .attr('class', 'box')\n .attr('x', 0)\n .attr('y', function (d) { return x0(d[2]); })\n .attr('width', width)\n .attr('height', function (d) { return x0(d[0]) - x0(d[2]); })\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y', function (d) { return x1(d[2]); })\n .attr('height', function (d) { return x1(d[0]) - x1(d[2]); });\n\n box.transition()\n .duration(duration)\n .delay(delay)\n .attr('width', width)\n .attr('y', function (d) { return x1(d[2]); })\n .attr('height', function (d) { return x1(d[0]) - x1(d[2]); });\n\n // Update median line.\n var medianLine = g.selectAll('line.median')\n .data([quartileData[1]]);\n\n medianLine.enter().append('line')\n .attr('class', 'median')\n .attr('x1', 0)\n .attr('y1', x0)\n .attr('x2', width)\n .attr('y2', x0)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y1', x1)\n .attr('y2', x1);\n\n medianLine.transition()\n .duration(duration)\n .delay(delay)\n .attr('x1', 0)\n .attr('x2', width)\n .attr('y1', x1)\n .attr('y2', x1);\n\n // Update whiskers.\n var whisker = g.selectAll('line.whisker')\n .data(whiskerData || []);\n\n whisker.enter().insert('line', 'circle, text')\n .attr('class', 'whisker')\n .attr('x1', 0)\n .attr('y1', x0)\n .attr('x2', width)\n .attr('y2', x0)\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1);\n\n whisker.transition()\n .duration(duration)\n .delay(delay)\n .attr('x1', 0)\n .attr('x2', width)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1);\n\n whisker.exit().transition()\n .duration(duration)\n .delay(delay)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1e-6)\n .remove();\n\n // Update outliers.\n var outlier = g.selectAll('circle.outlier')\n .data(outlierIndices, Number);\n\n outlier.enter().insert('circle', 'text')\n .attr('class', 'outlier')\n .attr('r', 5)\n .attr('cx', width / 2)\n .attr('cy', function (i) { return x0(d[i]); })\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1);\n\n outlier.transition()\n .duration(duration)\n .delay(delay)\n .attr('cx', width / 2)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1);\n\n outlier.exit().transition()\n .duration(duration)\n .delay(delay)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1e-6)\n .remove();\n\n // Compute the tick format.\n var format = tickFormat || x1.tickFormat(8);\n\n // Update box ticks.\n var boxTick = g.selectAll('text.box')\n .data(quartileData);\n\n boxTick.enter().append('text')\n .attr('class', 'box')\n .attr('dy', '.3em')\n .attr('dx', function (d, i) { return i & 1 ? 6 : -6; })\n .attr('x', function (d, i) { return i & 1 ? width : 0; })\n .attr('y', x0)\n .attr('text-anchor', function (d, i) { return i & 1 ? 'start' : 'end'; })\n .text(format)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y', x1);\n\n boxTick.transition()\n .duration(duration)\n .delay(delay)\n .text(format)\n .attr('x', function (d, i) { return i & 1 ? width : 0; })\n .attr('y', x1);\n\n // Update whisker ticks. These are handled separately from the box\n // ticks because they may or may not exist, and we want don't want\n // to join box ticks pre-transition with whisker ticks post-.\n var whiskerTick = g.selectAll('text.whisker')\n .data(whiskerData || []);\n\n whiskerTick.enter().append('text')\n .attr('class', 'whisker')\n .attr('dy', '.3em')\n .attr('dx', 6)\n .attr('x', width)\n .attr('y', x0)\n .text(format)\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .delay(delay)\n .attr('y', x1)\n .style('opacity', 1);\n\n whiskerTick.transition()\n .duration(duration)\n .delay(delay)\n .text(format)\n .attr('x', width)\n .attr('y', x1)\n .style('opacity', 1);\n\n whiskerTick.exit().transition()\n .duration(duration)\n .delay(delay)\n .attr('y', x1)\n .style('opacity', 1e-6)\n .remove();\n });\n d3.timer.flush();\n }\n\n box.width = function (x) {\n if (!arguments.length) {\n return width;\n }\n width = x;\n return box;\n };\n\n box.height = function (x) {\n if (!arguments.length) {\n return height;\n }\n height = x;\n return box;\n };\n\n box.tickFormat = function (x) {\n if (!arguments.length) {\n return tickFormat;\n }\n tickFormat = x;\n return box;\n };\n\n box.duration = function (x) {\n if (!arguments.length) {\n return duration;\n }\n duration = x;\n return box;\n };\n\n box.domain = function (x) {\n if (!arguments.length) {\n return domain;\n }\n domain = x === null ? x : d3.functor(x);\n return box;\n };\n\n box.value = function (x) {\n if (!arguments.length) {\n return value;\n }\n value = x;\n return box;\n };\n\n box.whiskers = function (x) {\n if (!arguments.length) {\n return whiskers;\n }\n whiskers = x;\n return box;\n };\n\n box.quartiles = function (x) {\n if (!arguments.length) {\n return quartiles;\n }\n quartiles = x;\n return box;\n };\n\n return box;\n };\n\n function boxWhiskers (d) {\n return [0, d.length - 1];\n }\n\n function boxQuartiles (d) {\n return [\n d3.quantile(d, 0.25),\n d3.quantile(d, 0.5),\n d3.quantile(d, 0.75)\n ];\n }\n\n})();\n","\n/**\n * A box plot is a chart that depicts numerical data via their quartile ranges.\n *\n * Examples:\n * - {@link http://dc-js.github.io/dc.js/examples/box-plot-time.html Box plot time example}\n * - {@link http://dc-js.github.io/dc.js/examples/box-plot.html Box plot example}\n * @class boxPlot\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a box plot under #chart-container1 element using the default global chart group\n * var boxPlot1 = dc.boxPlot('#chart-container1');\n * // create a box plot under #chart-container2 element using chart group A\n * var boxPlot2 = dc.boxPlot('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection} parent - Any valid\n * {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#selecting-elements d3 single selector} specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {dc.boxPlot}\n */\ndc.boxPlot = function (parent, chartGroup) {\n var _chart = dc.coordinateGridMixin({});\n\n // Returns a function to compute the interquartile range.\n function DEFAULT_WHISKERS_IQR (k) {\n return function (d) {\n var q1 = d.quartiles[0],\n q3 = d.quartiles[2],\n iqr = (q3 - q1) * k,\n i = -1,\n j = d.length;\n do { ++i; } while (d[i] < q1 - iqr);\n do { --j; } while (d[j] > q3 + iqr);\n return [i, j];\n };\n }\n\n var _whiskerIqrFactor = 1.5;\n var _whiskersIqr = DEFAULT_WHISKERS_IQR;\n var _whiskers = _whiskersIqr(_whiskerIqrFactor);\n\n var _box = d3.box();\n var _tickFormat = null;\n\n var _boxWidth = function (innerChartWidth, xUnits) {\n if (_chart.isOrdinal()) {\n return _chart.x().rangeBand();\n } else {\n return innerChartWidth / (1 + _chart.boxPadding()) / xUnits;\n }\n };\n\n // default padding to handle min/max whisker text\n _chart.yAxisPadding(12);\n\n // default to ordinal\n _chart.x(d3.scale.ordinal());\n _chart.xUnits(dc.units.ordinal);\n\n // valueAccessor should return an array of values that can be coerced into numbers\n // or if data is overloaded for a static array of arrays, it should be `Number`.\n // Empty arrays are not included.\n _chart.data(function (group) {\n return group.all().map(function (d) {\n d.map = function (accessor) { return accessor.call(d, d); };\n return d;\n }).filter(function (d) {\n var values = _chart.valueAccessor()(d);\n return values.length !== 0;\n });\n });\n\n /**\n * Get or set the spacing between boxes as a fraction of box size. Valid values are within 0-1.\n * See the {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal_rangeBands d3 docs}\n * for a visual description of how the padding is applied.\n * @method boxPadding\n * @memberof dc.boxPlot\n * @instance\n * @see {@link https://github.com/d3/d3-3.x-api-reference/blob/master/Ordinal-Scales.md#ordinal_rangeBands d3.scale.ordinal.rangeBands}\n * @param {Number} [padding=0.8]\n * @returns {Number|dc.boxPlot}\n */\n _chart.boxPadding = _chart._rangeBandPadding;\n _chart.boxPadding(0.8);\n\n /**\n * Get or set the outer padding on an ordinal box chart. This setting has no effect on non-ordinal charts\n * or on charts with a custom {@link dc.boxPlot#boxWidth .boxWidth}. Will pad the width by\n * `padding * barWidth` on each side of the chart.\n * @method outerPadding\n * @memberof dc.boxPlot\n * @instance\n * @param {Number} [padding=0.5]\n * @returns {Number|dc.boxPlot}\n */\n _chart.outerPadding = _chart._outerRangeBandPadding;\n _chart.outerPadding(0.5);\n\n /**\n * Get or set the numerical width of the boxplot box. The width may also be a function taking as\n * parameters the chart width excluding the right and left margins, as well as the number of x\n * units.\n * @example\n * // Using numerical parameter\n * chart.boxWidth(10);\n * // Using function\n * chart.boxWidth((innerChartWidth, xUnits) { ... });\n * @method boxWidth\n * @memberof dc.boxPlot\n * @instance\n * @param {Number|Function} [boxWidth=0.5]\n * @returns {Number|Function|dc.boxPlot}\n */\n _chart.boxWidth = function (boxWidth) {\n if (!arguments.length) {\n return _boxWidth;\n }\n _boxWidth = d3.functor(boxWidth);\n return _chart;\n };\n\n var boxTransform = function (d, i) {\n var xOffset = _chart.x()(_chart.keyAccessor()(d, i));\n return 'translate(' + xOffset + ', 0)';\n };\n\n _chart._preprocessData = function () {\n if (_chart.elasticX()) {\n _chart.x().domain([]);\n }\n };\n\n _chart.plotData = function () {\n var _calculatedBoxWidth = _boxWidth(_chart.effectiveWidth(), _chart.xUnitCount());\n\n _box.whiskers(_whiskers)\n .width(_calculatedBoxWidth)\n .height(_chart.effectiveHeight())\n .value(_chart.valueAccessor())\n .domain(_chart.y().domain())\n .duration(_chart.transitionDuration())\n .tickFormat(_tickFormat);\n\n var boxesG = _chart.chartBodyG().selectAll('g.box').data(_chart.data(), _chart.keyAccessor());\n\n renderBoxes(boxesG);\n updateBoxes(boxesG);\n removeBoxes(boxesG);\n\n _chart.fadeDeselectedArea();\n };\n\n function renderBoxes (boxesG) {\n var boxesGEnter = boxesG.enter().append('g');\n\n boxesGEnter\n .attr('class', 'box')\n .attr('transform', boxTransform)\n .call(_box)\n .on('click', function (d) {\n _chart.filter(_chart.keyAccessor()(d));\n _chart.redrawGroup();\n });\n }\n\n function updateBoxes (boxesG) {\n dc.transition(boxesG, _chart.transitionDuration(), _chart.transitionDelay())\n .attr('transform', boxTransform)\n .call(_box)\n .each(function () {\n d3.select(this).select('rect.box').attr('fill', _chart.getColor);\n });\n }\n\n function removeBoxes (boxesG) {\n boxesG.exit().remove().call(_box);\n }\n\n _chart.fadeDeselectedArea = function () {\n if (_chart.hasFilter()) {\n if (_chart.isOrdinal()) {\n _chart.g().selectAll('g.box').each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n var extent = _chart.brush().extent();\n var start = extent[0];\n var end = extent[1];\n var keyAccessor = _chart.keyAccessor();\n _chart.g().selectAll('g.box').each(function (d) {\n var key = keyAccessor(d);\n if (key < start || key >= end) {\n _chart.fadeDeselected(this);\n } else {\n _chart.highlightSelected(this);\n }\n });\n }\n } else {\n _chart.g().selectAll('g.box').each(function () {\n _chart.resetHighlight(this);\n });\n }\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(_chart.keyAccessor()(d));\n };\n\n _chart.yAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return d3.min(_chart.valueAccessor()(e));\n });\n return dc.utils.subtract(min, _chart.yAxisPadding());\n };\n\n _chart.yAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return d3.max(_chart.valueAccessor()(e));\n });\n return dc.utils.add(max, _chart.yAxisPadding());\n };\n\n /**\n * Set the numerical format of the boxplot median, whiskers and quartile labels. Defaults to\n * integer formatting.\n * @example\n * // format ticks to 2 decimal places\n * chart.tickFormat(d3.format('.2f'));\n * @method tickFormat\n * @memberof dc.boxPlot\n * @instance\n * @param {Function} [tickFormat]\n * @returns {Number|Function|dc.boxPlot}\n */\n _chart.tickFormat = function (tickFormat) {\n if (!arguments.length) {\n return _tickFormat;\n }\n _tickFormat = tickFormat;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The select menu is a simple widget designed to filter a dimension by selecting an option from\n * an HTML `<select/>` menu. The menu can be optionally turned into a multiselect.\n * @class selectMenu\n * @memberof dc\n * @mixes dc.baseMixin\n * @example\n * // create a select menu under #select-container using the default global chart group\n * var select = dc.selectMenu('#select-container')\n * .dimension(states)\n * .group(stateGroup);\n * // the option text can be set via the title() function\n * // by default the option text is '`key`: `value`'\n * select.title(function (d){\n * return 'STATE: ' + d.key;\n * })\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection.\n * @param {String} [chartGroup] - The name of the chart group this widget should be placed in.\n * Interaction with the widget will only trigger events and redraws within its group.\n * @returns {selectMenu}\n **/\ndc.selectMenu = function (parent, chartGroup) {\n var SELECT_CSS_CLASS = 'dc-select-menu';\n var OPTION_CSS_CLASS = 'dc-select-option';\n\n var _chart = dc.baseMixin({});\n\n var _select;\n var _promptText = 'Select all';\n var _multiple = false;\n var _promptValue = null;\n var _numberVisible = null;\n var _order = function (a, b) {\n return _chart.keyAccessor()(a) > _chart.keyAccessor()(b) ?\n 1 : _chart.keyAccessor()(b) > _chart.keyAccessor()(a) ?\n -1 : 0;\n };\n\n var _filterDisplayed = function (d) {\n return _chart.valueAccessor()(d) > 0;\n };\n\n _chart.data(function (group) {\n return group.all().filter(_filterDisplayed);\n });\n\n _chart._doRender = function () {\n _chart.select('select').remove();\n _select = _chart.root().append('select')\n .classed(SELECT_CSS_CLASS, true);\n _select.append('option').text(_promptText).attr('value', '');\n\n _chart._doRedraw();\n return _chart;\n };\n // Fixing IE 11 crash when redrawing the chart\n // see here for list of IE user Agents :\n // http://www.useragentstring.com/pages/useragentstring.php?name=Internet+Explorer\n var ua = window.navigator.userAgent;\n // test for IE 11 but not a lower version (which contains MSIE in UA)\n if (ua.indexOf('Trident/') > 0 && ua.indexOf('MSIE') === -1) {\n _chart.redraw = _chart.render;\n }\n\n _chart._doRedraw = function () {\n setAttributes();\n renderOptions();\n // select the option(s) corresponding to current filter(s)\n if (_chart.hasFilter() && _multiple) {\n _select.selectAll('option')\n .property('selected', function (d) {\n return typeof d !== 'undefined' && _chart.filters().indexOf(String(_chart.keyAccessor()(d))) >= 0;\n });\n } else if (_chart.hasFilter()) {\n _select.property('value', _chart.filter());\n } else {\n _select.property('value', '');\n }\n return _chart;\n };\n\n function renderOptions () {\n var options = _select.selectAll('option.' + OPTION_CSS_CLASS)\n .data(_chart.data(), function (d) { return _chart.keyAccessor()(d); });\n\n options.enter()\n .append('option')\n .classed(OPTION_CSS_CLASS, true)\n .attr('value', function (d) { return _chart.keyAccessor()(d); });\n\n options.text(_chart.title());\n options.exit().remove();\n _select.selectAll('option.' + OPTION_CSS_CLASS).sort(_order);\n\n _select.on('change', onChange);\n return options;\n }\n\n function onChange (d, i) {\n var values;\n var target = d3.event.target;\n if (target.selectedOptions) {\n var selectedOptions = Array.prototype.slice.call(target.selectedOptions);\n values = selectedOptions.map(function (d) {\n return d.value;\n });\n } else { // IE and other browsers do not support selectedOptions\n // adapted from this polyfill: https://gist.github.com/brettz9/4212217\n var options = [].slice.call(d3.event.target.options);\n values = options.filter(function (option) {\n return option.selected;\n }).map(function (option) {\n return option.value;\n });\n }\n // console.log(values);\n // check if only prompt option is selected\n if (values.length === 1 && values[0] === '') {\n values = _promptValue || null;\n } else if (!_multiple && values.length === 1) {\n values = values[0];\n }\n _chart.onChange(values);\n }\n\n _chart.onChange = function (val) {\n if (val && _multiple) {\n _chart.replaceFilter([val]);\n } else if (val) {\n _chart.replaceFilter(val);\n } else {\n _chart.filterAll();\n }\n dc.events.trigger(function () {\n _chart.redrawGroup();\n });\n };\n\n function setAttributes () {\n if (_multiple) {\n _select.attr('multiple', true);\n } else {\n _select.attr('multiple', null);\n }\n if (_numberVisible !== null) {\n _select.attr('size', _numberVisible);\n } else {\n _select.attr('size', null);\n }\n }\n\n /**\n * Get or set the function that controls the ordering of option tags in the\n * select menu. By default options are ordered by the group key in ascending\n * order.\n * @name order\n * @memberof dc.selectMenu\n * @instance\n * @param {Function} [order]\n * @example\n * // order by the group's value\n * chart.order(function (a,b) {\n * return a.value > b.value ? 1 : b.value > a.value ? -1 : 0;\n * });\n **/\n _chart.order = function (order) {\n if (!arguments.length) {\n return _order;\n }\n _order = order;\n return _chart;\n };\n\n /**\n * Get or set the text displayed in the options used to prompt selection.\n * @name promptText\n * @memberof dc.selectMenu\n * @instance\n * @param {String} [promptText='Select all']\n * @example\n * chart.promptText('All states');\n **/\n _chart.promptText = function (_) {\n if (!arguments.length) {\n return _promptText;\n }\n _promptText = _;\n return _chart;\n };\n\n /**\n * Get or set the function that filters option tags prior to display. By default options\n * with a value of < 1 are not displayed.\n * @name filterDisplayed\n * @memberof dc.selectMenu\n * @instance\n * @param {function} [filterDisplayed]\n * @example\n * // display all options override the `filterDisplayed` function:\n * chart.filterDisplayed(function () {\n * return true;\n * });\n **/\n _chart.filterDisplayed = function (filterDisplayed) {\n if (!arguments.length) {\n return _filterDisplayed;\n }\n _filterDisplayed = filterDisplayed;\n return _chart;\n };\n\n /**\n * Controls the type of select menu. Setting it to true converts the underlying\n * HTML tag into a multiple select.\n * @name multiple\n * @memberof dc.selectMenu\n * @instance\n * @param {boolean} [multiple=false]\n * @example\n * chart.multiple(true);\n **/\n _chart.multiple = function (multiple) {\n if (!arguments.length) {\n return _multiple;\n }\n _multiple = multiple;\n\n return _chart;\n };\n\n /**\n * Controls the default value to be used for\n * [dimension.filter](https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension_filter)\n * when only the prompt value is selected. If `null` (the default), no filtering will occur when\n * just the prompt is selected.\n * @name promptValue\n * @memberof dc.selectMenu\n * @instance\n * @param {?*} [promptValue=null]\n **/\n _chart.promptValue = function (promptValue) {\n if (!arguments.length) {\n return _promptValue;\n }\n _promptValue = promptValue;\n\n return _chart;\n };\n\n /**\n * Controls the number of items to show in the select menu, when `.multiple()` is true. This\n * controls the [`size` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select#Attributes) of\n * the `select` element. If `null` (the default), uses the browser's default height.\n * @name numberItems\n * @memberof dc.selectMenu\n * @instance\n * @param {?number} [numberVisible=null]\n * @example\n * chart.numberVisible(10);\n **/\n _chart.numberVisible = function (numberVisible) {\n if (!arguments.length) {\n return _numberVisible;\n }\n _numberVisible = numberVisible;\n\n return _chart;\n };\n\n _chart.size = dc.logger.deprecate(_chart.numberVisible, 'selectMenu.size is ambiguous - use numberVisible instead');\n\n return _chart.anchor(parent, chartGroup);\n};\n","// Renamed functions\n\ndc.abstractBubbleChart = dc.bubbleMixin;\ndc.baseChart = dc.baseMixin;\ndc.capped = dc.capMixin;\ndc.colorChart = dc.colorMixin;\ndc.coordinateGridChart = dc.coordinateGridMixin;\ndc.marginable = dc.marginMixin;\ndc.stackableChart = dc.stackMixin;\n\n// Expose d3 and crossfilter, so that clients in browserify\n// case can obtain them if they need them.\ndc.d3 = d3;\ndc.crossfilter = crossfilter;\n\nreturn dc;}\n if(typeof define === \"function\" && define.amd) {\n define([\"d3\", \"crossfilter2\"], _dc);\n } else if(typeof module === \"object\" && module.exports) {\n var _d3 = require('d3');\n var _crossfilter = require('crossfilter2');\n // When using npm + browserify, 'crossfilter' is a function,\n // since package.json specifies index.js as main function, and it\n // does special handling. When using bower + browserify,\n // there's no main in bower.json (in fact, there's no bower.json),\n // so we need to fix it.\n if (typeof _crossfilter !== \"function\") {\n _crossfilter = _crossfilter.crossfilter;\n }\n module.exports = _dc(_d3, _crossfilter);\n } else {\n this.dc = _dc(d3, crossfilter);\n }\n}\n)();\n"]} \ No newline at end of file diff --git a/civicrm/bower_components/dc-2.1.x/dc.min.css b/civicrm/bower_components/dc-2.1.x/dc.min.css index 642cdb0f5da2ce38e7dcb061f584aa66e652bf7c..0e85b6427da89c5ce303d9a29bfa341ce9da4bba 100644 --- a/civicrm/bower_components/dc-2.1.x/dc.min.css +++ b/civicrm/bower_components/dc-2.1.x/dc.min.css @@ -1 +1 @@ -.dc-chart .box text,.dc-chart g.axis text{-webkit-touch-callout:none;-khtml-user-select:none;pointer-events:none}.dc-chart path.dc-symbol,.dc-legend g.dc-legend-item.fadeout{fill-opacity:.5;stroke-opacity:.5}div.dc-chart{float:left}.dc-chart rect.bar{stroke:none;cursor:pointer}.dc-chart rect.bar:hover{fill-opacity:.5}.dc-chart rect.deselected{stroke:none;fill:#ccc}.dc-chart .pie-slice{fill:#fff;font-size:12px;cursor:pointer}.dc-chart .pie-slice.external{fill:#000}.dc-chart .pie-slice :hover,.dc-chart .pie-slice.highlight{fill-opacity:.8}.dc-chart .pie-path{fill:none;stroke-width:2px;stroke:#000;opacity:.4}.dc-chart .selected circle,.dc-chart .selected path{stroke-width:3;stroke:#ccc;fill-opacity:1}.dc-chart .deselected circle,.dc-chart .deselected path{stroke:none;fill-opacity:.5;fill:#ccc}.dc-chart .axis line,.dc-chart .axis path{fill:none;stroke:#000;shape-rendering:crispEdges}.dc-chart .axis text{font:10px sans-serif}.dc-chart .axis .grid-line,.dc-chart .axis .grid-line line,.dc-chart .grid-line,.dc-chart .grid-line line{fill:none;stroke:#ccc;opacity:.5;shape-rendering:crispEdges}.dc-chart .brush rect.background{z-index:-999}.dc-chart .brush rect.extent{fill:#4682b4;fill-opacity:.125}.dc-chart .brush .resize path{fill:#eee;stroke:#666}.dc-chart path.line{fill:none;stroke-width:1.5px}.dc-chart path.area{fill-opacity:.3;stroke:none}.dc-chart path.highlight{stroke-width:3;fill-opacity:1;stroke-opacity:1}.dc-chart g.state{cursor:pointer}.dc-chart g.state :hover{fill-opacity:.8}.dc-chart g.state path{stroke:#fff}.dc-chart g.deselected path{fill:grey}.dc-chart g.deselected text{display:none}.dc-chart g.row rect{fill-opacity:.8;cursor:pointer}.dc-chart g.row rect:hover{fill-opacity:.6}.dc-chart g.row text{fill:#fff;font-size:12px;cursor:pointer}.dc-chart g.dc-tooltip path{fill:none;stroke:grey;stroke-opacity:.8}.dc-chart g.county path{stroke:#fff;fill:none}.dc-chart g.debug rect{fill:#00f;fill-opacity:.2}.dc-chart g.axis text{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dc-chart .node{font-size:.7em;cursor:pointer}.dc-chart .node :hover{fill-opacity:.8}.dc-chart .bubble{stroke:none;fill-opacity:.6}.dc-chart .highlight{fill-opacity:1;stroke-opacity:1}.dc-chart .fadeout{fill-opacity:.2;stroke-opacity:.2}.dc-chart .box text{font:10px sans-serif;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dc-chart .box circle,.dc-chart .box line{fill:#fff}.dc-chart .box circle,.dc-chart .box line,.dc-chart .box rect{stroke:#000;stroke-width:1.5px}.dc-chart .box .center{stroke-dasharray:3,3}.dc-chart .box .outlier{fill:none;stroke:#ccc}.dc-chart .symbol,.dc-chart circle.dot{stroke:none}.dc-chart .box.deselected{opacity:.5}.dc-chart .box.deselected .box{fill:#ccc}.dc-chart .heatmap .box-group.deselected rect{stroke:none;fill-opacity:.5;fill:#ccc}.dc-chart .heatmap g.axis text{pointer-events:all;cursor:pointer}.dc-chart .empty-chart .pie-slice{cursor:default}.dc-chart .empty-chart .pie-slice path{fill:#fee;cursor:default}.dc-data-count{float:right;margin-top:15px;margin-right:15px}.dc-data-count .filter-count,.dc-data-count .total-count{color:#3182bd;font-weight:700}.dc-legend{font-size:11px}.dc-legend .dc-legend-item{cursor:pointer}.dc-hard .number-display{float:none} \ No newline at end of file +.dc-chart path.dc-symbol,.dc-legend g.dc-legend-item.fadeout{fill-opacity:.5;stroke-opacity:.5}div.dc-chart{float:left}.dc-chart rect.bar{stroke:none;cursor:pointer}.dc-chart rect.bar:hover{fill-opacity:.5}.dc-chart rect.deselected{stroke:none;fill:#ccc}.dc-chart .pie-slice{fill:#fff;font-size:12px;cursor:pointer}.dc-chart .pie-slice.external{fill:#000}.dc-chart .pie-slice :hover,.dc-chart .pie-slice.highlight{fill-opacity:.8}.dc-chart .pie-path{fill:none;stroke-width:2px;stroke:#000;opacity:.4}.dc-chart .selected circle,.dc-chart .selected path{stroke-width:3;stroke:#ccc;fill-opacity:1}.dc-chart .deselected circle,.dc-chart .deselected path{stroke:none;fill-opacity:.5;fill:#ccc}.dc-chart .axis line,.dc-chart .axis path{fill:none;stroke:#000;shape-rendering:crispEdges}.dc-chart .axis text{font:10px sans-serif}.dc-chart .axis .grid-line,.dc-chart .axis .grid-line line,.dc-chart .grid-line,.dc-chart .grid-line line{fill:none;stroke:#ccc;opacity:.5;shape-rendering:crispEdges}.dc-chart .brush rect.background{z-index:-999}.dc-chart .brush rect.extent{fill:#4682b4;fill-opacity:.125}.dc-chart .brush .resize path{fill:#eee;stroke:#666}.dc-chart path.line{fill:none;stroke-width:1.5px}.dc-chart path.area{fill-opacity:.3;stroke:none}.dc-chart path.highlight{stroke-width:3;fill-opacity:1;stroke-opacity:1}.dc-chart g.state{cursor:pointer}.dc-chart g.state :hover{fill-opacity:.8}.dc-chart g.state path{stroke:#fff}.dc-chart g.deselected path{fill:grey}.dc-chart g.deselected text{display:none}.dc-chart g.row rect{fill-opacity:.8;cursor:pointer}.dc-chart g.row rect:hover{fill-opacity:.6}.dc-chart g.row text{fill:#fff;font-size:12px;cursor:pointer}.dc-chart g.dc-tooltip path{fill:none;stroke:grey;stroke-opacity:.8}.dc-chart g.county path{stroke:#fff;fill:none}.dc-chart g.debug rect{fill:#00f;fill-opacity:.2}.dc-chart g.axis text{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.dc-chart .node{font-size:.7em;cursor:pointer}.dc-chart .node :hover{fill-opacity:.8}.dc-chart .bubble{stroke:none;fill-opacity:.6}.dc-chart .highlight{fill-opacity:1;stroke-opacity:1}.dc-chart .fadeout{fill-opacity:.2;stroke-opacity:.2}.dc-chart .box text{font:10px sans-serif;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.dc-chart .box circle,.dc-chart .box line{fill:#fff}.dc-chart .box circle,.dc-chart .box line,.dc-chart .box rect{stroke:#000;stroke-width:1.5px}.dc-chart .box .center{stroke-dasharray:3,3}.dc-chart .box .outlier{fill:none;stroke:#ccc}.dc-chart .box.deselected{opacity:.5}.dc-chart .box.deselected .box{fill:#ccc}.dc-chart .symbol{stroke:none}.dc-chart .heatmap .box-group.deselected rect{stroke:none;fill-opacity:.5;fill:#ccc}.dc-chart .heatmap g.axis text{pointer-events:all;cursor:pointer}.dc-chart .empty-chart .pie-slice{cursor:default}.dc-chart .empty-chart .pie-slice path{fill:#fee;cursor:default}.dc-chart circle.dot{stroke:none}.dc-data-count{float:right;margin-top:15px;margin-right:15px}.dc-data-count .filter-count,.dc-data-count .total-count{color:#3182bd;font-weight:700}.dc-legend{font-size:11px}.dc-legend .dc-legend-item{cursor:pointer}.dc-hard .number-display{float:none} \ No newline at end of file diff --git a/civicrm/bower_components/dc-2.1.x/dc.min.js b/civicrm/bower_components/dc-2.1.x/dc.min.js index 7051060e89e3c54501bb36d903e402cf9f048d1e..987397a6396878d6392b546ef1a8044af0ce6058 100644 --- a/civicrm/bower_components/dc-2.1.x/dc.min.js +++ b/civicrm/bower_components/dc-2.1.x/dc.min.js @@ -1,5 +1,5 @@ /*! - * dc 2.1.9 + * dc 2.1.10 * http://dc-js.github.io/dc.js/ * Copyright 2012-2016 Nick Zhu & the dc.js Developers * https://github.com/dc-js/dc.js/blob/master/AUTHORS @@ -17,7 +17,7 @@ * limitations under the License. */ -!function(){function a(a,b){"use strict";var c={version:"2.1.9",constants:{CHART_CLASS:"dc-chart",DEBUG_GROUP_CLASS:"debug",STACK_CLASS:"stack",DESELECTED_CLASS:"deselected",SELECTED_CLASS:"selected",NODE_INDEX_NAME:"__index__",GROUP_INDEX_NAME:"__group_index__",DEFAULT_CHART_GROUP:"__default_chart_group__",EVENT_DELAY:40,NEGLIGIBLE_NUMBER:1e-10},_renderlet:null};c.chartRegistry=function(){function a(a){return a||(a=c.constants.DEFAULT_CHART_GROUP),b[a]||(b[a]=[]),a}var b={};return{has:function(a){for(var c in b)if(b[c].indexOf(a)>=0)return!0;return!1},register:function(c,d){d=a(d),b[d].push(c)},deregister:function(c,d){d=a(d);for(var e=0;e<b[d].length;e++)if(b[d][e].anchorName()===c.anchorName()){b[d].splice(e,1);break}},clear:function(a){a?delete b[a]:b={}},list:function(c){return c=a(c),b[c]}}}(),c.registerChart=function(a,b){c.chartRegistry.register(a,b)},c.deregisterChart=function(a,b){c.chartRegistry.deregister(a,b)},c.hasChart=function(a){return c.chartRegistry.has(a)},c.deregisterAllCharts=function(a){c.chartRegistry.clear(a)},c.filterAll=function(a){for(var b=c.chartRegistry.list(a),d=0;d<b.length;++d)b[d].filterAll()},c.refocusAll=function(a){for(var b=c.chartRegistry.list(a),d=0;d<b.length;++d)b[d].focus&&b[d].focus()},c.renderAll=function(a){for(var b=c.chartRegistry.list(a),d=0;d<b.length;++d)b[d].render();null!==c._renderlet&&c._renderlet(a)},c.redrawAll=function(a){for(var b=c.chartRegistry.list(a),d=0;d<b.length;++d)b[d].redraw();null!==c._renderlet&&c._renderlet(a)},c.disableTransitions=!1,c.transition=function(a,b,d,e){if(c.disableTransitions||b<=0)return a;var f=a.transition(e);return(b>=0||void 0!==b)&&(f=f.duration(b)),(d>=0||void 0!==d)&&(f=f.delay(d)),f},c.optionalTransition=function(a,b,d,e){return a?function(a){return c.transition(a,b,d,e)}:function(a){return a}},c.afterTransition=function(a,b){if(a.empty()||!a.duration)b.call(a);else{var c=0;a.each(function(){++c}).each("end",function(){--c||b.call(a)})}},c.units={},c.units.integers=function(a,b){return Math.abs(b-a)},c.units.ordinal=function(a,b,c){return c},c.units.fp={},c.units.fp.precision=function(a){var b=function(a,d){var e=Math.abs((d-a)/b.resolution);return c.utils.isNegligible(e-Math.floor(e))?Math.floor(e):Math.ceil(e)};return b.resolution=a,b},c.round={},c.round.floor=function(a){return Math.floor(a)},c.round.ceil=function(a){return Math.ceil(a)},c.round.round=function(a){return Math.round(a)},c.override=function(a,b,c){var d=a[b];a["_"+b]=d,a[b]=c},c.renderlet=function(a){return arguments.length?(c._renderlet=a,c):c._renderlet},c.instanceOfChart=function(a){return a instanceof Object&&a.__dcFlag__&&!0},c.errors={},c.errors.Exception=function(a){var b=a||"Unexpected internal error";this.message=b,this.toString=function(){return b},this.stack=(new Error).stack},c.errors.Exception.prototype=Object.create(Error.prototype),c.errors.Exception.prototype.constructor=c.errors.Exception,c.errors.InvalidStateException=function(){c.errors.Exception.apply(this,arguments)},c.errors.InvalidStateException.prototype=Object.create(c.errors.Exception.prototype),c.errors.InvalidStateException.prototype.constructor=c.errors.InvalidStateException,c.errors.BadArgumentException=function(){c.errors.Exception.apply(this,arguments)},c.errors.BadArgumentException.prototype=Object.create(c.errors.Exception.prototype),c.errors.BadArgumentException.prototype.constructor=c.errors.BadArgumentException,c.dateFormat=a.time.format("%m/%d/%Y"),c.printers={},c.printers.filters=function(a){for(var b="",d=0;d<a.length;++d)d>0&&(b+=", "),b+=c.printers.filter(a[d]);return b},c.printers.filter=function(a){var b="";return"undefined"!=typeof a&&null!==a&&(a instanceof Array?a.length>=2?b="["+c.utils.printSingleValue(a[0])+" -> "+c.utils.printSingleValue(a[1])+"]":a.length>=1&&(b=c.utils.printSingleValue(a[0])):b=c.utils.printSingleValue(a)),b},c.pluck=function(a,b){return b?function(c,d){return b.call(c,c[a],d)}:function(b){return b[a]}},c.utils={},c.utils.printSingleValue=function(a){var b=""+a;return a instanceof Date?b=c.dateFormat(a):"string"==typeof a?b=a:c.utils.isFloat(a)?b=c.utils.printSingleValue.fformat(a):c.utils.isInteger(a)&&(b=Math.round(a)),b},c.utils.printSingleValue.fformat=a.format(".2f"),c.utils.add=function(b,c,d){if("string"==typeof c&&(c=c.replace("%","")),b instanceof Date)return"string"==typeof c&&(c=+c),"millis"===d?new Date(b.getTime()+c):(d=d||"day",a.time[d].offset(b,c));if("string"==typeof c){var e=+c/100;return b>0?b*(1+e):b*(1-e)}return b+c},c.utils.subtract=function(b,c,d){if("string"==typeof c&&(c=c.replace("%","")),b instanceof Date)return"string"==typeof c&&(c=+c),"millis"===d?new Date(b.getTime()-c):(d=d||"day",a.time[d].offset(b,-c));if("string"==typeof c){var e=+c/100;return b<0?b*(1+e):b*(1-e)}return b-c},c.utils.isNumber=function(a){return a===+a},c.utils.isFloat=function(a){return a===+a&&a!==(0|a)},c.utils.isInteger=function(a){return a===+a&&a===(0|a)},c.utils.isNegligible=function(a){return!c.utils.isNumber(a)||a<c.constants.NEGLIGIBLE_NUMBER&&a>-c.constants.NEGLIGIBLE_NUMBER},c.utils.clamp=function(a,b,c){return a<b?b:a>c?c:a};var d=0;return c.utils.uniqueId=function(){return++d},c.utils.nameToId=function(a){return a.toLowerCase().replace(/[\s]/g,"_").replace(/[\.']/g,"")},c.utils.appendOrSelect=function(a,b,c){c=c||b;var d=a.select(b);return d.empty()&&(d=a.append(c)),d},c.utils.safeNumber=function(a){return c.utils.isNumber(+a)?+a:0},c.logger={},c.logger.enableDebugLog=!1,c.logger.warn=function(a){return console&&(console.warn?console.warn(a):console.log&&console.log(a)),c.logger},c.logger.debug=function(a){return c.logger.enableDebugLog&&console&&(console.debug?console.debug(a):console.log&&console.log(a)),c.logger},c.logger.deprecate=function(a,b){function d(){return e||(c.logger.warn(b),e=!0),a.apply(this,arguments)}var e=!1;return d},c.events={current:null},c.events.trigger=function(a,b){return b?(c.events.current=a,void setTimeout(function(){a===c.events.current&&a()},b)):void a()},c.filters={},c.filters.RangedFilter=function(a,b){var c=new Array(a,b);return c.isFiltered=function(a){return a>=this[0]&&a<this[1]},c.filterType="RangedFilter",c},c.filters.TwoDimensionalFilter=function(a){if(null===a)return null;var b=a;return b.isFiltered=function(a){return a.length&&a.length===b.length&&a[0]===b[0]&&a[1]===b[1]},b.filterType="TwoDimensionalFilter",b},c.filters.RangedTwoDimensionalFilter=function(a){if(null===a)return null;var b,c=a;return b=c[0]instanceof Array?[[Math.min(a[0][0],a[1][0]),Math.min(a[0][1],a[1][1])],[Math.max(a[0][0],a[1][0]),Math.max(a[0][1],a[1][1])]]:[[a[0],-(1/0)],[a[1],1/0]],c.isFiltered=function(a){var c,d;return a instanceof Array?(c=a[0],d=a[1]):(c=a,d=b[0][1]),c>=b[0][0]&&c<b[1][0]&&d>=b[0][1]&&d<b[1][1]},c.filterType="RangedTwoDimensionalFilter",c},c.baseMixin=function(d){function e(){m&&(z?m.attr("viewBox")||m.attr("viewBox","0 0 "+d.width()+" "+d.height()):m.attr("width",d.width()).attr("height",d.height()))}function f(){return m=d.root().append("svg"),e(),m}function g(a){if(!d[a]||!d[a]())throw new c.errors.InvalidStateException("Mandatory attribute chart."+a+" is missing on chart[#"+d.anchorName()+"]")}function h(a){if(d.dimension()&&d.dimension().filter){var b=P(d.dimension(),a);b&&(a=b)}return a}d.__dcFlag__=c.utils.uniqueId();var i,j,k,l,m,n,o,p,q,r,s,t=200,u=function(a){var b=a&&a.getBoundingClientRect&&a.getBoundingClientRect().width;return b&&b>t?b:t},v=u,w=200,x=function(a){var b=a&&a.getBoundingClientRect&&a.getBoundingClientRect().height;return b&&b>w?b:w},y=x,z=!1,A=c.pluck("key"),B=c.pluck("value"),C=c.pluck("key"),D=c.pluck("key"),E=!1,F=function(a){return d.keyAccessor()(a)+": "+d.valueAccessor()(a)},G=!0,H=!1,I=750,J=0,K=c.printers.filters,L=["dimension","group"],M=c.constants.DEFAULT_CHART_GROUP,N=a.dispatch("preRender","postRender","preRedraw","postRedraw","filtered","zoomed","renderlet","pretransition"),O=[],P=function(a,b){return 0===b.length?a.filter(null):1!==b.length||b[0].isFiltered?1===b.length&&"RangedFilter"===b[0].filterType?a.filterRange(b[0]):a.filterFunction(function(a){for(var c=0;c<b.length;c++){var d=b[c];if(d.isFiltered&&d.isFiltered(a))return!0;if(d<=a&&d>=a)return!0}return!1}):a.filterExact(b[0]),b},Q=function(a){return a.all()};d.height=function(b){return arguments.length?(y=a.functor(b||x),p=void 0,d):(c.utils.isNumber(p)||(p=y(l.node())),p)},d.width=function(b){return arguments.length?(v=a.functor(b||u),o=void 0,d):(c.utils.isNumber(o)||(o=v(l.node())),o)},d.minWidth=function(a){return arguments.length?(t=a,d):t},d.minHeight=function(a){return arguments.length?(w=a,d):w},d.useViewBoxResizing=function(a){return arguments.length?(z=a,d):z},d.dimension=function(a){return arguments.length?(i=a,d.expireCache(),d):i},d.data=function(b){return arguments.length?(Q=a.functor(b),d.expireCache(),d):Q.call(d,j)},d.group=function(a,b){return arguments.length?(j=a,d._groupName=b,d.expireCache(),d):j},d.ordering=function(a){return arguments.length?(D=a,q=b.quicksort.by(D),d.expireCache(),d):D},d._computeOrderedGroups=function(a){var c=a.slice(0);return c.length<=1?c:(q||(q=b.quicksort.by(D)),q(c,0,c.length))},d.filterAll=function(){return d.filter(null)},d.select=function(a){return l.select(a)},d.selectAll=function(a){return l?l.selectAll(a):null},d.anchor=function(b,e){if(!arguments.length)return k;if(c.instanceOfChart(b))k=b.anchor(),l=b.root(),n=!0;else{if(!b)throw new c.errors.BadArgumentException("parent must be defined");k=b.select&&b.classed?b.node():b,l=a.select(k),l.classed(c.constants.CHART_CLASS,!0),c.registerChart(d,e),n=!1}return M=e,d},d.anchorName=function(){var a=d.anchor();return a&&a.id?a.id:a&&a.replace?a.replace("#",""):"dc-chart"+d.chartID()},d.root=function(a){return arguments.length?(l=a,d):l},d.svg=function(a){return arguments.length?(m=a,d):m},d.resetSvg=function(){return d.select("svg").remove(),f()},d.filterPrinter=function(a){return arguments.length?(K=a,d):K},d.controlsUseVisibility=function(a){return arguments.length?(H=a,d):H},d.turnOnControls=function(){if(l){var a=d.controlsUseVisibility()?"visibility":"display";d.selectAll(".reset").style(a,null),d.selectAll(".filter").text(K(d.filters())).style(a,null)}return d},d.turnOffControls=function(){if(l){var a=d.controlsUseVisibility()?"visibility":"display",b=d.controlsUseVisibility()?"hidden":"none";d.selectAll(".reset").style(a,b),d.selectAll(".filter").style(a,b).text(d.filter())}return d},d.transitionDuration=function(a){return arguments.length?(I=a,d):I},d.transitionDelay=function(a){return arguments.length?(J=a,d):J},d._mandatoryAttributes=function(a){return arguments.length?(L=a,d):L},d.render=function(){p=o=void 0,N.preRender(d),L&&L.forEach(g);var a=d._doRender();return r&&r.render(),d._activateRenderlets("postRender"),a},d._activateRenderlets=function(a){N.pretransition(d),d.transitionDuration()>0&&m?m.transition().duration(d.transitionDuration()).delay(d.transitionDelay()).each("end",function(){N.renderlet(d),a&&N[a](d)}):(N.renderlet(d),a&&N[a](d))},d.redraw=function(){e(),N.preRedraw(d);var a=d._doRedraw();return r&&r.render(),d._activateRenderlets("postRedraw"),a},d.commitHandler=function(a){return arguments.length?(s=a,d):s},d.redrawGroup=function(){return s?s(!1,function(a,b){a?console.log(a):c.redrawAll(d.chartGroup())}):c.redrawAll(d.chartGroup()),d},d.renderGroup=function(){return s?s(!1,function(a,b){a?console.log(a):c.renderAll(d.chartGroup())}):c.renderAll(d.chartGroup()),d},d._invokeFilteredListener=function(a){void 0!==a&&N.filtered(d,a)},d._invokeZoomedListener=function(){N.zoomed(d)};var R=function(a,b){return null===b||"undefined"==typeof b?a.length>0:a.some(function(a){return b<=a&&b>=a})};d.hasFilterHandler=function(a){return arguments.length?(R=a,d):R},d.hasFilter=function(a){return R(O,a)};var S=function(a,b){for(var c=0;c<a.length;c++)if(a[c]<=b&&a[c]>=b){a.splice(c,1);break}return a};d.removeFilterHandler=function(a){return arguments.length?(S=a,d):S};var T=function(a,b){return a.push(b),a};d.addFilterHandler=function(a){return arguments.length?(T=a,d):T};var U=function(a){return[]};return d.resetFilterHandler=function(a){return arguments.length?(U=a,d):U},d.replaceFilter=function(a){return O=U(O),d.filter(a),d},d.filter=function(a){if(!arguments.length)return O.length>0?O[0]:null;var b=O;return a instanceof Array&&a[0]instanceof Array&&!a.isFiltered?a[0].forEach(function(a){b=R(b,a)?S(b,a):T(b,a)}):b=null===a?U(b):R(b,a)?S(b,a):T(b,a),O=h(b),d._invokeFilteredListener(a),null!==l&&d.hasFilter()?d.turnOnControls():d.turnOffControls(),d},d.filters=function(){return O},d.highlightSelected=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!0),a.select(b).classed(c.constants.DESELECTED_CLASS,!1)},d.fadeDeselected=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!1),a.select(b).classed(c.constants.DESELECTED_CLASS,!0)},d.resetHighlight=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!1),a.select(b).classed(c.constants.DESELECTED_CLASS,!1)},d.onClick=function(a){var b=d.keyAccessor()(a);c.events.trigger(function(){d.filter(b),d.redrawGroup()})},d.filterHandler=function(a){return arguments.length?(P=a,d):P},d._doRender=function(){return d},d._doRedraw=function(){return d},d.legendables=function(){return[]},d.legendHighlight=function(){},d.legendReset=function(){},d.legendToggle=function(){},d.isLegendableHidden=function(){return!1},d.keyAccessor=function(a){return arguments.length?(A=a,d):A},d.valueAccessor=function(a){return arguments.length?(B=a,d):B},d.label=function(a,b){return arguments.length?(C=a,(void 0===b||b)&&(E=!0),d):C},d.renderLabel=function(a){return arguments.length?(E=a,d):E},d.title=function(a){return arguments.length?(F=a,d):F},d.renderTitle=function(a){return arguments.length?(G=a,d):G},d.renderlet=c.logger.deprecate(function(a){return d.on("renderlet."+c.utils.uniqueId(),a),d},'chart.renderlet has been deprecated. Please use chart.on("renderlet.<renderletKey>", renderletFunction)'),d.chartGroup=function(a){return arguments.length?(n||c.deregisterChart(d,M),M=a,n||c.registerChart(d,M),d):M},d.expireCache=function(){return d},d.legend=function(a){return arguments.length?(r=a,r.parent(d),d):r},d.chartID=function(){return d.__dcFlag__},d.options=function(a){var b=["anchor","group","xAxisLabel","yAxisLabel","stack","title","point","getColor","overlayGeoJson"];for(var e in a)"function"==typeof d[e]?a[e]instanceof Array&&b.indexOf(e)!==-1?d[e].apply(d,a[e]):d[e].call(d,a[e]):c.logger.debug("Not a valid option setter name: "+e);return d},d.on=function(a,b){return N.on(a,b),d},d},c.marginMixin=function(a){var b={top:10,right:50,bottom:30,left:30};return a.margins=function(c){return arguments.length?(b=c,a):b},a.effectiveWidth=function(){return a.width()-a.margins().left-a.margins().right},a.effectiveHeight=function(){return a.height()-a.margins().top-a.margins().bottom},a},c.colorMixin=function(b){var d=a.scale.category20c(),e=!0,f=function(a){return b.keyAccessor()(a)};return b.colors=function(c){return arguments.length?(d=c instanceof Array?a.scale.quantize().range(c):a.functor(c),b):d},b.ordinalColors=function(c){return b.colors(a.scale.ordinal().range(c))},b.linearColors=function(c){return b.colors(a.scale.linear().range(c).interpolate(a.interpolateHcl))},b.colorAccessor=function(a){return arguments.length?(f=a,e=!1,b):f},b.defaultColorAccessor=function(){return e},b.colorDomain=function(a){return arguments.length?(d.domain(a),b):d.domain()},b.calculateColorDomain=function(){var c=[a.min(b.data(),b.colorAccessor()),a.max(b.data(),b.colorAccessor())];return d.domain(c),b},b.getColor=function(a,b){return d(f.call(this,a,b))},b.colorCalculator=c.logger.deprecate(function(a){return arguments.length?(b.getColor=a,b):b.getColor},"colorMixin.colorCalculator has been deprecated. Please colorMixin.colors and colorMixin.colorAccessor instead"),b},c.coordinateGridMixin=function(b){function d(a,b){return!a||!b||a.length!==b.length||a.some(function(a,c){return a&&b[c]?a.toString()!==b[c].toString():a===b[c]})}function e(a,c){b.isOrdinal()?(b.elasticX()||0===z.domain().length)&&z.domain(b._ordinalXDomain()):b.elasticX()&&z.domain([b.xAxisMin(),b.xAxisMax()]);var e=z.domain();(c||d(C,e))&&b.rescale(),C=e,b.isOrdinal()?z.rangeBands([0,b.xAxisLength()],fa,b._useOuterPadding()?ea:0):z.range([0,b.xAxisLength()]),J=J.scale(b.x()),f(a)}function f(a){var d=a.select("g."+s);if(W){d.empty()&&(d=a.insert("g",":first-child").attr("class",q+" "+s).attr("transform","translate("+b.margins().left+","+b.margins().top+")"));var e=J.tickValues()?J.tickValues():"function"==typeof z.ticks?z.ticks(J.ticks()[0]):z.domain(),f=d.selectAll("line").data(e),g=f.enter().append("line").attr("x1",function(a){return z(a)}).attr("y1",b._xAxisY()-b.margins().top).attr("x2",function(a){return z(a)}).attr("y2",0).attr("opacity",0);c.transition(g,b.transitionDuration(),b.transitionDelay()).attr("opacity",1),c.transition(f,b.transitionDuration(),b.transitionDelay()).attr("x1",function(a){return z(a)}).attr("y1",b._xAxisY()-b.margins().top).attr("x2",function(a){return z(a)}).attr("y2",0),f.exit().remove()}else d.selectAll("line").remove()}function g(){return b._xAxisY()-b.margins().top}function h(){return b.anchorName().replace(/[ .#=\[\]"]/g,"-")+"-clip"}function i(){var a=c.utils.appendOrSelect(w,"defs"),d=h(),e=c.utils.appendOrSelect(a,"#"+d,"clipPath").attr("id",d),f=2*da;c.utils.appendOrSelect(e,"rect").attr("width",b.xAxisLength()+f).attr("height",b.yAxisHeight()+f).attr("transform","translate(-"+da+", -"+da+")")}function j(a){b.isOrdinal()&&(U=!1),e(b.g(),a),b._prepareYAxis(b.g()),b.plotData(),(b.elasticX()||Y||a)&&b.renderXAxis(b.g()),(b.elasticY()||Y||a)&&b.renderYAxis(b.g()),a?b.renderBrush(b.g(),!1):b.redrawBrush(b.g(),Y),b.fadeDeselectedArea(),Y=!1}function k(){ca?b._enableMouseZoom():ba&&b._disableMouseZoom()}function l(){if(X=!0,$){var a=A;H&&(a=m(a,H.x().domain()));var d=n(b.x().domain(),a);d&&b.x().domain(d)}var e=b.x().domain(),f=c.filters.RangedFilter(e[0],e[1]);b.replaceFilter(f),b.rescale(),b.redraw(),H&&!o(b.filter(),H.filter())&&c.events.trigger(function(){H.replaceFilter(f),H.redraw()}),b._invokeZoomedListener(),c.events.trigger(function(){b.redrawGroup()},c.constants.EVENT_DELAY),X=!o(e,A)}function m(a,b){return(a[0]>b[1]||a[1]<b[0])&&console.warn("could not intersect extents"),[Math.max(a[0],b[0]),Math.min(a[1],b[1])]}function n(a,b){var d=a[1]-a[0];return a[0]<b[0]?[b[0],Math.min(b[1],c.utils.add(b[0],d,"millis"))]:a[1]>b[1]?[Math.max(b[0],c.utils.subtract(b[1],d,"millis")),b[1]]:null}function o(a,b){return!a&&!b||!(!a||!b)&&(0===a.length&&0===b.length||a[0].valueOf()===b[0].valueOf()&&a[1].valueOf()===b[1].valueOf())}function p(a){return a instanceof Array&&a.length>1}var q="grid-line",r="horizontal",s="vertical",t="y-axis-label",u="x-axis-label",v=12;b=c.colorMixin(c.marginMixin(c.baseMixin(b))),b.colors(a.scale.category10()),b._mandatoryAttributes().push("x");var w,x,y,z,A,B,C,D,E,F,G,H,I,J=a.svg.axis().orient("bottom"),K=c.units.integers,L=0,M="day",N=!1,O=0,P=a.svg.axis().orient("left"),Q=0,R=!1,S=0,T=a.svg.brush(),U=!0,V=!1,W=!1,X=!1,Y=!1,Z=[1,1/0],$=!0,_=a.behavior.zoom().on("zoom",l),aa=a.behavior.zoom().on("zoom",null),ba=!1,ca=!1,da=0,ea=.5,fa=0,ga=!1;return b.rescale=function(){return G=void 0,Y=!0,b},b.resizing=function(){return Y},b.rangeChart=function(a){return arguments.length?(H=a,H.focusChart(b),b):H},b.zoomScale=function(a){return arguments.length?(Z=a,b):Z},b.zoomOutRestrict=function(a){return arguments.length?(Z[0]=a?1:0,$=a,b):$},b._generateG=function(a){w=void 0===a?b.svg():a;var c=window.location.href.split("#")[0];return x=w.append("g"),y=x.append("g").attr("class","chart-body").attr("transform","translate("+b.margins().left+", "+b.margins().top+")").attr("clip-path","url("+c+"#"+h()+")"),x},b.g=function(a){return arguments.length?(x=a,b):x},b.mouseZoomable=function(a){return arguments.length?(ca=a,b):ca},b.chartBodyG=function(a){return arguments.length?(y=a,b):y},b.x=function(a){return arguments.length?(z=a,A=z.domain(),b.rescale(),b):z},b.xOriginalDomain=function(){return A},b.xUnits=function(a){return arguments.length?(K=a,b):K},b.xAxis=function(a){return arguments.length?(J=a,b):J},b.elasticX=function(a){return arguments.length?(N=a,b):N},b.xAxisPadding=function(a){return arguments.length?(L=a,b):L},b.xAxisPaddingUnit=function(a){return arguments.length?(M=a,b):M},b.xUnitCount=function(){if(void 0===G){var a=b.xUnits()(b.x().domain()[0],b.x().domain()[1],b.x().domain());G=a instanceof Array?a.length:a}return G},b.useRightYAxis=function(a){return arguments.length?(ga=a,b):ga},b.isOrdinal=function(){return b.xUnits()===c.units.ordinal},b._useOuterPadding=function(){return!0},b._ordinalXDomain=function(){var a=b._computeOrderedGroups(b.data());return a.map(b.keyAccessor())},b.renderXAxis=function(a){var d=a.select("g.x");d.empty()&&(d=a.append("g").attr("class","axis x").attr("transform","translate("+b.margins().left+","+b._xAxisY()+")"));var e=a.select("text."+u);e.empty()&&b.xAxisLabel()&&(e=a.append("text").attr("class",u).attr("transform","translate("+(b.margins().left+b.xAxisLength()/2)+","+(b.height()-O)+")").attr("text-anchor","middle")),b.xAxisLabel()&&e.text()!==b.xAxisLabel()&&e.text(b.xAxisLabel()),c.transition(d,b.transitionDuration(),b.transitionDelay()).attr("transform","translate("+b.margins().left+","+b._xAxisY()+")").call(J),c.transition(e,b.transitionDuration(),b.transitionDelay()).attr("transform","translate("+(b.margins().left+b.xAxisLength()/2)+","+(b.height()-O)+")")},b._xAxisY=function(){return b.height()-b.margins().bottom},b.xAxisLength=function(){return b.effectiveWidth()},b.xAxisLabel=function(a,c){return arguments.length?(B=a,b.margins().bottom-=O,O=void 0===c?v:c,b.margins().bottom+=O,b):B},b._prepareYAxis=function(c){if(void 0===D||b.elasticY()){void 0===D&&(D=a.scale.linear());var d=b.yAxisMin()||0,e=b.yAxisMax()||0;D.domain([d,e]).rangeRound([b.yAxisHeight(),0])}D.range([b.yAxisHeight(),0]),P=P.scale(D),ga&&P.orient("right"),b._renderHorizontalGridLinesForAxis(c,D,P)},b.renderYAxisLabel=function(a,d,e,f){f=f||S;var g=b.g().select("text."+t+"."+a+"-label"),h=b.margins().top+b.yAxisHeight()/2;g.empty()&&d&&(g=b.g().append("text").attr("transform","translate("+f+","+h+"),rotate("+e+")").attr("class",t+" "+a+"-label").attr("text-anchor","middle").text(d)),d&&g.text()!==d&&g.text(d),c.transition(g,b.transitionDuration(),b.transitionDelay()).attr("transform","translate("+f+","+h+"),rotate("+e+")")},b.renderYAxisAt=function(a,d,e){var f=b.g().select("g."+a);f.empty()&&(f=b.g().append("g").attr("class","axis "+a).attr("transform","translate("+e+","+b.margins().top+")")),c.transition(f,b.transitionDuration(),b.transitionDelay()).attr("transform","translate("+e+","+b.margins().top+")").call(d)},b.renderYAxis=function(){var a=ga?b.width()-b.margins().right:b._yAxisX();b.renderYAxisAt("y",P,a);var c=ga?b.width()-S:S,d=ga?90:-90;b.renderYAxisLabel("y",b.yAxisLabel(),d,c)},b._renderHorizontalGridLinesForAxis=function(a,d,e){var f=a.select("g."+r);if(V){var g=e.tickValues()?e.tickValues():d.ticks(e.ticks()[0]);f.empty()&&(f=a.insert("g",":first-child").attr("class",q+" "+r).attr("transform","translate("+b.margins().left+","+b.margins().top+")"));var h=f.selectAll("line").data(g),i=h.enter().append("line").attr("x1",1).attr("y1",function(a){return d(a)}).attr("x2",b.xAxisLength()).attr("y2",function(a){return d(a)}).attr("opacity",0);c.transition(i,b.transitionDuration(),b.transitionDelay()).attr("opacity",1),c.transition(h,b.transitionDuration(),b.transitionDelay()).attr("x1",1).attr("y1",function(a){return d(a)}).attr("x2",b.xAxisLength()).attr("y2",function(a){return d(a)}),h.exit().remove()}else f.selectAll("line").remove()},b._yAxisX=function(){return b.useRightYAxis()?b.width()-b.margins().right:b.margins().left},b.yAxisLabel=function(a,c){return arguments.length?(E=a,b.margins().left-=S,S=void 0===c?v:c,b.margins().left+=S,b):E},b.y=function(a){return arguments.length?(D=a,b.rescale(),b):D},b.yAxis=function(a){return arguments.length?(P=a,b):P},b.elasticY=function(a){return arguments.length?(R=a,b):R},b.renderHorizontalGridLines=function(a){return arguments.length?(V=a,b):V},b.renderVerticalGridLines=function(a){return arguments.length?(W=a,b):W},b.xAxisMin=function(){var d=a.min(b.data(),function(a){return b.keyAccessor()(a)});return c.utils.subtract(d,L,M)},b.xAxisMax=function(){var d=a.max(b.data(),function(a){return b.keyAccessor()(a)});return c.utils.add(d,L,M)},b.yAxisMin=function(){var d=a.min(b.data(),function(a){return b.valueAccessor()(a)});return c.utils.subtract(d,Q)},b.yAxisMax=function(){var d=a.max(b.data(),function(a){return b.valueAccessor()(a)});return c.utils.add(d,Q)},b.yAxisPadding=function(a){return arguments.length?(Q=a,b):Q},b.yAxisHeight=function(){return b.effectiveHeight()},b.round=function(a){return arguments.length?(F=a,b):F},b._rangeBandPadding=function(a){return arguments.length?(fa=a,b):fa},b._outerRangeBandPadding=function(a){return arguments.length?(ea=a,b):ea},c.override(b,"filter",function(a){return arguments.length?(b._filter(a),a?b.brush().extent(a):b.brush().clear(),b):b._filter()}),b.brush=function(a){return arguments.length?(T=a,b):T},b.renderBrush=function(a){if(U){T.on("brush",b._brushing),T.on("brushstart",b._disableMouseZoom),T.on("brushend",k);var c=a.append("g").attr("class","brush").attr("transform","translate("+b.margins().left+","+b.margins().top+")").call(T.x(b.x()));b.setBrushY(c,!1),b.setHandlePaths(c),b.hasFilter()&&b.redrawBrush(a,!1)}},b.setHandlePaths=function(a){a.selectAll(".resize").append("path").attr("d",b.resizeHandlePath)},b.setBrushY=function(a){a.selectAll("rect").attr("height",g()),a.selectAll(".resize path").attr("d",b.resizeHandlePath)},b.extendBrush=function(){var a=T.extent();return b.round()&&(a[0]=a.map(b.round())[0],a[1]=a.map(b.round())[1],x.select(".brush").call(T.extent(a))),a},b.brushIsEmpty=function(a){return T.empty()||!a||a[1]<=a[0]},b._brushing=function(){var a=b.extendBrush();if(b.redrawBrush(x,!1),b.brushIsEmpty(a))c.events.trigger(function(){b.filter(null),b.redrawGroup()},c.constants.EVENT_DELAY);else{var d=c.filters.RangedFilter(a[0],a[1]);c.events.trigger(function(){b.replaceFilter(d),b.redrawGroup()},c.constants.EVENT_DELAY)}},b.redrawBrush=function(a,d){if(U){b.filter()&&b.brush().empty()&&b.brush().extent(b.filter());var e=c.optionalTransition(d,b.transitionDuration(),b.transitionDelay())(a.select("g.brush"));b.setBrushY(e),e.call(b.brush().x(b.x()).extent(b.brush().extent()))}b.fadeDeselectedArea()},b.fadeDeselectedArea=function(){},b.resizeHandlePath=function(a){var b=+("e"===a),c=b?1:-1,d=g()/3;return"M"+.5*c+","+d+"A6,6 0 0 "+b+" "+6.5*c+","+(d+6)+"V"+(2*d-6)+"A6,6 0 0 "+b+" "+.5*c+","+2*d+"ZM"+2.5*c+","+(d+8)+"V"+(2*d-8)+"M"+4.5*c+","+(d+8)+"V"+(2*d-8)},b.clipPadding=function(a){return arguments.length?(da=a,b):da},b._preprocessData=function(){},b._doRender=function(){return b.resetSvg(),b._preprocessData(),b._generateG(),i(),j(!0),k(),b},b._doRedraw=function(){return b._preprocessData(),j(!1),i(),b},b._enableMouseZoom=function(){ba=!0,_.x(b.x()).scaleExtent(Z).size([b.width(),b.height()]).duration(b.transitionDuration()),b.root().call(_)},b._disableMouseZoom=function(){b.root().call(aa)},b.focus=function(a){p(a)?b.x().domain(a):b.x().domain(A),_.x(b.x()),l()},b.refocused=function(){return X},b.focusChart=function(a){return arguments.length?(I=a,b.on("filtered",function(a){a.filter()?o(a.filter(),I.filter())||c.events.trigger(function(){I.focus(a.filter())}):c.events.trigger(function(){I.x().domain(I.xOriginalDomain())})}),b):I},b.brushOn=function(a){return arguments.length?(U=a,b):U},b},c.stackMixin=function(b){function d(a,c){var d=a.accessor||b.valueAccessor();return a.name=String(a.name||c),a.values=a.group.all().map(function(c,e){return{x:b.keyAccessor()(c,e),y:a.hidden?null:d(c,e),data:c,layer:a.name,hidden:a.hidden}}),a.values=a.values.filter(e()),a.values}function e(){if(!b.x()||m)return a.functor(!0);var c=b.x().domain();return b.isOrdinal()?function(){return!0}:b.elasticX()?function(){return!0}:function(a){return a.x>=c[0]&&a.x<=c[c.length-1]}}function f(a){var b=j.map(c.pluck("name")).indexOf(a);return j[b]}function g(){var a=b.data().map(function(a){return a.values});return Array.prototype.concat.apply([],a)}function h(a){return!a.hidden}var i=a.layout.stack().values(d),j=[],k={},l=!1,m=!1;return b.stack=function(a,c,d){if(!arguments.length)return j;arguments.length<=2&&(d=c);var e={group:a};return"string"==typeof c&&(e.name=c),"function"==typeof d&&(e.accessor=d),j.push(e),b},c.override(b,"group",function(a,c,d){return arguments.length?(j=[],k={},b.stack(a,c),d&&b.valueAccessor(d),b._group(a,c)):b._group()}),b.hidableStacks=function(a){return arguments.length?(l=a,b):l},b.hideStack=function(a){var c=f(a);return c&&(c.hidden=!0),b},b.showStack=function(a){var c=f(a);return c&&(c.hidden=!1),b},b.getValueAccessorByIndex=function(a){return j[a].accessor||b.valueAccessor()},b.yAxisMin=function(){var d=a.min(g(),function(a){return a.y<0?a.y+a.y0:a.y0});return c.utils.subtract(d,b.yAxisPadding())},b.yAxisMax=function(){var d=a.max(g(),function(a){return a.y>0?a.y+a.y0:a.y0});return c.utils.add(d,b.yAxisPadding())},b.xAxisMin=function(){var d=a.min(g(),c.pluck("x"));return c.utils.subtract(d,b.xAxisPadding(),b.xAxisPaddingUnit())},b.xAxisMax=function(){var d=a.max(g(),c.pluck("x"));return c.utils.add(d,b.xAxisPadding(),b.xAxisPaddingUnit())},c.override(b,"title",function(a,c){return a?"function"==typeof a?b._title(a):a===b._groupName&&"function"==typeof c?b._title(c):"function"!=typeof c?k[a]||b._title():(k[a]=c,b):b._title()}),b.stackLayout=function(c){return arguments.length?(i=c,i.values()===a.layout.stack().values()&&i.values(d),b):i},b.evadeDomainFilter=function(a){return arguments.length?(m=a,b):m},b.data(function(){var a=j.filter(h);return a.length?b.stackLayout()(a):[]}),b._ordinalXDomain=function(){var a=g().map(c.pluck("data")),d=b._computeOrderedGroups(a);return d.map(b.keyAccessor())},b.colorAccessor(function(a){var b=this.layer||this.name||a.name||a.layer;return b}),b.legendables=function(){return j.map(function(a,c){return{chart:b,name:a.name,hidden:a.hidden||!1,color:b.getColor.call(a,a.values,c)}})},b.isLegendableHidden=function(a){var b=f(a.name);return!!b&&b.hidden},b.legendToggle=function(a){l&&(b.isLegendableHidden(a)?b.showStack(a.name):b.hideStack(a.name),b.renderGroup())},b},c.capMixin=function(b){var d=1/0,e=!0,f="Others";b.ordering(function(a){return-a.value});var g=function(c,d){var e=a.sum(d,b.valueAccessor()),f=d.map(b.keyAccessor());return e>0?c.concat([{others:f,key:b.othersLabel(),value:e}]):c};return b.cappedKeyAccessor=function(a,c){return a.others?a.key:b.keyAccessor()(a,c)},b.cappedValueAccessor=function(a,c){return a.others?a.value:b.valueAccessor()(a,c)},b.data(function(a){if(d===1/0)return b._computeOrderedGroups(a.all());var c,f=a.all();if(f=b._computeOrderedGroups(f),d)if(e)c=f.slice(d),f=f.slice(0,d);else{var h=Math.max(0,f.length-d);c=f.slice(0,h),f=f.slice(h)}return g?g(f,c):f}),b.cap=function(a){return arguments.length?(d=a,b):d},b.takeFront=function(a){return arguments.length?(e=a,b):e},b.othersLabel=function(a){return arguments.length?(f=a,b):f},b.othersGrouper=function(a){return arguments.length?(g=a,b):g},c.override(b,"onClick",function(a){a.others&&b.filter([a.others]),b._onClick(a)}),b},c.bubbleMixin=function(b){var d=.3,e=10,f=!1,g=!1;b.BUBBLE_NODE_CLASS="node",b.BUBBLE_CLASS="bubble",b.MIN_RADIUS=10,b=c.colorMixin(b),b.renderLabel(!0),b.data(function(c){var d=c.all();if(f){var e=b.radiusValueAccessor();d.sort(function(b,c){return a.descending(e(b),e(c))})}return d});var h=a.scale.linear().domain([0,100]),i=function(a){return a.r};b.r=function(a){return arguments.length?(h=a,b):h},b.elasticRadius=function(a){return arguments.length?(g=a,b):g},b.calculateRadiusDomain=function(){g&&b.r().domain([b.rMin(),b.rMax()])},b.radiusValueAccessor=function(a){return arguments.length?(i=a,b):i},b.rMin=function(){var c=a.min(b.data(),function(a){ +!function(){function a(a,b){"use strict";var c={version:"2.1.10",constants:{CHART_CLASS:"dc-chart",DEBUG_GROUP_CLASS:"debug",STACK_CLASS:"stack",DESELECTED_CLASS:"deselected",SELECTED_CLASS:"selected",NODE_INDEX_NAME:"__index__",GROUP_INDEX_NAME:"__group_index__",DEFAULT_CHART_GROUP:"__default_chart_group__",EVENT_DELAY:40,NEGLIGIBLE_NUMBER:1e-10},_renderlet:null};c.chartRegistry=function(){function a(a){return a||(a=c.constants.DEFAULT_CHART_GROUP),b[a]||(b[a]=[]),a}var b={};return{has:function(a){for(var c in b)if(b[c].indexOf(a)>=0)return!0;return!1},register:function(c,d){d=a(d),b[d].push(c)},deregister:function(c,d){d=a(d);for(var e=0;e<b[d].length;e++)if(b[d][e].anchorName()===c.anchorName()){b[d].splice(e,1);break}},clear:function(a){a?delete b[a]:b={}},list:function(c){return c=a(c),b[c]}}}(),c.registerChart=function(a,b){c.chartRegistry.register(a,b)},c.deregisterChart=function(a,b){c.chartRegistry.deregister(a,b)},c.hasChart=function(a){return c.chartRegistry.has(a)},c.deregisterAllCharts=function(a){c.chartRegistry.clear(a)},c.filterAll=function(a){for(var b=c.chartRegistry.list(a),d=0;d<b.length;++d)b[d].filterAll()},c.refocusAll=function(a){for(var b=c.chartRegistry.list(a),d=0;d<b.length;++d)b[d].focus&&b[d].focus()},c.renderAll=function(a){for(var b=c.chartRegistry.list(a),d=0;d<b.length;++d)b[d].render();null!==c._renderlet&&c._renderlet(a)},c.redrawAll=function(a){for(var b=c.chartRegistry.list(a),d=0;d<b.length;++d)b[d].redraw();null!==c._renderlet&&c._renderlet(a)},c.disableTransitions=!1,c.transition=function(a,b,d,e){if(c.disableTransitions||b<=0)return a;var f=a.transition(e);return(b>=0||void 0!==b)&&(f=f.duration(b)),(d>=0||void 0!==d)&&(f=f.delay(d)),f},c.optionalTransition=function(a,b,d,e){return a?function(a){return c.transition(a,b,d,e)}:function(a){return a}},c.afterTransition=function(a,b){if(a.empty()||!a.duration)b.call(a);else{var c=0;a.each(function(){++c}).each("end",function(){--c||b.call(a)})}},c.units={},c.units.integers=function(a,b){return Math.abs(b-a)},c.units.ordinal=function(a,b,c){return c},c.units.fp={},c.units.fp.precision=function(a){var b=function(a,d){var e=Math.abs((d-a)/b.resolution);return c.utils.isNegligible(e-Math.floor(e))?Math.floor(e):Math.ceil(e)};return b.resolution=a,b},c.round={},c.round.floor=function(a){return Math.floor(a)},c.round.ceil=function(a){return Math.ceil(a)},c.round.round=function(a){return Math.round(a)},c.override=function(a,b,c){var d=a[b];a["_"+b]=d,a[b]=c},c.renderlet=function(a){return arguments.length?(c._renderlet=a,c):c._renderlet},c.instanceOfChart=function(a){return a instanceof Object&&a.__dcFlag__&&!0},c.errors={},c.errors.Exception=function(a){var b=a||"Unexpected internal error";this.message=b,this.toString=function(){return b},this.stack=(new Error).stack},c.errors.Exception.prototype=Object.create(Error.prototype),c.errors.Exception.prototype.constructor=c.errors.Exception,c.errors.InvalidStateException=function(){c.errors.Exception.apply(this,arguments)},c.errors.InvalidStateException.prototype=Object.create(c.errors.Exception.prototype),c.errors.InvalidStateException.prototype.constructor=c.errors.InvalidStateException,c.errors.BadArgumentException=function(){c.errors.Exception.apply(this,arguments)},c.errors.BadArgumentException.prototype=Object.create(c.errors.Exception.prototype),c.errors.BadArgumentException.prototype.constructor=c.errors.BadArgumentException,c.dateFormat=a.time.format("%m/%d/%Y"),c.printers={},c.printers.filters=function(a){for(var b="",d=0;d<a.length;++d)d>0&&(b+=", "),b+=c.printers.filter(a[d]);return b},c.printers.filter=function(a){var b="";return"undefined"!=typeof a&&null!==a&&(a instanceof Array?a.length>=2?b="["+c.utils.printSingleValue(a[0])+" -> "+c.utils.printSingleValue(a[1])+"]":a.length>=1&&(b=c.utils.printSingleValue(a[0])):b=c.utils.printSingleValue(a)),b},c.pluck=function(a,b){return b?function(c,d){return b.call(c,c[a],d)}:function(b){return b[a]}},c.utils={},c.utils.printSingleValue=function(a){var b=""+a;return a instanceof Date?b=c.dateFormat(a):"string"==typeof a?b=a:c.utils.isFloat(a)?b=c.utils.printSingleValue.fformat(a):c.utils.isInteger(a)&&(b=Math.round(a)),b},c.utils.printSingleValue.fformat=a.format(".2f"),c.utils.add=function(b,c,d){if("string"==typeof c&&(c=c.replace("%","")),b instanceof Date)return"string"==typeof c&&(c=+c),"millis"===d?new Date(b.getTime()+c):(d=d||"day",a.time[d].offset(b,c));if("string"==typeof c){var e=+c/100;return b>0?b*(1+e):b*(1-e)}return b+c},c.utils.subtract=function(b,c,d){if("string"==typeof c&&(c=c.replace("%","")),b instanceof Date)return"string"==typeof c&&(c=+c),"millis"===d?new Date(b.getTime()-c):(d=d||"day",a.time[d].offset(b,-c));if("string"==typeof c){var e=+c/100;return b<0?b*(1+e):b*(1-e)}return b-c},c.utils.isNumber=function(a){return a===+a},c.utils.isFloat=function(a){return a===+a&&a!==(0|a)},c.utils.isInteger=function(a){return a===+a&&a===(0|a)},c.utils.isNegligible=function(a){return!c.utils.isNumber(a)||a<c.constants.NEGLIGIBLE_NUMBER&&a>-c.constants.NEGLIGIBLE_NUMBER},c.utils.clamp=function(a,b,c){return a<b?b:a>c?c:a};var d=0;return c.utils.uniqueId=function(){return++d},c.utils.nameToId=function(a){return a.toLowerCase().replace(/[\s]/g,"_").replace(/[\.']/g,"")},c.utils.appendOrSelect=function(a,b,c){c=c||b;var d=a.select(b);return d.empty()&&(d=a.append(c)),d},c.utils.safeNumber=function(a){return c.utils.isNumber(+a)?+a:0},c.logger={},c.logger.enableDebugLog=!1,c.logger.warn=function(a){return console&&(console.warn?console.warn(a):console.log&&console.log(a)),c.logger},c.logger.debug=function(a){return c.logger.enableDebugLog&&console&&(console.debug?console.debug(a):console.log&&console.log(a)),c.logger},c.logger.deprecate=function(a,b){function d(){return e||(c.logger.warn(b),e=!0),a.apply(this,arguments)}var e=!1;return d},c.events={current:null},c.events.trigger=function(a,b){return b?(c.events.current=a,void setTimeout(function(){a===c.events.current&&a()},b)):void a()},c.filters={},c.filters.RangedFilter=function(a,b){var c=new Array(a,b);return c.isFiltered=function(a){return a>=this[0]&&a<this[1]},c.filterType="RangedFilter",c},c.filters.TwoDimensionalFilter=function(a){if(null===a)return null;var b=a;return b.isFiltered=function(a){return a.length&&a.length===b.length&&a[0]===b[0]&&a[1]===b[1]},b.filterType="TwoDimensionalFilter",b},c.filters.RangedTwoDimensionalFilter=function(a){if(null===a)return null;var b,c=a;return b=c[0]instanceof Array?[[Math.min(a[0][0],a[1][0]),Math.min(a[0][1],a[1][1])],[Math.max(a[0][0],a[1][0]),Math.max(a[0][1],a[1][1])]]:[[a[0],-(1/0)],[a[1],1/0]],c.isFiltered=function(a){var c,d;return a instanceof Array?(c=a[0],d=a[1]):(c=a,d=b[0][1]),c>=b[0][0]&&c<b[1][0]&&d>=b[0][1]&&d<b[1][1]},c.filterType="RangedTwoDimensionalFilter",c},c.baseMixin=function(d){function e(){m&&(z?m.attr("viewBox")||m.attr("viewBox","0 0 "+d.width()+" "+d.height()):m.attr("width",d.width()).attr("height",d.height()))}function f(){return m=d.root().append("svg"),e(),m}function g(a){if(!d[a]||!d[a]())throw new c.errors.InvalidStateException("Mandatory attribute chart."+a+" is missing on chart[#"+d.anchorName()+"]")}function h(a){if(d.dimension()&&d.dimension().filter){var b=P(d.dimension(),a);b&&(a=b)}return a}d.__dcFlag__=c.utils.uniqueId();var i,j,k,l,m,n,o,p,q,r,s,t=200,u=function(a){var b=a&&a.getBoundingClientRect&&a.getBoundingClientRect().width;return b&&b>t?b:t},v=u,w=200,x=function(a){var b=a&&a.getBoundingClientRect&&a.getBoundingClientRect().height;return b&&b>w?b:w},y=x,z=!1,A=c.pluck("key"),B=c.pluck("value"),C=c.pluck("key"),D=c.pluck("key"),E=!1,F=function(a){return d.keyAccessor()(a)+": "+d.valueAccessor()(a)},G=!0,H=!1,I=750,J=0,K=c.printers.filters,L=["dimension","group"],M=c.constants.DEFAULT_CHART_GROUP,N=a.dispatch("preRender","postRender","preRedraw","postRedraw","filtered","zoomed","renderlet","pretransition"),O=[],P=function(a,b){return 0===b.length?a.filter(null):1!==b.length||b[0].isFiltered?1===b.length&&"RangedFilter"===b[0].filterType?a.filterRange(b[0]):a.filterFunction(function(a){for(var c=0;c<b.length;c++){var d=b[c];if(d.isFiltered&&d.isFiltered(a))return!0;if(d<=a&&d>=a)return!0}return!1}):a.filterExact(b[0]),b},Q=function(a){return a.all()};d.height=function(b){return arguments.length?(y=a.functor(b||x),p=void 0,d):(c.utils.isNumber(p)||(p=y(l.node())),p)},d.width=function(b){return arguments.length?(v=a.functor(b||u),o=void 0,d):(c.utils.isNumber(o)||(o=v(l.node())),o)},d.minWidth=function(a){return arguments.length?(t=a,d):t},d.minHeight=function(a){return arguments.length?(w=a,d):w},d.useViewBoxResizing=function(a){return arguments.length?(z=a,d):z},d.dimension=function(a){return arguments.length?(i=a,d.expireCache(),d):i},d.data=function(b){return arguments.length?(Q=a.functor(b),d.expireCache(),d):Q.call(d,j)},d.group=function(a,b){return arguments.length?(j=a,d._groupName=b,d.expireCache(),d):j},d.ordering=function(a){return arguments.length?(D=a,q=b.quicksort.by(D),d.expireCache(),d):D},d._computeOrderedGroups=function(a){var c=a.slice(0);return c.length<=1?c:(q||(q=b.quicksort.by(D)),q(c,0,c.length))},d.filterAll=function(){return d.filter(null)},d.select=function(a){return l.select(a)},d.selectAll=function(a){return l?l.selectAll(a):null},d.anchor=function(b,e){if(!arguments.length)return k;if(c.instanceOfChart(b))k=b.anchor(),l=b.root(),n=!0;else{if(!b)throw new c.errors.BadArgumentException("parent must be defined");k=b.select&&b.classed?b.node():b,l=a.select(k),l.classed(c.constants.CHART_CLASS,!0),c.registerChart(d,e),n=!1}return M=e,d},d.anchorName=function(){var a=d.anchor();return a&&a.id?a.id:a&&a.replace?a.replace("#",""):"dc-chart"+d.chartID()},d.root=function(a){return arguments.length?(l=a,d):l},d.svg=function(a){return arguments.length?(m=a,d):m},d.resetSvg=function(){return d.select("svg").remove(),f()},d.filterPrinter=function(a){return arguments.length?(K=a,d):K},d.controlsUseVisibility=function(a){return arguments.length?(H=a,d):H},d.turnOnControls=function(){if(l){var a=d.controlsUseVisibility()?"visibility":"display";d.selectAll(".reset").style(a,null),d.selectAll(".filter").text(K(d.filters())).style(a,null)}return d},d.turnOffControls=function(){if(l){var a=d.controlsUseVisibility()?"visibility":"display",b=d.controlsUseVisibility()?"hidden":"none";d.selectAll(".reset").style(a,b),d.selectAll(".filter").style(a,b).text(d.filter())}return d},d.transitionDuration=function(a){return arguments.length?(I=a,d):I},d.transitionDelay=function(a){return arguments.length?(J=a,d):J},d._mandatoryAttributes=function(a){return arguments.length?(L=a,d):L},d.render=function(){p=o=void 0,N.preRender(d),L&&L.forEach(g);var a=d._doRender();return r&&r.render(),d._activateRenderlets("postRender"),a},d._activateRenderlets=function(a){N.pretransition(d),d.transitionDuration()>0&&m?m.transition().duration(d.transitionDuration()).delay(d.transitionDelay()).each("end",function(){N.renderlet(d),a&&N[a](d)}):(N.renderlet(d),a&&N[a](d))},d.redraw=function(){e(),N.preRedraw(d);var a=d._doRedraw();return r&&r.render(),d._activateRenderlets("postRedraw"),a},d.commitHandler=function(a){return arguments.length?(s=a,d):s},d.redrawGroup=function(){return s?s(!1,function(a,b){a?console.log(a):c.redrawAll(d.chartGroup())}):c.redrawAll(d.chartGroup()),d},d.renderGroup=function(){return s?s(!1,function(a,b){a?console.log(a):c.renderAll(d.chartGroup())}):c.renderAll(d.chartGroup()),d},d._invokeFilteredListener=function(a){void 0!==a&&N.filtered(d,a)},d._invokeZoomedListener=function(){N.zoomed(d)};var R=function(a,b){return null===b||"undefined"==typeof b?a.length>0:a.some(function(a){return b<=a&&b>=a})};d.hasFilterHandler=function(a){return arguments.length?(R=a,d):R},d.hasFilter=function(a){return R(O,a)};var S=function(a,b){for(var c=0;c<a.length;c++)if(a[c]<=b&&a[c]>=b){a.splice(c,1);break}return a};d.removeFilterHandler=function(a){return arguments.length?(S=a,d):S};var T=function(a,b){return a.push(b),a};d.addFilterHandler=function(a){return arguments.length?(T=a,d):T};var U=function(a){return[]};return d.resetFilterHandler=function(a){return arguments.length?(U=a,d):U},d.replaceFilter=function(a){return O=U(O),d.filter(a),d},d.filter=function(a){if(!arguments.length)return O.length>0?O[0]:null;var b=O;return a instanceof Array&&a[0]instanceof Array&&!a.isFiltered?a[0].forEach(function(a){b=R(b,a)?S(b,a):T(b,a)}):b=null===a?U(b):R(b,a)?S(b,a):T(b,a),O=h(b),d._invokeFilteredListener(a),null!==l&&d.hasFilter()?d.turnOnControls():d.turnOffControls(),d},d.filters=function(){return O},d.highlightSelected=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!0),a.select(b).classed(c.constants.DESELECTED_CLASS,!1)},d.fadeDeselected=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!1),a.select(b).classed(c.constants.DESELECTED_CLASS,!0)},d.resetHighlight=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!1),a.select(b).classed(c.constants.DESELECTED_CLASS,!1)},d.onClick=function(a){var b=d.keyAccessor()(a);c.events.trigger(function(){d.filter(b),d.redrawGroup()})},d.filterHandler=function(a){return arguments.length?(P=a,d):P},d._doRender=function(){return d},d._doRedraw=function(){return d},d.legendables=function(){return[]},d.legendHighlight=function(){},d.legendReset=function(){},d.legendToggle=function(){},d.isLegendableHidden=function(){return!1},d.keyAccessor=function(a){return arguments.length?(A=a,d):A},d.valueAccessor=function(a){return arguments.length?(B=a,d):B},d.label=function(a,b){return arguments.length?(C=a,(void 0===b||b)&&(E=!0),d):C},d.renderLabel=function(a){return arguments.length?(E=a,d):E},d.title=function(a){return arguments.length?(F=a,d):F},d.renderTitle=function(a){return arguments.length?(G=a,d):G},d.renderlet=c.logger.deprecate(function(a){return d.on("renderlet."+c.utils.uniqueId(),a),d},'chart.renderlet has been deprecated. Please use chart.on("renderlet.<renderletKey>", renderletFunction)'),d.chartGroup=function(a){return arguments.length?(n||c.deregisterChart(d,M),M=a,n||c.registerChart(d,M),d):M},d.expireCache=function(){return d},d.legend=function(a){return arguments.length?(r=a,r.parent(d),d):r},d.chartID=function(){return d.__dcFlag__},d.options=function(a){var b=["anchor","group","xAxisLabel","yAxisLabel","stack","title","point","getColor","overlayGeoJson"];for(var e in a)"function"==typeof d[e]?a[e]instanceof Array&&b.indexOf(e)!==-1?d[e].apply(d,a[e]):d[e].call(d,a[e]):c.logger.debug("Not a valid option setter name: "+e);return d},d.on=function(a,b){return N.on(a,b),d},d},c.marginMixin=function(a){var b={top:10,right:50,bottom:30,left:30};return a.margins=function(c){return arguments.length?(b=c,a):b},a.effectiveWidth=function(){return a.width()-a.margins().left-a.margins().right},a.effectiveHeight=function(){return a.height()-a.margins().top-a.margins().bottom},a},c.colorMixin=function(b){var d=a.scale.category20c(),e=!0,f=function(a){return b.keyAccessor()(a)};return b.colors=function(c){return arguments.length?(d=c instanceof Array?a.scale.quantize().range(c):a.functor(c),b):d},b.ordinalColors=function(c){return b.colors(a.scale.ordinal().range(c))},b.linearColors=function(c){return b.colors(a.scale.linear().range(c).interpolate(a.interpolateHcl))},b.colorAccessor=function(a){return arguments.length?(f=a,e=!1,b):f},b.defaultColorAccessor=function(){return e},b.colorDomain=function(a){return arguments.length?(d.domain(a),b):d.domain()},b.calculateColorDomain=function(){var c=[a.min(b.data(),b.colorAccessor()),a.max(b.data(),b.colorAccessor())];return d.domain(c),b},b.getColor=function(a,b){return d(f.call(this,a,b))},b.colorCalculator=c.logger.deprecate(function(a){return arguments.length?(b.getColor=a,b):b.getColor},"colorMixin.colorCalculator has been deprecated. Please colorMixin.colors and colorMixin.colorAccessor instead"),b},c.coordinateGridMixin=function(b){function d(a,b){return!a||!b||a.length!==b.length||a.some(function(a,c){return a&&b[c]?a.toString()!==b[c].toString():a===b[c]})}function e(a,c){b.isOrdinal()?(b.elasticX()||0===z.domain().length)&&z.domain(b._ordinalXDomain()):b.elasticX()&&z.domain([b.xAxisMin(),b.xAxisMax()]);var e=z.domain();(c||d(C,e))&&b.rescale(),C=e,b.isOrdinal()?z.rangeBands([0,b.xAxisLength()],fa,b._useOuterPadding()?ea:0):z.range([0,b.xAxisLength()]),J=J.scale(b.x()),f(a)}function f(a){var d=a.select("g."+s);if(W){d.empty()&&(d=a.insert("g",":first-child").attr("class",q+" "+s).attr("transform","translate("+b.margins().left+","+b.margins().top+")"));var e=J.tickValues()?J.tickValues():"function"==typeof z.ticks?z.ticks(J.ticks()[0]):z.domain(),f=d.selectAll("line").data(e),g=f.enter().append("line").attr("x1",function(a){return z(a)}).attr("y1",b._xAxisY()-b.margins().top).attr("x2",function(a){return z(a)}).attr("y2",0).attr("opacity",0);c.transition(g,b.transitionDuration(),b.transitionDelay()).attr("opacity",1),c.transition(f,b.transitionDuration(),b.transitionDelay()).attr("x1",function(a){return z(a)}).attr("y1",b._xAxisY()-b.margins().top).attr("x2",function(a){return z(a)}).attr("y2",0),f.exit().remove()}else d.selectAll("line").remove()}function g(){return b._xAxisY()-b.margins().top}function h(){return b.anchorName().replace(/[ .#=\[\]"]/g,"-")+"-clip"}function i(){var a=c.utils.appendOrSelect(w,"defs"),d=h(),e=c.utils.appendOrSelect(a,"#"+d,"clipPath").attr("id",d),f=2*da;c.utils.appendOrSelect(e,"rect").attr("width",b.xAxisLength()+f).attr("height",b.yAxisHeight()+f).attr("transform","translate(-"+da+", -"+da+")")}function j(a){b.isOrdinal()&&(U=!1),e(b.g(),a),b._prepareYAxis(b.g()),b.plotData(),(b.elasticX()||Y||a)&&b.renderXAxis(b.g()),(b.elasticY()||Y||a)&&b.renderYAxis(b.g()),a?b.renderBrush(b.g(),!1):b.redrawBrush(b.g(),Y),b.fadeDeselectedArea(),Y=!1}function k(){ca?b._enableMouseZoom():ba&&b._disableMouseZoom()}function l(){if(X=!0,$){var a=A;H&&(a=m(a,H.x().domain()));var d=n(b.x().domain(),a);d&&b.x().domain(d)}var e=b.x().domain(),f=c.filters.RangedFilter(e[0],e[1]);b.replaceFilter(f),b.rescale(),b.redraw(),H&&!o(b.filter(),H.filter())&&c.events.trigger(function(){H.replaceFilter(f),H.redraw()}),b._invokeZoomedListener(),c.events.trigger(function(){b.redrawGroup()},c.constants.EVENT_DELAY),X=!o(e,A)}function m(a,b){return(a[0]>b[1]||a[1]<b[0])&&console.warn("could not intersect extents"),[Math.max(a[0],b[0]),Math.min(a[1],b[1])]}function n(a,b){var d=a[1]-a[0];return a[0]<b[0]?[b[0],Math.min(b[1],c.utils.add(b[0],d,"millis"))]:a[1]>b[1]?[Math.max(b[0],c.utils.subtract(b[1],d,"millis")),b[1]]:null}function o(a,b){return!a&&!b||!(!a||!b)&&(0===a.length&&0===b.length||a[0].valueOf()===b[0].valueOf()&&a[1].valueOf()===b[1].valueOf())}function p(a){return a instanceof Array&&a.length>1}var q="grid-line",r="horizontal",s="vertical",t="y-axis-label",u="x-axis-label",v=12;b=c.colorMixin(c.marginMixin(c.baseMixin(b))),b.colors(a.scale.category10()),b._mandatoryAttributes().push("x");var w,x,y,z,A,B,C,D,E,F,G,H,I,J=a.svg.axis().orient("bottom"),K=c.units.integers,L=0,M="day",N=!1,O=0,P=a.svg.axis().orient("left"),Q=0,R=!1,S=0,T=a.svg.brush(),U=!0,V=!1,W=!1,X=!1,Y=!1,Z=[1,1/0],$=!0,_=a.behavior.zoom().on("zoom",l),aa=a.behavior.zoom().on("zoom",null),ba=!1,ca=!1,da=0,ea=.5,fa=0,ga=!1;return b.rescale=function(){return G=void 0,Y=!0,b},b.resizing=function(){return Y},b.rangeChart=function(a){return arguments.length?(H=a,H.focusChart(b),b):H},b.zoomScale=function(a){return arguments.length?(Z=a,b):Z},b.zoomOutRestrict=function(a){return arguments.length?(Z[0]=a?1:0,$=a,b):$},b._generateG=function(a){w=void 0===a?b.svg():a;var c=window.location.href.split("#")[0];return x=w.append("g"),y=x.append("g").attr("class","chart-body").attr("transform","translate("+b.margins().left+", "+b.margins().top+")").attr("clip-path","url("+c+"#"+h()+")"),x},b.g=function(a){return arguments.length?(x=a,b):x},b.mouseZoomable=function(a){return arguments.length?(ca=a,b):ca},b.chartBodyG=function(a){return arguments.length?(y=a,b):y},b.x=function(a){return arguments.length?(z=a,A=z.domain(),b.rescale(),b):z},b.xOriginalDomain=function(){return A},b.xUnits=function(a){return arguments.length?(K=a,b):K},b.xAxis=function(a){return arguments.length?(J=a,b):J},b.elasticX=function(a){return arguments.length?(N=a,b):N},b.xAxisPadding=function(a){return arguments.length?(L=a,b):L},b.xAxisPaddingUnit=function(a){return arguments.length?(M=a,b):M},b.xUnitCount=function(){if(void 0===G){var a=b.xUnits()(b.x().domain()[0],b.x().domain()[1],b.x().domain());G=a instanceof Array?a.length:a}return G},b.useRightYAxis=function(a){return arguments.length?(ga=a,b):ga},b.isOrdinal=function(){return b.xUnits()===c.units.ordinal},b._useOuterPadding=function(){return!0},b._ordinalXDomain=function(){var a=b._computeOrderedGroups(b.data());return a.map(b.keyAccessor())},b.renderXAxis=function(a){var d=a.select("g.x");d.empty()&&(d=a.append("g").attr("class","axis x").attr("transform","translate("+b.margins().left+","+b._xAxisY()+")"));var e=a.select("text."+u);e.empty()&&b.xAxisLabel()&&(e=a.append("text").attr("class",u).attr("transform","translate("+(b.margins().left+b.xAxisLength()/2)+","+(b.height()-O)+")").attr("text-anchor","middle")),b.xAxisLabel()&&e.text()!==b.xAxisLabel()&&e.text(b.xAxisLabel()),c.transition(d,b.transitionDuration(),b.transitionDelay()).attr("transform","translate("+b.margins().left+","+b._xAxisY()+")").call(J),c.transition(e,b.transitionDuration(),b.transitionDelay()).attr("transform","translate("+(b.margins().left+b.xAxisLength()/2)+","+(b.height()-O)+")")},b._xAxisY=function(){return b.height()-b.margins().bottom},b.xAxisLength=function(){return b.effectiveWidth()},b.xAxisLabel=function(a,c){return arguments.length?(B=a,b.margins().bottom-=O,O=void 0===c?v:c,b.margins().bottom+=O,b):B},b._prepareYAxis=function(c){if(void 0===D||b.elasticY()){void 0===D&&(D=a.scale.linear());var d=b.yAxisMin()||0,e=b.yAxisMax()||0;D.domain([d,e]).rangeRound([b.yAxisHeight(),0])}D.range([b.yAxisHeight(),0]),P=P.scale(D),ga&&P.orient("right"),b._renderHorizontalGridLinesForAxis(c,D,P)},b.renderYAxisLabel=function(a,d,e,f){f=f||S;var g=b.g().select("text."+t+"."+a+"-label"),h=b.margins().top+b.yAxisHeight()/2;g.empty()&&d&&(g=b.g().append("text").attr("transform","translate("+f+","+h+"),rotate("+e+")").attr("class",t+" "+a+"-label").attr("text-anchor","middle").text(d)),d&&g.text()!==d&&g.text(d),c.transition(g,b.transitionDuration(),b.transitionDelay()).attr("transform","translate("+f+","+h+"),rotate("+e+")")},b.renderYAxisAt=function(a,d,e){var f=b.g().select("g."+a);f.empty()&&(f=b.g().append("g").attr("class","axis "+a).attr("transform","translate("+e+","+b.margins().top+")")),c.transition(f,b.transitionDuration(),b.transitionDelay()).attr("transform","translate("+e+","+b.margins().top+")").call(d)},b.renderYAxis=function(){var a=ga?b.width()-b.margins().right:b._yAxisX();b.renderYAxisAt("y",P,a);var c=ga?b.width()-S:S,d=ga?90:-90;b.renderYAxisLabel("y",b.yAxisLabel(),d,c)},b._renderHorizontalGridLinesForAxis=function(a,d,e){var f=a.select("g."+r);if(V){var g=e.tickValues()?e.tickValues():d.ticks(e.ticks()[0]);f.empty()&&(f=a.insert("g",":first-child").attr("class",q+" "+r).attr("transform","translate("+b.margins().left+","+b.margins().top+")"));var h=f.selectAll("line").data(g),i=h.enter().append("line").attr("x1",1).attr("y1",function(a){return d(a)}).attr("x2",b.xAxisLength()).attr("y2",function(a){return d(a)}).attr("opacity",0);c.transition(i,b.transitionDuration(),b.transitionDelay()).attr("opacity",1),c.transition(h,b.transitionDuration(),b.transitionDelay()).attr("x1",1).attr("y1",function(a){return d(a)}).attr("x2",b.xAxisLength()).attr("y2",function(a){return d(a)}),h.exit().remove()}else f.selectAll("line").remove()},b._yAxisX=function(){return b.useRightYAxis()?b.width()-b.margins().right:b.margins().left},b.yAxisLabel=function(a,c){return arguments.length?(E=a,b.margins().left-=S,S=void 0===c?v:c,b.margins().left+=S,b):E},b.y=function(a){return arguments.length?(D=a,b.rescale(),b):D},b.yAxis=function(a){return arguments.length?(P=a,b):P},b.elasticY=function(a){return arguments.length?(R=a,b):R},b.renderHorizontalGridLines=function(a){return arguments.length?(V=a,b):V},b.renderVerticalGridLines=function(a){return arguments.length?(W=a,b):W},b.xAxisMin=function(){var d=a.min(b.data(),function(a){return b.keyAccessor()(a)});return c.utils.subtract(d,L,M)},b.xAxisMax=function(){var d=a.max(b.data(),function(a){return b.keyAccessor()(a)});return c.utils.add(d,L,M)},b.yAxisMin=function(){var d=a.min(b.data(),function(a){return b.valueAccessor()(a)});return c.utils.subtract(d,Q)},b.yAxisMax=function(){var d=a.max(b.data(),function(a){return b.valueAccessor()(a)});return c.utils.add(d,Q)},b.yAxisPadding=function(a){return arguments.length?(Q=a,b):Q},b.yAxisHeight=function(){return b.effectiveHeight()},b.round=function(a){return arguments.length?(F=a,b):F},b._rangeBandPadding=function(a){return arguments.length?(fa=a,b):fa},b._outerRangeBandPadding=function(a){return arguments.length?(ea=a,b):ea},c.override(b,"filter",function(a){return arguments.length?(b._filter(a),a?b.brush().extent(a):b.brush().clear(),b):b._filter()}),b.brush=function(a){return arguments.length?(T=a,b):T},b.renderBrush=function(a){if(U){T.on("brush",b._brushing),T.on("brushstart",b._disableMouseZoom),T.on("brushend",k);var c=a.append("g").attr("class","brush").attr("transform","translate("+b.margins().left+","+b.margins().top+")").call(T.x(b.x()));b.setBrushY(c,!1),b.setHandlePaths(c),b.hasFilter()&&b.redrawBrush(a,!1)}},b.setHandlePaths=function(a){a.selectAll(".resize").append("path").attr("d",b.resizeHandlePath)},b.setBrushY=function(a){a.selectAll("rect").attr("height",g()),a.selectAll(".resize path").attr("d",b.resizeHandlePath)},b.extendBrush=function(){var a=T.extent();return b.round()&&(a[0]=a.map(b.round())[0],a[1]=a.map(b.round())[1],x.select(".brush").call(T.extent(a))),a},b.brushIsEmpty=function(a){return T.empty()||!a||a[1]<=a[0]},b._brushing=function(){var a=b.extendBrush();if(b.redrawBrush(x,!1),b.brushIsEmpty(a))c.events.trigger(function(){b.filter(null),b.redrawGroup()},c.constants.EVENT_DELAY);else{var d=c.filters.RangedFilter(a[0],a[1]);c.events.trigger(function(){b.replaceFilter(d),b.redrawGroup()},c.constants.EVENT_DELAY)}},b.redrawBrush=function(a,d){if(U){b.filter()&&b.brush().empty()&&b.brush().extent(b.filter());var e=c.optionalTransition(d,b.transitionDuration(),b.transitionDelay())(a.select("g.brush"));b.setBrushY(e),e.call(b.brush().x(b.x()).extent(b.brush().extent()))}b.fadeDeselectedArea()},b.fadeDeselectedArea=function(){},b.resizeHandlePath=function(a){var b=+("e"===a),c=b?1:-1,d=g()/3;return"M"+.5*c+","+d+"A6,6 0 0 "+b+" "+6.5*c+","+(d+6)+"V"+(2*d-6)+"A6,6 0 0 "+b+" "+.5*c+","+2*d+"ZM"+2.5*c+","+(d+8)+"V"+(2*d-8)+"M"+4.5*c+","+(d+8)+"V"+(2*d-8)},b.clipPadding=function(a){return arguments.length?(da=a,b):da},b._preprocessData=function(){},b._doRender=function(){return b.resetSvg(),b._preprocessData(),b._generateG(),i(),j(!0),k(),b},b._doRedraw=function(){return b._preprocessData(),j(!1),i(),b},b._enableMouseZoom=function(){ba=!0,_.x(b.x()).scaleExtent(Z).size([b.width(),b.height()]).duration(b.transitionDuration()),b.root().call(_)},b._disableMouseZoom=function(){b.root().call(aa)},b.focus=function(a){p(a)?b.x().domain(a):b.x().domain(A),_.x(b.x()),l()},b.refocused=function(){return X},b.focusChart=function(a){return arguments.length?(I=a,b.on("filtered",function(a){a.filter()?o(a.filter(),I.filter())||c.events.trigger(function(){I.focus(a.filter())}):c.events.trigger(function(){I.x().domain(I.xOriginalDomain())})}),b):I},b.brushOn=function(a){return arguments.length?(U=a,b):U},b},c.stackMixin=function(b){function d(a,c){var d=a.accessor||b.valueAccessor();return a.name=String(a.name||c),a.values=a.group.all().map(function(c,e){return{x:b.keyAccessor()(c,e),y:a.hidden?null:d(c,e),data:c,layer:a.name,hidden:a.hidden}}),a.values=a.values.filter(e()),a.values}function e(){if(!b.x()||m)return a.functor(!0);var c=b.x().domain();return b.isOrdinal()?function(){return!0}:b.elasticX()?function(){return!0}:function(a){return a.x>=c[0]&&a.x<=c[c.length-1]}}function f(a){var b=j.map(c.pluck("name")).indexOf(a);return j[b]}function g(){var a=b.data().map(function(a){return a.values});return Array.prototype.concat.apply([],a)}function h(a){return!a.hidden}var i=a.layout.stack().values(d),j=[],k={},l=!1,m=!1;return b.stack=function(a,c,d){if(!arguments.length)return j;arguments.length<=2&&(d=c);var e={group:a};return"string"==typeof c&&(e.name=c),"function"==typeof d&&(e.accessor=d),j.push(e),b},c.override(b,"group",function(a,c,d){return arguments.length?(j=[],k={},b.stack(a,c),d&&b.valueAccessor(d),b._group(a,c)):b._group()}),b.hidableStacks=function(a){return arguments.length?(l=a,b):l},b.hideStack=function(a){var c=f(a);return c&&(c.hidden=!0),b},b.showStack=function(a){var c=f(a);return c&&(c.hidden=!1),b},b.getValueAccessorByIndex=function(a){return j[a].accessor||b.valueAccessor()},b.yAxisMin=function(){var d=a.min(g(),function(a){return a.y<0?a.y+a.y0:a.y0});return c.utils.subtract(d,b.yAxisPadding())},b.yAxisMax=function(){var d=a.max(g(),function(a){return a.y>0?a.y+a.y0:a.y0});return c.utils.add(d,b.yAxisPadding())},b.xAxisMin=function(){var d=a.min(g(),c.pluck("x"));return c.utils.subtract(d,b.xAxisPadding(),b.xAxisPaddingUnit())},b.xAxisMax=function(){var d=a.max(g(),c.pluck("x"));return c.utils.add(d,b.xAxisPadding(),b.xAxisPaddingUnit())},c.override(b,"title",function(a,c){return a?"function"==typeof a?b._title(a):a===b._groupName&&"function"==typeof c?b._title(c):"function"!=typeof c?k[a]||b._title():(k[a]=c,b):b._title()}),b.stackLayout=function(c){return arguments.length?(i=c,i.values()===a.layout.stack().values()&&i.values(d),b):i},b.evadeDomainFilter=function(a){return arguments.length?(m=a,b):m},b.data(function(){var a=j.filter(h);return a.length?b.stackLayout()(a):[]}),b._ordinalXDomain=function(){var a=g().map(c.pluck("data")),d=b._computeOrderedGroups(a);return d.map(b.keyAccessor())},b.colorAccessor(function(a){var b=this.layer||this.name||a.name||a.layer;return b}),b.legendables=function(){return j.map(function(a,c){return{chart:b,name:a.name,hidden:a.hidden||!1,color:b.getColor.call(a,a.values,c)}})},b.isLegendableHidden=function(a){var b=f(a.name);return!!b&&b.hidden},b.legendToggle=function(a){l&&(b.isLegendableHidden(a)?b.showStack(a.name):b.hideStack(a.name),b.renderGroup())},b},c.capMixin=function(b){var d=1/0,e=!0,f="Others";b.ordering(function(a){return-a.value});var g=function(c,d){var e=a.sum(d,b.valueAccessor()),f=d.map(b.keyAccessor());return e>0?c.concat([{others:f,key:b.othersLabel(),value:e}]):c};return b.cappedKeyAccessor=function(a,c){return a.others?a.key:b.keyAccessor()(a,c)},b.cappedValueAccessor=function(a,c){return a.others?a.value:b.valueAccessor()(a,c)},b.data(function(a){if(d===1/0)return b._computeOrderedGroups(a.all());var c,f=a.all();if(f=b._computeOrderedGroups(f),d)if(e)c=f.slice(d),f=f.slice(0,d);else{var h=Math.max(0,f.length-d);c=f.slice(0,h),f=f.slice(h)}return g?g(f,c):f}),b.cap=function(a){return arguments.length?(d=a,b):d},b.takeFront=function(a){return arguments.length?(e=a,b):e},b.othersLabel=function(a){return arguments.length?(f=a,b):f},b.othersGrouper=function(a){return arguments.length?(g=a,b):g},c.override(b,"onClick",function(a){a.others&&b.filter([a.others]),b._onClick(a)}),b},c.bubbleMixin=function(b){var d=.3,e=10,f=!1,g=!1;b.BUBBLE_NODE_CLASS="node",b.BUBBLE_CLASS="bubble",b.MIN_RADIUS=10,b=c.colorMixin(b),b.renderLabel(!0),b.data(function(c){var d=c.all();if(f){var e=b.radiusValueAccessor();d.sort(function(b,c){return a.descending(e(b),e(c))})}return d});var h=a.scale.linear().domain([0,100]),i=function(a){return a.r};b.r=function(a){return arguments.length?(h=a,b):h},b.elasticRadius=function(a){return arguments.length?(g=a,b):g},b.calculateRadiusDomain=function(){g&&b.r().domain([b.rMin(),b.rMax()])},b.radiusValueAccessor=function(a){return arguments.length?(i=a,b):i},b.rMin=function(){var c=a.min(b.data(),function(a){ return b.radiusValueAccessor()(a)});return c},b.rMax=function(){var c=a.max(b.data(),function(a){return b.radiusValueAccessor()(a)});return c},b.bubbleR=function(a){var c=b.radiusValueAccessor()(a),d=b.r()(c);return(isNaN(d)||c<=0)&&(d=0),d};var j=function(a){return b.label()(a)},k=function(a){return b.bubbleR(a)>e},l=function(a){return k(a)?1:0},m=function(a){return k(a)?"all":"none"};b._doRenderLabel=function(a){if(b.renderLabel()){var d=a.select("text");d.empty()&&(d=a.append("text").attr("text-anchor","middle").attr("dy",".3em").on("click",b.onClick)),d.attr("opacity",0).attr("pointer-events",m).text(j),c.transition(d,b.transitionDuration(),b.transitionDelay()).attr("opacity",l)}},b.doUpdateLabels=function(a){if(b.renderLabel()){var d=a.select("text").attr("pointer-events",m).text(j);c.transition(d,b.transitionDuration(),b.transitionDelay()).attr("opacity",l)}};var n=function(a){return b.title()(a)};return b._doRenderTitles=function(a){if(b.renderTitle()){var c=a.select("title");c.empty()&&a.append("title").text(n)}},b.doUpdateTitles=function(a){b.renderTitle()&&a.select("title").text(n)},b.sortBubbleSize=function(a){return arguments.length?(f=a,b):f},b.minRadius=function(a){return arguments.length?(b.MIN_RADIUS=a,b):b.MIN_RADIUS},b.minRadiusWithLabel=function(a){return arguments.length?(e=a,b):e},b.maxBubbleRelativeSize=function(a){return arguments.length?(d=a,b):d},b.fadeDeselectedArea=function(){b.hasFilter()?b.selectAll("g."+b.BUBBLE_NODE_CLASS).each(function(a){b.isSelectedNode(a)?b.highlightSelected(this):b.fadeDeselected(this)}):b.selectAll("g."+b.BUBBLE_NODE_CLASS).each(function(){b.resetHighlight(this)})},b.isSelectedNode=function(a){return b.hasFilter(a.key)},b.onClick=function(a){var d=a.key;c.events.trigger(function(){b.filter(d),b.redrawGroup()})},b},c.pieChart=function(b,d){function e(){var b=a.min([W.width(),W.height()])/2;F=G&&G<b?G:b;var d,e=t(),g=v();if(a.sum(W.data(),W.valueAccessor())?(d=g(W.data()),H.classed(Q,!1)):(d=g([{key:R,value:1,others:[R]}]),H.classed(Q,!0)),H){var h=H.select("g."+O).selectAll("g."+M).data(d),i=H.select("g."+P).selectAll("text."+N).data(d);f(h,i,e,d),n(d,e),r(h,i),s(),c.transition(H,W.transitionDuration(),W.transitionDelay()).attr("transform","translate("+W.cx()+","+W.cy()+")")}}function f(a,b,c,d){var e=g(a);h(e,c),i(e),l(b,d,c)}function g(a){var b=a.enter().append("g").attr("class",function(a,b){return M+" _"+b});return b}function h(a,b){var d=a.append("path").attr("fill",A).on("click",B).attr("d",function(a,c){return C(a,c,b)}),e=c.transition(d,W.transitionDuration(),W.transitionDelay());e.attrTween&&e.attrTween("d",y)}function i(a){W.renderTitle()&&a.append("title").text(function(a){return W.title()(a.data)})}function j(a,b){W._applyLabelText(a),c.transition(a,W.transitionDuration(),W.transitionDelay()).attr("transform",function(a){return D(a,b)}).attr("text-anchor","middle")}function k(a,b){W.select("g.pie-slice._"+a).classed("highlight",b)}function l(a,b,c){if(W.renderLabel()){var d=a.enter().append("text").attr("class",function(a,b){var c=M+" "+N+" _"+b;return K&&(c+=" external"),c}).on("click",B).on("mouseover",function(a,b){k(b,!0)}).on("mouseout",function(a,b){k(b,!1)});j(d,c),K&&V&&m(b,c)}}function m(b,d){var e=H.selectAll("polyline."+M).data(b);e.enter().append("polyline").attr("class",function(a,b){return"pie-path _"+b+" "+M}).on("click",B).on("mouseover",function(a,b){k(b,!0)}).on("mouseout",function(a,b){k(b,!1)}),e.exit().remove();var f=a.svg.arc().outerRadius(F-T+K).innerRadius(F-T),g=c.transition(e,W.transitionDuration(),W.transitionDelay());g.attrTween?g.attrTween("points",function(b){var c=this._current||b;c={startAngle:c.startAngle,endAngle:c.endAngle};var e=a.interpolate(c,b);return this._current=e(0),function(a){var b=e(a);return[d.centroid(b),f.centroid(b)]}}):g.attr("points",function(a){return[d.centroid(a),f.centroid(a)]}),g.style("visibility",function(a){return a.endAngle-a.startAngle<1e-4?"hidden":"visible"})}function n(a,b){o(a,b),p(a,b),q(a)}function o(a,b){var d=H.selectAll("g."+M).data(a).select("path").attr("d",function(a,c){return C(a,c,b)}),e=c.transition(d,W.transitionDuration(),W.transitionDelay());e.attrTween&&e.attrTween("d",y),e.attr("fill",A)}function p(a,b){if(W.renderLabel()){var c=H.selectAll("text."+N).data(a);j(c,b),K&&V&&m(a,b)}}function q(a){W.renderTitle()&&H.selectAll("g."+M).data(a).select("title").text(function(a){return W.title()(a.data)})}function r(a,b){a.exit().remove(),b.exit().remove()}function s(){W.hasFilter()?W.selectAll("g."+M).each(function(a){u(a)?W.highlightSelected(this):W.fadeDeselected(this)}):W.selectAll("g."+M).each(function(){W.resetHighlight(this)})}function t(){return a.svg.arc().outerRadius(F-T).innerRadius(S)}function u(a){return W.hasFilter(W.cappedKeyAccessor(a.data))}function v(){return a.layout.pie().sort(null).value(W.cappedValueAccessor)}function w(a){var b=a.endAngle-a.startAngle;return isNaN(b)||b<U}function x(a){return 0===W.cappedValueAccessor(a)}function y(b){b.innerRadius=S;var c=this._current;c=z(c)?{startAngle:0,endAngle:0}:{startAngle:c.startAngle,endAngle:c.endAngle};var d=a.interpolate(c,b);return this._current=d(0),function(a){return C(d(a),0,t())}}function z(a){return!a||isNaN(a.startAngle)||isNaN(a.endAngle)}function A(a,b){return W.getColor(a.data,b)}function B(a,b){H.attr("class")!==Q&&W.onClick(a.data,b)}function C(a,b,c){var d=c(a,b);return d.indexOf("NaN")>=0&&(d="M0,0"),d}function D(b,c){var d;return d=K?a.svg.arc().outerRadius(F-T+K).innerRadius(F-T+K).centroid(b):c.centroid(b),isNaN(d[0])||isNaN(d[1])?"translate(0,0)":"translate("+d+")"}function E(b,c){W.selectAll("g.pie-slice").each(function(d){b.name===d.data.key&&a.select(this).classed("highlight",c)})}var F,G,H,I,J,K,L=.5,M="pie-slice",N="pie-label",O="pie-slice-group",P="pie-label-group",Q="empty-chart",R="empty",S=0,T=0,U=L,V=!1,W=c.capMixin(c.colorMixin(c.baseMixin({})));return W.colorAccessor(W.cappedKeyAccessor),W.title(function(a){return W.cappedKeyAccessor(a)+": "+W.cappedValueAccessor(a)}),W.slicesCap=W.cap,W.label(W.cappedKeyAccessor),W.renderLabel(!0),W.transitionDuration(350),W.transitionDelay(0),W._doRender=function(){return W.resetSvg(),H=W.svg().append("g").attr("transform","translate("+W.cx()+","+W.cy()+")"),H.append("g").attr("class",O),H.append("g").attr("class",P),e(),W},W._applyLabelText=function(a){a.text(function(a){var b=a.data;return!x(b)&&!w(a)||u(a)?W.label()(a.data):""})},W.externalRadiusPadding=function(a){return arguments.length?(T=a,W):T},W.innerRadius=function(a){return arguments.length?(S=a,W):S},W.radius=function(a){return arguments.length?(G=a,W):G},W.cx=function(a){return arguments.length?(I=a,W):I||W.width()/2},W.cy=function(a){return arguments.length?(J=a,W):J||W.height()/2},W._doRedraw=function(){return e(),W},W.minAngleForLabel=function(a){return arguments.length?(U=a,W):U},W.emptyTitle=function(a){return 0===arguments.length?R:(R=a,W)},W.externalLabels=function(a){return 0===arguments.length?K:(K=a?a:void 0,W)},W.drawPaths=function(a){return 0===arguments.length?V:(V=a,W)},W.legendables=function(){return W.data().map(function(a,b){var c={name:a.key,data:a.value,others:a.others,chart:W};return c.color=W.getColor(a,b),c})},W.legendHighlight=function(a){E(a,!0)},W.legendReset=function(a){E(a,!1)},W.legendToggle=function(a){W.onClick({key:a.name,others:a.others})},W.anchor(b,d)},c.barChart=function(b,d){function e(a){return c.utils.safeNumber(Math.abs(n.y()(a.y+a.y0)-n.y()(a.y0)))}function f(a,b,d){var f=a.selectAll("text.barLabel").data(d.values,c.pluck("x"));f.enter().append("text").attr("class","barLabel").attr("text-anchor","middle"),n.isOrdinal()&&(f.on("click",n.onClick),f.attr("cursor","pointer")),c.transition(f,n.transitionDuration(),n.transitionDelay()).attr("x",function(a){var b=n.x()(a.x);return p||(b+=j/2),c.utils.safeNumber(b)}).attr("y",function(a){var b=n.y()(a.y+a.y0);return a.y<0&&(b-=e(a)),c.utils.safeNumber(b-m)}).text(function(a){return n.label()(a)}),c.transition(f.exit(),n.transitionDuration(),n.transitionDelay()).attr("height",0).remove()}function g(a,b,d){var f=a.selectAll("rect.bar").data(d.values,c.pluck("x")),g=f.enter().append("rect").attr("class","bar").attr("fill",c.pluck("data",n.getColor)).attr("y",n.yAxisHeight()).attr("height",0);n.renderTitle()&&g.append("title").text(c.pluck("data",n.title(d.name))),n.isOrdinal()&&f.on("click",n.onClick),c.transition(f,n.transitionDuration(),n.transitionDelay()).attr("x",function(a){var b=n.x()(a.x);return p&&(b-=j/2),n.isOrdinal()&&void 0!==o&&(b+=o/2),c.utils.safeNumber(b)}).attr("y",function(a){var b=n.y()(a.y+a.y0);return a.y<0&&(b-=e(a)),c.utils.safeNumber(b)}).attr("width",j).attr("height",function(a){return e(a)}).attr("fill",c.pluck("data",n.getColor)).select("title").text(c.pluck("data",n.title(d.name))),c.transition(f.exit(),n.transitionDuration(),n.transitionDelay()).attr("x",function(a){return n.x()(a.x)}).attr("width",.9*j).remove()}function h(){if(void 0===j){var a=n.xUnitCount();j=n.isOrdinal()&&void 0===o?Math.floor(n.x().rangeBand()):o?Math.floor((n.xAxisLength()-(a-1)*o)/a):Math.floor(n.xAxisLength()/(1+n.barPadding())/a),(j===1/0||isNaN(j)||j<k)&&(j=k)}}function i(b,c){return function(){var d=a.select(this),e=d.attr("fill")===b;return c?!e:e}}var j,k=1,l=2,m=3,n=c.stackMixin(c.coordinateGridMixin({})),o=l,p=!1,q=!1;return c.override(n,"rescale",function(){return n._rescale(),j=void 0,n}),c.override(n,"render",function(){return n.round()&&p&&!q&&c.logger.warn("By default, brush rounding is disabled if bars are centered. See dc.js bar chart API documentation for details."),n._render()}),n.label(function(a){return c.utils.printSingleValue(a.y0+a.y)},!1),n.plotData=function(){var b=n.chartBodyG().selectAll("g.stack").data(n.data());h(),b.enter().append("g").attr("class",function(a,b){return"stack _"+b});var c=b.size()-1;b.each(function(b,d){var e=a.select(this);g(e,d,b),n.renderLabel()&&c===d&&f(e,d,b)})},n.fadeDeselectedArea=function(){var a=n.chartBodyG().selectAll("rect.bar"),b=n.brush().extent();if(n.isOrdinal())n.hasFilter()?(a.classed(c.constants.SELECTED_CLASS,function(a){return n.hasFilter(a.x)}),a.classed(c.constants.DESELECTED_CLASS,function(a){return!n.hasFilter(a.x)})):(a.classed(c.constants.SELECTED_CLASS,!1),a.classed(c.constants.DESELECTED_CLASS,!1));else if(n.brushIsEmpty(b))a.classed(c.constants.DESELECTED_CLASS,!1);else{var d=b[0],e=b[1];a.classed(c.constants.DESELECTED_CLASS,function(a){return a.x<d||a.x>=e})}},n.centerBar=function(a){return arguments.length?(p=a,n):p},c.override(n,"onClick",function(a){n._onClick(a.data)}),n.barPadding=function(a){return arguments.length?(n._rangeBandPadding(a),o=void 0,n):n._rangeBandPadding()},n._useOuterPadding=function(){return void 0===o},n.outerPadding=n._outerRangeBandPadding,n.gap=function(a){return arguments.length?(o=a,n):o},n.extendBrush=function(){var a=n.brush().extent();return!n.round()||p&&!q||(a[0]=a.map(n.round())[0],a[1]=a.map(n.round())[1],n.chartBodyG().select(".brush").call(n.brush().extent(a))),a},n.alwaysUseRounding=function(a){return arguments.length?(q=a,n):q},n.legendHighlight=function(a){n.isLegendableHidden(a)||n.g().selectAll("rect.bar").classed("highlight",i(a.color)).classed("fadeout",i(a.color,!0))},n.legendReset=function(){n.g().selectAll("rect.bar").classed("highlight",!1).classed("fadeout",!1)},c.override(n,"xAxisMax",function(){var a=this._xAxisMax();if("resolution"in n.xUnits()){var b=n.xUnits().resolution;a+=b}return a}),n.anchor(b,d)},c.lineChart=function(b,d){function e(a,b){return B.getColor.call(a,a.values,b)}function f(b,d){var f=a.svg.line().x(function(a){return B.x()(a.x)}).y(function(a){return B.y()(a.y+a.y0)}).interpolate(H).tension(I);s&&f.defined(s);var g=b.append("path").attr("class","line").attr("stroke",e);t&&g.attr("stroke-dasharray",t),c.transition(d.select("path.line"),B.transitionDuration(),B.transitionDelay()).attr("stroke",e).attr("d",function(a){return h(f(a.values))})}function g(b,d){if(C){var f=a.svg.area().x(function(a){return B.x()(a.x)}).y(function(a){return B.y()(a.y+a.y0)}).y0(function(a){return B.y()(a.y0)}).interpolate(H).tension(I);s&&f.defined(s),b.append("path").attr("class","area").attr("fill",e).attr("d",function(a){return h(f(a.values))}),c.transition(d.select("path.area"),B.transitionDuration(),B.transitionDelay()).attr("fill",e).attr("d",function(a){return h(f(a.values))})}}function h(a){return!a||a.indexOf("NaN")>=0?"M0,0":a}function i(b,d){if("always"===B.xyTipsOn()||!B.brushOn()&&B.xyTipsOn()){var e=v+"-list",f=b.select("g."+e);f.empty()&&(f=b.append("g").attr("class",e)),d.each(function(b,d){var e=b.values;s&&(e=e.filter(s));var g=f.select("g."+v+"._"+d);g.empty()&&(g=f.append("g").attr("class",v+" _"+d)),k(g);var h=g.selectAll("circle."+w).data(e,c.pluck("x"));h.enter().append("circle").attr("class",w).attr("r",n()).style("fill-opacity",F).style("stroke-opacity",G).attr("fill",B.getColor).on("mousemove",function(){var b=a.select(this);l(b),m(b,g)}).on("mouseout",function(){var b=a.select(this);o(b),p(g)}),h.call(q,b),c.transition(h,B.transitionDuration()).attr("cx",function(a){return c.utils.safeNumber(B.x()(a.x))}).attr("cy",function(a){return c.utils.safeNumber(B.y()(a.y+a.y0))}).attr("fill",B.getColor),h.exit().remove()})}}function j(b){b.each(function(b,d){var e=a.select(this),f=e.selectAll("text.lineLabel").data(b.values,c.pluck("x"));f.enter().append("text").attr("class","lineLabel").attr("text-anchor","middle"),c.transition(f,B.transitionDuration()).attr("x",function(a){return c.utils.safeNumber(B.x()(a.x))}).attr("y",function(a){var b=B.y()(a.y+a.y0)-A;return c.utils.safeNumber(b)}).text(function(a){return B.label()(a)}),c.transition(f.exit(),B.transitionDuration()).attr("height",0).remove()})}function k(a){var b=a.select("path."+x).empty()?a.append("path").attr("class",x):a.select("path."+x);b.style("display","none").attr("stroke-dasharray","5,5");var c=a.select("path."+y).empty()?a.append("path").attr("class",y):a.select("path."+y);c.style("display","none").attr("stroke-dasharray","5,5")}function l(a){return a.style("fill-opacity",.8),a.style("stroke-opacity",.8),a.attr("r",D),a}function m(a,b){var c=a.attr("cx"),d=a.attr("cy"),e=B._yAxisX()-B.margins().left,f="M"+e+" "+d+"L"+c+" "+d,g="M"+c+" "+B.yAxisHeight()+"L"+c+" "+d;b.select("path."+x).style("display","").attr("d",f),b.select("path."+y).style("display","").attr("d",g)}function n(){return E||D}function o(a){a.style("fill-opacity",F).style("stroke-opacity",G).attr("r",n())}function p(a){a.select("path."+x).style("display","none"),a.select("path."+y).style("display","none")}function q(a,b){B.renderTitle()&&(a.select("title").remove(),a.append("title").text(c.pluck("data",B.title(b.name))))}function r(b,c,d){return function(){var e=a.select(this),f=e.attr("stroke")===b&&e.attr("stroke-dasharray")===(c instanceof Array?c.join(","):null)||e.attr("fill")===b;return d?!f:f}}var s,t,u=5,v="dc-tooltip",w="dot",x="yRef",y="xRef",z=1e-6,A=3,B=c.stackMixin(c.coordinateGridMixin({})),C=!1,D=u,E=null,F=z,G=z,H="linear",I=.7,J=!0;return B.transitionDuration(500),B.transitionDelay(0),B._rangeBandPadding(1),B.plotData=function(){var a=B.chartBodyG(),b=a.select("g.stack-list");b.empty()&&(b=a.append("g").attr("class","stack-list"));var c=b.selectAll("g.stack").data(B.data()),d=c.enter().append("g").attr("class",function(a,b){return"stack _"+b});f(d,c),g(d,c),i(a,c),B.renderLabel()&&j(c)},B.interpolate=function(a){return arguments.length?(H=a,B):H},B.tension=function(a){return arguments.length?(I=a,B):I},B.defined=function(a){return arguments.length?(s=a,B):s},B.dashStyle=function(a){return arguments.length?(t=a,B):t},B.renderArea=function(a){return arguments.length?(C=a,B):C},B.label(function(a){return c.utils.printSingleValue(a.y0+a.y)},!1),B.xyTipsOn=function(a){return arguments.length?(J=a,B):J},B.dotRadius=function(a){return arguments.length?(D=a,B):D},B.renderDataPoints=function(a){return arguments.length?(a?(F=a.fillOpacity||.8,G=a.strokeOpacity||.8,E=a.radius||2):(F=z,G=z,E=null),B):{fillOpacity:F,strokeOpacity:G,radius:E}},B.legendHighlight=function(a){B.isLegendableHidden(a)||B.g().selectAll("path.line, path.area").classed("highlight",r(a.color,a.dashstyle)).classed("fadeout",r(a.color,a.dashstyle,!0))},B.legendReset=function(){B.g().selectAll("path.line, path.area").classed("highlight",!1).classed("fadeout",!1)},c.override(B,"legendables",function(){var a=B._legendables();return t?a.map(function(a){return a.dashstyle=t,a}):a}),B.anchor(b,d)},c.dataCount=function(b,d){var e=a.format(",d"),f=c.baseMixin({}),g={some:"",all:""};return f.html=function(a){return arguments.length?(a.all&&(g.all=a.all),a.some&&(g.some=a.some),f):g},f.formatNumber=function(a){return arguments.length?(e=a,f):e},f._doRender=function(){var a=f.dimension().size(),b=f.group().value(),c=e(a),d=e(b);return a===b&&""!==g.all?f.root().html(g.all.replace("%total-count",c).replace("%filter-count",d)):""!==g.some?f.root().html(g.some.replace("%total-count",c).replace("%filter-count",d)):(f.selectAll(".total-count").text(c),f.selectAll(".filter-count").text(d)),f},f._doRedraw=function(){return f._doRender()},f.anchor(b,d)},c.dataTable=function(b,d){function e(){var a=!0;if(p.forEach(function(b){a&="function"==typeof b}),!a){var b=n.selectAll("thead").data([0]);b.enter().append("thead"),b.exit().remove();var c=b.selectAll("tr").data([0]);c.enter().append("tr"),c.exit().remove();var d=c.selectAll("th").data(p);d.enter().append("th"),d.exit().remove(),d.attr("class",m).html(function(a){return n._doColumnHeaderFormat(a)})}var e=n.root().selectAll("tbody").data(f(),function(a){return n.keyAccessor()(a)}),g=e.enter().append("tbody");return t===!0&&g.append("tr").attr("class",l).append("td").attr("class",i).attr("colspan",p.length).html(function(a){return n.keyAccessor()(a)}),e.exit().remove(),g}function f(){var b;return b=r===a.ascending?n.dimension().bottom(o):n.dimension().top(o),a.nest().key(n.group()).sortKeys(r).entries(b.sort(function(a,b){return r(q(a),q(b))}).slice(s,h))}function g(a){var b=a.order().selectAll("tr."+j).data(function(a){return a.values}),c=b.enter().append("tr").attr("class",j);return p.forEach(function(a,b){c.append("td").attr("class",k+" _"+b).html(function(b){return n._doColumnValueFormat(a,b)})}),b.exit().remove(),b}var h,i="dc-table-label",j="dc-table-row",k="dc-table-column",l="dc-table-group",m="dc-table-head",n=c.baseMixin({}),o=25,p=[],q=function(a){return a},r=a.ascending,s=0,t=!0;return n._doRender=function(){return n.selectAll("tbody").remove(),g(e()),n},n._doColumnValueFormat=function(a,b){return"function"==typeof a?a(b):"string"==typeof a?b[a]:a.format(b)},n._doColumnHeaderFormat=function(a){return"function"==typeof a?n._doColumnHeaderFnToString(a):"string"==typeof a?n._doColumnHeaderCapitalize(a):String(a.label)},n._doColumnHeaderCapitalize=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},n._doColumnHeaderFnToString=function(a){var b=String(a),c=b.indexOf("return ");if(c>=0){var d=b.lastIndexOf(";");if(d>=0){b=b.substring(c+7,d);var e=b.indexOf("numberFormat");e>=0&&(b=b.replace("numberFormat",""))}}return b},n._doRedraw=function(){return n._doRender()},n.size=function(a){return arguments.length?(o=a,n):o},n.beginSlice=function(a){return arguments.length?(s=a,n):s},n.endSlice=function(a){return arguments.length?(h=a,n):h},n.columns=function(a){return arguments.length?(p=a,n):p},n.sortBy=function(a){return arguments.length?(q=a,n):q},n.order=function(a){return arguments.length?(r=a,n):r},n.showGroups=function(a){return arguments.length?(t=a,n):t},n.anchor(b,d)},c.dataGrid=function(b,d){function e(){var a=m.root().selectAll("div."+l).data(f(),function(a){return m.keyAccessor()(a)}),b=a.enter().append("div").attr("class",l);return s&&b.html(function(a){return s(a)}),a.exit().remove(),b}function f(){var b=m.dimension().top(n);return a.nest().key(m.group()).sortKeys(q).entries(b.sort(function(a,b){return q(p(a),p(b))}).slice(r,h))}function g(a){var b=a.order().selectAll("div."+j).data(function(a){return a.values});return b.enter().append("div").attr("class",j).html(function(a){return o(a)}),b.exit().remove(),b}var h,i="dc-grid-label",j="dc-grid-item",k="dc-grid-group",l="dc-grid-top",m=c.baseMixin({}),n=999,o=function(a){return"you need to provide an html() handling param: "+JSON.stringify(a)},p=function(a){return a},q=a.ascending,r=0,s=function(a){return"<div class='"+k+"'><h1 class='"+i+"'>"+m.keyAccessor()(a)+"</h1></div>"};return m._doRender=function(){return m.selectAll("div."+l).remove(),g(e()),m},m._doRedraw=function(){return m._doRender()},m.beginSlice=function(a){return arguments.length?(r=a,m):r},m.endSlice=function(a){return arguments.length?(h=a,m):h},m.size=function(a){return arguments.length?(n=a,m):n},m.html=function(a){return arguments.length?(o=a,m):o},m.htmlGroup=function(a){return arguments.length?(s=a,m):s},m.sortBy=function(a){return arguments.length?(p=a,m):p},m.order=function(a){return arguments.length?(q=a,m):q},m.anchor(b,d)},c.bubbleChart=function(a,b){function d(a){var b=a.enter().append("g");b.attr("class",i.BUBBLE_NODE_CLASS).attr("transform",j).append("circle").attr("class",function(a,b){return i.BUBBLE_CLASS+" _"+b}).on("click",i.onClick).attr("fill",i.getColor).attr("r",0),c.transition(a,i.transitionDuration(),i.transitionDelay()).select("circle."+i.BUBBLE_CLASS).attr("r",function(a){return i.bubbleR(a)}).attr("opacity",function(a){return i.bubbleR(a)>0?1:0}),i._doRenderLabel(b),i._doRenderTitles(b)}function e(a){c.transition(a,i.transitionDuration(),i.transitionDelay()).attr("transform",j).select("circle."+i.BUBBLE_CLASS).attr("fill",i.getColor).attr("r",function(a){return i.bubbleR(a)}).attr("opacity",function(a){return i.bubbleR(a)>0?1:0}),i.doUpdateLabels(a),i.doUpdateTitles(a)}function f(a){a.exit().remove()}function g(a){var b=i.x()(i.keyAccessor()(a));return isNaN(b)&&(b=0),b}function h(a){var b=i.y()(i.valueAccessor()(a));return isNaN(b)&&(b=0),b}var i=c.bubbleMixin(c.coordinateGridMixin({}));i.transitionDuration(750),i.transitionDelay(0);var j=function(a){return"translate("+g(a)+","+h(a)+")"};return i.plotData=function(){i.calculateRadiusDomain(),i.r().range([i.MIN_RADIUS,i.xAxisLength()*i.maxBubbleRelativeSize()]);var a=i.data(),b=i.chartBodyG().selectAll("g."+i.BUBBLE_NODE_CLASS).data(a,function(a){return a.key});i.sortBubbleSize()&&b.order(),d(b),e(b),f(b),i.fadeDeselectedArea()},i.renderBrush=function(){},i.redrawBrush=function(){i.fadeDeselectedArea()},i.anchor(a,b)},c.compositeChart=function(b,d){function e(a,b){var c,d,e,g,h;return a&&(c=m(),d=p()),b&&(e=n(),g=q()),w.alignYAxes()&&a&&b&&(h=f(c,d,e,g)),h||{lyAxisMin:c,lyAxisMax:d,ryAxisMin:e,ryAxisMax:g}}function f(a,b,c,d){var e=(d-c)/(b-a);return{lyAxisMin:Math.min(a,c/e),lyAxisMax:Math.max(b,d/e),ryAxisMin:Math.min(c,a*e),ryAxisMax:Math.max(d,b*e)}}function g(b){var c=void 0===w.rightY()||w.elasticY(),d=c||w.resizing();void 0===w.rightY()&&w.rightY(a.scale.linear()),c&&w.rightY().domain([b.ryAxisMin,b.ryAxisMax]),d&&w.rightY().rangeRound([w.yAxisHeight(),0]),w.rightY().range([w.yAxisHeight(),0]),w.rightYAxis(w.rightYAxis().scale(w.rightY())),w.rightYAxis().orient("right")}function h(b){var c=void 0===w.y()||w.elasticY(),d=c||w.resizing();void 0===w.y()&&w.y(a.scale.linear()),c&&w.y().domain([b.lyAxisMin,b.lyAxisMax]),d&&w.y().rangeRound([w.yAxisHeight(),0]),w.y().range([w.yAxisHeight(),0]),w.yAxis(w.yAxis().scale(w.y())),w.yAxis().orient("left")}function i(a,b){a._generateG(w.g()),a.g().attr("class",u+" _"+b)}function j(){return x.filter(function(a){return!a.useRightYAxis()})}function k(){return x.filter(function(a){return a.useRightYAxis()})}function l(a){return a.map(function(a){return a.yAxisMin()})}function m(){return a.min(l(j()))}function n(){return a.min(l(k()))}function o(a){return a.map(function(a){return a.yAxisMax()})}function p(){return c.utils.add(a.max(o(j())),w.yAxisPadding())}function q(){return c.utils.add(a.max(o(k())),w.yAxisPadding())}function r(){return x.map(function(a){return a.xAxisMin()})}function s(){return x.map(function(a){return a.xAxisMax()})}var t,u="sub",v=12,w=c.coordinateGridMixin({}),x=[],y={},z=!1,A=!0,B=!1,C=a.svg.axis(),D=0,E=v,F=!1;return w._mandatoryAttributes([]),w.transitionDuration(500),w.transitionDelay(0),c.override(w,"_generateG",function(){for(var a=this.__generateG(),b=0;b<x.length;++b){var c=x[b];i(c,b),c.dimension()||c.dimension(w.dimension()),c.group()||c.group(w.group()),c.chartGroup(w.chartGroup()),c.svg(w.svg()),c.xUnits(w.xUnits()),c.transitionDuration(w.transitionDuration(),w.transitionDelay()),c.brushOn(w.brushOn()),c.renderTitle(w.renderTitle()),c.elasticX(w.elasticX())}return a}),w._brushing=function(){for(var a=w.extendBrush(),b=w.brushIsEmpty(a),c=0;c<x.length;++c)x[c].replaceFilter(b?null:a)},w._prepareYAxis=function(){var a=0!==j().length,b=0!==k().length,c=e(a,b);a&&h(c),b&&g(c),j().length>0&&!F?w._renderHorizontalGridLinesForAxis(w.g(),w.y(),w.yAxis()):k().length>0&&w._renderHorizontalGridLinesForAxis(w.g(),t,C)},w.renderYAxis=function(){0!==j().length&&(w.renderYAxisAt("y",w.yAxis(),w.margins().left),w.renderYAxisLabel("y",w.yAxisLabel(),-90)),0!==k().length&&(w.renderYAxisAt("yr",w.rightYAxis(),w.width()-w.margins().right),w.renderYAxisLabel("yr",w.rightYAxisLabel(),90,w.width()-E))},w.plotData=function(){for(var a=0;a<x.length;++a){var b=x[a];b.g()||i(b,a),z&&b.colors(w.colors()),b.x(w.x()),b.xAxis(w.xAxis()),b.useRightYAxis()?(b.y(w.rightY()),b.yAxis(w.rightYAxis())):(b.y(w.y()),b.yAxis(w.yAxis())),b.plotData(),b._activateRenderlets()}},w.useRightAxisGridLines=function(a){return arguments?(F=a,w):F},w.childOptions=function(a){return arguments.length?(y=a,x.forEach(function(a){a.options(y)}),w):y},w.fadeDeselectedArea=function(){for(var a=0;a<x.length;++a){var b=x[a];b.brush(w.brush()),b.fadeDeselectedArea()}},w.rightYAxisLabel=function(a,b){return arguments.length?(D=a,w.margins().right-=E,E=void 0===b?v:b,w.margins().right+=E,w):D},w.compose=function(a){return x=a,x.forEach(function(a){a.height(w.height()),a.width(w.width()),a.margins(w.margins()),A&&a.title(w.title()),a.options(y)}),w},w.children=function(){return x},w.shareColors=function(a){return arguments.length?(z=a,w):z},w.shareTitle=function(a){return arguments.length?(A=a,w):A},w.rightY=function(a){return arguments.length?(t=a,w.rescale(),w):t},w.alignYAxes=function(a){return arguments.length?(B=a,w.rescale(),w):B},delete w.yAxisMin,delete w.yAxisMax,c.override(w,"xAxisMin",function(){return c.utils.subtract(a.min(r()),w.xAxisPadding())}),c.override(w,"xAxisMax",function(){return c.utils.add(a.max(s()),w.xAxisPadding())}),w.legendables=function(){return x.reduce(function(a,b){return z&&b.colors(w.colors()),a.push.apply(a,b.legendables()),a},[])},w.legendHighlight=function(a){for(var b=0;b<x.length;++b){var c=x[b];c.legendHighlight(a)}},w.legendReset=function(a){for(var b=0;b<x.length;++b){var c=x[b];c.legendReset(a)}},w.legendToggle=function(){console.log("composite should not be getting legendToggle itself")},w.rightYAxis=function(a){return arguments.length?(C=a,w):C},w.anchor(b,d)},c.seriesChart=function(b,d){function e(b,c){return a.ascending(i.keyAccessor()(b),i.keyAccessor()(c))}function f(a){j[a].g()&&j[a].g().remove(),delete j[a]}function g(){Object.keys(j).map(f),j={}}var h,i=c.compositeChart(b,d),j={},k=c.lineChart,l=a.ascending,m=e;return i._mandatoryAttributes().push("seriesAccessor","chart"),i.shareColors(!0),i._preprocessData=function(){var b,c=[],e=a.nest().key(h);l&&e.sortKeys(l),m&&e.sortValues(m);var g=e.entries(i.data()),n=g.map(function(e,f){var g=j[e.key]||k.call(i,i,d,e.key,f);return j[e.key]||(b=!0),j[e.key]=g,c.push(e.key),g.dimension(i.dimension()).group({all:a.functor(e.values)},e.key).keyAccessor(i.keyAccessor()).valueAccessor(i.valueAccessor()).brushOn(i.brushOn())});Object.keys(j).filter(function(a){return c.indexOf(a)===-1}).forEach(function(a){f(a),b=!0}),i._compose(n),b&&i.legend()&&i.legend().render()},i.chart=function(a){return arguments.length?(k=a,g(),i):k},i.seriesAccessor=function(a){return arguments.length?(h=a,g(),i):h},i.seriesSort=function(a){return arguments.length?(l=a,g(),i):l},i.valueSort=function(a){return arguments.length?(m=a,g(),i):m},i._compose=i.compose,delete i.compose,i},c.geoChoroplethChart=function(b,d){function e(a){var b=f();if(g(a)){var c=h(a);n(c,a,b),o(c,a,b)}}function f(){for(var a={},b=p.data(),c=0;c<b.length;++c)a[p.keyAccessor()(b[c])]=p.valueAccessor()(b[c]);return a}function g(a){return m(a).keyAccessor}function h(a){var b=p.svg().selectAll(i(a)).classed("selected",function(b){return j(a,b)}).classed("deselected",function(b){return k(a,b)}).attr("class",function(b){var d=m(a).name,e=c.utils.nameToId(m(a).keyAccessor(b)),f=d+" "+e;return j(a,b)&&(f+=" selected"),k(a,b)&&(f+=" deselected"),f});return b}function i(a){return"g.layer"+a+" g."+m(a).name}function j(a,b){return p.hasFilter()&&p.hasFilter(l(a,b))}function k(a,b){return p.hasFilter()&&!p.hasFilter(l(a,b))}function l(a,b){return m(a).keyAccessor(b)}function m(a){return s[a]}function n(b,d,e){var f=b.select("path").attr("fill",function(){var b=a.select(this).attr("fill");return b?b:"none"}).on("click",function(a){return p.onClick(a,d)});c.transition(f,p.transitionDuration(),p.transitionDelay()).attr("fill",function(a,b){return p.getColor(e[m(d).keyAccessor(a)],b)})}function o(a,b,c){p.renderTitle()&&a.selectAll("title").text(function(a){var d=l(b,a),e=c[d];return p.title()({key:d,value:e})})}var p=c.colorMixin(c.baseMixin({}));p.colorAccessor(function(a){return a||0});var q,r=a.geo.path(),s=[];return p._doRender=function(){p.resetSvg();for(var a=0;a<s.length;++a){var b=p.svg().append("g").attr("class","layer"+a),c=b.selectAll("g."+m(a).name).data(m(a).data).enter().append("g").attr("class",m(a).name);c.append("path").attr("fill","white").attr("d",r),c.append("title"),e(a)}q=!1},p.onClick=function(a,b){var d=m(b).keyAccessor(a);c.events.trigger(function(){p.filter(d),p.redrawGroup()})},p._doRedraw=function(){for(var a=0;a<s.length;++a)e(a),q&&p.svg().selectAll("g."+m(a).name+" path").attr("d",r);q=!1},p.overlayGeoJson=function(a,b,c){for(var d=0;d<s.length;++d)if(s[d].name===b)return s[d].data=a,s[d].keyAccessor=c,p;return s.push({name:b,data:a,keyAccessor:c}),p},p.projection=function(a){return r.projection(a),q=!0,p},p.geoJsons=function(){return s},p.geoPath=function(){return r},p.removeGeoJson=function(a){for(var b=[],c=0;c<s.length;++c){var d=s[c];d.name!==a&&b.push(d)}return s=b,p},p.anchor(b,d)},c.bubbleOverlay=function(b,d){function e(){return j=n.select("g."+k),j.empty()&&(j=n.svg().append("g").attr("class",k)),j}function f(){var a=g();n.calculateRadiusDomain(),o.forEach(function(b){var d=h(b,a),e=d.select("circle."+m);e.empty()&&(e=d.append("circle").attr("class",m).attr("r",0).attr("fill",n.getColor).on("click",n.onClick)),c.transition(e,n.transitionDuration(),n.transitionDelay()).attr("r",function(a){return n.bubbleR(a)}),n._doRenderLabel(d),n._doRenderTitles(d)})}function g(){var a={};return n.data().forEach(function(b){a[n.keyAccessor()(b)]=b}),a}function h(a,b){var d=l+" "+c.utils.nameToId(a.name),e=j.select("g."+c.utils.nameToId(a.name));return e.empty()&&(e=j.append("g").attr("class",d).attr("transform","translate("+a.x+","+a.y+")")),e.datum(b[a.name]),e}function i(){var a=g();n.calculateRadiusDomain(),o.forEach(function(b){var d=h(b,a),e=d.select("circle."+m);c.transition(e,n.transitionDuration(),n.transitionDelay()).attr("r",function(a){return n.bubbleR(a)}).attr("fill",n.getColor),n.doUpdateLabels(d),n.doUpdateTitles(d)})}var j,k="bubble-overlay",l="node",m="bubble",n=c.bubbleMixin(c.baseMixin({})),o=[];return n.transitionDuration(750),n.transitionDelay(0),n.radiusValueAccessor(function(a){return a.value}),n.point=function(a,b,c){return o.push({name:a,x:b,y:c}),n},n._doRender=function(){return j=e(),n.r().range([n.MIN_RADIUS,n.width()*n.maxBubbleRelativeSize()]),f(),n.fadeDeselectedArea(),n},n._doRedraw=function(){return i(),n.fadeDeselectedArea(),n},n.debug=function(b){if(b){var d=n.select("g."+c.constants.DEBUG_GROUP_CLASS); d.empty()&&(d=n.svg().append("g").attr("class",c.constants.DEBUG_GROUP_CLASS));var e=d.append("text").attr("x",10).attr("y",20);d.append("rect").attr("width",n.width()).attr("height",n.height()).on("mousemove",function(){var b=a.mouse(d.node()),c=b[0]+", "+b[1];e.text(c)})}else n.selectAll(".debug").remove();return n},n.anchor(b,d),n},c.rowChart=function(b,d){function e(){if(!t||u){var b=a.extent(v,G.cappedValueAccessor);b[0]>0&&(b[0]=0),b[1]<0&&(b[1]=0),t=a.scale.linear().domain(b).range([0,G.effectiveWidth()])}H.scale(t)}function f(){var a=s.select("g.axis");e(),a.empty()&&(a=s.append("g").attr("class","axis")),a.attr("transform","translate(0, "+G.effectiveHeight()+")"),c.transition(a,G.transitionDuration(),G.transitionDelay()).call(H)}function g(){s.selectAll("g.tick").select("line.grid-line").remove(),s.selectAll("g.tick").append("line").attr("class","grid-line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",function(){return-G.effectiveHeight()})}function h(){v=G.data(),f(),g();var a=s.selectAll("g."+D).data(v);i(a),j(a),l(a)}function i(a){var b=a.enter().append("g").attr("class",function(a,b){return D+" _"+b});b.append("rect").attr("width",0),n(b)}function j(a){a.exit().remove()}function k(){var a=t(0);return a===-(1/0)||a!==a?t(1):a}function l(a){var b,d=v.length;b=C?C:(G.effectiveHeight()-(d+1)*B)/d,y||(x=b/2);var e=a.attr("transform",function(a,c){return"translate(0,"+((c+1)*B+c*b)+")"}).select("rect").attr("height",b).attr("fill",G.getColor).on("click",p).classed("deselected",function(a){return!!G.hasFilter()&&!r(a)}).classed("selected",function(a){return!!G.hasFilter()&&r(a)});c.transition(e,G.transitionDuration(),G.transitionDelay()).attr("width",function(a){return Math.abs(k()-t(G.valueAccessor()(a)))}).attr("transform",q),m(a),o(a)}function m(a){G.renderTitle()&&(a.select("title").remove(),a.append("title").text(G.title()))}function n(a){G.renderLabel()&&a.append("text").on("click",p),G.renderTitleLabel()&&a.append("text").attr("class",E).on("click",p)}function o(a){if(G.renderLabel()){var b=a.select("text").attr("x",w).attr("y",x).attr("dy",z).on("click",p).attr("class",function(a,b){return D+" _"+b}).text(function(a){return G.label()(a)});c.transition(b,G.transitionDuration(),G.transitionDelay()).attr("transform",q)}if(G.renderTitleLabel()){var d=a.select("."+E).attr("x",G.effectiveWidth()-A).attr("y",x).attr("dy",z).attr("text-anchor","end").on("click",p).attr("class",function(a,b){return E+" _"+b}).text(function(a){return G.title()(a)});c.transition(d,G.transitionDuration(),G.transitionDelay()).attr("transform",q)}}function p(a){G.onClick(a)}function q(a){var b=t(G.cappedValueAccessor(a)),c=k(),d=b>c?c:b;return"translate("+d+",0)"}function r(a){return G.hasFilter(G.cappedKeyAccessor(a))}var s,t,u,v,w=10,x=15,y=!1,z="0.35em",A=2,B=5,C=!1,D="row",E="titlerow",F=!1,G=c.capMixin(c.marginMixin(c.colorMixin(c.baseMixin({})))),H=a.svg.axis().orient("bottom");return G.rowsCap=G.cap,G._doRender=function(){return G.resetSvg(),s=G.svg().append("g").attr("transform","translate("+G.margins().left+","+G.margins().top+")"),h(),G},G.title(function(a){return G.cappedKeyAccessor(a)+": "+G.cappedValueAccessor(a)}),G.label(G.cappedKeyAccessor),G.x=function(a){return arguments.length?(t=a,G):t},G.renderTitleLabel=function(a){return arguments.length?(F=a,G):F},G._doRedraw=function(){return h(),G},G.xAxis=function(){return H},G.fixedBarHeight=function(a){return arguments.length?(C=a,G):C},G.gap=function(a){return arguments.length?(B=a,G):B},G.elasticX=function(a){return arguments.length?(u=a,G):u},G.labelOffsetX=function(a){return arguments.length?(w=a,G):w},G.labelOffsetY=function(a){return arguments.length?(x=a,y=!0,G):x},G.titleLabelOffsetX=function(a){return arguments.length?(A=a,G):A},G.anchor(b,d)},c.legend=function(){function a(){return k+j}var b,d,e,f=2,g={},h=0,i=0,j=12,k=5,l=!1,m=560,n=70,o=!1,p=c.pluck("name");return g.parent=function(a){return arguments.length?(b=a,g):b},g.render=function(){b.svg().select("g.dc-legend").remove(),e=b.svg().append("g").attr("class","dc-legend").attr("transform","translate("+h+","+i+")");var g=b.legendables();void 0!==d&&(g=g.slice(0,d));var q=e.selectAll("g.dc-legend-item").data(g).enter().append("g").attr("class","dc-legend-item").on("mouseover",function(a){b.legendHighlight(a)}).on("mouseout",function(a){b.legendReset(a)}).on("click",function(a){a.chart.legendToggle(a)});e.selectAll("g.dc-legend-item").classed("fadeout",function(a){return a.chart.isLegendableHidden(a)}),g.some(c.pluck("dashstyle"))?q.append("line").attr("x1",0).attr("y1",j/2).attr("x2",j).attr("y2",j/2).attr("stroke-width",2).attr("stroke-dasharray",c.pluck("dashstyle")).attr("stroke",c.pluck("color")):q.append("rect").attr("width",j).attr("height",j).attr("fill",function(a){return a?a.color:"blue"}),q.append("text").text(p).attr("x",j+f).attr("y",function(){return j/2+(this.clientHeight?this.clientHeight:13)/2-2});var r=0,s=0;q.attr("transform",function(b,c){if(l){var d=o===!0?this.getBBox().width+k:n;r+d>m&&r>0&&(++s,r=0);var e="translate("+r+","+s*a()+")";return r+=d,e}return"translate(0,"+c*a()+")"})},g.x=function(a){return arguments.length?(h=a,g):h},g.y=function(a){return arguments.length?(i=a,g):i},g.gap=function(a){return arguments.length?(k=a,g):k},g.itemHeight=function(a){return arguments.length?(j=a,g):j},g.horizontal=function(a){return arguments.length?(l=a,g):l},g.legendWidth=function(a){return arguments.length?(m=a,g):m},g.itemWidth=function(a){return arguments.length?(n=a,g):n},g.autoItemWidth=function(a){return arguments.length?(o=a,g):o},g.legendText=function(a){return arguments.length?(p=a,g):p},g.maxItems=function(a){return arguments.length?(d=c.utils.isNumber(a)?a:void 0,g):d},g},c.scatterPlot=function(b,d){function e(a,b){return j(a)?v[b]?Math.pow(n,2):Math.pow(o,2):Math.pow(r,2)}function f(a,b){h.renderTitle()&&(a.selectAll("title").remove(),a.append("title").text(function(a){return h.title()(a)}))}function g(b,d){var e=h.chartBodyG().selectAll(".chart-body path.symbol").filter(function(){return b(a.select(this))}),f=i.size();i.size(Math.pow(d,2)),c.transition(e,h.transitionDuration(),h.transitionDelay()).attr("d",i),i.size(f)}var h=c.coordinateGridMixin({}),i=a.svg.symbol(),j=function(a){return a.value},k=h.keyAccessor();h.keyAccessor(function(a){return k(a)[0]}),h.valueAccessor(function(a){return k(a)[1]}),h.colorAccessor(function(){return h._groupName}),h.title(function(a){return h.keyAccessor()(a)+","+h.valueAccessor()(a)+": "+h.existenceAccessor()(a)});var l=function(a){return"translate("+h.x()(h.keyAccessor()(a))+","+h.y()(h.valueAccessor()(a))+")"},m=7,n=5,o=3,p=null,q=1,r=0,s=0,t=1,u=null,v=[];return i.size(e),c.override(h,"_filter",function(a){return arguments.length?h.__filter(c.filters.RangedTwoDimensionalFilter(a)):h.__filter()}),h.plotData=function(){var a=h.chartBodyG().selectAll("path.symbol").data(h.data());a.enter().append("path").attr("class","symbol").attr("opacity",0).attr("fill",h.getColor).attr("transform",l),a.call(f,h.data()),a.each(function(a,b){v[b]=!h.filter()||h.filter().isFiltered([a.key[0],a.key[1]])}),c.transition(a,h.transitionDuration(),h.transitionDelay()).attr("opacity",function(a,b){return j(a)?v[b]?t:h.excludedOpacity():s}).attr("fill",function(a,b){return u&&!j(a)?u:h.excludedColor()&&!v[b]?h.excludedColor():h.getColor(a)}).attr("transform",l).attr("d",i),c.transition(a.exit(),h.transitionDuration(),h.transitionDelay()).attr("opacity",0).remove()},h.existenceAccessor=function(a){return arguments.length?(j=a,this):j},h.symbol=function(a){return arguments.length?(i.type(a),h):i.type()},h.customSymbol=function(a){return arguments.length?(i=a,i.size(e),h):i},h.symbolSize=function(a){return arguments.length?(n=a,h):n},h.highlightedSize=function(a){return arguments.length?(m=a,h):m},h.excludedSize=function(a){return arguments.length?(o=a,h):o},h.excludedColor=function(a){return arguments.length?(p=a,h):p},h.excludedOpacity=function(a){return arguments.length?(q=a,h):q},h.hiddenSize=h.emptySize=function(a){return arguments.length?(r=a,h):r},h.emptyColor=function(a){return arguments.length?(u=a,h):u},h.emptyOpacity=function(a){return arguments.length?(s=a,h):s},h.nonemptyOpacity=function(a){return arguments.length?(t=a,h):s},h.legendables=function(){return[{chart:h,name:h._groupName,color:h.getColor()}]},h.legendHighlight=function(b){g(function(a){return a.attr("fill")===b.color},m),h.chartBodyG().selectAll(".chart-body path.symbol").filter(function(){return a.select(this).attr("fill")!==b.color}).classed("fadeout",!0)},h.legendReset=function(b){g(function(a){return a.attr("fill")===b.color},n),h.chartBodyG().selectAll(".chart-body path.symbol").filter(function(){return a.select(this).attr("fill")!==b.color}).classed("fadeout",!1)},h.setHandlePaths=function(){},h.extendBrush=function(){var a=h.brush().extent();return h.round()&&(a[0]=a[0].map(h.round()),a[1]=a[1].map(h.round()),h.g().select(".brush").call(h.brush().extent(a))),a},h.brushIsEmpty=function(a){return h.brush().empty()||!a||a[0][0]>=a[1][0]||a[0][1]>=a[1][1]},h._brushing=function(){var a=h.extendBrush();if(h.redrawBrush(h.g()),h.brushIsEmpty(a))c.events.trigger(function(){h.filter(null),h.redrawGroup()});else{var b=c.filters.RangedTwoDimensionalFilter(a);c.events.trigger(function(){h.filter(null),h.filter(b),h.redrawGroup()},c.constants.EVENT_DELAY)}},h.setBrushY=function(a){a.call(h.brush().y(h.y()))},h.anchor(b,d)},c.numberDisplay=function(b,d){function e(a){if(!a.length)return null;var b=i._computeOrderedGroups(a);return b[b.length-1]}var f,g="number-display",h=a.format(".2s"),i=c.baseMixin({}),j={one:"",some:"",none:""};return i._mandatoryAttributes(["group"]),i.ordering(function(a){return a.value}),i.html=function(a){return arguments.length?(a.none?j.none=a.none:a.one?j.none=a.one:a.some&&(j.none=a.some),a.one?j.one=a.one:a.some&&(j.one=a.some),a.some?j.some=a.some:a.one&&(j.some=a.one),i):j},i.value=function(){return i.data()},i.data(function(a){var b=a.value?a.value():e(a.all());return i.valueAccessor()(b)}),i.transitionDuration(250),i.transitionDelay(0),i._doRender=function(){var b=i.value(),c=i.selectAll("."+g);c.empty()&&(c=c.data([0]).enter().append("span").attr("class",g)),c.transition().duration(i.transitionDuration()).delay(i.transitionDelay()).ease("quad-out-in").tween("text",function(){var c=isFinite(f)?f:0,d=a.interpolateNumber(c||0,b);return f=b,function(a){var c=null,e=i.formatNumber()(d(a));0===b&&""!==j.none?c=j.none:1===b&&""!==j.one?c=j.one:""!==j.some&&(c=j.some),this.innerHTML=c?c.replace("%number",e):e}})},i._doRedraw=function(){return i._doRender()},i.formatNumber=function(a){return arguments.length?(h=a,i):h},i.anchor(b,d)},c.heatMap=function(b,d){function e(a,b){var d=p.selectAll(".box-group").filter(function(c){return c.key[a]===b}),e=d.filter(function(a){return!p.hasFilter(a.key)});c.events.trigger(function(){var a=e.empty()?d:e,b=a.data().map(function(a){return c.filters.TwoDimensionalFilter(a.key)});p._filter([b]),p.redrawGroup()})}var f,g,h,i=6.75,j=a.ascending,k=a.ascending,l=a.scale.ordinal(),m=a.scale.ordinal(),n=i,o=i,p=c.colorMixin(c.marginMixin(c.baseMixin({})));p._mandatoryAttributes(["group"]),p.title(p.colorAccessor());var q=function(a){return a},r=function(a){return a};p.colsLabel=function(a){return arguments.length?(q=a,p):q},p.rowsLabel=function(a){return arguments.length?(r=a,p):r};var s=function(a){e(0,a)},t=function(a){e(1,a)},u=function(a){var b=a.key;c.events.trigger(function(){p.filter(b),p.redrawGroup()})};return c.override(p,"filter",function(a){return arguments.length?p._filter(c.filters.TwoDimensionalFilter(a)):p._filter()}),p.rows=function(a){return arguments.length?(h=a,p):h},p.rowOrdering=function(a){return arguments.length?(k=a,p):k},p.cols=function(a){return arguments.length?(g=a,p):g},p.colOrdering=function(a){return arguments.length?(j=a,p):j},p._doRender=function(){return p.resetSvg(),f=p.svg().append("g").attr("class","heatmap").attr("transform","translate("+p.margins().left+","+p.margins().top+")"),p._doRedraw()},p._doRedraw=function(){var a=p.data(),b=p.rows()||a.map(p.valueAccessor()),d=p.cols()||a.map(p.keyAccessor());k&&(b=b.sort(k)),j&&(d=d.sort(j)),b=m.domain(b),d=l.domain(d);var e=b.domain().length,g=d.domain().length,h=Math.floor(p.effectiveWidth()/g),i=Math.floor(p.effectiveHeight()/e);d.rangeRoundBands([0,p.effectiveWidth()]),b.rangeRoundBands([p.effectiveHeight(),0]);var q=f.selectAll("g.box-group").data(p.data(),function(a,b){return p.keyAccessor()(a,b)+"\0"+p.valueAccessor()(a,b)}),r=q.enter().append("g").attr("class","box-group");r.append("rect").attr("class","heat-box").attr("fill","white").on("click",p.boxOnClick()),p.renderTitle()&&(r.append("title"),q.select("title").text(p.title())),c.transition(q.select("rect"),p.transitionDuration(),p.transitionDelay()).attr("x",function(a,b){return d(p.keyAccessor()(a,b))}).attr("y",function(a,c){return b(p.valueAccessor()(a,c))}).attr("rx",n).attr("ry",o).attr("fill",p.getColor).attr("width",h).attr("height",i),q.exit().remove();var s=f.select("g.cols");s.empty()&&(s=f.append("g").attr("class","cols axis"));var t=s.selectAll("text").data(d.domain());t.enter().append("text").attr("x",function(a){return d(a)+h/2}).style("text-anchor","middle").attr("y",p.effectiveHeight()).attr("dy",12).on("click",p.xAxisOnClick()).text(p.colsLabel()),c.transition(t,p.transitionDuration(),p.transitionDelay()).text(p.colsLabel()).attr("x",function(a){return d(a)+h/2}).attr("y",p.effectiveHeight()),t.exit().remove();var u=f.select("g.rows");u.empty()&&(u=f.append("g").attr("class","rows axis"));var v=u.selectAll("text").data(b.domain());return v.enter().append("text").attr("dy",6).style("text-anchor","end").attr("x",0).attr("dx",-2).on("click",p.yAxisOnClick()).text(p.rowsLabel()),c.transition(v,p.transitionDuration(),p.transitionDelay()).text(p.rowsLabel()).attr("y",function(a){return b(a)+i/2}),v.exit().remove(),p.hasFilter()?p.selectAll("g.box-group").each(function(a){p.isSelectedNode(a)?p.highlightSelected(this):p.fadeDeselected(this)}):p.selectAll("g.box-group").each(function(){p.resetHighlight(this)}),p},p.boxOnClick=function(a){return arguments.length?(u=a,p):u},p.xAxisOnClick=function(a){return arguments.length?(s=a,p):s},p.yAxisOnClick=function(a){return arguments.length?(t=a,p):t},p.xBorderRadius=function(a){return arguments.length?(n=a,p):n},p.yBorderRadius=function(a){return arguments.length?(o=a,p):o},p.isSelectedNode=function(a){return p.hasFilter(a.key)},p.anchor(b,d)},function(){function b(a){return[0,a.length-1]}function c(b){return[a.quantile(b,.25),a.quantile(b,.5),a.quantile(b,.75)]}a.box=function(){function d(b){b.each(function(b,c){b=b.map(j).sort(a.ascending);var d=a.select(this),n=b.length,o=b[0],p=b[n-1],q=b.quartiles=l(b),r=k&&k.call(this,b,c),s=r&&r.map(function(a){return b[a]}),t=r?a.range(0,r[0]).concat(a.range(r[1]+1,n)):a.range(n),u=a.scale.linear().domain(i&&i.call(this,b,c)||[o,p]).range([f,0]),v=this.__chart__||a.scale.linear().domain([0,1/0]).range(u.range());this.__chart__=u;var w=d.selectAll("line.center").data(s?[s]:[]);w.enter().insert("line","rect").attr("class","center").attr("x1",e/2).attr("y1",function(a){return v(a[0])}).attr("x2",e/2).attr("y2",function(a){return v(a[1])}).style("opacity",1e-6).transition().duration(g).delay(h).style("opacity",1).attr("y1",function(a){return u(a[0])}).attr("y2",function(a){return u(a[1])}),w.transition().duration(g).delay(h).style("opacity",1).attr("x1",e/2).attr("x2",e/2).attr("y1",function(a){return u(a[0])}).attr("y2",function(a){return u(a[1])}),w.exit().transition().duration(g).delay(h).style("opacity",1e-6).attr("y1",function(a){return u(a[0])}).attr("y2",function(a){return u(a[1])}).remove();var x=d.selectAll("rect.box").data([q]);x.enter().append("rect").attr("class","box").attr("x",0).attr("y",function(a){return v(a[2])}).attr("width",e).attr("height",function(a){return v(a[0])-v(a[2])}).transition().duration(g).delay(h).attr("y",function(a){return u(a[2])}).attr("height",function(a){return u(a[0])-u(a[2])}),x.transition().duration(g).delay(h).attr("width",e).attr("y",function(a){return u(a[2])}).attr("height",function(a){return u(a[0])-u(a[2])});var y=d.selectAll("line.median").data([q[1]]);y.enter().append("line").attr("class","median").attr("x1",0).attr("y1",v).attr("x2",e).attr("y2",v).transition().duration(g).delay(h).attr("y1",u).attr("y2",u),y.transition().duration(g).delay(h).attr("x1",0).attr("x2",e).attr("y1",u).attr("y2",u);var z=d.selectAll("line.whisker").data(s||[]);z.enter().insert("line","circle, text").attr("class","whisker").attr("x1",0).attr("y1",v).attr("x2",e).attr("y2",v).style("opacity",1e-6).transition().duration(g).delay(h).attr("y1",u).attr("y2",u).style("opacity",1),z.transition().duration(g).delay(h).attr("x1",0).attr("x2",e).attr("y1",u).attr("y2",u).style("opacity",1),z.exit().transition().duration(g).delay(h).attr("y1",u).attr("y2",u).style("opacity",1e-6).remove();var A=d.selectAll("circle.outlier").data(t,Number);A.enter().insert("circle","text").attr("class","outlier").attr("r",5).attr("cx",e/2).attr("cy",function(a){return v(b[a])}).style("opacity",1e-6).transition().duration(g).delay(h).attr("cy",function(a){return u(b[a])}).style("opacity",1),A.transition().duration(g).delay(h).attr("cx",e/2).attr("cy",function(a){return u(b[a])}).style("opacity",1),A.exit().transition().duration(g).delay(h).attr("cy",function(a){return u(b[a])}).style("opacity",1e-6).remove();var B=m||u.tickFormat(8),C=d.selectAll("text.box").data(q);C.enter().append("text").attr("class","box").attr("dy",".3em").attr("dx",function(a,b){return 1&b?6:-6}).attr("x",function(a,b){return 1&b?e:0}).attr("y",v).attr("text-anchor",function(a,b){return 1&b?"start":"end"}).text(B).transition().duration(g).delay(h).attr("y",u),C.transition().duration(g).delay(h).text(B).attr("x",function(a,b){return 1&b?e:0}).attr("y",u);var D=d.selectAll("text.whisker").data(s||[]);D.enter().append("text").attr("class","whisker").attr("dy",".3em").attr("dx",6).attr("x",e).attr("y",v).text(B).style("opacity",1e-6).transition().duration(g).delay(h).attr("y",u).style("opacity",1),D.transition().duration(g).delay(h).text(B).attr("x",e).attr("y",u).style("opacity",1),D.exit().transition().duration(g).delay(h).attr("y",u).style("opacity",1e-6).remove()}),a.timer.flush()}var e=1,f=1,g=0,h=0,i=null,j=Number,k=b,l=c,m=null;return d.width=function(a){return arguments.length?(e=a,d):e},d.height=function(a){return arguments.length?(f=a,d):f},d.tickFormat=function(a){return arguments.length?(m=a,d):m},d.duration=function(a){return arguments.length?(g=a,d):g},d.domain=function(b){return arguments.length?(i=null===b?b:a.functor(b),d):i},d.value=function(a){return arguments.length?(j=a,d):j},d.whiskers=function(a){return arguments.length?(k=a,d):k},d.quartiles=function(a){return arguments.length?(l=a,d):l},d}}(),c.boxPlot=function(b,d){function e(a){return function(b){var c=b.quartiles[0],d=b.quartiles[2],e=(d-c)*a,f=-1,g=b.length;do++f;while(b[f]<c-e);do--g;while(b[g]>d+e);return[f,g]}}function f(a){var b=a.enter().append("g");b.attr("class","box").attr("transform",p).call(m).on("click",function(a){i.filter(i.keyAccessor()(a)),i.redrawGroup()})}function g(b){c.transition(b,i.transitionDuration(),i.transitionDelay()).attr("transform",p).call(m).each(function(){a.select(this).select("rect.box").attr("fill",i.getColor)})}function h(a){a.exit().remove().call(m)}var i=c.coordinateGridMixin({}),j=1.5,k=e,l=k(j),m=a.box(),n=null,o=function(a,b){return i.isOrdinal()?i.x().rangeBand():a/(1+i.boxPadding())/b};i.yAxisPadding(12),i.x(a.scale.ordinal()),i.xUnits(c.units.ordinal),i.data(function(a){return a.all().map(function(a){return a.map=function(b){return b.call(a,a)},a}).filter(function(a){var b=i.valueAccessor()(a);return 0!==b.length})}),i.boxPadding=i._rangeBandPadding,i.boxPadding(.8),i.outerPadding=i._outerRangeBandPadding,i.outerPadding(.5),i.boxWidth=function(b){return arguments.length?(o=a.functor(b),i):o};var p=function(a,b){var c=i.x()(i.keyAccessor()(a,b));return"translate("+c+", 0)"};return i._preprocessData=function(){i.elasticX()&&i.x().domain([])},i.plotData=function(){var a=o(i.effectiveWidth(),i.xUnitCount());m.whiskers(l).width(a).height(i.effectiveHeight()).value(i.valueAccessor()).domain(i.y().domain()).duration(i.transitionDuration()).tickFormat(n);var b=i.chartBodyG().selectAll("g.box").data(i.data(),i.keyAccessor());f(b),g(b),h(b),i.fadeDeselectedArea()},i.fadeDeselectedArea=function(){if(i.hasFilter())if(i.isOrdinal())i.g().selectAll("g.box").each(function(a){i.isSelectedNode(a)?i.highlightSelected(this):i.fadeDeselected(this)});else{var a=i.brush().extent(),b=a[0],c=a[1],d=i.keyAccessor();i.g().selectAll("g.box").each(function(a){var e=d(a);e<b||e>=c?i.fadeDeselected(this):i.highlightSelected(this)})}else i.g().selectAll("g.box").each(function(){i.resetHighlight(this)})},i.isSelectedNode=function(a){return i.hasFilter(i.keyAccessor()(a))},i.yAxisMin=function(){var b=a.min(i.data(),function(b){return a.min(i.valueAccessor()(b))});return c.utils.subtract(b,i.yAxisPadding())},i.yAxisMax=function(){var b=a.max(i.data(),function(b){return a.max(i.valueAccessor()(b))});return c.utils.add(b,i.yAxisPadding())},i.tickFormat=function(a){return arguments.length?(n=a,i):n},i.anchor(b,d)},c.selectMenu=function(b,d){function e(){var a=h.selectAll("option."+j).data(k.data(),function(a){return k.keyAccessor()(a)});return a.enter().append("option").classed(j,!0).attr("value",function(a){return k.keyAccessor()(a)}),a.text(k.title()),a.exit().remove(),h.selectAll("option."+j).sort(p),h.on("change",f),a}function f(b,c){var d,e=a.event.target;if(e.selectedOptions){var f=Array.prototype.slice.call(e.selectedOptions);d=f.map(function(a){return a.value})}else{var g=[].slice.call(a.event.target.options);d=g.filter(function(a){return a.selected}).map(function(a){return a.value})}1===d.length&&""===d[0]?d=n||null:m||1!==d.length||(d=d[0]),k.onChange(d)}function g(){m?h.attr("multiple",!0):h.attr("multiple",null),null!==o?h.attr("size",o):h.attr("size",null)}var h,i="dc-select-menu",j="dc-select-option",k=c.baseMixin({}),l="Select all",m=!1,n=null,o=null,p=function(a,b){return k.keyAccessor()(a)>k.keyAccessor()(b)?1:k.keyAccessor()(b)>k.keyAccessor()(a)?-1:0},q=function(a){return k.valueAccessor()(a)>0};k.data(function(a){return a.all().filter(q)}),k._doRender=function(){return k.select("select").remove(),h=k.root().append("select").classed(i,!0),h.append("option").text(l).attr("value",""),k._doRedraw(),k};var r=window.navigator.userAgent;return r.indexOf("Trident/")>0&&r.indexOf("MSIE")===-1&&(k.redraw=k.render),k._doRedraw=function(){return g(),e(),k.hasFilter()&&m?h.selectAll("option").property("selected",function(a){return"undefined"!=typeof a&&k.filters().indexOf(String(k.keyAccessor()(a)))>=0}):k.hasFilter()?h.property("value",k.filter()):h.property("value",""),k},k.onChange=function(a){a&&m?k.replaceFilter([a]):a?k.replaceFilter(a):k.filterAll(),c.events.trigger(function(){k.redrawGroup()})},k.order=function(a){return arguments.length?(p=a,k):p},k.promptText=function(a){return arguments.length?(l=a,k):l},k.filterDisplayed=function(a){return arguments.length?(q=a,k):q},k.multiple=function(a){return arguments.length?(m=a,k):m},k.promptValue=function(a){return arguments.length?(n=a,k):n},k.numberVisible=function(a){return arguments.length?(o=a,k):o},k.size=c.logger.deprecate(k.numberVisible,"selectMenu.size is ambiguous - use numberVisible instead"),k.anchor(b,d)},c.abstractBubbleChart=c.bubbleMixin,c.baseChart=c.baseMixin,c.capped=c.capMixin,c.colorChart=c.colorMixin,c.coordinateGridChart=c.coordinateGridMixin,c.marginable=c.marginMixin,c.stackableChart=c.stackMixin,c.d3=a,c.crossfilter=b,c}if("function"==typeof define&&define.amd)define(["d3","crossfilter2"],a);else if("object"==typeof module&&module.exports){var b=require("d3"),c=require("crossfilter2");"function"!=typeof c&&(c=c.crossfilter),module.exports=a(b,c)}else this.dc=a(d3,crossfilter)}(); //# sourceMappingURL=dc.min.js.map \ No newline at end of file diff --git a/civicrm/bower_components/dc-2.1.x/dc.min.js.map b/civicrm/bower_components/dc-2.1.x/dc.min.js.map index fd1ba36702070e58df695210c195b61b26dc1a21..15dc46e5da51c034d8fbcdc6208e2851e9bcc4f6 100644 --- a/civicrm/bower_components/dc-2.1.x/dc.min.js.map +++ b/civicrm/bower_components/dc-2.1.x/dc.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["dc.js"],"names":["_dc","d3","crossfilter","dc","version","constants","CHART_CLASS","DEBUG_GROUP_CLASS","STACK_CLASS","DESELECTED_CLASS","SELECTED_CLASS","NODE_INDEX_NAME","GROUP_INDEX_NAME","DEFAULT_CHART_GROUP","EVENT_DELAY","NEGLIGIBLE_NUMBER","_renderlet","chartRegistry","initializeChartGroup","group","_chartMap","has","chart","e","indexOf","register","push","deregister","i","length","anchorName","splice","clear","list","registerChart","deregisterChart","hasChart","deregisterAllCharts","filterAll","charts","refocusAll","focus","renderAll","render","redrawAll","redraw","disableTransitions","transition","selection","duration","delay","name","s","undefined","optionalTransition","enable","afterTransition","callback","empty","call","n","each","units","integers","start","end","Math","abs","ordinal","domain","fp","precision","_f","d","resolution","utils","isNegligible","floor","ceil","round","override","obj","functionName","newFunction","existingFunction","renderlet","_","arguments","instanceOfChart","o","Object","__dcFlag__","errors","Exception","msg","_msg","this","message","toString","stack","Error","prototype","create","constructor","InvalidStateException","apply","BadArgumentException","dateFormat","time","format","printers","filters","filter","Array","printSingleValue","pluck","f","Date","isFloat","fformat","isInteger","add","l","r","t","replace","getTime","offset","percentage","subtract","isNumber","clamp","val","min","max","_idCounter","uniqueId","nameToId","toLowerCase","appendOrSelect","parent","selector","tag","element","select","append","safeNumber","logger","enableDebugLog","warn","console","log","debug","deprecate","fn","deprecated","warned","events","current","trigger","closure","setTimeout","RangedFilter","low","high","range","isFiltered","value","filterType","TwoDimensionalFilter","RangedTwoDimensionalFilter","fromBottomLeft","Infinity","x","y","baseMixin","_chart","sizeSvg","_svg","_useViewBoxResizing","attr","width","height","generateSvg","root","checkForMandatoryAttributes","a","applyFilters","dimension","fs","_filterHandler","_dimension","_group","_anchor","_root","_isChild","_width","_height","_orderSort","_legend","_commitHandler","_minWidth","_defaultWidthCalc","getBoundingClientRect","_widthCalc","_minHeight","_defaultHeightCalc","_heightCalc","_keyAccessor","_valueAccessor","_label","_ordering","_renderLabel","_title","keyAccessor","valueAccessor","_renderTitle","_controlsUseVisibility","_transitionDuration","_transitionDelay","_filterPrinter","_mandatoryAttributes","_chartGroup","_listeners","dispatch","_filters","filterRange","filterFunction","filterExact","_data","all","functor","node","minWidth","minHeight","useViewBoxResizing","expireCache","data","_groupName","ordering","orderFunction","quicksort","by","_computeOrderedGroups","dataCopy","slice","selectAll","anchor","chartGroup","classed","id","chartID","rootElement","svg","svgElement","resetSvg","remove","filterPrinter","filterPrinterFunction","controlsUseVisibility","useVisibility","turnOnControls","attribute","style","text","turnOffControls","transitionDuration","transitionDelay","preRender","forEach","result","_doRender","_activateRenderlets","event","pretransition","preRedraw","_doRedraw","commitHandler","redrawGroup","error","renderGroup","_invokeFilteredListener","filtered","_invokeZoomedListener","zoomed","_hasFilterHandler","some","hasFilterHandler","hasFilter","_removeFilterHandler","removeFilterHandler","_addFilterHandler","addFilterHandler","_resetFilterHandler","resetFilterHandler","replaceFilter","highlightSelected","fadeDeselected","resetHighlight","onClick","datum","filterHandler","legendables","legendHighlight","legendReset","legendToggle","isLegendableHidden","label","labelFunction","enableLabels","renderLabel","title","titleFunction","renderTitle","renderletFunction","on","legend","options","opts","applyOptions","listener","marginMixin","_margin","top","right","bottom","left","margins","effectiveWidth","effectiveHeight","colorMixin","_colors","scale","category20c","_defaultAccessor","_colorAccessor","colors","colorScale","quantize","ordinalColors","linearColors","linear","interpolate","interpolateHcl","colorAccessor","defaultColorAccessor","colorDomain","calculateColorDomain","newDomain","getColor","colorCalculator","coordinateGridMixin","compareDomains","d1","d2","elem","prepareXAxis","g","isOrdinal","elasticX","_x","_ordinalXDomain","xAxisMin","xAxisMax","xdom","_lastXDomain","rescale","rangeBands","xAxisLength","_rangeBandPadding","_useOuterPadding","_outerRangeBandPadding","_xAxis","renderVerticalGridLines","gridLineG","VERTICAL_CLASS","_renderVerticalGridLine","insert","GRID_LINE_CLASS","ticks","tickValues","lines","linesGEnter","enter","_xAxisY","exit","brushHeight","getClipPathId","generateClipPath","defs","_parent","chartBodyClip","padding","_clipPadding","yAxisHeight","drawChart","_brushOn","_prepareYAxis","plotData","_resizing","renderXAxis","elasticY","renderYAxis","renderBrush","redrawBrush","fadeDeselectedArea","configureMouseZoom","_mouseZoomable","_enableMouseZoom","_hasBeenMouseZoomable","_disableMouseZoom","zoomHandler","_refocused","_zoomOutRestrict","constraint","_xOriginalDomain","_rangeChart","intersectExtents","constrained","constrainExtent","domFilter","rangesEqual","ext1","ext2","extent","size","range1","range2","valueOf","hasRangeSelected","HORIZONTAL_CLASS","Y_AXIS_LABEL_CLASS","X_AXIS_LABEL_CLASS","DEFAULT_AXIS_LABEL_PADDING","category10","_g","_chartBodyG","_xAxisLabel","_y","_yAxisLabel","_round","_unitCount","_focusChart","axis","orient","_xUnits","_xAxisPadding","_xAxisPaddingUnit","_xElasticity","_xAxisLabelPadding","_yAxis","_yAxisPadding","_yElasticity","_yAxisLabelPadding","_brush","brush","_renderHorizontalGridLine","_zoomScale","_zoom","behavior","zoom","_nullZoom","_useRightYAxis","resizing","rangeChart","focusChart","zoomScale","zoomOutRestrict","_generateG","href","window","location","split","gElement","mouseZoomable","chartBodyG","xScale","xOriginalDomain","xUnits","xAxis","xAxisPadding","xAxisPaddingUnit","unit","xUnitCount","useRightYAxis","groups","map","axisXG","axisXLab","xAxisLabel","labelText","yAxisMin","yAxisMax","rangeRound","_renderHorizontalGridLinesForAxis","renderYAxisLabel","axisClass","rotation","labelXPosition","axisYLab","labelYPosition","renderYAxisAt","position","axisYG","axisPosition","_yAxisX","labelPosition","yAxisLabel","yScale","yAxis","renderHorizontalGridLines","yAxisPadding","_filter","_brushing","gBrush","setBrushY","setHandlePaths","resizeHandlePath","extendBrush","brushIsEmpty","rangedFilter","doTransition","clipPadding","_preprocessData","scaleExtent","refocused","c","brushOn","stackMixin","prepareValues","layer","layerIdx","valAccessor","accessor","String","values","hidden","domainFilter","_evadeDomainFilter","xDomain","p","findLayerByName","_stack","flattenStack","valueses","concat","visability","_stackLayout","layout","_titles","_hidableStacks","hidableStacks","hideStack","stackName","showStack","getValueAccessorByIndex","index","y0","titleAccessor","stackLayout","evadeDomainFilter","layers","flat","ordered","color","capMixin","_cap","_takeFront","_othersLabel","kv","_othersGrouper","topItems","restItems","restItemsSum","sum","restKeys","others","key","othersLabel","cappedKeyAccessor","cappedValueAccessor","rest","items","cap","count","takeFront","othersGrouper","grouperFunction","_onClick","bubbleMixin","_maxBubbleRelativeSize","_minRadiusWithLabel","_sortBubbleSize","_elasticRadius","BUBBLE_NODE_CLASS","BUBBLE_CLASS","MIN_RADIUS","radiusAccessor","radiusValueAccessor","sort","b","descending","_r","_rValueAccessor","bubbleRadiusScale","elasticRadius","calculateRadiusDomain","rMin","rMax","bubbleR","isNaN","shouldLabel","labelOpacity","labelPointerEvent","_doRenderLabel","bubbleGEnter","doUpdateLabels","labels","_doRenderTitles","doUpdateTitles","sortBubbleSize","minRadius","radius","minRadiusWithLabel","maxBubbleRelativeSize","relativeSize","isSelectedNode","pieChart","maxRadius","_radius","_givenRadius","pieData","arc","buildArcs","pie","pieLayout","_emptyCssClass","_emptyTitle","slices","_sliceGroupCssClass","_sliceCssClass","_labelGroupCssClass","_labelCssClass","createElements","updateElements","removeElements","highlightFilter","cx","cy","slicesEnter","createSliceNodes","createSlicePath","createTitles","createLabels","slicePath","fill","safeArc","attrTween","tweenPie","positionLabels","_applyLabelText","highlightSlice","whether","labelsEnter","classes","_externalLabelRadius","_drawPaths","updateLabelPaths","polyline","arc2","outerRadius","_externalRadiusPadding","innerRadius","_current","startAngle","endAngle","centroid","updateSlicePaths","updateLabels","updateTitles","slicePaths","isSelectedSlice","_innerRadius","sliceTooSmall","angle","_minAngleForLabel","sliceHasNoData","isOffCanvas","path","highlightSliceFromLegendable","legendable","highlighted","_cx","_cy","DEFAULT_MIN_ANGLE_FOR_LABEL","slicesCap","externalRadiusPadding","minAngleForLabel","emptyTitle","externalLabels","externalLabelRadius","drawPaths","barChart","barHeight","renderLabels","layerIndex","_centerBar","_barWidth","LABEL_PADDING","renderBars","bars","_gap","calculateBarWidth","numberOfBars","rangeBand","barPadding","MIN_BAR_WIDTH","colorFilter","inv","item","match","DEFAULT_GAP_BETWEEN_BARS","_alwaysUseRounding","_rescale","_render","last","centerBar","outerPadding","gap","alwaysUseRounding","_xAxisMax","res","lineChart","drawLine","layersEnter","line","_interpolate","tension","_tension","_defined","defined","_dashStyle","safeD","drawArea","_renderArea","area","drawDots","chartBody","xyTipsOn","tooltipListClass","TOOLTIP_G_CLASS","tooltips","points","createRefLines","dots","DOT_CIRCLE_CLASS","getDotRadius","_dataPointFillOpacity","_dataPointStrokeOpacity","dot","showDot","showRefLines","hideDot","hideRefLines","drawLabels","yRefLine","Y_AXIS_REF_LINE_CLASS","xRefLine","X_AXIS_REF_LINE_CLASS","_dotRadius","yAxisX","yAxisRefPathD","xAxisRefPathD","_dataPointRadius","dashstyle","join","DEFAULT_DOT_RADIUS","DEFAULT_DOT_OPACITY","_xyTipsOn","layersList","dashStyle","renderArea","dotRadius","renderDataPoints","fillOpacity","strokeOpacity","_legendables","dataCount","_formatNumber","_html","html","formatNumber","formatter","tot","selected","dataTable","renderGroups","bAllFunctions","_columns","thead","headrow","headcols","HEAD_CSS_CLASS","_doColumnHeaderFormat","nestEntries","rowGroup","_showGroups","GROUP_CSS_CLASS","LABEL_CSS_CLASS","entries","_order","ascending","_size","nest","sortKeys","_sortBy","_beginSlice","_endSlice","renderRows","rows","order","ROW_CSS_CLASS","rowEnter","v","COLUMN_CSS_CLASS","_doColumnValueFormat","_doColumnHeaderFnToString","_doColumnHeaderCapitalize","charAt","toUpperCase","i1","i2","lastIndexOf","substring","i3","beginSlice","endSlice","columns","sortBy","showGroups","dataGrid","GRID_CSS_CLASS","itemGroup","_htmlGroup","renderItems","ITEM_CSS_CLASS","JSON","stringify","htmlGroup","sortByFunction","bubbleChart","renderNodes","bubbleG","bubbleLocator","updateNodes","removeNodes","bubbleX","bubbleY","compositeChart","calculateYAxisRanges","lyAxisMin","lyAxisMax","ryAxisMin","ryAxisMax","ranges","rightYAxisMin","rightYAxisMax","alignYAxes","alignYAxisRanges","extentRatio","prepareRightYAxis","needDomain","rightY","needRange","rightYAxis","prepareLeftYAxis","generateChildG","child","SUB_CHART_CLASS","leftYAxisChildren","_children","rightYAxisChildren","getYAxisMin","getYAxisMax","getAllXAxisMinFromChildCharts","getAllXAxisMaxFromChildCharts","_rightY","DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING","_childOptions","_shareColors","_shareTitle","_alignYAxes","_rightYAxis","_rightYAxisLabel","_rightYAxisLabelPadding","_rightAxisGridLines","__generateG","rightYAxisLabel","useRightAxisGridLines","childOptions","compose","subChartArray","children","shareColors","shareTitle","reduce","j","seriesChart","keySort","clearChart","_charts","resetChildren","keys","_seriesAccessor","_chartFunction","_seriesSort","_valueSort","childrenChanged","keep","nester","sortValues","nesting","sub","subChart","_compose","chartFunction","seriesAccessor","seriesSort","sortFunction","valueSort","geoChoroplethChart","generateLayeredData","isDataLayer","regionG","renderRegionG","renderPaths","groupAll","geoJson","layerSelector","isSelected","isDeselected","layerNameClass","regionClass","baseClasses","getKey","_geoJsons","paths","currentFill","_projectionFlag","_geoPath","geo","states","selectedRegion","overlayGeoJson","json","projection","geoJsons","geoPath","removeGeoJson","bubbleOverlay","initOverlayG","BUBBLE_OVERLAY_CLASS","initializeBubbles","mapData","_points","point","nodeG","getNodeG","circle","bubbleNodeClass","updateBubbles","flag","debugG","debugText","mouse","rowChart","calculateAxisScale","_elasticX","_rowData","drawAxis","axisG","drawGridLines","_rowCssClass","rootValue","_fixedBarHeight","_hasLabelOffsetY","_labelOffsetY","rect","isSelectedRow","translateX","renderTitleLabel","_titleRowCssClass","lab","_labelOffsetX","_dyOffset","titlelab","_titleLabelOffsetX","x0","_renderTitleLabel","rowsCap","fixedBarHeight","labelOffsetX","labelOffsetY","labelOffsety","titleLabelOffsetX","legendItemHeight","_itemHeight","_maxItems","LABEL_GAP","_horizontal","_legendWidth","_itemWidth","_autoItemWidth","_legendText","itemEnter","clientHeight","_cumulativeLegendTextWidth","row","itemWidth","getBBox","translateBy","itemHeight","horizontal","legendWidth","autoItemWidth","legendText","maxItems","scatterPlot","elementSize","_existenceAccessor","_filtered","pow","_symbolSize","_excludedSize","_emptySize","renderTitles","symbol","resizeSymbolsWhere","condition","symbols","oldSize","_symbol","originalKeyAccessor","existenceAccessor","_locator","_highlightedSize","_excludedColor","_excludedOpacity","_emptyOpacity","_nonemptyOpacity","_emptyColor","__filter","excludedOpacity","excludedColor","type","customSymbol","symbolSize","highlightedSize","excludedSize","hiddenSize","emptySize","emptyColor","emptyOpacity","nonemptyOpacity","ranged2DFilter","numberDisplay","maxBin","sorted","_lastValue","SPAN_CLASS","one","none","valObj","newValue","span","ease","tween","interpStart","isFinite","interp","interpolateNumber","num","innerHTML","heatMap","filterAxis","cellsOnAxis","unfilteredCellsOnAxis","_chartBody","_cols","_rows","DEFAULT_BORDER_RADIUS","_colOrdering","_rowOrdering","_colScale","_rowScale","_xBorderRadius","_yBorderRadius","_colsLabel","_rowsLabel","colsLabel","rowsLabel","_xAxisOnClick","_yAxisOnClick","_boxOnClick","rowOrdering","cols","colOrdering","rowCount","colCount","boxWidth","boxHeight","rangeRoundBands","boxes","gEnter","boxOnClick","gCols","gColsText","xAxisOnClick","gRows","gRowsText","yAxisOnClick","handler","xBorderRadius","yBorderRadius","boxWhiskers","boxQuartiles","quantile","box","quartileData","quartiles","whiskerIndices","whiskers","whiskerData","outlierIndices","x1","__chart__","center","medianLine","whisker","outlier","Number","tickFormat","boxTick","whiskerTick","timer","flush","boxPlot","DEFAULT_WHISKERS_IQR","k","q1","q3","iqr","renderBoxes","boxesG","boxesGEnter","boxTransform","_box","updateBoxes","removeBoxes","_whiskerIqrFactor","_whiskersIqr","_whiskers","_tickFormat","_boxWidth","innerChartWidth","boxPadding","xOffset","_calculatedBoxWidth","selectMenu","renderOptions","_select","OPTION_CSS_CLASS","onChange","target","selectedOptions","option","_promptValue","_multiple","setAttributes","_numberVisible","SELECT_CSS_CLASS","_promptText","_filterDisplayed","ua","navigator","userAgent","property","promptText","filterDisplayed","multiple","promptValue","numberVisible","abstractBubbleChart","baseChart","capped","colorChart","coordinateGridChart","marginable","stackableChart","define","amd","module","exports","_d3","require","_crossfilter"],"mappings":"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","file":"dc.min.js"} \ No newline at end of file +{"version":3,"sources":["dc.js"],"names":["_dc","d3","crossfilter","dc","version","constants","CHART_CLASS","DEBUG_GROUP_CLASS","STACK_CLASS","DESELECTED_CLASS","SELECTED_CLASS","NODE_INDEX_NAME","GROUP_INDEX_NAME","DEFAULT_CHART_GROUP","EVENT_DELAY","NEGLIGIBLE_NUMBER","_renderlet","chartRegistry","initializeChartGroup","group","_chartMap","has","chart","e","indexOf","register","push","deregister","i","length","anchorName","splice","clear","list","registerChart","deregisterChart","hasChart","deregisterAllCharts","filterAll","charts","refocusAll","focus","renderAll","render","redrawAll","redraw","disableTransitions","transition","selection","duration","delay","name","s","undefined","optionalTransition","enable","afterTransition","callback","empty","call","n","each","units","integers","start","end","Math","abs","ordinal","domain","fp","precision","_f","d","resolution","utils","isNegligible","floor","ceil","round","override","obj","functionName","newFunction","existingFunction","renderlet","_","arguments","instanceOfChart","o","Object","__dcFlag__","errors","Exception","msg","_msg","this","message","toString","stack","Error","prototype","create","constructor","InvalidStateException","apply","BadArgumentException","dateFormat","time","format","printers","filters","filter","Array","printSingleValue","pluck","f","Date","isFloat","fformat","isInteger","add","l","r","t","replace","getTime","offset","percentage","subtract","isNumber","clamp","val","min","max","_idCounter","uniqueId","nameToId","toLowerCase","appendOrSelect","parent","selector","tag","element","select","append","safeNumber","logger","enableDebugLog","warn","console","log","debug","deprecate","fn","deprecated","warned","events","current","trigger","closure","setTimeout","RangedFilter","low","high","range","isFiltered","value","filterType","TwoDimensionalFilter","RangedTwoDimensionalFilter","fromBottomLeft","Infinity","x","y","baseMixin","_chart","sizeSvg","_svg","_useViewBoxResizing","attr","width","height","generateSvg","root","checkForMandatoryAttributes","a","applyFilters","dimension","fs","_filterHandler","_dimension","_group","_anchor","_root","_isChild","_width","_height","_orderSort","_legend","_commitHandler","_minWidth","_defaultWidthCalc","getBoundingClientRect","_widthCalc","_minHeight","_defaultHeightCalc","_heightCalc","_keyAccessor","_valueAccessor","_label","_ordering","_renderLabel","_title","keyAccessor","valueAccessor","_renderTitle","_controlsUseVisibility","_transitionDuration","_transitionDelay","_filterPrinter","_mandatoryAttributes","_chartGroup","_listeners","dispatch","_filters","filterRange","filterFunction","filterExact","_data","all","functor","node","minWidth","minHeight","useViewBoxResizing","expireCache","data","_groupName","ordering","orderFunction","quicksort","by","_computeOrderedGroups","dataCopy","slice","selectAll","anchor","chartGroup","classed","id","chartID","rootElement","svg","svgElement","resetSvg","remove","filterPrinter","filterPrinterFunction","controlsUseVisibility","useVisibility","turnOnControls","attribute","style","text","turnOffControls","transitionDuration","transitionDelay","preRender","forEach","result","_doRender","_activateRenderlets","event","pretransition","preRedraw","_doRedraw","commitHandler","redrawGroup","error","renderGroup","_invokeFilteredListener","filtered","_invokeZoomedListener","zoomed","_hasFilterHandler","some","hasFilterHandler","hasFilter","_removeFilterHandler","removeFilterHandler","_addFilterHandler","addFilterHandler","_resetFilterHandler","resetFilterHandler","replaceFilter","highlightSelected","fadeDeselected","resetHighlight","onClick","datum","filterHandler","legendables","legendHighlight","legendReset","legendToggle","isLegendableHidden","label","labelFunction","enableLabels","renderLabel","title","titleFunction","renderTitle","renderletFunction","on","legend","options","opts","applyOptions","listener","marginMixin","_margin","top","right","bottom","left","margins","effectiveWidth","effectiveHeight","colorMixin","_colors","scale","category20c","_defaultAccessor","_colorAccessor","colors","colorScale","quantize","ordinalColors","linearColors","linear","interpolate","interpolateHcl","colorAccessor","defaultColorAccessor","colorDomain","calculateColorDomain","newDomain","getColor","colorCalculator","coordinateGridMixin","compareDomains","d1","d2","elem","prepareXAxis","g","isOrdinal","elasticX","_x","_ordinalXDomain","xAxisMin","xAxisMax","xdom","_lastXDomain","rescale","rangeBands","xAxisLength","_rangeBandPadding","_useOuterPadding","_outerRangeBandPadding","_xAxis","renderVerticalGridLines","gridLineG","VERTICAL_CLASS","_renderVerticalGridLine","insert","GRID_LINE_CLASS","ticks","tickValues","lines","linesGEnter","enter","_xAxisY","exit","brushHeight","getClipPathId","generateClipPath","defs","_parent","chartBodyClip","padding","_clipPadding","yAxisHeight","drawChart","_brushOn","_prepareYAxis","plotData","_resizing","renderXAxis","elasticY","renderYAxis","renderBrush","redrawBrush","fadeDeselectedArea","configureMouseZoom","_mouseZoomable","_enableMouseZoom","_hasBeenMouseZoomable","_disableMouseZoom","zoomHandler","_refocused","_zoomOutRestrict","constraint","_xOriginalDomain","_rangeChart","intersectExtents","constrained","constrainExtent","domFilter","rangesEqual","ext1","ext2","extent","size","range1","range2","valueOf","hasRangeSelected","HORIZONTAL_CLASS","Y_AXIS_LABEL_CLASS","X_AXIS_LABEL_CLASS","DEFAULT_AXIS_LABEL_PADDING","category10","_g","_chartBodyG","_xAxisLabel","_y","_yAxisLabel","_round","_unitCount","_focusChart","axis","orient","_xUnits","_xAxisPadding","_xAxisPaddingUnit","_xElasticity","_xAxisLabelPadding","_yAxis","_yAxisPadding","_yElasticity","_yAxisLabelPadding","_brush","brush","_renderHorizontalGridLine","_zoomScale","_zoom","behavior","zoom","_nullZoom","_useRightYAxis","resizing","rangeChart","focusChart","zoomScale","zoomOutRestrict","_generateG","href","window","location","split","gElement","mouseZoomable","chartBodyG","xScale","xOriginalDomain","xUnits","xAxis","xAxisPadding","xAxisPaddingUnit","unit","xUnitCount","useRightYAxis","groups","map","axisXG","axisXLab","xAxisLabel","labelText","yAxisMin","yAxisMax","rangeRound","_renderHorizontalGridLinesForAxis","renderYAxisLabel","axisClass","rotation","labelXPosition","axisYLab","labelYPosition","renderYAxisAt","position","axisYG","axisPosition","_yAxisX","labelPosition","yAxisLabel","yScale","yAxis","renderHorizontalGridLines","yAxisPadding","_filter","_brushing","gBrush","setBrushY","setHandlePaths","resizeHandlePath","extendBrush","brushIsEmpty","rangedFilter","doTransition","clipPadding","_preprocessData","scaleExtent","refocused","c","brushOn","stackMixin","prepareValues","layer","layerIdx","valAccessor","accessor","String","values","hidden","domainFilter","_evadeDomainFilter","xDomain","p","findLayerByName","_stack","flattenStack","valueses","concat","visability","_stackLayout","layout","_titles","_hidableStacks","hidableStacks","hideStack","stackName","showStack","getValueAccessorByIndex","index","y0","titleAccessor","stackLayout","evadeDomainFilter","layers","flat","ordered","color","capMixin","_cap","_takeFront","_othersLabel","kv","_othersGrouper","topItems","restItems","restItemsSum","sum","restKeys","others","key","othersLabel","cappedKeyAccessor","cappedValueAccessor","rest","items","cap","count","takeFront","othersGrouper","grouperFunction","_onClick","bubbleMixin","_maxBubbleRelativeSize","_minRadiusWithLabel","_sortBubbleSize","_elasticRadius","BUBBLE_NODE_CLASS","BUBBLE_CLASS","MIN_RADIUS","radiusAccessor","radiusValueAccessor","sort","b","descending","_r","_rValueAccessor","bubbleRadiusScale","elasticRadius","calculateRadiusDomain","rMin","rMax","bubbleR","isNaN","shouldLabel","labelOpacity","labelPointerEvent","_doRenderLabel","bubbleGEnter","doUpdateLabels","labels","_doRenderTitles","doUpdateTitles","sortBubbleSize","minRadius","radius","minRadiusWithLabel","maxBubbleRelativeSize","relativeSize","isSelectedNode","pieChart","maxRadius","_radius","_givenRadius","pieData","arc","buildArcs","pie","pieLayout","_emptyCssClass","_emptyTitle","slices","_sliceGroupCssClass","_sliceCssClass","_labelGroupCssClass","_labelCssClass","createElements","updateElements","removeElements","highlightFilter","cx","cy","slicesEnter","createSliceNodes","createSlicePath","createTitles","createLabels","slicePath","fill","safeArc","attrTween","tweenPie","positionLabels","_applyLabelText","highlightSlice","whether","labelsEnter","classes","_externalLabelRadius","_drawPaths","updateLabelPaths","polyline","arc2","outerRadius","_externalRadiusPadding","innerRadius","_current","startAngle","endAngle","centroid","updateSlicePaths","updateLabels","updateTitles","slicePaths","isSelectedSlice","_innerRadius","sliceTooSmall","angle","_minAngleForLabel","sliceHasNoData","isOffCanvas","path","highlightSliceFromLegendable","legendable","highlighted","_cx","_cy","DEFAULT_MIN_ANGLE_FOR_LABEL","slicesCap","externalRadiusPadding","minAngleForLabel","emptyTitle","externalLabels","externalLabelRadius","drawPaths","barChart","barHeight","renderLabels","layerIndex","_centerBar","_barWidth","LABEL_PADDING","renderBars","bars","_gap","calculateBarWidth","numberOfBars","rangeBand","barPadding","MIN_BAR_WIDTH","colorFilter","inv","item","match","DEFAULT_GAP_BETWEEN_BARS","_alwaysUseRounding","_rescale","_render","last","centerBar","outerPadding","gap","alwaysUseRounding","_xAxisMax","res","lineChart","drawLine","layersEnter","line","_interpolate","tension","_tension","_defined","defined","_dashStyle","safeD","drawArea","_renderArea","area","drawDots","chartBody","xyTipsOn","tooltipListClass","TOOLTIP_G_CLASS","tooltips","points","createRefLines","dots","DOT_CIRCLE_CLASS","getDotRadius","_dataPointFillOpacity","_dataPointStrokeOpacity","dot","showDot","showRefLines","hideDot","hideRefLines","drawLabels","yRefLine","Y_AXIS_REF_LINE_CLASS","xRefLine","X_AXIS_REF_LINE_CLASS","_dotRadius","yAxisX","yAxisRefPathD","xAxisRefPathD","_dataPointRadius","dashstyle","join","DEFAULT_DOT_RADIUS","DEFAULT_DOT_OPACITY","_xyTipsOn","layersList","dashStyle","renderArea","dotRadius","renderDataPoints","fillOpacity","strokeOpacity","_legendables","dataCount","_formatNumber","_html","html","formatNumber","formatter","tot","selected","dataTable","renderGroups","bAllFunctions","_columns","thead","headrow","headcols","HEAD_CSS_CLASS","_doColumnHeaderFormat","nestEntries","rowGroup","_showGroups","GROUP_CSS_CLASS","LABEL_CSS_CLASS","entries","_order","ascending","_size","nest","sortKeys","_sortBy","_beginSlice","_endSlice","renderRows","rows","order","ROW_CSS_CLASS","rowEnter","v","COLUMN_CSS_CLASS","_doColumnValueFormat","_doColumnHeaderFnToString","_doColumnHeaderCapitalize","charAt","toUpperCase","i1","i2","lastIndexOf","substring","i3","beginSlice","endSlice","columns","sortBy","showGroups","dataGrid","GRID_CSS_CLASS","itemGroup","_htmlGroup","renderItems","ITEM_CSS_CLASS","JSON","stringify","htmlGroup","sortByFunction","bubbleChart","renderNodes","bubbleG","bubbleLocator","updateNodes","removeNodes","bubbleX","bubbleY","compositeChart","calculateYAxisRanges","lyAxisMin","lyAxisMax","ryAxisMin","ryAxisMax","ranges","rightYAxisMin","rightYAxisMax","alignYAxes","alignYAxisRanges","extentRatio","prepareRightYAxis","needDomain","rightY","needRange","rightYAxis","prepareLeftYAxis","generateChildG","child","SUB_CHART_CLASS","leftYAxisChildren","_children","rightYAxisChildren","getYAxisMin","getYAxisMax","getAllXAxisMinFromChildCharts","getAllXAxisMaxFromChildCharts","_rightY","DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING","_childOptions","_shareColors","_shareTitle","_alignYAxes","_rightYAxis","_rightYAxisLabel","_rightYAxisLabelPadding","_rightAxisGridLines","__generateG","rightYAxisLabel","useRightAxisGridLines","childOptions","compose","subChartArray","children","shareColors","shareTitle","reduce","j","seriesChart","keySort","clearChart","_charts","resetChildren","keys","_seriesAccessor","_chartFunction","_seriesSort","_valueSort","childrenChanged","keep","nester","sortValues","nesting","sub","subChart","_compose","chartFunction","seriesAccessor","seriesSort","sortFunction","valueSort","geoChoroplethChart","generateLayeredData","isDataLayer","regionG","renderRegionG","renderPaths","groupAll","geoJson","layerSelector","isSelected","isDeselected","layerNameClass","regionClass","baseClasses","getKey","_geoJsons","paths","currentFill","_projectionFlag","_geoPath","geo","states","selectedRegion","overlayGeoJson","json","projection","geoJsons","geoPath","removeGeoJson","bubbleOverlay","initOverlayG","BUBBLE_OVERLAY_CLASS","initializeBubbles","mapData","_points","point","nodeG","getNodeG","circle","bubbleNodeClass","updateBubbles","flag","debugG","debugText","mouse","rowChart","calculateAxisScale","_elasticX","_rowData","drawAxis","axisG","drawGridLines","_rowCssClass","rootValue","_fixedBarHeight","_hasLabelOffsetY","_labelOffsetY","rect","isSelectedRow","translateX","renderTitleLabel","_titleRowCssClass","lab","_labelOffsetX","_dyOffset","titlelab","_titleLabelOffsetX","x0","_renderTitleLabel","rowsCap","fixedBarHeight","labelOffsetX","labelOffsetY","labelOffsety","titleLabelOffsetX","legendItemHeight","_itemHeight","_maxItems","LABEL_GAP","_horizontal","_legendWidth","_itemWidth","_autoItemWidth","_legendText","itemEnter","clientHeight","_cumulativeLegendTextWidth","row","itemWidth","getBBox","translateBy","itemHeight","horizontal","legendWidth","autoItemWidth","legendText","maxItems","scatterPlot","elementSize","_existenceAccessor","_filtered","pow","_symbolSize","_excludedSize","_emptySize","renderTitles","symbol","resizeSymbolsWhere","condition","symbols","oldSize","_symbol","originalKeyAccessor","existenceAccessor","_locator","_highlightedSize","_excludedColor","_excludedOpacity","_emptyOpacity","_nonemptyOpacity","_emptyColor","__filter","excludedOpacity","excludedColor","type","customSymbol","symbolSize","highlightedSize","excludedSize","hiddenSize","emptySize","emptyColor","emptyOpacity","nonemptyOpacity","ranged2DFilter","numberDisplay","maxBin","sorted","_lastValue","SPAN_CLASS","one","none","valObj","newValue","span","ease","tween","interpStart","isFinite","interp","interpolateNumber","num","innerHTML","heatMap","filterAxis","cellsOnAxis","unfilteredCellsOnAxis","_chartBody","_cols","_rows","DEFAULT_BORDER_RADIUS","_colOrdering","_rowOrdering","_colScale","_rowScale","_xBorderRadius","_yBorderRadius","_colsLabel","_rowsLabel","colsLabel","rowsLabel","_xAxisOnClick","_yAxisOnClick","_boxOnClick","rowOrdering","cols","colOrdering","rowCount","colCount","boxWidth","boxHeight","rangeRoundBands","boxes","gEnter","boxOnClick","gCols","gColsText","xAxisOnClick","gRows","gRowsText","yAxisOnClick","handler","xBorderRadius","yBorderRadius","boxWhiskers","boxQuartiles","quantile","box","quartileData","quartiles","whiskerIndices","whiskers","whiskerData","outlierIndices","x1","__chart__","center","medianLine","whisker","outlier","Number","tickFormat","boxTick","whiskerTick","timer","flush","boxPlot","DEFAULT_WHISKERS_IQR","k","q1","q3","iqr","renderBoxes","boxesG","boxesGEnter","boxTransform","_box","updateBoxes","removeBoxes","_whiskerIqrFactor","_whiskersIqr","_whiskers","_tickFormat","_boxWidth","innerChartWidth","boxPadding","xOffset","_calculatedBoxWidth","selectMenu","renderOptions","_select","OPTION_CSS_CLASS","onChange","target","selectedOptions","option","_promptValue","_multiple","setAttributes","_numberVisible","SELECT_CSS_CLASS","_promptText","_filterDisplayed","ua","navigator","userAgent","property","promptText","filterDisplayed","multiple","promptValue","numberVisible","abstractBubbleChart","baseChart","capped","colorChart","coordinateGridChart","marginable","stackableChart","define","amd","module","exports","_d3","require","_crossfilter"],"mappings":"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","file":"dc.min.js"} \ No newline at end of file diff --git a/civicrm/bower_components/jquery-ui/.bower.json b/civicrm/bower_components/jquery-ui/.bower.json index 69ba102964fa2e81c1c7bba1451f376f5e85813e..2373c86bc68d8af7283f3ca376121214276155d6 100644 --- a/civicrm/bower_components/jquery-ui/.bower.json +++ b/civicrm/bower_components/jquery-ui/.bower.json @@ -16,6 +16,6 @@ "commit": "dec4c50123193d4f7c8ae6cd0bff45478e1ad276" }, "_source": "https://github.com/components/jqueryui.git", - "_target": ">=1.9", + "_target": "~1.12", "_originalSource": "jquery-ui" } \ No newline at end of file diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php index 34ca12d1b3b685391fcbcfa39ffdd8e8647f9a56..d8d3a6503aed9154bf3713da79f157ad2a3fa62a 100644 --- a/civicrm/civicrm-version.php +++ b/civicrm/civicrm-version.php @@ -1,6 +1,6 @@ <?php function civicrmVersion( ) { - return array( 'version' => '4.7.31', + return array( 'version' => '5.0.0', 'cms' => 'Wordpress', 'revision' => '' ); } diff --git a/civicrm/composer.json b/civicrm/composer.json index 5ac5d6427dad724552e7011a01f8d7e05df67b37..9d81135dbbec3aef07669abd4aa19d64343e6c29 100644 --- a/civicrm/composer.json +++ b/civicrm/composer.json @@ -47,23 +47,20 @@ "totten/ca-config": "~17.05", "zetacomponents/base": "1.7.*", "zetacomponents/mail": "dev-1.7-civi", - "marcj/topsort": "dev-1.0-php53", - "phpoffice/phpword": "^0.13.0", + "marcj/topsort": "~1.1", + "phpoffice/phpword": "^0.14.0", "pear/Validate_Finance_CreditCard": "dev-master", "civicrm/civicrm-cxn-rpc": "~0.17.07.01", "pear/Auth_SASL": "1.1.0", "pear/Net_SMTP": "1.6.*", "pear/Net_socket": "1.0.*", - "civicrm/civicrm-setup": "~0.2.0" + "civicrm/civicrm-setup": "~0.2.0", + "guzzlehttp/guzzle": "^6.3" }, "repositories": [ { "type": "git", "url": "https://github.com/civicrm/zetacomponents-mail.git" - }, - { - "type": "git", - "url": "https://github.com/totten/topsort.php.git" } ], "scripts": { diff --git a/civicrm/composer.lock b/civicrm/composer.lock index 7a81794d0534b753ef09fd2ae92932dcade0ee2d..0cce99a2a89b969d505f497708f6b7606efa8dec 100644 --- a/civicrm/composer.lock +++ b/civicrm/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "3aaaa7a6146043643e9fe2cbc8030cca", + "content-hash": "9c5441f5ce4c51ed3a8cc326693cd904", "packages": [ { "name": "civicrm/civicrm-cxn-rpc", @@ -182,16 +182,203 @@ "homepage": "http://code.google.com/p/phpquery/", "time": "2013-03-21T12:39:33+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, { "name": "marcj/topsort", - "version": "dev-1.0-php53", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/totten/topsort.php.git", - "reference": "2765723d36f0e536d987e42cbc60de52209212bd" + "url": "https://github.com/marcj/topsort.php.git", + "reference": "387086c2db60ee0a27ac5df588c0f0b30c6bdc4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/marcj/topsort.php/zipball/387086c2db60ee0a27ac5df588c0f0b30c6bdc4b", + "reference": "387086c2db60ee0a27ac5df588c0f0b30c6bdc4b", + "shasum": "" }, "require": { - "php": ">=5.3" + "php": ">=5.4" }, "require-dev": { "codeclimate/php-test-reporter": "dev-master", @@ -205,6 +392,7 @@ "MJS\\TopSort\\Tests\\": "tests/Tests/" } }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -220,7 +408,7 @@ "topological sort", "topsort" ], - "time": "2016-03-25 21:38:05" + "time": "2016-11-19T14:58:11+00:00" }, { "name": "pclzip/pclzip", @@ -522,7 +710,7 @@ } ], "description": "Validation class for credit cards.", - "time": "2016-09-12 08:01:21" + "time": "2016-09-12T08:01:21+00:00" }, { "name": "phenx/php-font-lib", @@ -655,34 +843,34 @@ }, { "name": "phpoffice/phpword", - "version": "v0.13.0", + "version": "v0.14.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PHPWord.git", - "reference": "0a3f873972defb304de4fa2f5f53156558c11a7a" + "reference": "b614497ae6dd44280be1c2dda56772198bcd25ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/0a3f873972defb304de4fa2f5f53156558c11a7a", - "reference": "0a3f873972defb304de4fa2f5f53156558c11a7a", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/b614497ae6dd44280be1c2dda56772198bcd25ae", + "reference": "b614497ae6dd44280be1c2dda56772198bcd25ae", "shasum": "" }, "require": { "ext-xml": "*", - "php": ">=5.3.3", - "phpoffice/common": "0.2.*", - "zendframework/zend-escaper": "2.4.*", - "zendframework/zend-stdlib": "2.4.*", - "zendframework/zend-validator": "2.4.*" + "php": "^5.3.3 || ^7.0", + "phpoffice/common": "^0.2", + "zendframework/zend-escaper": "^2.2", + "zendframework/zend-stdlib": "^2.2 || ^3.0" }, "require-dev": { - "dompdf/dompdf": "0.6.*", - "mpdf/mpdf": "5.*", + "dompdf/dompdf": "0.8.*", + "friendsofphp/php-cs-fixer": "^2.0", + "mpdf/mpdf": "5.* || 6.* || 7.*", "phpdocumentor/phpdocumentor": "2.*", - "phploc/phploc": "2.*", + "phploc/phploc": "2.* || 3.* || 4.*", "phpmd/phpmd": "2.*", - "phpunit/phpunit": "3.7.*", - "squizlabs/php_codesniffer": "1.*", + "phpunit/phpunit": "^4.8.36 || ^5.0", + "squizlabs/php_codesniffer": "^2.7", "tecnickcom/tcpdf": "6.*" }, "suggest": { @@ -706,10 +894,6 @@ { "name": "Mark Baker" }, - { - "name": "Franck Lefevre", - "homepage": "http://blog.rootslabs.net" - }, { "name": "Gabriel Bull", "email": "me@gabrielbull.com", @@ -722,6 +906,13 @@ { "name": "Roman Syroeshko", "homepage": "http://ru.linkedin.com/pub/roman-syroeshko/34/a53/994/" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net/blog/" + }, + { + "name": "Antoine de Troostembergh" } ], "description": "PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)", @@ -751,7 +942,7 @@ "word", "writer" ], - "time": "2016-07-31T08:53:39+00:00" + "time": "2017-12-29T01:30:53+00:00" }, { "name": "phpseclib/phpseclib", @@ -852,6 +1043,56 @@ ], "time": "2017-06-05T06:30:30+00:00" }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.0.0", @@ -1636,7 +1877,7 @@ ], "description": "The component allows you construct and/or parse Mail messages conforming to the mail standard. It has support for attachments, multipart messages and HTML mail. It also interfaces with SMTP to send mail or IMAP, POP3 or mbox to retrieve e-mail.", "homepage": "https://github.com/zetacomponents", - "time": "2017-03-14 06:51:24" + "time": "2017-03-14T06:51:24+00:00" } ], "packages-dev": [], @@ -1644,7 +1885,6 @@ "minimum-stability": "stable", "stability-flags": { "zetacomponents/mail": 20, - "marcj/topsort": 20, "pear/validate_finance_creditcard": 20 }, "prefer-stable": false, diff --git a/civicrm/css/civicrm.css b/civicrm/css/civicrm.css index c459281324c6b09f3c42b1dd0be0b4ce94745899..6b2fdcd1843ee642af5e6fc55d92febe2acbeba4 100644 --- a/civicrm/css/civicrm.css +++ b/civicrm/css/civicrm.css @@ -3124,6 +3124,10 @@ div.m ul#civicrm-menu, .crm-container .select2-container[class*=" fa-"]:before { display: none; } +.crm-container .select2-results .select2-result.select2-disabled > .select2-result-label { + opacity: .6; + cursor: default; +} /* Restore this property otherwise our css overrides it */ .select2-search input { diff --git a/civicrm/install/langs.php b/civicrm/install/langs.php old mode 100644 new mode 100755 diff --git a/civicrm/js/wysiwyg/admin.ckeditor-configurator.js b/civicrm/js/wysiwyg/admin.ckeditor-configurator.js index 17ac199703dd30e823507c46ac1b6bc67717b8c5..6c44806754b7628f144356f1aeac4fb869401c76 100644 --- a/civicrm/js/wysiwyg/admin.ckeditor-configurator.js +++ b/civicrm/js/wysiwyg/admin.ckeditor-configurator.js @@ -45,16 +45,41 @@ } else { $el.after('<span> = <input class="crm-form-text ' + (type==='Number' ? 'eight" type="number"' : 'huge" type="text"') + ' name="config_' + name + '"/></span>'); + $el.next('span').find('input.crm-form-text[type=text]').change(validateJson); } } else { $el.closest('div').remove(); } } + function getOptionList() { + var list = []; + _.forEach(options, function(option) { + var opt = _.cloneDeep(option); + if ($('[name="config_' + opt.id + '"]').length) { + opt.disabled = true; + } + list.push(opt); + }); + return {results: list, text: 'id'}; + } + + function validateJson() { + var val = $(this).val(); + $(this).parent().removeClass('crm-error'); + if (val[0] === '[' || val[0] === '{') { + try { + JSON.parse(val); + } catch (e) { + $(this).parent().addClass('crm-error'); + } + } + } + function addOption() { $('#crm-custom-config-options').append($(configRowTpl({}))); - $('div:last input.crm-config-option-name', '#crm-custom-config-options').crmSelect2({ - data: {results: options, text: 'id'}, + $('.crm-config-option-row:last input.crm-config-option-name', '#crm-custom-config-options').crmSelect2({ + data: getOptionList, formatSelection: function(field) { return '<strong>' + field.id + '</strong> (' + field.type + ')'; }, diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md index e151ccbd40d9eac51c2261aa0907d4cf7561835c..b91fe66a32244030fb996962852721722a620124 100644 --- a/civicrm/release-notes.md +++ b/civicrm/release-notes.md @@ -14,6 +14,17 @@ Other resources for identifying changes are: * https://github.com/civicrm/civicrm-joomla * https://github.com/civicrm/civicrm-wordpress +## CiviCRM 5.0.0 + +Released April 4, 2018 + +- **[Synopsis](release-notes/5.0.0.md#synopsis)** +- **[Features](release-notes/5.0.0.md#features)** +- **[Bugs resolved](release-notes/5.0.0.md#bugs)** +- **[Miscellany](release-notes/5.0.0.md#misc)** +- **[Credits](release-notes/5.0.0.md#credits)** +- **[Feedback](release-notes/5.0.0.md#feedback)** + ## CiviCRM 4.7.31 Released March 7, 2018 diff --git a/civicrm/release-notes/5.0.0.md b/civicrm/release-notes/5.0.0.md new file mode 100644 index 0000000000000000000000000000000000000000..155bc0c7070830840c5138332111b8593f37c6c6 --- /dev/null +++ b/civicrm/release-notes/5.0.0.md @@ -0,0 +1,783 @@ +# CiviCRM 5.0.0 + +Released April 4, 2018 + +- **[Synopsis](#synopsis)** +- **[Features](#features)** +- **[Bugs resolved](#bugs)** +- **[Miscellany](#misc)** +- **[Credits](#credits)** +- **[Feedback](#feedback)** + +## <a name="synopsis"></a>Synopsis + +| *Does this version...?* | | +|:--------------------------------------------------------------- |:-------:| +| Fix security vulnerabilities? | no | +| Change the database schema? | no | +| **Alter the API?** | **yes** | +| **Require attention to configuration options?** | **yes** | +| **Fix problems installing or upgrading to a previous version?** | **yes** | +| **Introduce features?** | **yes** | +| **Fix bugs?** | **yes** | + +## <a name="features"></a>Features + +### Core CiviCRM + +- **[CRM-21659](https://issues.civicrm.org/jira/browse/CRM-21659) Add hook to + CRM_Utils_System::redirect ([11519](https://github.com/civicrm/civicrm-core/pull/11519))** + + Adds a hook (hook_civicrm_alterRedirect) when the browser is being redirected. This allows extensions to + override the destination of an HTTP redirect. + + The UriInterface from PSR-7 is included; the concrete implementation of Uri is loaded from Guzzle v6.3+. + +- **[civicrm/civicrm-setup#1](https://github.com/civicrm/civicrm-setup/issues/1) + Simplify SQL and translation pipeline (preliminary work) + [11699](https://github.com/civicrm/civicrm-core/pull/11699), + [11682](https://github.com/civicrm/civicrm-core/pull/11682), and + [11677](https://github.com/civicrm/civicrm-core/pull/11677)** + + Along with a handful of supporting changes, these changes allow strings to be + translated without needing CiviCRM to be operating. This sets the stage for + generating basic CiviCRM data in the appropriate language as part of the + CiviCRM installation process. + +- **Fix relationshipType, paymentProcessorType, Note & jobLog apis to support + custom data ([11721](https://github.com/civicrm/civicrm-core/pull/11721))** + + Updates the relationshipType, paymentProcessorType & jobLog apis to support + custom data. + +- **Fix more entities to support custom fields (via api) + ([11688](https://github.com/civicrm/civicrm-core/pull/11688))** + + This change moves us closer to the goal of being able to define custom data on 'any + entity'. It takes us from a limited list of entities that work to a longer list of + ones that still don't work + +- **[dev/core#12](https://lab.civicrm.org/dev/core/issues/12) Improvement: for + crmUiWizard-driven workflows, scroll back to top between steps + ([11790](https://github.com/civicrm/civicrm-core/pull/11790))** + + Adds auto-scroll-up functionality between steps in a wizard-driven workflow. + +- **Fix style glitches ([11792](https://github.com/civicrm/civicrm-core/pull/11792))** + + This change adds a space after the x between the form input for a phone number + and the form input for the extension to improve user experience. + +- **Update minimum php version to 5.5 + ([11453](https://github.com/civicrm/civicrm-core/pull/11453))** + + This change bumps up the minimum version to follow the schedule laid out in + https://civicrm.org/blog/totten/end-of-zombies-php-53-and-54 + +- **Fixed template structure issues + ([11766](https://github.com/civicrm/civicrm-core/pull/11766))** + + Moves help section outside block and adds missing label. + +- **[CRM-21823](https://issues.civicrm.org/jira/browse/CRM-21823) Change + position of help div and fix structure glitches + ([11750](https://github.com/civicrm/civicrm-core/pull/11750))** + + This standardizes the markup structure for the date settings, localization, + and memberships admin pages so that the help section sits outside the form + block, inline CSS is removed, and buttons are wrapped with the correct wrapper + class. + +- **[CRM-21817](https://issues.civicrm.org/jira/browse/CRM-21817) Move help + section outside crm block as per other pages + ([11738](https://github.com/civicrm/civicrm-core/pull/11738))** + + This change moves help section for word replacement page, outside crm block + to preserve consistency. + +- **CKEditor Advanced Options - Better validation of options + ([11752](https://github.com/civicrm/civicrm-core/pull/11752))** + + In the "Advanced Options" of the CKEditor Configurator, API options can be + selected. This tweaks the UI to prevent the same option from being selected + twice, which would not make sense. + +- **Update to PHPWord 0.14.0 + ([11696](https://github.com/civicrm/civicrm-core/pull/11696))** + + Updates PHPWord from 0.13.0 to 0.14.0. PHPWord 0.14.0 fixes a number of bugs + and adds some new features, more information on PHPWord 0.14.0 can be found + [here](https://github.com/PHPOffice/PHPWord/releases/tag/0.14.0). + +- **[dev/release#1](https://lab.civicrm.org/dev/release/issues/1) 5.x - Update + version-numbering pattern + ([11731](https://github.com/civicrm/civicrm-core/pull/11731))** + + The utility, tools/bin/scripts/set-version.php, is used to generate + boilerplate files for incremental updates. This change improves compatibility + with the version realignment (5.x.x). + +- **[CRM-21810](https://issues.civicrm.org/jira/browse/CRM-21810) improve + changelog search panel UI + ([11729](https://github.com/civicrm/civicrm-core/pull/11729))** + + This change improves the change log panel in Advanced Search UI. It places the + added/modified radio buttons at the top and moves the two search fields side by + side to make the layout more logical and to make better use of the space. + +- **[CRM-21765](https://issues.civicrm.org/jira/browse/CRM-21765) Commit files + to git which are static but are generated from CodeGen like DAO files + ([11667](https://github.com/civicrm/civicrm-core/pull/11667))** + + This change adds SchemaStructure.php and langs.php files (which are static but + generated from CodeGen) to git, reducing the need to run GenCode. + +### CiviCase + +- **[CRM-21558](https://issues.civicrm.org/jira/browse/CRM-21558) Add batch + update via profile to cases + ([11411](https://github.com/civicrm/civicrm-core/pull/11411))** + + This change adds a "Update Multiple Cases" option to search tasks and allows + you to batch update multiple cases in the same way as other entities. + +### CiviContribute + +- **[CRM-20610](https://issues.civicrm.org/jira/browse/CRM-20610) Replace + payment details block with editable payment list on 'Edit Contribution' form + ([11748](https://github.com/civicrm/civicrm-core/pull/11748)) (preliminary + work)** + + This change makes it possible via hook or by changing core to switch to using + the payment form on the 'Edit Contribution' form for payments without actually + making that change. + +- **Fix transaction template + ([11811](https://github.com/civicrm/civicrm-core/pull/11811))** + + Updated transaction template to make them match other templates for + consistency. + +- **[CRM-21693](https://issues.civicrm.org/jira/browse/CRM-21693) show Display + Name in online pay now UI + ([11571](https://github.com/civicrm/civicrm-core/pull/11571))** + + Before this change using the special constructed PayNow link it was not clear + which person the payment was for. This change makes it so the Online Pay Now + form shows the Display Name of the person the contribution belongs to. + +### CiviEvent + +- **[CRM-21803](https://issues.civicrm.org/jira/browse/CRM-21803) Standardise + ParticipantPayment api to support custom data + ([11718](https://github.com/civicrm/civicrm-core/pull/11718))** + + The ParticipantPayment API now uses the standard api function, this has the + added bonus of allowing this api to support custom data. + +- **[CRM-21805](https://issues.civicrm.org/jira/browse/CRM-21805) Fix structure + for search pages in find participant + ([11723](https://github.com/civicrm/civicrm-core/pull/11723))** + + This change restructures the Participant search pages so that the labels are + above the inputs for consistency and improved user experience. + +### CiviMail + +- **[CRM-21576](https://issues.civicrm.org/jira/browse/CRM-21576) Implement Send + SMS permission ([11590](https://github.com/civicrm/civicrm-core/pull/11590))** + + This change adds a permission to Send SMS. More specifically, it: Adds the Send SMS + permission to CRM_Core_Permissions::getCorePermissions, ensures that all + navigation menu entries ('Find SMS' and 'New SMS') respect the new permission, + Ensures that all paths (civicrm/sms/send, civicrm/activity/sms/add, + civicrm/mailing) respect the new permission, Only show 'Outbound SMS' action + from the action menu on the contact screen to users with the send SMS + permission, and only shows 'SMS - schedule/send' from the advanced search + actions to users with the send SMS permission. + +- **[CRM-21140](https://issues.civicrm.org/jira/browse/CRM-21140) Agree & (if + applicable) implement approach to storing extension data for entities / tables + ([11608](https://github.com/civicrm/civicrm-core/pull/11608))** + + This change makes it possible to extend Mailing with Custom data by making it + so the Mailing api supports custom data. This is primarily for the benefit of + extension writers. + +- **[CRM-21405](https://issues.civicrm.org/jira/browse/CRM-21405) Allow + "Outbound SMS" when Mobile is not primary phone number + ([11252](https://github.com/civicrm/civicrm-core/pull/11252))** + + This change makes it so when a contact has a mobile phone number but it is not + the primary number the "Outbound SMS" action is allowed, and usees the first + available mobile number from the contact. + +- **Add 'huge' class to html textarea to match plaintext textarea + ([11770](https://github.com/civicrm/civicrm-core/pull/11770))** + + This change makes it so that the HTML Format input and the Plain Text Format + input On the Message Template editor screen match. + +- **[CRM-21244](https://issues.civicrm.org/jira/browse/CRM-21244) Enhancements + to "FROM email addresses" + ([11914](https://github.com/civicrm/civicrm-core/pull/11914)) (continues + previous work)** + + Help text now adjusts according to whether the logged-in user's email is + allowed as a From address option. + +### CiviMember + +- **[CRM-21733](https://issues.civicrm.org/jira/browse/CRM-21733) Allow + overriding membership status temporarily until specific date + ([11722](https://github.com/civicrm/civicrm-core/pull/11722) and + [11622](https://github.com/civicrm/civicrm-core/pull/11622))** + + When overriding a membership status this change provides extra options to allow + a temporary status override. + + Instead of having a checkbox called (Override Status?) in membership + add/edit/renew form, it is replaced with a select box that allow the user to + choose one of three options: No, Override Permanently or Override until selected + date. + + If the first option is selected, then the membership will behave as if the old + (Override Status?) is *unchecked*, which means that the membership is subject to + membership status rules. + + If the 2nd option is selected, then the membership will behave as if the old + (Override Status?) is *checked*, which mean that the membership status is + overridden and is not subject to the membership statues rules. + + If the 3rd option is selected, then a new field will appear allowing the user to + choose a date, in this status, the membership will behave similar to option 2, + but when today date is equal or less than the selected date, then the "Update + Membership Statuses" scheduled job will automatically convert its status back to + *No*, which means that the membership status is overridden temporarily only for + the selected date and after that it will revert back and be subject to + membership status rules. + +### Drupal Integration + +- **[civicrm/civicrm-setup#11](https://github.com/civicrm/civicrm-setup/pull/11) + Implement D8 initialization for civicrm-setup + [11695](https://github.com/civicrm/civicrm-core/pull/11695)** + + This removes references to `templates/CRM/common/version.tpl` which will not + be created as part of the new Drupal 8 installer. + +## <a name="bugs"></a>Bugs resolved + +### Core CiviCRM + +- **[CRM-21830](https://issues.civicrm.org/jira/browse/CRM-21830) State/Province + tokens are not working as expected in address settings for billing address + ([11776](https://github.com/civicrm/civicrm-core/pull/11776))** + + When the 'state_province_name' token was used (in address settings), the + state/province was empty when 'Billing Address' was displayed. This change + makes it so when the 'state_province_name' token is used in address settings + the token is populated when the billing address is displayed + +- **[CRM-21781](https://issues.civicrm.org/jira/browse/CRM-21781) Don't crash if + contact ID not found when viewing contact + ([11690](https://github.com/civicrm/civicrm-core/pull/11690))** + + In various situations if one ended up at civicrm/contact/view without URL + parameters (for example logging back in after session expiry) a fatal error was + thrown. + + This change makes it so that instead of throwing a fatal error one is bounced + back to the Civi dashboard. + +- **[CRM-21826](https://issues.civicrm.org/jira/browse/CRM-21826) Default FROM + Email Address (for system-generated emails) link incorrect in System Status + Screen ([11756](https://github.com/civicrm/civicrm-core/pull/11756))** + + This updates the System Status Screen to have separate links for Domain Name and From + Email Address. + +- **/civicrm/upgrade - On finish screen, display actual version number + ([11705](https://github.com/civicrm/civicrm-core/pull/11705))** + + The upgrade finish screen was hard-coded to always display the message "Thank + you for upgrading to 4.7...". This change makes it dynamic, plugging in the + actual version number. + +- **Activity Form - Fix recently introduced warning + ([11815](https://github.com/civicrm/civicrm-core/pull/11815))** + + Fixes a code warning thrown on the activity form. + +- **[CRM-21667](https://issues.civicrm.org/jira/browse/CRM-21667) Bad timezone + hand-off from CMS to CRM + ([11800](https://github.com/civicrm/civicrm-core/pull/11800))** + + This change resolves errors resulting from representation of timezone data in different + formats. Now timezone data is converted from GMT offset in seconds to region + string, as expected by related methods. This fixes takes into account daylight + savings time. + +- **CKEditorConfig - Fix double-escaped slashes + ([11747](https://github.com/civicrm/civicrm-core/pull/11747))** + + The "Advanced Options" section of the CKEditor configurator allows user-input + strings. Slashes were being escaped multiple times in that input. This fixes + it. + +- **CiviReport - Check for trueish values of the parameter 'required' + ([11725](https://github.com/civicrm/civicrm-core/pull/11725))** + + The value of the parameter required is not evaluated to define whether the + field should be shown as required or not. See previous discussion at + [civicrm/civicrm-dev-docs#480](https://github.com/civicrm/civicrm-dev-docs/pull/480) + +- **Fix wrong tag defintion + ([11698](https://github.com/civicrm/civicrm-core/pull/11698))** + + This change fixes some broken HTML in the Data Source help notification pop-up. + +- **Fix GroupNesting, GroupOrganization, Domain to work with singleValueAlter + ([11689](https://github.com/civicrm/civicrm-core/pull/11689))** + + This change standardizes the apis for GroupNesting, GroupOrganization, and + Domain and extends unit testing to cover them + +- **composer.json - De-fork dependency, marcj/topsort + ([11687](https://github.com/civicrm/civicrm-core/pull/11687))** + + When this dependency was originally added, we needed a few patches (for PHP + 5.3 compatibility) and initially used a forked version of library. Of course, + it's undesirable to use a fork in the long term (e.g. harder to apply + upgrades; harder to merge into other build processes). + + In the intervening period, upstream has merged the patches for PHP 5.3, and + we've politely asked downstream to get over PHP 5.3, so we're covered on both + ends. This change switches back to the mainline branch for marcj/topsort. + +- **Ignore errors when upgrade step already took place + ([11685](https://github.com/civicrm/civicrm-core/pull/11685))** + +- **Add/Edit Contact - Fix inconsistent capitalization + ([11675](https://github.com/civicrm/civicrm-core/pull/11675))** + + On the "Add/Edit Contact" screen, there are several similar links: "Add another + phone number", "Add another IM", "Add another website". This change makes it so + that they are all capitalized according the same rules (e.g. standard sentence + case). + +- **[CRM-21708](https://issues.civicrm.org/jira/browse/CRM-21708) Make structure + proper by adding/removing appropriate classes + ([11585](https://github.com/civicrm/civicrm-core/pull/11585))** + + This change fixes class structure for a handful of pages to make them + consistent in preparation for common styling and to improve user experience. + +- **[CRM-21391](https://issues.civicrm.org/jira/browse/CRM-21391) Refactor tasks + to use a base class + ([11808](https://github.com/civicrm/civicrm-core/pull/11808), + [11761](https://github.com/civicrm/civicrm-core/pull/11761), + [11762](https://github.com/civicrm/civicrm-core/pull/11762), + [11763](https://github.com/civicrm/civicrm-core/pull/11763), + [11760](https://github.com/civicrm/civicrm-core/pull/11760), + [11759](https://github.com/civicrm/civicrm-core/pull/11759), + [11758](https://github.com/civicrm/civicrm-core/pull/11758), + [11692](https://github.com/civicrm/civicrm-core/pull/11692), and + [11693](https://github.com/civicrm/civicrm-core/pull/11693))** + + Refactors all the component tasks so they are extend a new base class + CRM_Core_Task. + + This change cleans up the code and uses shared code where possible. It also + fixes a few bugs specifically, there were a number of issues with the "Advanced + Search" when switching between component types where the task list would be + populated with the wrong list of tasks, but the keys would trigger an action on + the selected component and an unexpected action may occur and there was also a + bug where when saving group_type mailing_list was always being checked. + +- **[CRM-21777](https://issues.civicrm.org/jira/browse/CRM-21777) Improve the + messaging related to Directories and Resources + ([11802](https://github.com/civicrm/civicrm-core/pull/11802) and + [11680](https://github.com/civicrm/civicrm-core/pull/11680))** + + This change makes it so when on the admin page "Directory Preference" or + "Resource URL" fields initialized in civicrm.settings.php are loaded as + readonly. Prior to this change the fields were being loaded as editable but + the values were not being saved because they were being overridden by the + values in the civicrm.settings.php file). This change also adds a warning + which lets the user know that some fields are already set (overridden) in + settings file. + +- **[CRM-21837](https://issues.civicrm.org/jira/browse/CRM-21837) Missing states + for Gabon ([11793](https://github.com/civicrm/civicrm-core/pull/11793))** + + This change adds missing states definition for Gabon based on current ISO + standard. + +- **[CRM-21766](https://issues.civicrm.org/jira/browse/CRM-21766) Dedupe screen + gives inappropriate confirm message when clicking on batch dedupe + ([11670](https://github.com/civicrm/civicrm-core/pull/11670))** + + After doing a batch merge which resulted in a screen of conflicts, if you were + to click on 'refresh list' you got a 'Do you want to leave this site? Changes + you made may not be saved.' popup. This change removes that popup as there was + nothing to edit. + +- **[CRM-21773](https://issues.civicrm.org/jira/browse/CRM-21773) CRM-20858 + breaks merging multi-value custom groups + ([11691](https://github.com/civicrm/civicrm-core/pull/11691))** + + This change fixes a bug where Multi-value custom fields were being ignored + during the merge process, so that Multi-value fields are migrated if required. + +- **[CRM-20554](https://issues.civicrm.org/jira/browse/CRM-20554) Error when + running activity report + ([11630](https://github.com/civicrm/civicrm-core/pull/11630))** + + On the Activity Detail report, a series of warnings and notices were being + thrown, this change fixes the parameters of the select and from function so that + no errors are thrown. + +- **[CRM-21809](https://issues.civicrm.org/jira/browse/CRM-21809) 'Advance + search' group by issue + ([11728](https://github.com/civicrm/civicrm-core/pull/11728))** + + This fixes a bug where when doing an advanced search (with MySQL + FULL_GROUP_BY_MODE enabled), when one choose any activity type and searched the + actual number of rows listed and the row count per page differed so that the + count is now accurate. + +- **[CRM-21806](https://issues.civicrm.org/jira/browse/CRM-21806) Search builder + returns no results + ([11769](https://github.com/civicrm/civicrm-core/pull/11769), + [11751](https://github.com/civicrm/civicrm-core/pull/11751), and + [11746](https://github.com/civicrm/civicrm-core/pull/11746))** + + This change fixes a bug when using a profile in Search Views and attempting to + search using one of the columns from the profile the advanced search + incorrectly showed no results. + +- **[CRM-21792](https://issues.civicrm.org/jira/browse/CRM-21792) Regression: + Extension API cannot filter on status in get request + ([11709](https://github.com/civicrm/civicrm-core/pull/11709))** + +- **[CRM-21841](https://issues.civicrm.org/jira/browse/CRM-21841) objectType + empty in hook_civicrm_searchTasks + ([11861](https://github.com/civicrm/civicrm-core/pull/11861))** + +- **Fix regression on CiviRules search due to exception handling + ([11829](https://github.com/civicrm/civicrm-core/pull/11829))** + +- **Revert "CRM-8140: Not possible to select fields for export when using Custom + Searches" ([11828](https://github.com/civicrm/civicrm-core/pull/11828))** + +### CiviCampaign + +- **Add pre and post hooks to the Survey entity + ([11813](https://github.com/civicrm/civicrm-core/pull/11813))** + + This change makes it so `hook_civicrm_pre` and `hook_civicrm_post` are invoked + when a survey is saved. + +- **[CRM-21797](https://issues.civicrm.org/jira/browse/CRM-21797) Change + Structure for Campaign search forms + ([11714](https://github.com/civicrm/civicrm-core/pull/11714))** + +### CiviCase + +- **[dev/core#8](https://lab.civicrm.org/dev/core/issues/8) Fatal error on + Print/Merge Document for Cases + ([11932](https://github.com/civicrm/civicrm-core/pull/11932))** + +- **[CRM-21789](https://issues.civicrm.org/jira/browse/CRM-21789) 'Find Case' + group by issue ([11706](https://github.com/civicrm/civicrm-core/pull/11706))** + + This ensures that when searching cases the count of cases found is accurate. + +- **Re Add CRM_Case_Form_Task::PreProcessCommon() + ([11928](https://github.com/civicrm/civicrm-core/pull/11928))** + +### CiviContribute + +- **Fix upgrade failures from zero value `trxn_date` + ([11745](https://github.com/civicrm/civicrm-core/pull/11745))** + + Some longstanding CiviCRM installations would have upgrade failures going to + 4.7.19 or higher with the database error: "Incorrect datetime value: + '0000-00-00 00:00:00' for column 'trxn_date'" This change fixes those values + to be NULL prior to the query that causes the problem. + +- **Add test for api money, fix net_amount calc + ([11801](https://github.com/civicrm/civicrm-core/pull/11801))** + + Money values 5.000,77 & 5,000.77 were not being handled, they were being + converted to '5' by mysql insert. This change handles these values by cleaning + the money values in the api layer. + +- **[CRM-20608](https://issues.civicrm.org/jira/browse/CRM-20608) IPN + thinks Paypal Pro is Standard + ([11777](https://github.com/civicrm/civicrm-core/pull/11777))** + + This fixes an issue where the CiviCRM interprets IPN messages from PayPal Pro + as if they're Paypal Standard, causing problems for recurring payments. The + fix makes it so that all incoming PayPal Pro IPN notifications for recurring + contributions are correctly recorded as payments in CiviCRM. + +- **[CRM-21756](https://issues.civicrm.org/jira/browse/CRM-21756) Editing + Contribution (total_amount) does -not- update LineItem (line_total) + ([11780](https://github.com/civicrm/civicrm-core/pull/11780))** + + Before this fix when we change the total amount of membership payment (or + event registration), it doesn't update the corresponding line-item data, + causing a data integrity issue. This fix makes it so that when editing a + contribution for a membership payment or event registration the Total amount + field is frozen and there is help text beside this field that provides + instruction to perform the same task either by recreating the membership (or + participant record) or using Lineitem Editor. + +- **[CRM-21819](https://issues.civicrm.org/jira/browse/CRM-21819) Do not load + "Submit Credit Card Contribution" button for invalid processors. + ([11757](https://github.com/civicrm/civicrm-core/pull/11757))** + + Fixes a recent regression where the 'submit credit card' shows back office when + it should not + +- **[dev/core#7](https://lab.civicrm.org/dev/core/issues/7) recurring authorize + IPN results in contribution with incorrect payment_instrument_id + ([11768](https://github.com/civicrm/civicrm-core/pull/11768))** + +- **ensure pdfFilename is set + ([11702](https://github.com/civicrm/civicrm-core/pull/11702))** + + Before this change when downloading a PDF file receipt, the name you were + prompted to save it as is not properly set. If it simply set to `.pdf`. + This change makes it so the downloaded file name is named after the invoice id. + +- **Throw exception instead of using fatal + ([11719](https://github.com/civicrm/civicrm-core/pull/11719))** + + This change makes it so an exception is thrown instead of a fatal error when + one starts doing a contribution, stops the browser half way through, and then + tries to re-submit. + +- **[dev/financial#5](https://lab.civicrm.org/dev/financial/issues/5) If a + currency has been disabled allow the form to be submitted + ([11795](https://github.com/civicrm/civicrm-core/pull/11795))** + +- **Fix fatal on topDonor report + ([11919](https://github.com/civicrm/civicrm-core/pull/11919))** + +- **[CRM-21831](https://issues.civicrm.org/jira/browse/CRM-21831) and + [dev/report#1](https://lab.civicrm.org/dev/report/issues/1) Fix regressions in + contribution detail report relating to soft credits + ([11917](https://github.com/civicrm/civicrm-core/pull/11917))** + +### CiviEvent + +- **[CRM-21764](https://issues.civicrm.org/jira/browse/CRM-21764) Recurring + Events without Price Set fail to save + ([11837](https://github.com/civicrm/civicrm-core/pull/11837))** + +- **[CRM-21639](https://issues.civicrm.org/jira/browse/CRM-21639) Event pages + should be set to NoIndex when event is not public or in the past + ([11496](https://github.com/civicrm/civicrm-core/pull/11496) and + [11498](https://github.com/civicrm/civicrm-core/pull/11498))** + + This change makes it so that the CiviCRM Print Preview pages are not indexed + by search engines and this change makes sure Event Info pages are not indexed + by search engines when the event is not public. + +- **[CRM-21814](https://issues.civicrm.org/jira/browse/CRM-21814) Add proper + container to text + ([11735](https://github.com/civicrm/civicrm-core/pull/11735))** + + This change adds wrapper to dangling text without any wrapper in event configure + tabs, there is no visual change for now. + +- **[CRM-21770](https://issues.civicrm.org/jira/browse/CRM-21770) Change + position of help div in export participants + ([11678](https://github.com/civicrm/civicrm-core/pull/11678))** + + This changes the position of the help div on the Export page to be outside the + form block to be consistent with other pages. + +- **[CRM-21771](https://issues.civicrm.org/jira/browse/CRM-21771) error when + viewing event registration with linked contribution + ([11707](https://github.com/civicrm/civicrm-core/pull/11707))** + + Fixes a fatal error on the Fees section of the View Event Registration Page. + +### CiviMail + +- **[CRM-21848](https://issues.civicrm.org/jira/browse/CRM-21848) Mailing no + longer filters out email addresses on hold from recipient group + ([11846](https://github.com/civicrm/civicrm-core/pull/11846) and + [11848](https://github.com/civicrm/civicrm-core/pull/11848))** + +- **[dev/mail#5](https://lab.civicrm.org/dev/mail/issues/5) "New Mailing" + prematurely schedules blasts + ([11904](https://github.com/civicrm/civicrm-core/pull/11904))** + + This resolves a regression in 4.7.31 where previewing a mailing after setting + the scheduled date and time would end up actually scheduling the mailing. + +- **[dev/mail#7](https://lab.civicrm.org/dev/mail/issues/7) On 'New Mailing' + review page, it doesn't show recipients count + ([11911](https://github.com/civicrm/civicrm-core/pull/11911))** + +- **Ensure consistancy with previous behavior where user emails are first then + system from emails + ([11905](https://github.com/civicrm/civicrm-core/pull/11905))** + + This resolves a regression in 4.7.31 where a user's own email would appear + below system From emails rather than as the first and default option. + +- **[dev/mail#6](https://lab.civicrm.org/dev/mail/issues/6) On multilingual + mode, choosing mailing group doesn't affect recipient count and list + ([11906](https://github.com/civicrm/civicrm-core/pull/11906))** + +### CiviMember + +- **[CRM-20421](https://issues.civicrm.org/jira/browse/CRM-20421) Inherited + memberships are converted to individual memberships when the "parent" for the + membership is merged with another contact + ([11154](https://github.com/civicrm/civicrm-core/pull/11154))** + + This change fixes a bug where inherited memberships were being converted to + individual memberships when the "parent" for the membership was merged with + another contact so that inherited memberships get removed while merging the + contact if we chose not to transfer the memberships. + +- **CiviMember: use `fa-ban`, proper `crm-i` class for canceled auto-renew + [11775](https://github.com/civicrm/civicrm-core/pull/11775)** + +### Drupal Integration + +- **[CRM-21778](https://issues.civicrm.org/jira/browse/CRM-21778) Contact image + uploaded from drupal webform don't render on summary page + ([11681](https://github.com/civicrm/civicrm-core/pull/11681))** + + This change fixes a bug where if a contact image was uploaded from a webform, + it was not displayed on the contact summary page and a notice was thrown so + that the image loads correctly without any notice errors. + +- **[CRM-21795](https://issues.civicrm.org/jira/browse/CRM-21795) Fatal error: + civicrm/CRM/Utils/System/Drupal.php on line 857 + ([11712](https://github.com/civicrm/civicrm-core/pull/11712))** + + Fixes fatal error - CRM/Utils/System/Drupal.php on line 857 that occurs on + error.log when navigating thru a Drupal site by adding a "onCiviExit()". + +### WordPress Integration + +- **[dev/core#21](https://lab.civicrm.org/dev/core/issues/21) Regression: + Public-facing contribution pages appearance changes on 4.7.31 + ([11827](https://github.com/civicrm/civicrm-core/pull/11827))** + + Reverses formatting change that caused a regression in 4.7.31 for the display + of contribution pages in wordpress. + +## <a name="misc"></a>Miscellany + +- **[dev/release/1](https://lab.civicrm.org/dev/release/issues/1) - Change + numbering to 5.x.x + ([11704](https://github.com/civicrm/civicrm-core/pull/11704))** + +- **[CRM-21720](https://issues.civicrm.org/jira/browse/CRM-21720) Cleanup search + classes to use enumerators instead of hardcoded values + ([11600](https://github.com/civicrm/civicrm-core/pull/11600))** + +- **Fix html template structure with classes, divs & tags + ([11796](https://github.com/civicrm/civicrm-core/pull/11796))** + +- **[CRM-21739](https://issues.civicrm.org/jira/browse/CRM-21739) Create unit + test for getRecipients include/exclude recipient groups + ([11642](https://github.com/civicrm/civicrm-core/pull/11642))** + +- **[CRM-21787](https://issues.civicrm.org/jira/browse/CRM-21787) Simplify + CRM_Utils_System::version() to fetch version directly from xml/version.xml + ([11700](https://github.com/civicrm/civicrm-core/pull/11700))** + +- **(NFC) Update copyright header for 2018 + ([522](https://github.com/civicrm/civicrm-drupal/pull/522))** + +- **(NFC) Update copyright header for 2018 + ([124](https://github.com/civicrm/civicrm-wordpress/pull/124))** + +- **(NFC) Update copyright header for 2018 + ([45](https://github.com/civicrm/civicrm-joomla/pull/45))** + +- **(NFC) Remove redundant line, improve docblocks + ([11742](https://github.com/civicrm/civicrm-core/pull/11742))** + +- **(NFC) remove starting whitespace in ts about installments + ([11701](https://github.com/civicrm/civicrm-core/pull/11701))** + +- **(NFC) Rename fiterable fields param in _civicrm_api3_basic_array_get … + ([11711](https://github.com/civicrm/civicrm-core/pull/11711))** + +- **(NFC) Update copyright header for 2018 + ([11713](https://github.com/civicrm/civicrm-core/pull/11713))** + +- **(NFC) MembershipRenewal.php - Fix civilint error + ([11717](https://github.com/civicrm/civicrm-core/pull/11717))** + +- **(NFC) Update `xml/templates/*` headers + ([11740](https://github.com/civicrm/civicrm-core/pull/11740))** + +- **NFC - Minor code cleanup in CKEditorConfig.php + ([11774](https://github.com/civicrm/civicrm-core/pull/11774))** + +- **Remove hacks from CRM_Core_Menu for old unsupported versions + ([11781](https://github.com/civicrm/civicrm-core/pull/11781))** + +- **E-notice fix. + ([11799](https://github.com/civicrm/civicrm-core/pull/11799))** + +- **Update test to NOT accept a failure in the api call. + ([11798](https://github.com/civicrm/civicrm-core/pull/11798))** + +- **Make template structure proper + ([11788](https://github.com/civicrm/civicrm-core/pull/11788))** + +- **Fix template structure + ([11779](https://github.com/civicrm/civicrm-core/pull/11779))** + +- **Move towards standardising website.create function. + ([11694](https://github.com/civicrm/civicrm-core/pull/11694))** + +- **Deduper - Pass arrays rather than strings to construct URLs + ([11671](https://github.com/civicrm/civicrm-core/pull/11671))** + +## <a name="credits"></a>Credits + +This release was developed by the following code authors: + +AGH Strategies - Andrew Hunt; Agileware - Alok Patel; Australian Greens - Seamus +Lee; CiviCRM - Coleman Watts, Tim Otten; CiviDesk - Yashodha Chaku; CompuCorp - +Mukesh Ram, Omar Abu Hussein, René Olivo, Vinu Varshith Sekar; Coop SymbioTIC - +Samuel Vanhove; Davis Media Access - Darrick Servis; Fuzion - Jitendra Purohit; +Ginkgo Street Labs - Frank Gómez; JMA Consulting - Monish Deb; John Kingsnorth; +Joinery - Allen Shaw; Left Join Labs - Sean Madsen; Lighthouse Design and +Consulting - Brian Shaughnessy; Åukasz Krutul; MJW Consulting - Matthew Wire; +myDropWizard - David Snopek; Oxfam Germany - Thomas Schüttler; Progressive +Technology Project - Jamie McClelland; Systopia - Björn Endres; Tadpole +Collective - Kevin Cristiano; Third Sector Design - Michael McAndrew; Wikimedia +Foundation - Eileen McNaughton + +Most authors also reviewed code for this release; in addition, the following +reviewers contributed their comments: + +Agileware - Agileware Team; Artful Robot - Rich Lott; Blackfly Solutions - Alan +Dixon; CiviDesk - Nicolas Ganivet; CompuCorp - Jamie Novick; Coop SymbioTIC - +Mathieu Lutfy; Daniël van Vuuren; DevApp - Adam Kwiatkowski; Formatux - Gérard +Ernaelsten; Freeform Solutions - Herb van den Dool; Fuzion - Peter Davis; JMA +Consulting - Joe Murray; Kristine Chan; MC3 - Graham Mitchell; Matthias +Bärnthaler; Megaphone Technology Consulting - Jon Goldberg; Paul Treadaway; +Richard van Oosterhout; Semper IT - Karin Gerritsen + +## <a name="feedback"></a>Feedback + +These release notes are edited by Alice Frumin and Andrew Hunt. If you'd like +to provide feedback on them, please login to https://chat.civicrm.org/civicrm +and contact `@agh1`. diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql index 6ecfa96b7c728a741e39aaa6a67a92c4292cf1fd..d19c7b2dda10511267d52d143322c0f4ebf67bd7 100644 --- a/civicrm/sql/civicrm.mysql +++ b/civicrm/sql/civicrm.mysql @@ -1,7 +1,7 @@ -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -30,7 +30,7 @@ -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -4188,6 +4188,7 @@ CREATE TABLE `civicrm_membership` ( `source` varchar(128) , `status_id` int unsigned NOT NULL COMMENT 'FK to Membership Status', `is_override` tinyint COMMENT 'Admin users may set a manual status which overrides the calculated status. When this flag is true, automated status update scripts should NOT modify status for the record.', + `status_override_end_date` date DEFAULT NULL COMMENT 'Then end date of membership status override if \'Override until selected date\' override type is selected.', `owner_membership_id` int unsigned COMMENT 'Optional FK to Parent Membership.', `max_related` int COMMENT 'Maximum number of related memberships (membership_type override).', `is_test` tinyint DEFAULT 0 , diff --git a/civicrm/sql/civicrm_acl.mysql b/civicrm/sql/civicrm_acl.mysql index 37a8b8a8dc0df30dc099b856d44e23dcc8673d72..b701b35230c36458228e0fc3bcc37934d7cee403 100644 --- a/civicrm/sql/civicrm_acl.mysql +++ b/civicrm/sql/civicrm_acl.mysql @@ -1,7 +1,7 @@ -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -103,4 +103,4 @@ INSERT INTO civicrm_group (`id`, `name`, `title`, `description`, `source`, `save INSERT INTO civicrm_acl_entity_role (`acl_role_id`, `entity_table`, `entity_id`, `is_active`) VALUES - (1, 'civicrm_group', 1, 1); + (1, 'civicrm_group', 1, 1); \ No newline at end of file diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql index a00045e658c607c33ac3b01fa130e8767f4ca6b1..a3a5a5025e404cbc971bb0703131d0b8289cc73a 100644 --- a/civicrm/sql/civicrm_data.mysql +++ b/civicrm/sql/civicrm_data.mysql @@ -1,7 +1,7 @@ -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -297,7 +297,7 @@ INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -4405,11 +4405,22 @@ INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES (NULL, 1018, "08", "Saint Michael"), (NULL, 1018, "09", "Saint Peter"), (NULL, 1018, "10", "Saint Philip"), -(NULL, 1018, "11", "Saint Thomas"); +(NULL, 1018, "11", "Saint Thomas"), + +-- CRM-21837 - Missing states for Gabon +(NULL, 1080, "01", "Estuaire"), +(NULL, 1080, "02", "Haut-Ogooué"), +(NULL, 1080, "03", "Moyen-Ogooué"), +(NULL, 1080, "04", "Ngounié"), +(NULL, 1080, "05", "Nyanga"), +(NULL, 1080, "06", "Ogooué-Ivindo"), +(NULL, 1080, "07", "Ogooué-Lolo"), +(NULL, 1080, "08", "Ogooué-Maritime"), +(NULL, 1080, "09", "Woleu-Ntem"); -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -4619,11 +4630,10 @@ INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES (183, "YER", "ï·¼", "886", "Yemeni Rial"), (184, "ZMK", NULL, "894", "Zambian Kwacha"), (185, "ZWD", "Z$", "716", "Zimbabwe Dollar"); - -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -6462,7 +6472,7 @@ INSERT INTO `civicrm_contact_type` -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -23135,7 +23145,7 @@ VALUES -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -23321,7 +23331,7 @@ VALUES INSERT INTO civicrm_navigation ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) VALUES - ( @domainID, NULL, 'Mailings', 'Mailings', 'access CiviMail,create mailings,approve mailings,schedule mailings', 'OR', NULL, '1', NULL, 50 ); + ( @domainID, NULL, 'Mailings', 'Mailings', 'access CiviMail,create mailings,approve mailings,schedule mailings,send SMS', 'OR', NULL, '1', NULL, 50 ); SET @mailinglastID:=LAST_INSERT_ID(); INSERT INTO civicrm_navigation @@ -23335,8 +23345,8 @@ VALUES ( @domainID, 'civicrm/admin/component?reset=1', 'Headers, Footers, and Automated Messages', 'Headers, Footers, and Automated Messages', 'access CiviMail,administer CiviCRM', 'AND', @mailinglastID, '1', NULL, 6 ), ( @domainID, 'civicrm/admin/messageTemplates?reset=1', 'Message Templates', 'Message Templates', 'edit message templates', '', @mailinglastID, '1', NULL, 7 ), ( @domainID, 'civicrm/admin/options/from_email_address?reset=1', 'From Email Addresses', 'From Email Addresses', 'administer CiviCRM', '', @mailinglastID, '1', 1, 8 ), - ( @domainID, 'civicrm/sms/send?reset=1', 'New SMS', 'New SMS', 'administer CiviCRM', NULL, @mailinglastID, '1', NULL, 9 ), - ( @domainID, 'civicrm/mailing/browse?reset=1&sms=1', 'Find Mass SMS', 'Find Mass SMS', 'administer CiviCRM', NULL, @mailinglastID, '1', 1, 10 ), + ( @domainID, 'civicrm/sms/send?reset=1', 'New SMS', 'New SMS', 'send SMS', NULL, @mailinglastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/mailing/browse?reset=1&sms=1', 'Find Mass SMS', 'Find Mass SMS', 'send SMS', NULL, @mailinglastID, '1', 1, 10 ), ( @domainID, 'civicrm/a/#/abtest/new', 'New A/B Test', 'New A/B Test', 'access CiviMail', '', @mailinglastID, '1', NULL, 15 ), ( @domainID, 'civicrm/a/#/abtest', 'Manage A/B Tests', 'Manage A/B Tests', 'access CiviMail', '', @mailinglastID, '1', 1, 16 ); @@ -23951,5 +23961,4 @@ INSERT INTO `civicrm_report_instance` ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) VALUES ( @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}'); - -UPDATE civicrm_domain SET version = '4.7.31'; +UPDATE civicrm_domain SET version = '5.0.0'; diff --git a/civicrm/sql/civicrm_drop.mysql b/civicrm/sql/civicrm_drop.mysql index 6fe8de34e011b48d81b54f6258b2268263f95ca5..8b71665041cac4ca3eb55d787665cc23a30a6085 100644 --- a/civicrm/sql/civicrm_drop.mysql +++ b/civicrm/sql/civicrm_drop.mysql @@ -1,7 +1,7 @@ -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql index ef346cc35571f6a8c7c8339db5248b257f647ee9..7cbfb29405d1cb00eeda03f969ed25e7a2bb40e6 100644 --- a/civicrm/sql/civicrm_generated.mysql +++ b/civicrm/sql/civicrm_generated.mysql @@ -398,7 +398,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_domain` WRITE; /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */; -INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'4.7.31',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); +INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'5.0.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}'); /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */; UNLOCK TABLES; @@ -1325,7 +1325,7 @@ UNLOCK TABLES; LOCK TABLES `civicrm_state_province` WRITE; /*!40000 ALTER TABLE `civicrm_state_province` DISABLE KEYS */; -INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id`) VALUES (1000,'Alabama','AL',1228),(1001,'Alaska','AK',1228),(1002,'Arizona','AZ',1228),(1003,'Arkansas','AR',1228),(1004,'California','CA',1228),(1005,'Colorado','CO',1228),(1006,'Connecticut','CT',1228),(1007,'Delaware','DE',1228),(1008,'Florida','FL',1228),(1009,'Georgia','GA',1228),(1010,'Hawaii','HI',1228),(1011,'Idaho','ID',1228),(1012,'Illinois','IL',1228),(1013,'Indiana','IN',1228),(1014,'Iowa','IA',1228),(1015,'Kansas','KS',1228),(1016,'Kentucky','KY',1228),(1017,'Louisiana','LA',1228),(1018,'Maine','ME',1228),(1019,'Maryland','MD',1228),(1020,'Massachusetts','MA',1228),(1021,'Michigan','MI',1228),(1022,'Minnesota','MN',1228),(1023,'Mississippi','MS',1228),(1024,'Missouri','MO',1228),(1025,'Montana','MT',1228),(1026,'Nebraska','NE',1228),(1027,'Nevada','NV',1228),(1028,'New Hampshire','NH',1228),(1029,'New Jersey','NJ',1228),(1030,'New Mexico','NM',1228),(1031,'New York','NY',1228),(1032,'North Carolina','NC',1228),(1033,'North Dakota','ND',1228),(1034,'Ohio','OH',1228),(1035,'Oklahoma','OK',1228),(1036,'Oregon','OR',1228),(1037,'Pennsylvania','PA',1228),(1038,'Rhode Island','RI',1228),(1039,'South Carolina','SC',1228),(1040,'South Dakota','SD',1228),(1041,'Tennessee','TN',1228),(1042,'Texas','TX',1228),(1043,'Utah','UT',1228),(1044,'Vermont','VT',1228),(1045,'Virginia','VA',1228),(1046,'Washington','WA',1228),(1047,'West Virginia','WV',1228),(1048,'Wisconsin','WI',1228),(1049,'Wyoming','WY',1228),(1050,'District of Columbia','DC',1228),(1052,'American Samoa','AS',1228),(1053,'Guam','GU',1228),(1055,'Northern Mariana Islands','MP',1228),(1056,'Puerto Rico','PR',1228),(1057,'Virgin Islands','VI',1228),(1058,'United States Minor Outlying Islands','UM',1228),(1059,'Armed Forces Europe','AE',1228),(1060,'Armed Forces Americas','AA',1228),(1061,'Armed Forces Pacific','AP',1228),(1100,'Alberta','AB',1039),(1101,'British Columbia','BC',1039),(1102,'Manitoba','MB',1039),(1103,'New Brunswick','NB',1039),(1104,'Newfoundland and Labrador','NL',1039),(1105,'Northwest Territories','NT',1039),(1106,'Nova Scotia','NS',1039),(1107,'Nunavut','NU',1039),(1108,'Ontario','ON',1039),(1109,'Prince Edward Island','PE',1039),(1110,'Quebec','QC',1039),(1111,'Saskatchewan','SK',1039),(1112,'Yukon Territory','YT',1039),(1200,'Maharashtra','MM',1101),(1201,'Karnataka','KA',1101),(1202,'Andhra Pradesh','AP',1101),(1203,'Arunachal Pradesh','AR',1101),(1204,'Assam','AS',1101),(1205,'Bihar','BR',1101),(1206,'Chhattisgarh','CH',1101),(1207,'Goa','GA',1101),(1208,'Gujarat','GJ',1101),(1209,'Haryana','HR',1101),(1210,'Himachal Pradesh','HP',1101),(1211,'Jammu and Kashmir','JK',1101),(1212,'Jharkhand','JH',1101),(1213,'Kerala','KL',1101),(1214,'Madhya Pradesh','MP',1101),(1215,'Manipur','MN',1101),(1216,'Meghalaya','ML',1101),(1217,'Mizoram','MZ',1101),(1218,'Nagaland','NL',1101),(1219,'Orissa','OR',1101),(1220,'Punjab','PB',1101),(1221,'Rajasthan','RJ',1101),(1222,'Sikkim','SK',1101),(1223,'Tamil Nadu','TN',1101),(1224,'Tripura','TR',1101),(1225,'Uttarakhand','UT',1101),(1226,'Uttar Pradesh','UP',1101),(1227,'West Bengal','WB',1101),(1228,'Andaman and Nicobar Islands','AN',1101),(1229,'Dadra and Nagar Haveli','DN',1101),(1230,'Daman and Diu','DD',1101),(1231,'Delhi','DL',1101),(1232,'Lakshadweep','LD',1101),(1233,'Pondicherry','PY',1101),(1300,'mazowieckie','MZ',1172),(1301,'pomorskie','PM',1172),(1302,'dolnoÅ›lÄ…skie','DS',1172),(1303,'kujawsko-pomorskie','KP',1172),(1304,'lubelskie','LU',1172),(1305,'lubuskie','LB',1172),(1306,'łódzkie','LD',1172),(1307,'maÅ‚opolskie','MA',1172),(1308,'opolskie','OP',1172),(1309,'podkarpackie','PK',1172),(1310,'podlaskie','PD',1172),(1311,'Å›lÄ…skie','SL',1172),(1312,'Å›wiÄ™tokrzyskie','SK',1172),(1313,'warmiÅ„sko-mazurskie','WN',1172),(1314,'wielkopolskie','WP',1172),(1315,'zachodniopomorskie','ZP',1172),(1500,'Abu Zaby','AZ',1225),(1501,'\'Ajman','AJ',1225),(1502,'Al Fujayrah','FU',1225),(1503,'Ash Shariqah','SH',1225),(1504,'Dubayy','DU',1225),(1505,'Ra\'s al Khaymah','RK',1225),(1506,'Dac Lac','33',1233),(1507,'Umm al Qaywayn','UQ',1225),(1508,'Badakhshan','BDS',1001),(1509,'Badghis','BDG',1001),(1510,'Baghlan','BGL',1001),(1511,'Balkh','BAL',1001),(1512,'Bamian','BAM',1001),(1513,'Farah','FRA',1001),(1514,'Faryab','FYB',1001),(1515,'Ghazni','GHA',1001),(1516,'Ghowr','GHO',1001),(1517,'Helmand','HEL',1001),(1518,'Herat','HER',1001),(1519,'Jowzjan','JOW',1001),(1520,'Kabul','KAB',1001),(1521,'Kandahar','KAN',1001),(1522,'Kapisa','KAP',1001),(1523,'Khowst','KHO',1001),(1524,'Konar','KNR',1001),(1525,'Kondoz','KDZ',1001),(1526,'Laghman','LAG',1001),(1527,'Lowgar','LOW',1001),(1528,'Nangrahar','NAN',1001),(1529,'Nimruz','NIM',1001),(1530,'Nurestan','NUR',1001),(1531,'Oruzgan','ORU',1001),(1532,'Paktia','PIA',1001),(1533,'Paktika','PKA',1001),(1534,'Parwan','PAR',1001),(1535,'Samangan','SAM',1001),(1536,'Sar-e Pol','SAR',1001),(1537,'Takhar','TAK',1001),(1538,'Wardak','WAR',1001),(1539,'Zabol','ZAB',1001),(1540,'Berat','BR',1002),(1541,'Bulqizë','BU',1002),(1542,'Delvinë','DL',1002),(1543,'Devoll','DV',1002),(1544,'Dibër','DI',1002),(1545,'Durrës','DR',1002),(1546,'Elbasan','EL',1002),(1547,'Fier','FR',1002),(1548,'Gramsh','GR',1002),(1549,'Gjirokastër','GJ',1002),(1550,'Has','HA',1002),(1551,'Kavajë','KA',1002),(1552,'Kolonjë','ER',1002),(1553,'Korçë','KO',1002),(1554,'Krujë','KR',1002),(1555,'Kuçovë','KC',1002),(1556,'Kukës','KU',1002),(1557,'Kurbin','KB',1002),(1558,'Lezhë','LE',1002),(1559,'Librazhd','LB',1002),(1560,'Lushnjë','LU',1002),(1561,'Malësi e Madhe','MM',1002),(1562,'Mallakastër','MK',1002),(1563,'Mat','MT',1002),(1564,'Mirditë','MR',1002),(1565,'Peqin','PQ',1002),(1566,'Përmet','PR',1002),(1567,'Pogradec','PG',1002),(1568,'Pukë','PU',1002),(1569,'Sarandë','SR',1002),(1570,'Skrapar','SK',1002),(1571,'Shkodër','SH',1002),(1572,'Tepelenë','TE',1002),(1573,'Tiranë','TR',1002),(1574,'Tropojë','TP',1002),(1575,'Vlorë','VL',1002),(1576,'Erevan','ER',1011),(1577,'Aragacotn','AG',1011),(1578,'Ararat','AR',1011),(1579,'Armavir','AV',1011),(1580,'Gegarkunik\'','GR',1011),(1581,'Kotayk\'','KT',1011),(1582,'Lory','LO',1011),(1583,'Sirak','SH',1011),(1584,'Syunik\'','SU',1011),(1585,'Tavus','TV',1011),(1586,'Vayoc Jor','VD',1011),(1587,'Bengo','BGO',1006),(1588,'Benguela','BGU',1006),(1589,'Bie','BIE',1006),(1590,'Cabinda','CAB',1006),(1591,'Cuando-Cubango','CCU',1006),(1592,'Cuanza Norte','CNO',1006),(1593,'Cuanza Sul','CUS',1006),(1594,'Cunene','CNN',1006),(1595,'Huambo','HUA',1006),(1596,'Huila','HUI',1006),(1597,'Luanda','LUA',1006),(1598,'Lunda Norte','LNO',1006),(1599,'Lunda Sul','LSU',1006),(1600,'Malange','MAL',1006),(1601,'Moxico','MOX',1006),(1602,'Namibe','NAM',1006),(1603,'Uige','UIG',1006),(1604,'Zaire','ZAI',1006),(1605,'Capital federal','C',1010),(1606,'Buenos Aires','B',1010),(1607,'Catamarca','K',1010),(1608,'Cordoba','X',1010),(1609,'Corrientes','W',1010),(1610,'Chaco','H',1010),(1611,'Chubut','U',1010),(1612,'Entre Rios','E',1010),(1613,'Formosa','P',1010),(1614,'Jujuy','Y',1010),(1615,'La Pampa','L',1010),(1616,'Mendoza','M',1010),(1617,'Misiones','N',1010),(1618,'Neuquen','Q',1010),(1619,'Rio Negro','R',1010),(1620,'Salta','A',1010),(1621,'San Juan','J',1010),(1622,'San Luis','D',1010),(1623,'Santa Cruz','Z',1010),(1624,'Santa Fe','S',1010),(1625,'Santiago del Estero','G',1010),(1626,'Tierra del Fuego','V',1010),(1627,'Tucuman','T',1010),(1628,'Burgenland','1',1014),(1629,'Kärnten','2',1014),(1630,'Niederösterreich','3',1014),(1631,'Oberösterreich','4',1014),(1632,'Salzburg','5',1014),(1633,'Steiermark','6',1014),(1634,'Tirol','7',1014),(1635,'Vorarlberg','8',1014),(1636,'Wien','9',1014),(1637,'Australian Antarctic Territory','AAT',1008),(1638,'Australian Capital Territory','ACT',1013),(1639,'Northern Territory','NT',1013),(1640,'New South Wales','NSW',1013),(1641,'Queensland','QLD',1013),(1642,'South Australia','SA',1013),(1643,'Tasmania','TAS',1013),(1644,'Victoria','VIC',1013),(1645,'Western Australia','WA',1013),(1646,'Naxcivan','NX',1015),(1647,'Ali Bayramli','AB',1015),(1648,'Baki','BA',1015),(1649,'Ganca','GA',1015),(1650,'Lankaran','LA',1015),(1651,'Mingacevir','MI',1015),(1652,'Naftalan','NA',1015),(1653,'Saki','SA',1015),(1654,'Sumqayit','SM',1015),(1655,'Susa','SS',1015),(1656,'Xankandi','XA',1015),(1657,'Yevlax','YE',1015),(1658,'Abseron','ABS',1015),(1659,'Agcabadi','AGC',1015),(1660,'Agdam','AGM',1015),(1661,'Agdas','AGS',1015),(1662,'Agstafa','AGA',1015),(1663,'Agsu','AGU',1015),(1664,'Astara','AST',1015),(1665,'Babak','BAB',1015),(1666,'Balakan','BAL',1015),(1667,'Barda','BAR',1015),(1668,'Beylagan','BEY',1015),(1669,'Bilasuvar','BIL',1015),(1670,'Cabrayll','CAB',1015),(1671,'Calilabad','CAL',1015),(1672,'Culfa','CUL',1015),(1673,'Daskasan','DAS',1015),(1674,'Davaci','DAV',1015),(1675,'Fuzuli','FUZ',1015),(1676,'Gadabay','GAD',1015),(1677,'Goranboy','GOR',1015),(1678,'Goycay','GOY',1015),(1679,'Haciqabul','HAC',1015),(1680,'Imisli','IMI',1015),(1681,'Ismayilli','ISM',1015),(1682,'Kalbacar','KAL',1015),(1683,'Kurdamir','KUR',1015),(1684,'Lacin','LAC',1015),(1685,'Lerik','LER',1015),(1686,'Masalli','MAS',1015),(1687,'Neftcala','NEF',1015),(1688,'Oguz','OGU',1015),(1689,'Ordubad','ORD',1015),(1690,'Qabala','QAB',1015),(1691,'Qax','QAX',1015),(1692,'Qazax','QAZ',1015),(1693,'Qobustan','QOB',1015),(1694,'Quba','QBA',1015),(1695,'Qubadli','QBI',1015),(1696,'Qusar','QUS',1015),(1697,'Saatli','SAT',1015),(1698,'Sabirabad','SAB',1015),(1699,'Sadarak','SAD',1015),(1700,'Sahbuz','SAH',1015),(1701,'Salyan','SAL',1015),(1702,'Samaxi','SMI',1015),(1703,'Samkir','SKR',1015),(1704,'Samux','SMX',1015),(1705,'Sarur','SAR',1015),(1706,'Siyazan','SIY',1015),(1707,'Tartar','TAR',1015),(1708,'Tovuz','TOV',1015),(1709,'Ucar','UCA',1015),(1710,'Xacmaz','XAC',1015),(1711,'Xanlar','XAN',1015),(1712,'Xizi','XIZ',1015),(1713,'Xocali','XCI',1015),(1714,'Xocavand','XVD',1015),(1715,'Yardimli','YAR',1015),(1716,'Zangilan','ZAN',1015),(1717,'Zaqatala','ZAQ',1015),(1718,'Zardab','ZAR',1015),(1719,'Federacija Bosna i Hercegovina','BIH',1026),(1720,'Republika Srpska','SRP',1026),(1721,'Bagerhat zila','05',1017),(1722,'Bandarban zila','01',1017),(1723,'Barguna zila','02',1017),(1724,'Barisal zila','06',1017),(1725,'Bhola zila','07',1017),(1726,'Bogra zila','03',1017),(1727,'Brahmanbaria zila','04',1017),(1728,'Chandpur zila','09',1017),(1729,'Chittagong zila','10',1017),(1730,'Chuadanga zila','12',1017),(1731,'Comilla zila','08',1017),(1732,'Cox\'s Bazar zila','11',1017),(1733,'Dhaka zila','13',1017),(1734,'Dinajpur zila','14',1017),(1735,'Faridpur zila','15',1017),(1736,'Feni zila','16',1017),(1737,'Gaibandha zila','19',1017),(1738,'Gazipur zila','18',1017),(1739,'Gopalganj zila','17',1017),(1740,'Habiganj zila','20',1017),(1741,'Jaipurhat zila','24',1017),(1742,'Jamalpur zila','21',1017),(1743,'Jessore zila','22',1017),(1744,'Jhalakati zila','25',1017),(1745,'Jhenaidah zila','23',1017),(1746,'Khagrachari zila','29',1017),(1747,'Khulna zila','27',1017),(1748,'Kishorganj zila','26',1017),(1749,'Kurigram zila','28',1017),(1750,'Kushtia zila','30',1017),(1751,'Lakshmipur zila','31',1017),(1752,'Lalmonirhat zila','32',1017),(1753,'Madaripur zila','36',1017),(1754,'Magura zila','37',1017),(1755,'Manikganj zila','33',1017),(1756,'Meherpur zila','39',1017),(1757,'Moulvibazar zila','38',1017),(1758,'Munshiganj zila','35',1017),(1759,'Mymensingh zila','34',1017),(1760,'Naogaon zila','48',1017),(1761,'Narail zila','43',1017),(1762,'Narayanganj zila','40',1017),(1763,'Narsingdi zila','42',1017),(1764,'Natore zila','44',1017),(1765,'Nawabganj zila','45',1017),(1766,'Netrakona zila','41',1017),(1767,'Nilphamari zila','46',1017),(1768,'Noakhali zila','47',1017),(1769,'Pabna zila','49',1017),(1770,'Panchagarh zila','52',1017),(1771,'Patuakhali zila','51',1017),(1772,'Pirojpur zila','50',1017),(1773,'Rajbari zila','53',1017),(1774,'Rajshahi zila','54',1017),(1775,'Rangamati zila','56',1017),(1776,'Rangpur zila','55',1017),(1777,'Satkhira zila','58',1017),(1778,'Shariatpur zila','62',1017),(1779,'Sherpur zila','57',1017),(1780,'Sirajganj zila','59',1017),(1781,'Sunamganj zila','61',1017),(1782,'Sylhet zila','60',1017),(1783,'Tangail zila','63',1017),(1784,'Thakurgaon zila','64',1017),(1785,'Antwerpen','VAN',1020),(1786,'Brabant Wallon','WBR',1020),(1787,'Hainaut','WHT',1020),(1788,'Liege','WLG',1020),(1789,'Limburg','VLI',1020),(1790,'Luxembourg','WLX',1020),(1791,'Namur','WNA',1020),(1792,'Oost-Vlaanderen','VOV',1020),(1793,'Vlaams-Brabant','VBR',1020),(1794,'West-Vlaanderen','VWV',1020),(1795,'Bale','BAL',1034),(1796,'Bam','BAM',1034),(1797,'Banwa','BAN',1034),(1798,'Bazega','BAZ',1034),(1799,'Bougouriba','BGR',1034),(1800,'Boulgou','BLG',1034),(1801,'Boulkiemde','BLK',1034),(1802,'Comoe','COM',1034),(1803,'Ganzourgou','GAN',1034),(1804,'Gnagna','GNA',1034),(1805,'Gourma','GOU',1034),(1806,'Houet','HOU',1034),(1807,'Ioba','IOB',1034),(1808,'Kadiogo','KAD',1034),(1809,'Kenedougou','KEN',1034),(1810,'Komondjari','KMD',1034),(1811,'Kompienga','KMP',1034),(1812,'Kossi','KOS',1034),(1813,'Koulpulogo','KOP',1034),(1814,'Kouritenga','KOT',1034),(1815,'Kourweogo','KOW',1034),(1816,'Leraba','LER',1034),(1817,'Loroum','LOR',1034),(1818,'Mouhoun','MOU',1034),(1819,'Nahouri','NAO',1034),(1820,'Namentenga','NAM',1034),(1821,'Nayala','NAY',1034),(1822,'Noumbiel','NOU',1034),(1823,'Oubritenga','OUB',1034),(1824,'Oudalan','OUD',1034),(1825,'Passore','PAS',1034),(1826,'Poni','PON',1034),(1827,'Sanguie','SNG',1034),(1828,'Sanmatenga','SMT',1034),(1829,'Seno','SEN',1034),(1830,'Siasili','SIS',1034),(1831,'Soum','SOM',1034),(1832,'Sourou','SOR',1034),(1833,'Tapoa','TAP',1034),(1834,'Tui','TUI',1034),(1835,'Yagha','YAG',1034),(1836,'Yatenga','YAT',1034),(1837,'Ziro','ZIR',1034),(1838,'Zondoma','ZON',1034),(1839,'Zoundweogo','ZOU',1034),(1840,'Blagoevgrad','01',1033),(1841,'Burgas','02',1033),(1842,'Dobrich','08',1033),(1843,'Gabrovo','07',1033),(1844,'Haskovo','26',1033),(1845,'Yambol','28',1033),(1846,'Kardzhali','09',1033),(1847,'Kyustendil','10',1033),(1848,'Lovech','11',1033),(1849,'Montana','12',1033),(1850,'Pazardzhik','13',1033),(1851,'Pernik','14',1033),(1852,'Pleven','15',1033),(1853,'Plovdiv','16',1033),(1854,'Razgrad','17',1033),(1855,'Ruse','18',1033),(1856,'Silistra','19',1033),(1857,'Sliven','20',1033),(1858,'Smolyan','21',1033),(1859,'Sofia','23',1033),(1860,'Stara Zagora','24',1033),(1861,'Shumen','27',1033),(1862,'Targovishte','25',1033),(1863,'Varna','03',1033),(1864,'Veliko Tarnovo','04',1033),(1865,'Vidin','05',1033),(1866,'Vratsa','06',1033),(1867,'Al Hadd','01',1016),(1868,'Al Manamah','03',1016),(1869,'Al Mintaqah al Gharbiyah','10',1016),(1870,'Al Mintagah al Wusta','07',1016),(1871,'Al Mintaqah ash Shamaliyah','05',1016),(1872,'Al Muharraq','02',1016),(1873,'Ar Rifa','09',1016),(1874,'Jidd Hafs','04',1016),(1875,'Madluat Jamad','12',1016),(1876,'Madluat Isa','08',1016),(1877,'Mintaqat Juzur tawar','11',1016),(1878,'Sitrah','06',1016),(1879,'Bubanza','BB',1036),(1880,'Bujumbura','BJ',1036),(1881,'Bururi','BR',1036),(1882,'Cankuzo','CA',1036),(1883,'Cibitoke','CI',1036),(1884,'Gitega','GI',1036),(1885,'Karuzi','KR',1036),(1886,'Kayanza','KY',1036),(1887,'Makamba','MA',1036),(1888,'Muramvya','MU',1036),(1889,'Mwaro','MW',1036),(1890,'Ngozi','NG',1036),(1891,'Rutana','RT',1036),(1892,'Ruyigi','RY',1036),(1893,'Alibori','AL',1022),(1894,'Atakora','AK',1022),(1895,'Atlantique','AQ',1022),(1896,'Borgou','BO',1022),(1897,'Collines','CO',1022),(1898,'Donga','DO',1022),(1899,'Kouffo','KO',1022),(1900,'Littoral','LI',1022),(1901,'Mono','MO',1022),(1902,'Oueme','OU',1022),(1903,'Plateau','PL',1022),(1904,'Zou','ZO',1022),(1905,'Belait','BE',1032),(1906,'Brunei-Muara','BM',1032),(1907,'Temburong','TE',1032),(1908,'Tutong','TU',1032),(1909,'Cochabamba','C',1025),(1910,'Chuquisaca','H',1025),(1911,'El Beni','B',1025),(1912,'La Paz','L',1025),(1913,'Oruro','O',1025),(1914,'Pando','N',1025),(1915,'Potosi','P',1025),(1916,'Tarija','T',1025),(1917,'Acre','AC',1029),(1918,'Alagoas','AL',1029),(1919,'Amazonas','AM',1029),(1920,'Amapa','AP',1029),(1921,'Bahia','BA',1029),(1922,'Ceara','CE',1029),(1923,'Distrito Federal','DF',1029),(1924,'Espirito Santo','ES',1029),(1926,'Goias','GO',1029),(1927,'Maranhao','MA',1029),(1928,'Minas Gerais','MG',1029),(1929,'Mato Grosso do Sul','MS',1029),(1930,'Mato Grosso','MT',1029),(1931,'Para','PA',1029),(1932,'Paraiba','PB',1029),(1933,'Pernambuco','PE',1029),(1934,'Piaui','PI',1029),(1935,'Parana','PR',1029),(1936,'Rio de Janeiro','RJ',1029),(1937,'Rio Grande do Norte','RN',1029),(1938,'Rondonia','RO',1029),(1939,'Roraima','RR',1029),(1940,'Rio Grande do Sul','RS',1029),(1941,'Santa Catarina','SC',1029),(1942,'Sergipe','SE',1029),(1943,'Sao Paulo','SP',1029),(1944,'Tocantins','TO',1029),(1945,'Acklins and Crooked Islands','AC',1212),(1946,'Bimini','BI',1212),(1947,'Cat Island','CI',1212),(1948,'Exuma','EX',1212),(1955,'Inagua','IN',1212),(1957,'Long Island','LI',1212),(1959,'Mayaguana','MG',1212),(1960,'New Providence','NP',1212),(1962,'Ragged Island','RI',1212),(1966,'Bumthang','33',1024),(1967,'Chhukha','12',1024),(1968,'Dagana','22',1024),(1969,'Gasa','GA',1024),(1970,'Ha','13',1024),(1971,'Lhuentse','44',1024),(1972,'Monggar','42',1024),(1973,'Paro','11',1024),(1974,'Pemagatshel','43',1024),(1975,'Punakha','23',1024),(1976,'Samdrup Jongkha','45',1024),(1977,'Samtee','14',1024),(1978,'Sarpang','31',1024),(1979,'Thimphu','15',1024),(1980,'Trashigang','41',1024),(1981,'Trashi Yangtse','TY',1024),(1982,'Trongsa','32',1024),(1983,'Tsirang','21',1024),(1984,'Wangdue Phodrang','24',1024),(1985,'Zhemgang','34',1024),(1986,'Central','CE',1027),(1987,'Ghanzi','GH',1027),(1988,'Kgalagadi','KG',1027),(1989,'Kgatleng','KL',1027),(1990,'Kweneng','KW',1027),(1991,'Ngamiland','NG',1027),(1992,'North-East','NE',1027),(1993,'North-West','NW',1027),(1994,'South-East','SE',1027),(1995,'Southern','SO',1027),(1996,'Brèsckaja voblasc\'','BR',1019),(1997,'Homel\'skaja voblasc\'','HO',1019),(1998,'Hrodzenskaja voblasc\'','HR',1019),(1999,'Mahilëuskaja voblasc\'','MA',1019),(2000,'Minskaja voblasc\'','MI',1019),(2001,'Vicebskaja voblasc\'','VI',1019),(2002,'Belize','BZ',1021),(2003,'Cayo','CY',1021),(2004,'Corozal','CZL',1021),(2005,'Orange Walk','OW',1021),(2006,'Stann Creek','SC',1021),(2007,'Toledo','TOL',1021),(2008,'Kinshasa','KN',1050),(2011,'Equateur','EQ',1050),(2014,'Kasai-Oriental','KE',1050),(2016,'Maniema','MA',1050),(2017,'Nord-Kivu','NK',1050),(2019,'Sud-Kivu','SK',1050),(2020,'Bangui','BGF',1042),(2021,'Bamingui-Bangoran','BB',1042),(2022,'Basse-Kotto','BK',1042),(2023,'Haute-Kotto','HK',1042),(2024,'Haut-Mbomou','HM',1042),(2025,'Kemo','KG',1042),(2026,'Lobaye','LB',1042),(2027,'Mambere-Kadei','HS',1042),(2028,'Mbomou','MB',1042),(2029,'Nana-Grebizi','KB',1042),(2030,'Nana-Mambere','NM',1042),(2031,'Ombella-Mpoko','MP',1042),(2032,'Ouaka','UK',1042),(2033,'Ouham','AC',1042),(2034,'Ouham-Pende','OP',1042),(2035,'Sangha-Mbaere','SE',1042),(2036,'Vakaga','VR',1042),(2037,'Brazzaville','BZV',1051),(2038,'Bouenza','11',1051),(2039,'Cuvette','8',1051),(2040,'Cuvette-Ouest','15',1051),(2041,'Kouilou','5',1051),(2042,'Lekoumou','2',1051),(2043,'Likouala','7',1051),(2044,'Niari','9',1051),(2045,'Plateaux','14',1051),(2046,'Pool','12',1051),(2047,'Sangha','13',1051),(2048,'Aargau','AG',1205),(2049,'Appenzell Innerrhoden','AI',1205),(2050,'Appenzell Ausserrhoden','AR',1205),(2051,'Bern','BE',1205),(2052,'Basel-Landschaft','BL',1205),(2053,'Basel-Stadt','BS',1205),(2054,'Fribourg','FR',1205),(2055,'Geneva','GE',1205),(2056,'Glarus','GL',1205),(2057,'Graubunden','GR',1205),(2058,'Jura','JU',1205),(2059,'Luzern','LU',1205),(2060,'Neuchatel','NE',1205),(2061,'Nidwalden','NW',1205),(2062,'Obwalden','OW',1205),(2063,'Sankt Gallen','SG',1205),(2064,'Schaffhausen','SH',1205),(2065,'Solothurn','SO',1205),(2066,'Schwyz','SZ',1205),(2067,'Thurgau','TG',1205),(2068,'Ticino','TI',1205),(2069,'Uri','UR',1205),(2070,'Vaud','VD',1205),(2071,'Valais','VS',1205),(2072,'Zug','ZG',1205),(2073,'Zurich','ZH',1205),(2074,'18 Montagnes','06',1054),(2075,'Agnebi','16',1054),(2076,'Bas-Sassandra','09',1054),(2077,'Denguele','10',1054),(2078,'Haut-Sassandra','02',1054),(2079,'Lacs','07',1054),(2080,'Lagunes','01',1054),(2081,'Marahoue','12',1054),(2082,'Moyen-Comoe','05',1054),(2083,'Nzi-Comoe','11',1054),(2084,'Savanes','03',1054),(2085,'Sud-Bandama','15',1054),(2086,'Sud-Comoe','13',1054),(2087,'Vallee du Bandama','04',1054),(2088,'Worodouqou','14',1054),(2089,'Zanzan','08',1054),(2090,'Aisen del General Carlos Ibanez del Campo','AI',1044),(2091,'Antofagasta','AN',1044),(2092,'Araucania','AR',1044),(2093,'Atacama','AT',1044),(2094,'Bio-Bio','BI',1044),(2095,'Coquimbo','CO',1044),(2096,'Libertador General Bernardo O\'Higgins','LI',1044),(2097,'Los Lagos','LL',1044),(2098,'Magallanes','MA',1044),(2099,'Maule','ML',1044),(2100,'Santiago Metropolitan','SM',1044),(2101,'Tarapaca','TA',1044),(2102,'Valparaiso','VS',1044),(2103,'Adamaoua','AD',1038),(2104,'Centre','CE',1038),(2105,'East','ES',1038),(2106,'Far North','EN',1038),(2107,'North','NO',1038),(2108,'South','SW',1038),(2109,'South-West','SW',1038),(2110,'West','OU',1038),(2111,'Beijing','11',1045),(2112,'Chongqing','50',1045),(2113,'Shanghai','31',1045),(2114,'Tianjin','12',1045),(2115,'Anhui','34',1045),(2116,'Fujian','35',1045),(2117,'Gansu','62',1045),(2118,'Guangdong','44',1045),(2119,'Guizhou','52',1045),(2120,'Hainan','46',1045),(2121,'Hebei','13',1045),(2122,'Heilongjiang','23',1045),(2123,'Henan','41',1045),(2124,'Hubei','42',1045),(2125,'Hunan','43',1045),(2126,'Jiangsu','32',1045),(2127,'Jiangxi','36',1045),(2128,'Jilin','22',1045),(2129,'Liaoning','21',1045),(2130,'Qinghai','63',1045),(2131,'Shaanxi','61',1045),(2132,'Shandong','37',1045),(2133,'Shanxi','14',1045),(2134,'Sichuan','51',1045),(2135,'Taiwan','71',1045),(2136,'Yunnan','53',1045),(2137,'Zhejiang','33',1045),(2138,'Guangxi','45',1045),(2139,'Neia Mongol (mn)','15',1045),(2140,'Xinjiang','65',1045),(2141,'Xizang','54',1045),(2142,'Hong Kong','91',1045),(2143,'Macau','92',1045),(2144,'Distrito Capital de Bogotá','DC',1048),(2145,'Amazonea','AMA',1048),(2146,'Antioquia','ANT',1048),(2147,'Arauca','ARA',1048),(2148,'Atlántico','ATL',1048),(2149,'BolÃvar','BOL',1048),(2150,'Boyacá','BOY',1048),(2151,'Caldea','CAL',1048),(2152,'Caquetá','CAQ',1048),(2153,'Casanare','CAS',1048),(2154,'Cauca','CAU',1048),(2155,'Cesar','CES',1048),(2156,'Córdoba','COR',1048),(2157,'Cundinamarca','CUN',1048),(2158,'Chocó','CHO',1048),(2159,'GuainÃa','GUA',1048),(2160,'Guaviare','GUV',1048),(2161,'La Guajira','LAG',1048),(2162,'Magdalena','MAG',1048),(2163,'Meta','MET',1048),(2164,'Nariño','NAR',1048),(2165,'Norte de Santander','NSA',1048),(2166,'Putumayo','PUT',1048),(2167,'Quindio','QUI',1048),(2168,'Risaralda','RIS',1048),(2169,'San Andrés, Providencia y Santa Catalina','SAP',1048),(2170,'Santander','SAN',1048),(2171,'Sucre','SUC',1048),(2172,'Tolima','TOL',1048),(2173,'Valle del Cauca','VAC',1048),(2174,'Vaupés','VAU',1048),(2175,'Vichada','VID',1048),(2176,'Alajuela','A',1053),(2177,'Cartago','C',1053),(2178,'Guanacaste','G',1053),(2179,'Heredia','H',1053),(2180,'Limon','L',1053),(2181,'Puntarenas','P',1053),(2182,'San Jose','SJ',1053),(2183,'Camagey','09',1056),(2184,'Ciego de `vila','08',1056),(2185,'Cienfuegos','06',1056),(2186,'Ciudad de La Habana','03',1056),(2187,'Granma','12',1056),(2188,'Guantanamo','14',1056),(2189,'Holquin','11',1056),(2190,'La Habana','02',1056),(2191,'Las Tunas','10',1056),(2192,'Matanzas','04',1056),(2193,'Pinar del Rio','01',1056),(2194,'Sancti Spiritus','07',1056),(2195,'Santiago de Cuba','13',1056),(2196,'Villa Clara','05',1056),(2197,'Isla de la Juventud','99',1056),(2198,'Pinar del Roo','PR',1056),(2199,'Ciego de Avila','CA',1056),(2200,'Camagoey','CG',1056),(2201,'Holgun','HO',1056),(2202,'Sancti Spritus','SS',1056),(2203,'Municipio Especial Isla de la Juventud','IJ',1056),(2204,'Boa Vista','BV',1040),(2205,'Brava','BR',1040),(2206,'Calheta de Sao Miguel','CS',1040),(2207,'Fogo','FO',1040),(2208,'Maio','MA',1040),(2209,'Mosteiros','MO',1040),(2210,'Paul','PA',1040),(2211,'Porto Novo','PN',1040),(2212,'Praia','PR',1040),(2213,'Ribeira Grande','RG',1040),(2214,'Sal','SL',1040),(2215,'Sao Domingos','SD',1040),(2216,'Sao Filipe','SF',1040),(2217,'Sao Nicolau','SN',1040),(2218,'Sao Vicente','SV',1040),(2219,'Tarrafal','TA',1040),(2220,'Ammochostos Magusa','04',1057),(2221,'Keryneia','06',1057),(2222,'Larnaka','03',1057),(2223,'Lefkosia','01',1057),(2224,'Lemesos','02',1057),(2225,'Pafos','05',1057),(2226,'JihoÄeský kraj','JC',1058),(2227,'Jihomoravský kraj','JM',1058),(2228,'Karlovarský kraj','KA',1058),(2229,'Královéhradecký kraj','KR',1058),(2230,'Liberecký kraj','LI',1058),(2231,'Moravskoslezský kraj','MO',1058),(2232,'Olomoucký kraj','OL',1058),(2233,'Pardubický kraj','PA',1058),(2234,'Plzeňský kraj','PL',1058),(2235,'Praha, hlavnà mÄ›sto','PR',1058),(2236,'StÅ™edoÄeský kraj','ST',1058),(2237,'Ústecký kraj','US',1058),(2238,'VysoÄina','VY',1058),(2239,'ZlÃnský kraj','ZL',1058),(2240,'Baden-Württemberg','BW',1082),(2241,'Bayern','BY',1082),(2242,'Bremen','HB',1082),(2243,'Hamburg','HH',1082),(2244,'Hessen','HE',1082),(2245,'Niedersachsen','NI',1082),(2246,'Nordrhein-Westfalen','NW',1082),(2247,'Rheinland-Pfalz','RP',1082),(2248,'Saarland','SL',1082),(2249,'Schleswig-Holstein','SH',1082),(2250,'Berlin','BE',1082),(2251,'Brandenburg','BB',1082),(2252,'Mecklenburg-Vorpommern','MV',1082),(2253,'Sachsen','SN',1082),(2254,'Sachsen-Anhalt','ST',1082),(2255,'Thüringen','TH',1082),(2256,'Ali Sabiah','AS',1060),(2257,'Dikhil','DI',1060),(2258,'Djibouti','DJ',1060),(2259,'Obock','OB',1060),(2260,'Tadjoura','TA',1060),(2261,'Frederiksberg','147',1059),(2262,'Copenhagen City','101',1059),(2263,'Copenhagen','015',1059),(2264,'Frederiksborg','020',1059),(2265,'Roskilde','025',1059),(2266,'Vestsjælland','030',1059),(2267,'Storstrøm','035',1059),(2268,'Bornholm','040',1059),(2269,'Fyn','042',1059),(2270,'South Jutland','050',1059),(2271,'Ribe','055',1059),(2272,'Vejle','060',1059),(2273,'Ringkjøbing','065',1059),(2274,'Ã…rhus','070',1059),(2275,'Viborg','076',1059),(2276,'North Jutland','080',1059),(2277,'Distrito Nacional (Santo Domingo)','01',1062),(2278,'Azua','02',1062),(2279,'Bahoruco','03',1062),(2280,'Barahona','04',1062),(2281,'Dajabón','05',1062),(2282,'Duarte','06',1062),(2283,'El Seybo [El Seibo]','08',1062),(2284,'Espaillat','09',1062),(2285,'Hato Mayor','30',1062),(2286,'Independencia','10',1062),(2287,'La Altagracia','11',1062),(2288,'La Estrelleta [Elias Pina]','07',1062),(2289,'La Romana','12',1062),(2290,'La Vega','13',1062),(2291,'Maroia Trinidad Sánchez','14',1062),(2292,'Monseñor Nouel','28',1062),(2293,'Monte Cristi','15',1062),(2294,'Monte Plata','29',1062),(2295,'Pedernales','16',1062),(2296,'Peravia','17',1062),(2297,'Puerto Plata','18',1062),(2298,'Salcedo','19',1062),(2299,'Samaná','20',1062),(2300,'San Cristóbal','21',1062),(2301,'San Pedro de MacorÃs','23',1062),(2302,'Sánchez RamÃrez','24',1062),(2303,'Santiago','25',1062),(2304,'Santiago RodrÃguez','26',1062),(2305,'Valverde','27',1062),(2306,'Adrar','01',1003),(2307,'Ain Defla','44',1003),(2308,'Ain Tmouchent','46',1003),(2309,'Alger','16',1003),(2310,'Annaba','23',1003),(2311,'Batna','05',1003),(2312,'Bechar','08',1003),(2313,'Bejaia','06',1003),(2314,'Biskra','07',1003),(2315,'Blida','09',1003),(2316,'Bordj Bou Arreridj','34',1003),(2317,'Bouira','10',1003),(2318,'Boumerdes','35',1003),(2319,'Chlef','02',1003),(2320,'Constantine','25',1003),(2321,'Djelfa','17',1003),(2322,'El Bayadh','32',1003),(2323,'El Oued','39',1003),(2324,'El Tarf','36',1003),(2325,'Ghardaia','47',1003),(2326,'Guelma','24',1003),(2327,'Illizi','33',1003),(2328,'Jijel','18',1003),(2329,'Khenchela','40',1003),(2330,'Laghouat','03',1003),(2331,'Mascara','29',1003),(2332,'Medea','26',1003),(2333,'Mila','43',1003),(2334,'Mostaganem','27',1003),(2335,'Msila','28',1003),(2336,'Naama','45',1003),(2337,'Oran','31',1003),(2338,'Ouargla','30',1003),(2339,'Oum el Bouaghi','04',1003),(2340,'Relizane','48',1003),(2341,'Saida','20',1003),(2342,'Setif','19',1003),(2343,'Sidi Bel Abbes','22',1003),(2344,'Skikda','21',1003),(2345,'Souk Ahras','41',1003),(2346,'Tamanghasset','11',1003),(2347,'Tebessa','12',1003),(2348,'Tiaret','14',1003),(2349,'Tindouf','37',1003),(2350,'Tipaza','42',1003),(2351,'Tissemsilt','38',1003),(2352,'Tizi Ouzou','15',1003),(2353,'Tlemcen','13',1003),(2354,'Azuay','A',1064),(2355,'Bolivar','B',1064),(2356,'Canar','F',1064),(2357,'Carchi','C',1064),(2358,'Cotopaxi','X',1064),(2359,'Chimborazo','H',1064),(2360,'El Oro','O',1064),(2361,'Esmeraldas','E',1064),(2362,'Galapagos','W',1064),(2363,'Guayas','G',1064),(2364,'Imbabura','I',1064),(2365,'Loja','L',1064),(2366,'Los Rios','R',1064),(2367,'Manabi','M',1064),(2368,'Morona-Santiago','S',1064),(2369,'Napo','N',1064),(2370,'Orellana','D',1064),(2371,'Pastaza','Y',1064),(2372,'Pichincha','P',1064),(2373,'Sucumbios','U',1064),(2374,'Tungurahua','T',1064),(2375,'Zamora-Chinchipe','Z',1064),(2376,'Harjumaa','37',1069),(2377,'Hiiumaa','39',1069),(2378,'Ida-Virumaa','44',1069),(2379,'Jõgevamaa','49',1069),(2380,'Järvamaa','51',1069),(2381,'Läänemaa','57',1069),(2382,'Lääne-Virumaa','59',1069),(2383,'Põlvamaa','65',1069),(2384,'Pärnumaa','67',1069),(2385,'Raplamaa','70',1069),(2386,'Saaremaa','74',1069),(2387,'Tartumaa','7B',1069),(2388,'Valgamaa','82',1069),(2389,'Viljandimaa','84',1069),(2390,'Võrumaa','86',1069),(2391,'Ad Daqahllyah','DK',1065),(2392,'Al Bahr al Ahmar','BA',1065),(2393,'Al Buhayrah','BH',1065),(2394,'Al Fayym','FYM',1065),(2395,'Al Gharbiyah','GH',1065),(2396,'Al Iskandarlyah','ALX',1065),(2397,'Al Isma illyah','IS',1065),(2398,'Al Jizah','GZ',1065),(2399,'Al Minuflyah','MNF',1065),(2400,'Al Minya','MN',1065),(2401,'Al Qahirah','C',1065),(2402,'Al Qalyublyah','KB',1065),(2403,'Al Wadi al Jadid','WAD',1065),(2404,'Ash Sharqiyah','SHR',1065),(2405,'As Suways','SUZ',1065),(2406,'Aswan','ASN',1065),(2407,'Asyut','AST',1065),(2408,'Bani Suwayf','BNS',1065),(2409,'Bur Sa\'id','PTS',1065),(2410,'Dumyat','DT',1065),(2411,'Janub Sina\'','JS',1065),(2412,'Kafr ash Shaykh','KFS',1065),(2413,'Matruh','MT',1065),(2414,'Qina','KN',1065),(2415,'Shamal Sina\'','SIN',1065),(2416,'Suhaj','SHG',1065),(2417,'Anseba','AN',1068),(2418,'Debub','DU',1068),(2419,'Debubawi Keyih Bahri [Debub-Keih-Bahri]','DK',1068),(2420,'Gash-Barka','GB',1068),(2421,'Maakel [Maekel]','MA',1068),(2422,'Semenawi Keyih Bahri [Semien-Keih-Bahri]','SK',1068),(2423,'Ãlava','VI',1198),(2424,'Albacete','AB',1198),(2425,'Alicante','A',1198),(2426,'AlmerÃa','AL',1198),(2427,'Asturias','O',1198),(2428,'Ãvila','AV',1198),(2429,'Badajoz','BA',1198),(2430,'Baleares','PM',1198),(2431,'Barcelona','B',1198),(2432,'Burgos','BU',1198),(2433,'Cáceres','CC',1198),(2434,'Cádiz','CA',1198),(2435,'Cantabria','S',1198),(2436,'Castellón','CS',1198),(2437,'Ciudad Real','CR',1198),(2438,'Cuenca','CU',1198),(2439,'Girona [Gerona]','GE',1198),(2440,'Granada','GR',1198),(2441,'Guadalajara','GU',1198),(2442,'Guipúzcoa','SS',1198),(2443,'Huelva','H',1198),(2444,'Huesca','HU',1198),(2445,'Jaén','J',1198),(2446,'La Coruña','C',1198),(2447,'La Rioja','LO',1198),(2448,'Las Palmas','GC',1198),(2449,'León','LE',1198),(2450,'Lleida [Lérida]','L',1198),(2451,'Lugo','LU',1198),(2452,'Madrid','M',1198),(2453,'Málaga','MA',1198),(2454,'Murcia','MU',1198),(2455,'Navarra','NA',1198),(2456,'Ourense','OR',1198),(2457,'Palencia','P',1198),(2458,'Pontevedra','PO',1198),(2459,'Salamanca','SA',1198),(2460,'Santa Cruz de Tenerife','TF',1198),(2461,'Segovia','SG',1198),(2462,'Sevilla','SE',1198),(2463,'Soria','SO',1198),(2464,'Tarragona','T',1198),(2465,'Teruel','TE',1198),(2466,'Valencia','V',1198),(2467,'Valladolid','VA',1198),(2468,'Vizcaya','BI',1198),(2469,'Zamora','ZA',1198),(2470,'Zaragoza','Z',1198),(2471,'Ceuta','CE',1198),(2472,'Melilla','ML',1198),(2473,'Addis Ababa','AA',1070),(2474,'Dire Dawa','DD',1070),(2475,'Afar','AF',1070),(2476,'Amara','AM',1070),(2477,'Benshangul-Gumaz','BE',1070),(2478,'Gambela Peoples','GA',1070),(2479,'Harari People','HA',1070),(2480,'Oromia','OR',1070),(2481,'Somali','SO',1070),(2482,'Southern Nations, Nationalities and Peoples','SN',1070),(2483,'Tigrai','TI',1070),(2490,'Eastern','E',1074),(2491,'Northern','N',1074),(2492,'Western','W',1074),(2493,'Rotuma','R',1074),(2494,'Chuuk','TRK',1141),(2495,'Kosrae','KSA',1141),(2496,'Pohnpei','PNI',1141),(2497,'Yap','YAP',1141),(2498,'Ain','01',1076),(2499,'Aisne','02',1076),(2500,'Allier','03',1076),(2501,'Alpes-de-Haute-Provence','04',1076),(2502,'Alpes-Maritimes','06',1076),(2503,'Ardèche','07',1076),(2504,'Ardennes','08',1076),(2505,'Ariège','09',1076),(2506,'Aube','10',1076),(2507,'Aude','11',1076),(2508,'Aveyron','12',1076),(2509,'Bas-Rhin','67',1076),(2510,'Bouches-du-Rhône','13',1076),(2511,'Calvados','14',1076),(2512,'Cantal','15',1076),(2513,'Charente','16',1076),(2514,'Charente-Maritime','17',1076),(2515,'Cher','18',1076),(2516,'Corrèze','19',1076),(2517,'Corse-du-Sud','20A',1076),(2518,'Côte-d\'Or','21',1076),(2519,'Côtes-d\'Armor','22',1076),(2520,'Creuse','23',1076),(2521,'Deux-Sèvres','79',1076),(2522,'Dordogne','24',1076),(2523,'Doubs','25',1076),(2524,'Drôme','26',1076),(2525,'Essonne','91',1076),(2526,'Eure','27',1076),(2527,'Eure-et-Loir','28',1076),(2528,'Finistère','29',1076),(2529,'Gard','30',1076),(2530,'Gers','32',1076),(2531,'Gironde','33',1076),(2532,'Haut-Rhin','68',1076),(2533,'Haute-Corse','20B',1076),(2534,'Haute-Garonne','31',1076),(2535,'Haute-Loire','43',1076),(2536,'Haute-Saône','70',1076),(2537,'Haute-Savoie','74',1076),(2538,'Haute-Vienne','87',1076),(2539,'Hautes-Alpes','05',1076),(2540,'Hautes-Pyrénées','65',1076),(2541,'Hauts-de-Seine','92',1076),(2542,'Hérault','34',1076),(2543,'Indre','36',1076),(2544,'Ille-et-Vilaine','35',1076),(2545,'Indre-et-Loire','37',1076),(2546,'Isère','38',1076),(2547,'Landes','40',1076),(2548,'Loir-et-Cher','41',1076),(2549,'Loire','42',1076),(2550,'Loire-Atlantique','44',1076),(2551,'Loiret','45',1076),(2552,'Lot','46',1076),(2553,'Lot-et-Garonne','47',1076),(2554,'Lozère','48',1076),(2555,'Maine-et-Loire','49',1076),(2556,'Manche','50',1076),(2557,'Marne','51',1076),(2558,'Mayenne','53',1076),(2559,'Meurthe-et-Moselle','54',1076),(2560,'Meuse','55',1076),(2561,'Morbihan','56',1076),(2562,'Moselle','57',1076),(2563,'Nièvre','58',1076),(2564,'Nord','59',1076),(2565,'Oise','60',1076),(2566,'Orne','61',1076),(2567,'Paris','75',1076),(2568,'Pas-de-Calais','62',1076),(2569,'Puy-de-Dôme','63',1076),(2570,'Pyrénées-Atlantiques','64',1076),(2571,'Pyrénées-Orientales','66',1076),(2572,'Rhône','69',1076),(2573,'Saône-et-Loire','71',1076),(2574,'Sarthe','72',1076),(2575,'Savoie','73',1076),(2576,'Seine-et-Marne','77',1076),(2577,'Seine-Maritime','76',1076),(2578,'Seine-Saint-Denis','93',1076),(2579,'Somme','80',1076),(2580,'Tarn','81',1076),(2581,'Tarn-et-Garonne','82',1076),(2582,'Val d\'Oise','95',1076),(2583,'Territoire de Belfort','90',1076),(2584,'Val-de-Marne','94',1076),(2585,'Var','83',1076),(2586,'Vaucluse','84',1076),(2587,'Vendée','85',1076),(2588,'Vienne','86',1076),(2589,'Vosges','88',1076),(2590,'Yonne','89',1076),(2591,'Yvelines','78',1076),(2592,'Aberdeen City','ABE',1226),(2593,'Aberdeenshire','ABD',1226),(2594,'Angus','ANS',1226),(2595,'Co Antrim','ANT',1226),(2597,'Argyll and Bute','AGB',1226),(2598,'Co Armagh','ARM',1226),(2606,'Bedfordshire','BDF',1226),(2612,'Gwent','BGW',1226),(2620,'Bristol, City of','BST',1226),(2622,'Buckinghamshire','BKM',1226),(2626,'Cambridgeshire','CAM',1226),(2634,'Cheshire','CHS',1226),(2635,'Clackmannanshire','CLK',1226),(2639,'Cornwall','CON',1226),(2643,'Cumbria','CMA',1226),(2647,'Derbyshire','DBY',1226),(2648,'Co Londonderry','DRY',1226),(2649,'Devon','DEV',1226),(2651,'Dorset','DOR',1226),(2652,'Co Down','DOW',1226),(2654,'Dumfries and Galloway','DGY',1226),(2655,'Dundee City','DND',1226),(2657,'County Durham','DUR',1226),(2659,'East Ayrshire','EAY',1226),(2660,'East Dunbartonshire','EDU',1226),(2661,'East Lothian','ELN',1226),(2662,'East Renfrewshire','ERW',1226),(2663,'East Riding of Yorkshire','ERY',1226),(2664,'East Sussex','ESX',1226),(2665,'Edinburgh, City of','EDH',1226),(2666,'Na h-Eileanan Siar','ELS',1226),(2668,'Essex','ESS',1226),(2669,'Falkirk','FAL',1226),(2670,'Co Fermanagh','FER',1226),(2671,'Fife','FIF',1226),(2674,'Glasgow City','GLG',1226),(2675,'Gloucestershire','GLS',1226),(2678,'Gwynedd','GWN',1226),(2682,'Hampshire','HAM',1226),(2687,'Herefordshire','HEF',1226),(2688,'Hertfordshire','HRT',1226),(2689,'Highland','HED',1226),(2692,'Inverclyde','IVC',1226),(2694,'Isle of Wight','IOW',1226),(2699,'Kent','KEN',1226),(2705,'Lancashire','LAN',1226),(2709,'Leicestershire','LEC',1226),(2712,'Lincolnshire','LIN',1226),(2723,'Midlothian','MLN',1226),(2726,'Moray','MRY',1226),(2734,'Norfolk','NFK',1226),(2735,'North Ayrshire','NAY',1226),(2738,'North Lanarkshire','NLK',1226),(2742,'North Yorkshire','NYK',1226),(2743,'Northamptonshire','NTH',1226),(2744,'Northumberland','NBL',1226),(2746,'Nottinghamshire','NTT',1226),(2747,'Oldham','OLD',1226),(2748,'Omagh','OMH',1226),(2749,'Orkney Islands','ORR',1226),(2750,'Oxfordshire','OXF',1226),(2752,'Perth and Kinross','PKN',1226),(2757,'Powys','POW',1226),(2761,'Renfrewshire','RFW',1226),(2766,'Rutland','RUT',1226),(2770,'Scottish Borders','SCB',1226),(2773,'Shetland Islands','ZET',1226),(2774,'Shropshire','SHR',1226),(2777,'Somerset','SOM',1226),(2778,'South Ayrshire','SAY',1226),(2779,'South Gloucestershire','SGC',1226),(2780,'South Lanarkshire','SLK',1226),(2785,'Staffordshire','STS',1226),(2786,'Stirling','STG',1226),(2791,'Suffolk','SFK',1226),(2793,'Surrey','SRY',1226),(2804,'Mid Glamorgan','VGL',1226),(2811,'Warwickshire','WAR',1226),(2813,'West Dunbartonshire','WDU',1226),(2814,'West Lothian','WLN',1226),(2815,'West Sussex','WSX',1226),(2818,'Wiltshire','WIL',1226),(2823,'Worcestershire','WOR',1226),(2826,'Ashanti','AH',1083),(2827,'Brong-Ahafo','BA',1083),(2828,'Greater Accra','AA',1083),(2829,'Upper East','UE',1083),(2830,'Upper West','UW',1083),(2831,'Volta','TV',1083),(2832,'Banjul','B',1213),(2833,'Lower River','L',1213),(2834,'MacCarthy Island','M',1213),(2835,'North Bank','N',1213),(2836,'Upper River','U',1213),(2837,'Beyla','BE',1091),(2838,'Boffa','BF',1091),(2839,'Boke','BK',1091),(2840,'Coyah','CO',1091),(2841,'Dabola','DB',1091),(2842,'Dalaba','DL',1091),(2843,'Dinguiraye','DI',1091),(2844,'Dubreka','DU',1091),(2845,'Faranah','FA',1091),(2846,'Forecariah','FO',1091),(2847,'Fria','FR',1091),(2848,'Gaoual','GA',1091),(2849,'Guekedou','GU',1091),(2850,'Kankan','KA',1091),(2851,'Kerouane','KE',1091),(2852,'Kindia','KD',1091),(2853,'Kissidougou','KS',1091),(2854,'Koubia','KB',1091),(2855,'Koundara','KN',1091),(2856,'Kouroussa','KO',1091),(2857,'Labe','LA',1091),(2858,'Lelouma','LE',1091),(2859,'Lola','LO',1091),(2860,'Macenta','MC',1091),(2861,'Mali','ML',1091),(2862,'Mamou','MM',1091),(2863,'Mandiana','MD',1091),(2864,'Nzerekore','NZ',1091),(2865,'Pita','PI',1091),(2866,'Siguiri','SI',1091),(2867,'Telimele','TE',1091),(2868,'Tougue','TO',1091),(2869,'Yomou','YO',1091),(2870,'Region Continental','C',1067),(2871,'Region Insular','I',1067),(2872,'Annobon','AN',1067),(2873,'Bioko Norte','BN',1067),(2874,'Bioko Sur','BS',1067),(2875,'Centro Sur','CS',1067),(2876,'Kie-Ntem','KN',1067),(2877,'Litoral','LI',1067),(2878,'Wele-Nzas','WN',1067),(2879,'Achaïa','13',1085),(2880,'Aitolia-Akarnania','01',1085),(2881,'Argolis','11',1085),(2882,'Arkadia','12',1085),(2883,'Arta','31',1085),(2884,'Attiki','A1',1085),(2885,'Chalkidiki','64',1085),(2886,'Chania','94',1085),(2887,'Chios','85',1085),(2888,'Dodekanisos','81',1085),(2889,'Drama','52',1085),(2890,'Evros','71',1085),(2891,'Evrytania','05',1085),(2892,'Evvoia','04',1085),(2893,'Florina','63',1085),(2894,'Fokis','07',1085),(2895,'Fthiotis','06',1085),(2896,'Grevena','51',1085),(2897,'Ileia','14',1085),(2898,'Imathia','53',1085),(2899,'Ioannina','33',1085),(2900,'Irakleion','91',1085),(2901,'Karditsa','41',1085),(2902,'Kastoria','56',1085),(2903,'Kavalla','55',1085),(2904,'Kefallinia','23',1085),(2905,'Kerkyra','22',1085),(2906,'Kilkis','57',1085),(2907,'Korinthia','15',1085),(2908,'Kozani','58',1085),(2909,'Kyklades','82',1085),(2910,'Lakonia','16',1085),(2911,'Larisa','42',1085),(2912,'Lasithion','92',1085),(2913,'Lefkas','24',1085),(2914,'Lesvos','83',1085),(2915,'Magnisia','43',1085),(2916,'Messinia','17',1085),(2917,'Pella','59',1085),(2918,'Preveza','34',1085),(2919,'Rethymnon','93',1085),(2920,'Rodopi','73',1085),(2921,'Samos','84',1085),(2922,'Serrai','62',1085),(2923,'Thesprotia','32',1085),(2924,'Thessaloniki','54',1085),(2925,'Trikala','44',1085),(2926,'Voiotia','03',1085),(2927,'Xanthi','72',1085),(2928,'Zakynthos','21',1085),(2929,'Agio Oros','69',1085),(2930,'Alta Verapaz','AV',1090),(2931,'Baja Verapaz','BV',1090),(2932,'Chimaltenango','CM',1090),(2933,'Chiquimula','CQ',1090),(2934,'El Progreso','PR',1090),(2935,'Escuintla','ES',1090),(2936,'Guatemala','GU',1090),(2937,'Huehuetenango','HU',1090),(2938,'Izabal','IZ',1090),(2939,'Jalapa','JA',1090),(2940,'Jutiapa','JU',1090),(2941,'Peten','PE',1090),(2942,'Quetzaltenango','QZ',1090),(2943,'Quiche','QC',1090),(2944,'Retalhuleu','RE',1090),(2945,'Sacatepequez','SA',1090),(2946,'San Marcos','SM',1090),(2947,'Santa Rosa','SR',1090),(2948,'Sololá','SO',1090),(2949,'Suchitepequez','SU',1090),(2950,'Totonicapan','TO',1090),(2951,'Zacapa','ZA',1090),(2952,'Bissau','BS',1092),(2953,'Bafata','BA',1092),(2954,'Biombo','BM',1092),(2955,'Bolama','BL',1092),(2956,'Cacheu','CA',1092),(2957,'Gabu','GA',1092),(2958,'Oio','OI',1092),(2959,'Quloara','QU',1092),(2960,'Tombali S','TO',1092),(2961,'Barima-Waini','BA',1093),(2962,'Cuyuni-Mazaruni','CU',1093),(2963,'Demerara-Mahaica','DE',1093),(2964,'East Berbice-Corentyne','EB',1093),(2965,'Essequibo Islands-West Demerara','ES',1093),(2966,'Mahaica-Berbice','MA',1093),(2967,'Pomeroon-Supenaam','PM',1093),(2968,'Potaro-Siparuni','PT',1093),(2969,'Upper Demerara-Berbice','UD',1093),(2970,'Upper Takutu-Upper Essequibo','UT',1093),(2971,'Atlantida','AT',1097),(2972,'Colon','CL',1097),(2973,'Comayagua','CM',1097),(2974,'Copan','CP',1097),(2975,'Cortes','CR',1097),(2976,'Choluteca','CH',1097),(2977,'El Paraiso','EP',1097),(2978,'Francisco Morazan','FM',1097),(2979,'Gracias a Dios','GD',1097),(2980,'Intibuca','IN',1097),(2981,'Islas de la Bahia','IB',1097),(2982,'Lempira','LE',1097),(2983,'Ocotepeque','OC',1097),(2984,'Olancho','OL',1097),(2985,'Santa Barbara','SB',1097),(2986,'Valle','VA',1097),(2987,'Yoro','YO',1097),(2988,'Bjelovarsko-bilogorska zupanija','07',1055),(2989,'Brodsko-posavska zupanija','12',1055),(2990,'Dubrovacko-neretvanska zupanija','19',1055),(2991,'Istarska zupanija','18',1055),(2992,'Karlovacka zupanija','04',1055),(2993,'Koprivnickco-krizevacka zupanija','06',1055),(2994,'Krapinako-zagorska zupanija','02',1055),(2995,'Licko-senjska zupanija','09',1055),(2996,'Medimurska zupanija','20',1055),(2997,'Osjecko-baranjska zupanija','14',1055),(2998,'Pozesko-slavonska zupanija','11',1055),(2999,'Primorsko-goranska zupanija','08',1055),(3000,'Sisacko-moelavacka Iupanija','03',1055),(3001,'Splitako-dalmatinska zupanija','17',1055),(3002,'Sibenako-kninska zupanija','15',1055),(3003,'Varaidinska zupanija','05',1055),(3004,'VirovitiEko-podravska zupanija','10',1055),(3005,'VuRovarako-srijemska zupanija','16',1055),(3006,'Zadaraka','13',1055),(3007,'Zagrebacka zupanija','01',1055),(3008,'Grande-Anse','GA',1094),(3009,'Nord-Est','NE',1094),(3010,'Nord-Ouest','NO',1094),(3011,'Ouest','OU',1094),(3012,'Sud','SD',1094),(3013,'Sud-Est','SE',1094),(3014,'Budapest','BU',1099),(3015,'Bács-Kiskun','BK',1099),(3016,'Baranya','BA',1099),(3017,'Békés','BE',1099),(3018,'Borsod-Abaúj-Zemplén','BZ',1099),(3019,'Csongrád','CS',1099),(3020,'Fejér','FE',1099),(3021,'GyÅ‘r-Moson-Sopron','GS',1099),(3022,'Hajdu-Bihar','HB',1099),(3023,'Heves','HE',1099),(3024,'Jász-Nagykun-Szolnok','JN',1099),(3025,'Komárom-Esztergom','KE',1099),(3026,'Nográd','NO',1099),(3027,'Pest','PE',1099),(3028,'Somogy','SO',1099),(3029,'Szabolcs-Szatmár-Bereg','SZ',1099),(3030,'Tolna','TO',1099),(3031,'Vas','VA',1099),(3032,'Veszprém','VE',1099),(3033,'Zala','ZA',1099),(3034,'Békéscsaba','BC',1099),(3035,'Debrecen','DE',1099),(3036,'Dunaújváros','DU',1099),(3037,'Eger','EG',1099),(3038,'GyÅ‘r','GY',1099),(3039,'HódmezÅ‘vásárhely','HV',1099),(3040,'Kaposvár','KV',1099),(3041,'Kecskemét','KM',1099),(3042,'Miskolc','MI',1099),(3043,'Nagykanizsa','NK',1099),(3044,'Nyiregyháza','NY',1099),(3045,'Pécs','PS',1099),(3046,'Salgótarján','ST',1099),(3047,'Sopron','SN',1099),(3048,'Szeged','SD',1099),(3049,'Székesfehérvár','SF',1099),(3050,'Szekszárd','SS',1099),(3051,'Szolnok','SK',1099),(3052,'Szombathely','SH',1099),(3053,'Tatabánya','TB',1099),(3054,'Zalaegerszeg','ZE',1099),(3055,'Bali','BA',1102),(3056,'Kepulauan Bangka Belitung','BB',1102),(3057,'Banten','BT',1102),(3058,'Bengkulu','BE',1102),(3059,'Gorontalo','GO',1102),(3060,'Papua Barat','PB',1102),(3061,'Jambi','JA',1102),(3062,'Jawa Barat','JB',1102),(3063,'Jawa Tengah','JT',1102),(3064,'Jawa Timur','JI',1102),(3065,'Kalimantan Barat','KB',1102),(3066,'Kalimantan Timur','KI',1102),(3067,'Kalimantan Selatan','KS',1102),(3068,'Kepulauan Riau','KR',1102),(3069,'Lampung','LA',1102),(3070,'Maluku','MA',1102),(3071,'Maluku Utara','MU',1102),(3072,'Nusa Tenggara Barat','NB',1102),(3073,'Nusa Tenggara Timur','NT',1102),(3074,'Papua','PA',1102),(3075,'Riau','RI',1102),(3076,'Sulawesi Selatan','SN',1102),(3077,'Sulawesi Tengah','ST',1102),(3078,'Sulawesi Tenggara','SG',1102),(3079,'Sulawesi Utara','SA',1102),(3080,'Sumatra Barat','SB',1102),(3081,'Sumatra Selatan','SS',1102),(3082,'Sumatera Utara','SU',1102),(3083,'DKI Jakarta','JK',1102),(3084,'Aceh','AC',1102),(3085,'DI Yogyakarta','YO',1102),(3086,'Cork','C',1105),(3087,'Clare','CE',1105),(3088,'Cavan','CN',1105),(3089,'Carlow','CW',1105),(3090,'Dublin','D',1105),(3091,'Donegal','DL',1105),(3092,'Galway','G',1105),(3093,'Kildare','KE',1105),(3094,'Kilkenny','KK',1105),(3095,'Kerry','KY',1105),(3096,'Longford','LD',1105),(3097,'Louth','LH',1105),(3098,'Limerick','LK',1105),(3099,'Leitrim','LM',1105),(3100,'Laois','LS',1105),(3101,'Meath','MH',1105),(3102,'Monaghan','MN',1105),(3103,'Mayo','MO',1105),(3104,'Offaly','OY',1105),(3105,'Roscommon','RN',1105),(3106,'Sligo','SO',1105),(3107,'Tipperary','TA',1105),(3108,'Waterford','WD',1105),(3109,'Westmeath','WH',1105),(3110,'Wicklow','WW',1105),(3111,'Wexford','WX',1105),(3112,'HaDarom','D',1106),(3113,'HaMerkaz','M',1106),(3114,'HaZafon','Z',1106),(3115,'Haifa','HA',1106),(3116,'Tel-Aviv','TA',1106),(3117,'Jerusalem','JM',1106),(3118,'Al Anbar','AN',1104),(3119,'Al Ba,rah','BA',1104),(3120,'Al Muthanna','MU',1104),(3121,'Al Qadisiyah','QA',1104),(3122,'An Najef','NA',1104),(3123,'Arbil','AR',1104),(3124,'As Sulaymaniyah','SW',1104),(3125,'At Ta\'mim','TS',1104),(3126,'Babil','BB',1104),(3127,'Baghdad','BG',1104),(3128,'Dahuk','DA',1104),(3129,'Dhi Qar','DQ',1104),(3130,'Diyala','DI',1104),(3131,'Karbala\'','KA',1104),(3132,'Maysan','MA',1104),(3133,'Ninawa','NI',1104),(3134,'Salah ad Din','SD',1104),(3135,'Wasit','WA',1104),(3136,'Ardabil','03',1103),(3137,'Azarbayjan-e Gharbi','02',1103),(3138,'Azarbayjan-e Sharqi','01',1103),(3139,'Bushehr','06',1103),(3140,'Chahar Mahall va Bakhtiari','08',1103),(3141,'Esfahan','04',1103),(3142,'Fars','14',1103),(3143,'Gilan','19',1103),(3144,'Golestan','27',1103),(3145,'Hamadan','24',1103),(3146,'Hormozgan','23',1103),(3147,'Iiam','05',1103),(3148,'Kerman','15',1103),(3149,'Kermanshah','17',1103),(3150,'Khorasan','09',1103),(3151,'Khuzestan','10',1103),(3152,'Kohjiluyeh va Buyer Ahmad','18',1103),(3153,'Kordestan','16',1103),(3154,'Lorestan','20',1103),(3155,'Markazi','22',1103),(3156,'Mazandaran','21',1103),(3157,'Qazvin','28',1103),(3158,'Qom','26',1103),(3159,'Semnan','12',1103),(3160,'Sistan va Baluchestan','13',1103),(3161,'Tehran','07',1103),(3162,'Yazd','25',1103),(3163,'Zanjan','11',1103),(3164,'Austurland','7',1100),(3165,'Hofuoborgarsvaeoi utan Reykjavikur','1',1100),(3166,'Norourland eystra','6',1100),(3167,'Norourland vestra','5',1100),(3168,'Reykjavik','0',1100),(3169,'Suourland','8',1100),(3170,'Suournes','2',1100),(3171,'Vestfirolr','4',1100),(3172,'Vesturland','3',1100),(3173,'Agrigento','AG',1107),(3174,'Alessandria','AL',1107),(3175,'Ancona','AN',1107),(3176,'Aosta','AO',1107),(3177,'Arezzo','AR',1107),(3178,'Ascoli Piceno','AP',1107),(3179,'Asti','AT',1107),(3180,'Avellino','AV',1107),(3181,'Bari','BA',1107),(3182,'Belluno','BL',1107),(3183,'Benevento','BN',1107),(3184,'Bergamo','BG',1107),(3185,'Biella','BI',1107),(3186,'Bologna','BO',1107),(3187,'Bolzano','BZ',1107),(3188,'Brescia','BS',1107),(3189,'Brindisi','BR',1107),(3190,'Cagliari','CA',1107),(3191,'Caltanissetta','CL',1107),(3192,'Campobasso','CB',1107),(3193,'Caserta','CE',1107),(3194,'Catania','CT',1107),(3195,'Catanzaro','CZ',1107),(3196,'Chieti','CH',1107),(3197,'Como','CO',1107),(3198,'Cosenza','CS',1107),(3199,'Cremona','CR',1107),(3200,'Crotone','KR',1107),(3201,'Cuneo','CN',1107),(3202,'Enna','EN',1107),(3203,'Ferrara','FE',1107),(3204,'Firenze','FI',1107),(3205,'Foggia','FG',1107),(3206,'Forlì-Cesena','FC',1107),(3207,'Frosinone','FR',1107),(3208,'Genova','GE',1107),(3209,'Gorizia','GO',1107),(3210,'Grosseto','GR',1107),(3211,'Imperia','IM',1107),(3212,'Isernia','IS',1107),(3213,'L\'Aquila','AQ',1107),(3214,'La Spezia','SP',1107),(3215,'Latina','LT',1107),(3216,'Lecce','LE',1107),(3217,'Lecco','LC',1107),(3218,'Livorno','LI',1107),(3219,'Lodi','LO',1107),(3220,'Lucca','LU',1107),(3221,'Macerata','MC',1107),(3222,'Mantova','MN',1107),(3223,'Massa-Carrara','MS',1107),(3224,'Matera','MT',1107),(3225,'Messina','ME',1107),(3226,'Milano','MI',1107),(3227,'Modena','MO',1107),(3228,'Napoli','NA',1107),(3229,'Novara','NO',1107),(3230,'Nuoro','NU',1107),(3231,'Oristano','OR',1107),(3232,'Padova','PD',1107),(3233,'Palermo','PA',1107),(3234,'Parma','PR',1107),(3235,'Pavia','PV',1107),(3236,'Perugia','PG',1107),(3237,'Pesaro e Urbino','PU',1107),(3238,'Pescara','PE',1107),(3239,'Piacenza','PC',1107),(3240,'Pisa','PI',1107),(3241,'Pistoia','PT',1107),(3242,'Pordenone','PN',1107),(3243,'Potenza','PZ',1107),(3244,'Prato','PO',1107),(3245,'Ragusa','RG',1107),(3246,'Ravenna','RA',1107),(3247,'Reggio Calabria','RC',1107),(3248,'Reggio Emilia','RE',1107),(3249,'Rieti','RI',1107),(3250,'Rimini','RN',1107),(3251,'Roma','RM',1107),(3252,'Rovigo','RO',1107),(3253,'Salerno','SA',1107),(3254,'Sassari','SS',1107),(3255,'Savona','SV',1107),(3256,'Siena','SI',1107),(3257,'Siracusa','SR',1107),(3258,'Sondrio','SO',1107),(3259,'Taranto','TA',1107),(3260,'Teramo','TE',1107),(3261,'Terni','TR',1107),(3262,'Torino','TO',1107),(3263,'Trapani','TP',1107),(3264,'Trento','TN',1107),(3265,'Treviso','TV',1107),(3266,'Trieste','TS',1107),(3267,'Udine','UD',1107),(3268,'Varese','VA',1107),(3269,'Venezia','VE',1107),(3270,'Verbano-Cusio-Ossola','VB',1107),(3271,'Vercelli','VC',1107),(3272,'Verona','VR',1107),(3273,'Vibo Valentia','VV',1107),(3274,'Vicenza','VI',1107),(3275,'Viterbo','VT',1107),(3276,'Aichi','23',1109),(3277,'Akita','05',1109),(3278,'Aomori','02',1109),(3279,'Chiba','12',1109),(3280,'Ehime','38',1109),(3281,'Fukui','18',1109),(3282,'Fukuoka','40',1109),(3283,'Fukusima','07',1109),(3284,'Gifu','21',1109),(3285,'Gunma','10',1109),(3286,'Hiroshima','34',1109),(3287,'Hokkaido','01',1109),(3288,'Hyogo','28',1109),(3289,'Ibaraki','08',1109),(3290,'Ishikawa','17',1109),(3291,'Iwate','03',1109),(3292,'Kagawa','37',1109),(3293,'Kagoshima','46',1109),(3294,'Kanagawa','14',1109),(3295,'Kochi','39',1109),(3296,'Kumamoto','43',1109),(3297,'Kyoto','26',1109),(3298,'Mie','24',1109),(3299,'Miyagi','04',1109),(3300,'Miyazaki','45',1109),(3301,'Nagano','20',1109),(3302,'Nagasaki','42',1109),(3303,'Nara','29',1109),(3304,'Niigata','15',1109),(3305,'Oita','44',1109),(3306,'Okayama','33',1109),(3307,'Okinawa','47',1109),(3308,'Osaka','27',1109),(3309,'Saga','41',1109),(3310,'Saitama','11',1109),(3311,'Shiga','25',1109),(3312,'Shimane','32',1109),(3313,'Shizuoka','22',1109),(3314,'Tochigi','09',1109),(3315,'Tokushima','36',1109),(3316,'Tokyo','13',1109),(3317,'Tottori','31',1109),(3318,'Toyama','16',1109),(3319,'Wakayama','30',1109),(3320,'Yamagata','06',1109),(3321,'Yamaguchi','35',1109),(3322,'Yamanashi','19',1109),(3323,'Clarendon','CN',1108),(3324,'Hanover','HR',1108),(3325,'Kingston','KN',1108),(3326,'Portland','PD',1108),(3327,'Saint Andrew','AW',1108),(3328,'Saint Ann','AN',1108),(3329,'Saint Catherine','CE',1108),(3330,'Saint Elizabeth','EH',1108),(3331,'Saint James','JS',1108),(3332,'Saint Mary','MY',1108),(3333,'Saint Thomas','TS',1108),(3334,'Trelawny','TY',1108),(3335,'Westmoreland','WD',1108),(3336,'Ajln','AJ',1110),(3337,'Al \'Aqaba','AQ',1110),(3338,'Al Balqa\'','BA',1110),(3339,'Al Karak','KA',1110),(3340,'Al Mafraq','MA',1110),(3341,'Amman','AM',1110),(3342,'At Tafilah','AT',1110),(3343,'Az Zarga','AZ',1110),(3344,'Irbid','JR',1110),(3345,'Jarash','JA',1110),(3346,'Ma\'an','MN',1110),(3347,'Madaba','MD',1110),(3353,'Bishkek','GB',1117),(3354,'Batken','B',1117),(3355,'Chu','C',1117),(3356,'Jalal-Abad','J',1117),(3357,'Naryn','N',1117),(3358,'Osh','O',1117),(3359,'Talas','T',1117),(3360,'Ysyk-Kol','Y',1117),(3361,'Krong Kaeb','23',1037),(3362,'Krong Pailin','24',1037),(3363,'Xrong Preah Sihanouk','18',1037),(3364,'Phnom Penh','12',1037),(3365,'Baat Dambang','2',1037),(3366,'Banteay Mean Chey','1',1037),(3367,'Rampong Chaam','3',1037),(3368,'Kampong Chhnang','4',1037),(3369,'Kampong Spueu','5',1037),(3370,'Kampong Thum','6',1037),(3371,'Kampot','7',1037),(3372,'Kandaal','8',1037),(3373,'Kach Kong','9',1037),(3374,'Krachoh','10',1037),(3375,'Mondol Kiri','11',1037),(3376,'Otdar Mean Chey','22',1037),(3377,'Pousaat','15',1037),(3378,'Preah Vihear','13',1037),(3379,'Prey Veaeng','14',1037),(3380,'Rotanak Kiri','16',1037),(3381,'Siem Reab','17',1037),(3382,'Stueng Traeng','19',1037),(3383,'Svaay Rieng','20',1037),(3384,'Taakaev','21',1037),(3385,'Gilbert Islands','G',1113),(3386,'Line Islands','L',1113),(3387,'Phoenix Islands','P',1113),(3388,'Anjouan Ndzouani','A',1049),(3389,'Grande Comore Ngazidja','G',1049),(3390,'Moheli Moili','M',1049),(3391,'Kaesong-si','KAE',1114),(3392,'Nampo-si','NAM',1114),(3393,'Pyongyang-ai','PYO',1114),(3394,'Chagang-do','CHA',1114),(3395,'Hamgyongbuk-do','HAB',1114),(3396,'Hamgyongnam-do','HAN',1114),(3397,'Hwanghaebuk-do','HWB',1114),(3398,'Hwanghaenam-do','HWN',1114),(3399,'Kangwon-do','KAN',1114),(3400,'Pyonganbuk-do','PYB',1114),(3401,'Pyongannam-do','PYN',1114),(3402,'Yanggang-do','YAN',1114),(3403,'Najin Sonbong-si','NAJ',1114),(3404,'Seoul Teugbyeolsi','11',1115),(3405,'Busan Gwang\'yeogsi','26',1115),(3406,'Daegu Gwang\'yeogsi','27',1115),(3407,'Daejeon Gwang\'yeogsi','30',1115),(3408,'Gwangju Gwang\'yeogsi','29',1115),(3409,'Incheon Gwang\'yeogsi','28',1115),(3410,'Ulsan Gwang\'yeogsi','31',1115),(3411,'Chungcheongbugdo','43',1115),(3412,'Chungcheongnamdo','44',1115),(3413,'Gang\'weondo','42',1115),(3414,'Gyeonggido','41',1115),(3415,'Gyeongsangbugdo','47',1115),(3416,'Gyeongsangnamdo','48',1115),(3417,'Jejudo','49',1115),(3418,'Jeonrabugdo','45',1115),(3419,'Jeonranamdo','46',1115),(3420,'Al Ahmadi','AH',1116),(3421,'Al Farwanlyah','FA',1116),(3422,'Al Jahrah','JA',1116),(3423,'Al Kuwayt','KU',1116),(3424,'Hawalli','HA',1116),(3425,'Almaty','ALA',1111),(3426,'Astana','AST',1111),(3427,'Almaty oblysy','ALM',1111),(3428,'Aqmola oblysy','AKM',1111),(3429,'Aqtobe oblysy','AKT',1111),(3430,'Atyrau oblyfiy','ATY',1111),(3431,'Batys Quzaqstan oblysy','ZAP',1111),(3432,'Mangghystau oblysy','MAN',1111),(3433,'Ongtustik Quzaqstan oblysy','YUZ',1111),(3434,'Pavlodar oblysy','PAV',1111),(3435,'Qaraghandy oblysy','KAR',1111),(3436,'Qostanay oblysy','KUS',1111),(3437,'Qyzylorda oblysy','KZY',1111),(3438,'Shyghys Quzaqstan oblysy','VOS',1111),(3439,'Soltustik Quzaqstan oblysy','SEV',1111),(3440,'Zhambyl oblysy Zhambylskaya oblast\'','ZHA',1111),(3441,'Vientiane','VT',1118),(3442,'Attapu','AT',1118),(3443,'Bokeo','BK',1118),(3444,'Bolikhamxai','BL',1118),(3445,'Champasak','CH',1118),(3446,'Houaphan','HO',1118),(3447,'Khammouan','KH',1118),(3448,'Louang Namtha','LM',1118),(3449,'Louangphabang','LP',1118),(3450,'Oudomxai','OU',1118),(3451,'Phongsali','PH',1118),(3452,'Salavan','SL',1118),(3453,'Savannakhet','SV',1118),(3454,'Xaignabouli','XA',1118),(3455,'Xiasomboun','XN',1118),(3456,'Xekong','XE',1118),(3457,'Xiangkhoang','XI',1118),(3458,'Beirut','BA',1120),(3459,'Beqaa','BI',1120),(3460,'Mount Lebanon','JL',1120),(3461,'North Lebanon','AS',1120),(3462,'South Lebanon','JA',1120),(3463,'Nabatieh','NA',1120),(3464,'Ampara','52',1199),(3465,'Anuradhapura','71',1199),(3466,'Badulla','81',1199),(3467,'Batticaloa','51',1199),(3468,'Colombo','11',1199),(3469,'Galle','31',1199),(3470,'Gampaha','12',1199),(3471,'Hambantota','33',1199),(3472,'Jaffna','41',1199),(3473,'Kalutara','13',1199),(3474,'Kandy','21',1199),(3475,'Kegalla','92',1199),(3476,'Kilinochchi','42',1199),(3477,'Kurunegala','61',1199),(3478,'Mannar','43',1199),(3479,'Matale','22',1199),(3480,'Matara','32',1199),(3481,'Monaragala','82',1199),(3482,'Mullaittivu','45',1199),(3483,'Nuwara Eliya','23',1199),(3484,'Polonnaruwa','72',1199),(3485,'Puttalum','62',1199),(3486,'Ratnapura','91',1199),(3487,'Trincomalee','53',1199),(3488,'VavunLya','44',1199),(3489,'Bomi','BM',1122),(3490,'Bong','BG',1122),(3491,'Grand Basaa','GB',1122),(3492,'Grand Cape Mount','CM',1122),(3493,'Grand Gedeh','GG',1122),(3494,'Grand Kru','GK',1122),(3495,'Lofa','LO',1122),(3496,'Margibi','MG',1122),(3497,'Maryland','MY',1122),(3498,'Montserrado','MO',1122),(3499,'Nimba','NI',1122),(3500,'Rivercess','RI',1122),(3501,'Sinoe','SI',1122),(3502,'Berea','D',1121),(3503,'Butha-Buthe','B',1121),(3504,'Leribe','C',1121),(3505,'Mafeteng','E',1121),(3506,'Maseru','A',1121),(3507,'Mohale\'s Hoek','F',1121),(3508,'Mokhotlong','J',1121),(3509,'Qacha\'s Nek','H',1121),(3510,'Quthing','G',1121),(3511,'Thaba-Tseka','K',1121),(3512,'Alytaus Apskritis','AL',1125),(3513,'Kauno Apskritis','KU',1125),(3514,'KlaipÄ—dos Apskritis','KL',1125),(3515,'MarijampolÄ—s Apskritis','MR',1125),(3516,'Panevėžio Apskritis','PN',1125),(3517,'Å iaulių Apskritis','SA',1125),(3518,'TauragÄ—s Apskritis','TA',1125),(3519,'TelÅ¡ių Apskritis','TE',1125),(3520,'Utenos Apskritis','UT',1125),(3521,'Vilniaus Apskritis','VL',1125),(3522,'Diekirch','D',1126),(3523,'GreveNmacher','G',1126),(3550,'Daugavpils','DGV',1119),(3551,'Jelgava','JEL',1119),(3552,'JÅ«rmala','JUR',1119),(3553,'LiepÄja','LPX',1119),(3554,'RÄ“zekne','REZ',1119),(3555,'RÄ«ga','RIX',1119),(3556,'Ventspils','VEN',1119),(3557,'AjdÄbiyÄ','AJ',1123),(3558,'Al BuÅ£nÄn','BU',1123),(3559,'Al HizÄm al Akhdar','HZ',1123),(3560,'Al Jabal al Akhdar','JA',1123),(3561,'Al JifÄrah','JI',1123),(3562,'Al Jufrah','JU',1123),(3563,'Al Kufrah','KF',1123),(3564,'Al Marj','MJ',1123),(3565,'Al Marqab','MB',1123),(3566,'Al QaÅ£rÅ«n','QT',1123),(3567,'Al Qubbah','QB',1123),(3568,'Al WÄhah','WA',1123),(3569,'An NuqaÅ£ al Khams','NQ',1123),(3570,'Ash ShÄÅ£i\'','SH',1123),(3571,'Az ZÄwiyah','ZA',1123),(3572,'BanghÄzÄ«','BA',1123),(3573,'BanÄ« WalÄ«d','BW',1123),(3574,'Darnah','DR',1123),(3575,'GhadÄmis','GD',1123),(3576,'GharyÄn','GR',1123),(3577,'GhÄt','GT',1123),(3578,'JaghbÅ«b','JB',1123),(3579,'MiÅŸrÄtah','MI',1123),(3580,'Mizdah','MZ',1123),(3581,'Murzuq','MQ',1123),(3582,'NÄlÅ«t','NL',1123),(3583,'SabhÄ','SB',1123),(3584,'ÅžabrÄtah ÅžurmÄn','SS',1123),(3585,'Surt','SR',1123),(3586,'TÄjÅ«rÄ\' wa an NawÄhÄ« al ArbÄh','TN',1123),(3587,'Å¢arÄbulus','TB',1123),(3588,'TarhÅ«nah-MasallÄtah','TM',1123),(3589,'WÄdÄ« al hayÄt','WD',1123),(3590,'Yafran-JÄdÅ«','YJ',1123),(3591,'Agadir','AGD',1146),(3592,'Aït Baha','BAH',1146),(3593,'Aït Melloul','MEL',1146),(3594,'Al Haouz','HAO',1146),(3595,'Al Hoceïma','HOC',1146),(3596,'Assa-Zag','ASZ',1146),(3597,'Azilal','AZI',1146),(3598,'Beni Mellal','BEM',1146),(3599,'Ben Sllmane','BES',1146),(3600,'Berkane','BER',1146),(3601,'Boujdour','BOD',1146),(3602,'Boulemane','BOM',1146),(3603,'Casablanca [Dar el Beïda]','CAS',1146),(3604,'Chefchaouene','CHE',1146),(3605,'Chichaoua','CHI',1146),(3606,'El Hajeb','HAJ',1146),(3607,'El Jadida','JDI',1146),(3608,'Errachidia','ERR',1146),(3609,'Essaouira','ESI',1146),(3610,'Es Smara','ESM',1146),(3611,'Fès','FES',1146),(3612,'Figuig','FIG',1146),(3613,'Guelmim','GUE',1146),(3614,'Ifrane','IFR',1146),(3615,'Jerada','JRA',1146),(3616,'Kelaat Sraghna','KES',1146),(3617,'Kénitra','KEN',1146),(3618,'Khemisaet','KHE',1146),(3619,'Khenifra','KHN',1146),(3620,'Khouribga','KHO',1146),(3621,'Laâyoune (EH)','LAA',1146),(3622,'Larache','LAP',1146),(3623,'Marrakech','MAR',1146),(3624,'Meknsès','MEK',1146),(3625,'Nador','NAD',1146),(3626,'Ouarzazate','OUA',1146),(3627,'Oued ed Dahab (EH)','OUD',1146),(3628,'Oujda','OUJ',1146),(3629,'Rabat-Salé','RBA',1146),(3630,'Safi','SAF',1146),(3631,'Sefrou','SEF',1146),(3632,'Settat','SET',1146),(3633,'Sidl Kacem','SIK',1146),(3634,'Tanger','TNG',1146),(3635,'Tan-Tan','TNT',1146),(3636,'Taounate','TAO',1146),(3637,'Taroudannt','TAR',1146),(3638,'Tata','TAT',1146),(3639,'Taza','TAZ',1146),(3640,'Tétouan','TET',1146),(3641,'Tiznit','TIZ',1146),(3642,'Gagauzia, Unitate Teritoriala Autonoma','GA',1142),(3643,'Chisinau','CU',1142),(3644,'Stinga Nistrului, unitatea teritoriala din','SN',1142),(3645,'Balti','BA',1142),(3646,'Cahul','CA',1142),(3647,'Edinet','ED',1142),(3648,'Lapusna','LA',1142),(3649,'Orhei','OR',1142),(3650,'Soroca','SO',1142),(3651,'Taraclia','TA',1142),(3652,'Tighina [Bender]','TI',1142),(3653,'Ungheni','UN',1142),(3654,'Antananarivo','T',1129),(3655,'Antsiranana','D',1129),(3656,'Fianarantsoa','F',1129),(3657,'Mahajanga','M',1129),(3658,'Toamasina','A',1129),(3659,'Toliara','U',1129),(3660,'Ailinglapalap','ALL',1135),(3661,'Ailuk','ALK',1135),(3662,'Arno','ARN',1135),(3663,'Aur','AUR',1135),(3664,'Ebon','EBO',1135),(3665,'Eniwetok','ENI',1135),(3666,'Jaluit','JAL',1135),(3667,'Kili','KIL',1135),(3668,'Kwajalein','KWA',1135),(3669,'Lae','LAE',1135),(3670,'Lib','LIB',1135),(3671,'Likiep','LIK',1135),(3672,'Majuro','MAJ',1135),(3673,'Maloelap','MAL',1135),(3674,'Mejit','MEJ',1135),(3675,'Mili','MIL',1135),(3676,'Namorik','NMK',1135),(3677,'Namu','NMU',1135),(3678,'Rongelap','RON',1135),(3679,'Ujae','UJA',1135),(3680,'Ujelang','UJL',1135),(3681,'Utirik','UTI',1135),(3682,'Wotho','WTN',1135),(3683,'Wotje','WTJ',1135),(3684,'Bamako','BK0',1133),(3685,'Gao','7',1133),(3686,'Kayes','1',1133),(3687,'Kidal','8',1133),(3688,'Xoulikoro','2',1133),(3689,'Mopti','5',1133),(3690,'S69ou','4',1133),(3691,'Sikasso','3',1133),(3692,'Tombouctou','6',1133),(3693,'Ayeyarwady','07',1035),(3694,'Bago','02',1035),(3695,'Magway','03',1035),(3696,'Mandalay','04',1035),(3697,'Sagaing','01',1035),(3698,'Tanintharyi','05',1035),(3699,'Yangon','06',1035),(3700,'Chin','14',1035),(3701,'Kachin','11',1035),(3702,'Kayah','12',1035),(3703,'Kayin','13',1035),(3704,'Mon','15',1035),(3705,'Rakhine','16',1035),(3706,'Shan','17',1035),(3707,'Ulaanbaatar','1',1144),(3708,'Arhangay','073',1144),(3709,'Bayanhongor','069',1144),(3710,'Bayan-Olgiy','071',1144),(3711,'Bulgan','067',1144),(3712,'Darhan uul','037',1144),(3713,'Dornod','061',1144),(3714,'Dornogov,','063',1144),(3715,'DundgovL','059',1144),(3716,'Dzavhan','057',1144),(3717,'Govi-Altay','065',1144),(3718,'Govi-Smber','064',1144),(3719,'Hentiy','039',1144),(3720,'Hovd','043',1144),(3721,'Hovsgol','041',1144),(3722,'Omnogovi','053',1144),(3723,'Orhon','035',1144),(3724,'Ovorhangay','055',1144),(3725,'Selenge','049',1144),(3726,'Shbaatar','051',1144),(3727,'Tov','047',1144),(3728,'Uvs','046',1144),(3729,'Nouakchott','NKC',1137),(3730,'Assaba','03',1137),(3731,'Brakna','05',1137),(3732,'Dakhlet Nouadhibou','08',1137),(3733,'Gorgol','04',1137),(3734,'Guidimaka','10',1137),(3735,'Hodh ech Chargui','01',1137),(3736,'Hodh el Charbi','02',1137),(3737,'Inchiri','12',1137),(3738,'Tagant','09',1137),(3739,'Tiris Zemmour','11',1137),(3740,'Trarza','06',1137),(3741,'Beau Bassin-Rose Hill','BR',1138),(3742,'Curepipe','CU',1138),(3743,'Port Louis','PU',1138),(3744,'Quatre Bornes','QB',1138),(3745,'Vacosa-Phoenix','VP',1138),(3746,'Black River','BL',1138),(3747,'Flacq','FL',1138),(3748,'Grand Port','GP',1138),(3749,'Moka','MO',1138),(3750,'Pamplemousses','PA',1138),(3751,'Plaines Wilhems','PW',1138),(3752,'Riviere du Rempart','RP',1138),(3753,'Savanne','SA',1138),(3754,'Agalega Islands','AG',1138),(3755,'Cargados Carajos Shoals','CC',1138),(3756,'Rodrigues Island','RO',1138),(3757,'Male','MLE',1132),(3758,'Alif','02',1132),(3759,'Baa','20',1132),(3760,'Dhaalu','17',1132),(3761,'Faafu','14',1132),(3762,'Gaaf Alif','27',1132),(3763,'Gaefu Dhaalu','28',1132),(3764,'Gnaviyani','29',1132),(3765,'Haa Alif','07',1132),(3766,'Haa Dhaalu','23',1132),(3767,'Kaafu','26',1132),(3768,'Laamu','05',1132),(3769,'Lhaviyani','03',1132),(3770,'Meemu','12',1132),(3771,'Noonu','25',1132),(3772,'Raa','13',1132),(3773,'Seenu','01',1132),(3774,'Shaviyani','24',1132),(3775,'Thaa','08',1132),(3776,'Vaavu','04',1132),(3777,'Balaka','BA',1130),(3778,'Blantyre','BL',1130),(3779,'Chikwawa','CK',1130),(3780,'Chiradzulu','CR',1130),(3781,'Chitipa','CT',1130),(3782,'Dedza','DE',1130),(3783,'Dowa','DO',1130),(3784,'Karonga','KR',1130),(3785,'Kasungu','KS',1130),(3786,'Likoma Island','LK',1130),(3787,'Lilongwe','LI',1130),(3788,'Machinga','MH',1130),(3789,'Mangochi','MG',1130),(3790,'Mchinji','MC',1130),(3791,'Mulanje','MU',1130),(3792,'Mwanza','MW',1130),(3793,'Mzimba','MZ',1130),(3794,'Nkhata Bay','NB',1130),(3795,'Nkhotakota','NK',1130),(3796,'Nsanje','NS',1130),(3797,'Ntcheu','NU',1130),(3798,'Ntchisi','NI',1130),(3799,'Phalomba','PH',1130),(3800,'Rumphi','RU',1130),(3801,'Salima','SA',1130),(3802,'Thyolo','TH',1130),(3803,'Zomba','ZO',1130),(3804,'Aguascalientes','AGU',1140),(3805,'Baja California','BCN',1140),(3806,'Baja California Sur','BCS',1140),(3807,'Campeche','CAM',1140),(3808,'Coahuila','COA',1140),(3809,'Colima','COL',1140),(3810,'Chiapas','CHP',1140),(3811,'Chihuahua','CHH',1140),(3812,'Durango','DUR',1140),(3813,'Guanajuato','GUA',1140),(3814,'Guerrero','GRO',1140),(3815,'Hidalgo','HID',1140),(3816,'Jalisco','JAL',1140),(3817,'Mexico','MEX',1140),(3818,'Michoacin','MIC',1140),(3819,'Morelos','MOR',1140),(3820,'Nayarit','NAY',1140),(3821,'Nuevo Leon','NLE',1140),(3822,'Oaxaca','OAX',1140),(3823,'Puebla','PUE',1140),(3824,'Queretaro','QUE',1140),(3825,'Quintana Roo','ROO',1140),(3826,'San Luis Potosi','SLP',1140),(3827,'Sinaloa','SIN',1140),(3828,'Sonora','SON',1140),(3829,'Tabasco','TAB',1140),(3830,'Tamaulipas','TAM',1140),(3831,'Tlaxcala','TLA',1140),(3832,'Veracruz','VER',1140),(3833,'Yucatan','YUC',1140),(3834,'Zacatecas','ZAC',1140),(3835,'Wilayah Persekutuan Kuala Lumpur','14',1131),(3836,'Wilayah Persekutuan Labuan','15',1131),(3837,'Wilayah Persekutuan Putrajaya','16',1131),(3838,'Johor','01',1131),(3839,'Kedah','02',1131),(3840,'Kelantan','03',1131),(3841,'Melaka','04',1131),(3842,'Negeri Sembilan','05',1131),(3843,'Pahang','06',1131),(3844,'Perak','08',1131),(3845,'Perlis','09',1131),(3846,'Pulau Pinang','07',1131),(3847,'Sabah','12',1131),(3848,'Sarawak','13',1131),(3849,'Selangor','10',1131),(3850,'Terengganu','11',1131),(3851,'Maputo','MPM',1147),(3852,'Cabo Delgado','P',1147),(3853,'Gaza','G',1147),(3854,'Inhambane','I',1147),(3855,'Manica','B',1147),(3856,'Numpula','N',1147),(3857,'Niaaea','A',1147),(3858,'Sofala','S',1147),(3859,'Tete','T',1147),(3860,'Zambezia','Q',1147),(3861,'Caprivi','CA',1148),(3862,'Erongo','ER',1148),(3863,'Hardap','HA',1148),(3864,'Karas','KA',1148),(3865,'Khomas','KH',1148),(3866,'Kunene','KU',1148),(3867,'Ohangwena','OW',1148),(3868,'Okavango','OK',1148),(3869,'Omaheke','OH',1148),(3870,'Omusati','OS',1148),(3871,'Oshana','ON',1148),(3872,'Oshikoto','OT',1148),(3873,'Otjozondjupa','OD',1148),(3874,'Niamey','8',1156),(3875,'Agadez','1',1156),(3876,'Diffa','2',1156),(3877,'Dosso','3',1156),(3878,'Maradi','4',1156),(3879,'Tahoua','S',1156),(3880,'Tillaberi','6',1156),(3881,'Zinder','7',1156),(3882,'Abuja Federal Capital Territory','FC',1157),(3883,'Abia','AB',1157),(3884,'Adamawa','AD',1157),(3885,'Akwa Ibom','AK',1157),(3886,'Anambra','AN',1157),(3887,'Bauchi','BA',1157),(3888,'Bayelsa','BY',1157),(3889,'Benue','BE',1157),(3890,'Borno','BO',1157),(3891,'Cross River','CR',1157),(3892,'Delta','DE',1157),(3893,'Ebonyi','EB',1157),(3894,'Edo','ED',1157),(3895,'Ekiti','EK',1157),(3896,'Enugu','EN',1157),(3897,'Gombe','GO',1157),(3898,'Imo','IM',1157),(3899,'Jigawa','JI',1157),(3900,'Kaduna','KD',1157),(3901,'Kano','KN',1157),(3902,'Katsina','KT',1157),(3903,'Kebbi','KE',1157),(3904,'Kogi','KO',1157),(3905,'Kwara','KW',1157),(3906,'Lagos','LA',1157),(3907,'Nassarawa','NA',1157),(3908,'Niger','NI',1157),(3909,'Ogun','OG',1157),(3910,'Ondo','ON',1157),(3911,'Osun','OS',1157),(3912,'Oyo','OY',1157),(3913,'Rivers','RI',1157),(3914,'Sokoto','SO',1157),(3915,'Taraba','TA',1157),(3916,'Yobe','YO',1157),(3917,'Zamfara','ZA',1157),(3918,'Boaco','BO',1155),(3919,'Carazo','CA',1155),(3920,'Chinandega','CI',1155),(3921,'Chontales','CO',1155),(3922,'Esteli','ES',1155),(3923,'Jinotega','JI',1155),(3924,'Leon','LE',1155),(3925,'Madriz','MD',1155),(3926,'Managua','MN',1155),(3927,'Masaya','MS',1155),(3928,'Matagalpa','MT',1155),(3929,'Nueva Segovia','NS',1155),(3930,'Rio San Juan','SJ',1155),(3931,'Rivas','RI',1155),(3932,'Atlantico Norte','AN',1155),(3933,'Atlantico Sur','AS',1155),(3934,'Drente','DR',1152),(3935,'Flevoland','FL',1152),(3936,'Friesland','FR',1152),(3937,'Gelderland','GL',1152),(3938,'Groningen','GR',1152),(3939,'Noord-Brabant','NB',1152),(3940,'Noord-Holland','NH',1152),(3941,'Overijssel','OV',1152),(3942,'Utrecht','UT',1152),(3943,'Zuid-Holland','ZH',1152),(3944,'Zeeland','ZL',1152),(3945,'Akershus','02',1161),(3946,'Aust-Agder','09',1161),(3947,'Buskerud','06',1161),(3948,'Finnmark','20',1161),(3949,'Hedmark','04',1161),(3950,'Hordaland','12',1161),(3951,'Møre og Romsdal','15',1161),(3952,'Nordland','18',1161),(3953,'Nord-Trøndelag','17',1161),(3954,'Oppland','05',1161),(3955,'Oslo','03',1161),(3956,'Rogaland','11',1161),(3957,'Sogn og Fjordane','14',1161),(3958,'Sør-Trøndelag','16',1161),(3959,'Telemark','06',1161),(3960,'Troms','19',1161),(3961,'Vest-Agder','10',1161),(3962,'Vestfold','07',1161),(3963,'Østfold','01',1161),(3964,'Jan Mayen','22',1161),(3965,'Svalbard','21',1161),(3966,'Auckland','AUK',1154),(3967,'Bay of Plenty','BOP',1154),(3968,'Canterbury','CAN',1154),(3969,'Gisborne','GIS',1154),(3970,'Hawkes Bay','HKB',1154),(3971,'Manawatu-Wanganui','MWT',1154),(3972,'Marlborough','MBH',1154),(3973,'Nelson','NSN',1154),(3974,'Northland','NTL',1154),(3975,'Otago','OTA',1154),(3976,'Southland','STL',1154),(3977,'Taranaki','TKI',1154),(3978,'Tasman','TAS',1154),(3979,'Waikato','WKO',1154),(3980,'Wellington','WGN',1154),(3981,'West Coast','WTC',1154),(3982,'Ad Dakhillyah','DA',1162),(3983,'Al Batinah','BA',1162),(3984,'Al Janblyah','JA',1162),(3985,'Al Wusta','WU',1162),(3986,'Ash Sharqlyah','SH',1162),(3987,'Az Zahirah','ZA',1162),(3988,'Masqat','MA',1162),(3989,'Musandam','MU',1162),(3990,'Bocas del Toro','1',1166),(3991,'Cocle','2',1166),(3992,'Chiriqui','4',1166),(3993,'Darien','5',1166),(3994,'Herrera','6',1166),(3995,'Loa Santoa','7',1166),(3996,'Panama','8',1166),(3997,'Veraguas','9',1166),(3998,'Comarca de San Blas','Q',1166),(3999,'El Callao','CAL',1169),(4000,'Ancash','ANC',1169),(4001,'Apurimac','APU',1169),(4002,'Arequipa','ARE',1169),(4003,'Ayacucho','AYA',1169),(4004,'Cajamarca','CAJ',1169),(4005,'Cuzco','CUS',1169),(4006,'Huancavelica','HUV',1169),(4007,'Huanuco','HUC',1169),(4008,'Ica','ICA',1169),(4009,'Junin','JUN',1169),(4010,'La Libertad','LAL',1169),(4011,'Lambayeque','LAM',1169),(4012,'Lima','LIM',1169),(4013,'Loreto','LOR',1169),(4014,'Madre de Dios','MDD',1169),(4015,'Moquegua','MOQ',1169),(4016,'Pasco','PAS',1169),(4017,'Piura','PIU',1169),(4018,'Puno','PUN',1169),(4019,'San Martin','SAM',1169),(4020,'Tacna','TAC',1169),(4021,'Tumbes','TUM',1169),(4022,'Ucayali','UCA',1169),(4023,'National Capital District (Port Moresby)','NCD',1167),(4024,'Chimbu','CPK',1167),(4025,'Eastern Highlands','EHG',1167),(4026,'East New Britain','EBR',1167),(4027,'East Sepik','ESW',1167),(4028,'Enga','EPW',1167),(4029,'Gulf','GPK',1167),(4030,'Madang','MPM',1167),(4031,'Manus','MRL',1167),(4032,'Milne Bay','MBA',1167),(4033,'Morobe','MPL',1167),(4034,'New Ireland','NIK',1167),(4035,'North Solomons','NSA',1167),(4036,'Santaun','SAN',1167),(4037,'Southern Highlands','SHM',1167),(4038,'Western Highlands','WHM',1167),(4039,'West New Britain','WBK',1167),(4040,'Abra','ABR',1170),(4041,'Agusan del Norte','AGN',1170),(4042,'Agusan del Sur','AGS',1170),(4043,'Aklan','AKL',1170),(4044,'Albay','ALB',1170),(4045,'Antique','ANT',1170),(4046,'Apayao','APA',1170),(4047,'Aurora','AUR',1170),(4048,'Basilan','BAS',1170),(4049,'Bataan','BAN',1170),(4050,'Batanes','BTN',1170),(4051,'Batangas','BTG',1170),(4052,'Benguet','BEN',1170),(4053,'Biliran','BIL',1170),(4054,'Bohol','BOH',1170),(4055,'Bukidnon','BUK',1170),(4056,'Bulacan','BUL',1170),(4057,'Cagayan','CAG',1170),(4058,'Camarines Norte','CAN',1170),(4059,'Camarines Sur','CAS',1170),(4060,'Camiguin','CAM',1170),(4061,'Capiz','CAP',1170),(4062,'Catanduanes','CAT',1170),(4063,'Cavite','CAV',1170),(4064,'Cebu','CEB',1170),(4065,'Compostela Valley','COM',1170),(4066,'Davao','DAV',1170),(4067,'Davao del Sur','DAS',1170),(4068,'Davao Oriental','DAO',1170),(4069,'Eastern Samar','EAS',1170),(4070,'Guimaras','GUI',1170),(4071,'Ifugao','IFU',1170),(4072,'Ilocos Norte','ILN',1170),(4073,'Ilocos Sur','ILS',1170),(4074,'Iloilo','ILI',1170),(4075,'Isabela','ISA',1170),(4076,'Kalinga-Apayso','KAL',1170),(4077,'Laguna','LAG',1170),(4078,'Lanao del Norte','LAN',1170),(4079,'Lanao del Sur','LAS',1170),(4080,'La Union','LUN',1170),(4081,'Leyte','LEY',1170),(4082,'Maguindanao','MAG',1170),(4083,'Marinduque','MAD',1170),(4084,'Masbate','MAS',1170),(4085,'Mindoro Occidental','MDC',1170),(4086,'Mindoro Oriental','MDR',1170),(4087,'Misamis Occidental','MSC',1170),(4088,'Misamis Oriental','MSR',1170),(4089,'Mountain Province','MOU',1170),(4090,'Negroe Occidental','NEC',1170),(4091,'Negros Oriental','NER',1170),(4092,'North Cotabato','NCO',1170),(4093,'Northern Samar','NSA',1170),(4094,'Nueva Ecija','NUE',1170),(4095,'Nueva Vizcaya','NUV',1170),(4096,'Palawan','PLW',1170),(4097,'Pampanga','PAM',1170),(4098,'Pangasinan','PAN',1170),(4099,'Quezon','QUE',1170),(4100,'Quirino','QUI',1170),(4101,'Rizal','RIZ',1170),(4102,'Romblon','ROM',1170),(4103,'Sarangani','SAR',1170),(4104,'Siquijor','SIG',1170),(4105,'Sorsogon','SOR',1170),(4106,'South Cotabato','SCO',1170),(4107,'Southern Leyte','SLE',1170),(4108,'Sultan Kudarat','SUK',1170),(4109,'Sulu','SLU',1170),(4110,'Surigao del Norte','SUN',1170),(4111,'Surigao del Sur','SUR',1170),(4112,'Tarlac','TAR',1170),(4113,'Tawi-Tawi','TAW',1170),(4114,'Western Samar','WSA',1170),(4115,'Zambales','ZMB',1170),(4116,'Zamboanga del Norte','ZAN',1170),(4117,'Zamboanga del Sur','ZAS',1170),(4118,'Zamboanga Sibiguey','ZSI',1170),(4119,'Islamabad Federal Capital Area','IS',1163),(4120,'Baluchistan','BA',1163),(4121,'Khyber Pakhtun Khawa','NW',1163),(4122,'Sindh','SD',1163),(4123,'Federally Administered Tribal Areas','TA',1163),(4124,'Azad Kashmir','JK',1163),(4125,'Gilgit-Baltistan','NA',1163),(4126,'Aveiro','01',1173),(4127,'Beja','02',1173),(4128,'Braga','03',1173),(4129,'Braganca','04',1173),(4130,'Castelo Branco','05',1173),(4131,'Colmbra','06',1173),(4132,'Ovora','07',1173),(4133,'Faro','08',1173),(4134,'Guarda','09',1173),(4135,'Leiria','10',1173),(4136,'Lisboa','11',1173),(4137,'Portalegre','12',1173),(4138,'Porto','13',1173),(4139,'Santarem','14',1173),(4140,'Setubal','15',1173),(4141,'Viana do Castelo','16',1173),(4142,'Vila Real','17',1173),(4143,'Viseu','18',1173),(4144,'Regiao Autonoma dos Acores','20',1173),(4145,'Regiao Autonoma da Madeira','30',1173),(4146,'Asuncion','ASU',1168),(4147,'Alto Paraguay','16',1168),(4148,'Alto Parana','10',1168),(4149,'Amambay','13',1168),(4150,'Boqueron','19',1168),(4151,'Caeguazu','5',1168),(4152,'Caazapl','6',1168),(4153,'Canindeyu','14',1168),(4154,'Concepcion','1',1168),(4155,'Cordillera','3',1168),(4156,'Guaira','4',1168),(4157,'Itapua','7',1168),(4158,'Miaiones','8',1168),(4159,'Neembucu','12',1168),(4160,'Paraguari','9',1168),(4161,'Presidente Hayes','15',1168),(4162,'San Pedro','2',1168),(4163,'Ad Dawhah','DA',1175),(4164,'Al Ghuwayriyah','GH',1175),(4165,'Al Jumayliyah','JU',1175),(4166,'Al Khawr','KH',1175),(4167,'Al Wakrah','WA',1175),(4168,'Ar Rayyan','RA',1175),(4169,'Jariyan al Batnah','JB',1175),(4170,'Madinat ash Shamal','MS',1175),(4171,'Umm Salal','US',1175),(4172,'Bucuresti','B',1176),(4173,'Alba','AB',1176),(4174,'Arad','AR',1176),(4175,'ArgeÈ™','AG',1176),(4176,'Bacău','BC',1176),(4177,'Bihor','BH',1176),(4178,'BistriÈ›a-Năsăud','BN',1176),(4179,'BotoÈ™ani','BT',1176),(4180,'BraÈ™ov','BV',1176),(4181,'Brăila','BR',1176),(4182,'Buzău','BZ',1176),(4183,'CaraÈ™-Severin','CS',1176),(4184,'CălăraÈ™i','CL',1176),(4185,'Cluj','CJ',1176),(4186,'ConstanÈ›a','CT',1176),(4187,'Covasna','CV',1176),(4188,'DâmboviÈ›a','DB',1176),(4189,'Dolj','DJ',1176),(4190,'GalaÈ›i','GL',1176),(4191,'Giurgiu','GR',1176),(4192,'Gorj','GJ',1176),(4193,'Harghita','HR',1176),(4194,'Hunedoara','HD',1176),(4195,'IalomiÈ›a','IL',1176),(4196,'IaÈ™i','IS',1176),(4197,'Ilfov','IF',1176),(4198,'MaramureÈ™','MM',1176),(4199,'MehedinÈ›i','MH',1176),(4200,'MureÈ™','MS',1176),(4201,'NeamÈ›','NT',1176),(4202,'Olt','OT',1176),(4203,'Prahova','PH',1176),(4204,'Satu Mare','SM',1176),(4205,'Sălaj','SJ',1176),(4206,'Sibiu','SB',1176),(4207,'Suceava','SV',1176),(4208,'Teleorman','TR',1176),(4209,'TimiÈ™','TM',1176),(4210,'Tulcea','TL',1176),(4211,'Vaslui','VS',1176),(4212,'Vâlcea','VL',1176),(4213,'Vrancea','VN',1176),(4214,'Adygeya, Respublika','AD',1177),(4215,'Altay, Respublika','AL',1177),(4216,'Bashkortostan, Respublika','BA',1177),(4217,'Buryatiya, Respublika','BU',1177),(4218,'Chechenskaya Respublika','CE',1177),(4219,'Chuvashskaya Respublika','CU',1177),(4220,'Dagestan, Respublika','DA',1177),(4221,'Ingushskaya Respublika','IN',1177),(4222,'Kabardino-Balkarskaya','KB',1177),(4223,'Kalmykiya, Respublika','KL',1177),(4224,'Karachayevo-Cherkesskaya Respublika','KC',1177),(4225,'Kareliya, Respublika','KR',1177),(4226,'Khakasiya, Respublika','KK',1177),(4227,'Komi, Respublika','KO',1177),(4228,'Mariy El, Respublika','ME',1177),(4229,'Mordoviya, Respublika','MO',1177),(4230,'Sakha, Respublika [Yakutiya]','SA',1177),(4231,'Severnaya Osetiya, Respublika','SE',1177),(4232,'Tatarstan, Respublika','TA',1177),(4233,'Tyva, Respublika [Tuva]','TY',1177),(4234,'Udmurtskaya Respublika','UD',1177),(4235,'Altayskiy kray','ALT',1177),(4236,'Khabarovskiy kray','KHA',1177),(4237,'Krasnodarskiy kray','KDA',1177),(4238,'Krasnoyarskiy kray','KYA',1177),(4239,'Primorskiy kray','PRI',1177),(4240,'Stavropol\'skiy kray','STA',1177),(4241,'Amurskaya oblast\'','AMU',1177),(4242,'Arkhangel\'skaya oblast\'','ARK',1177),(4243,'Astrakhanskaya oblast\'','AST',1177),(4244,'Belgorodskaya oblast\'','BEL',1177),(4245,'Bryanskaya oblast\'','BRY',1177),(4246,'Chelyabinskaya oblast\'','CHE',1177),(4247,'Zabaykalsky Krai\'','ZSK',1177),(4248,'Irkutskaya oblast\'','IRK',1177),(4249,'Ivanovskaya oblast\'','IVA',1177),(4250,'Kaliningradskaya oblast\'','KGD',1177),(4251,'Kaluzhskaya oblast\'','KLU',1177),(4252,'Kamchatka Krai\'','KAM',1177),(4253,'Kemerovskaya oblast\'','KEM',1177),(4254,'Kirovskaya oblast\'','KIR',1177),(4255,'Kostromskaya oblast\'','KOS',1177),(4256,'Kurganskaya oblast\'','KGN',1177),(4257,'Kurskaya oblast\'','KRS',1177),(4258,'Leningradskaya oblast\'','LEN',1177),(4259,'Lipetskaya oblast\'','LIP',1177),(4260,'Magadanskaya oblast\'','MAG',1177),(4261,'Moskovskaya oblast\'','MOS',1177),(4262,'Murmanskaya oblast\'','MUR',1177),(4263,'Nizhegorodskaya oblast\'','NIZ',1177),(4264,'Novgorodskaya oblast\'','NGR',1177),(4265,'Novosibirskaya oblast\'','NVS',1177),(4266,'Omskaya oblast\'','OMS',1177),(4267,'Orenburgskaya oblast\'','ORE',1177),(4268,'Orlovskaya oblast\'','ORL',1177),(4269,'Penzenskaya oblast\'','PNZ',1177),(4270,'Perm krai\'','PEK',1177),(4271,'Pskovskaya oblast\'','PSK',1177),(4272,'Rostovskaya oblast\'','ROS',1177),(4273,'Ryazanskaya oblast\'','RYA',1177),(4274,'Sakhalinskaya oblast\'','SAK',1177),(4275,'Samarskaya oblast\'','SAM',1177),(4276,'Saratovskaya oblast\'','SAR',1177),(4277,'Smolenskaya oblast\'','SMO',1177),(4278,'Sverdlovskaya oblast\'','SVE',1177),(4279,'Tambovskaya oblast\'','TAM',1177),(4280,'Tomskaya oblast\'','TOM',1177),(4281,'Tul\'skaya oblast\'','TUL',1177),(4282,'Tverskaya oblast\'','TVE',1177),(4283,'Tyumenskaya oblast\'','TYU',1177),(4284,'Ul\'yanovskaya oblast\'','ULY',1177),(4285,'Vladimirskaya oblast\'','VLA',1177),(4286,'Volgogradskaya oblast\'','VGG',1177),(4287,'Vologodskaya oblast\'','VLG',1177),(4288,'Voronezhskaya oblast\'','VOR',1177),(4289,'Yaroslavskaya oblast\'','YAR',1177),(4290,'Moskva','MOW',1177),(4291,'Sankt-Peterburg','SPE',1177),(4292,'Yevreyskaya avtonomnaya oblast\'','YEV',1177),(4294,'Chukotskiy avtonomnyy okrug','CHU',1177),(4296,'Khanty-Mansiyskiy avtonomnyy okrug','KHM',1177),(4299,'Nenetskiy avtonomnyy okrug','NEN',1177),(4302,'Yamalo-Nenetskiy avtonomnyy okrug','YAN',1177),(4303,'Butare','C',1178),(4304,'Byumba','I',1178),(4305,'Cyangugu','E',1178),(4306,'Gikongoro','D',1178),(4307,'Gisenyi','G',1178),(4308,'Gitarama','B',1178),(4309,'Kibungo','J',1178),(4310,'Kibuye','F',1178),(4311,'Kigali-Rural Kigali y\' Icyaro','K',1178),(4312,'Kigali-Ville Kigali Ngari','L',1178),(4313,'Mutara','M',1178),(4314,'Ruhengeri','H',1178),(4315,'Al Bahah','11',1187),(4316,'Al Hudud Ash Shamaliyah','08',1187),(4317,'Al Jawf','12',1187),(4318,'Al Madinah','03',1187),(4319,'Al Qasim','05',1187),(4320,'Ar Riyad','01',1187),(4321,'Asir','14',1187),(4322,'Ha\'il','06',1187),(4323,'Jlzan','09',1187),(4324,'Makkah','02',1187),(4325,'Najran','10',1187),(4326,'Tabuk','07',1187),(4327,'Capital Territory (Honiara)','CT',1194),(4328,'Guadalcanal','GU',1194),(4329,'Isabel','IS',1194),(4330,'Makira','MK',1194),(4331,'Malaita','ML',1194),(4332,'Temotu','TE',1194),(4333,'A\'ali an Nil','23',1200),(4334,'Al Bah al Ahmar','26',1200),(4335,'Al Buhayrat','18',1200),(4336,'Al Jazirah','07',1200),(4337,'Al Khartum','03',1200),(4338,'Al Qadarif','06',1200),(4339,'Al Wahdah','22',1200),(4340,'An Nil','04',1200),(4341,'An Nil al Abyaq','08',1200),(4342,'An Nil al Azraq','24',1200),(4343,'Ash Shamallyah','01',1200),(4344,'Bahr al Jabal','17',1200),(4345,'Gharb al Istiwa\'iyah','16',1200),(4346,'Gharb Ba~r al Ghazal','14',1200),(4347,'Gharb Darfur','12',1200),(4348,'Gharb Kurdufan','10',1200),(4349,'Janub Darfur','11',1200),(4350,'Janub Rurdufan','13',1200),(4351,'Jnqall','20',1200),(4352,'Kassala','05',1200),(4353,'Shamal Batr al Ghazal','15',1200),(4354,'Shamal Darfur','02',1200),(4355,'Shamal Kurdufan','09',1200),(4356,'Sharq al Istiwa\'iyah','19',1200),(4357,'Sinnar','25',1200),(4358,'Warab','21',1200),(4359,'Blekinge län','K',1204),(4360,'Dalarnas län','W',1204),(4361,'Gotlands län','I',1204),(4362,'Gävleborgs län','X',1204),(4363,'Hallands län','N',1204),(4364,'Jämtlands län','Z',1204),(4365,'Jönkopings län','F',1204),(4366,'Kalmar län','H',1204),(4367,'Kronobergs län','G',1204),(4368,'Norrbottens län','BD',1204),(4369,'SkÃ¥ne län','M',1204),(4370,'Stockholms län','AB',1204),(4371,'Södermanlands län','D',1204),(4372,'Uppsala län','C',1204),(4373,'Värmlands län','S',1204),(4374,'Västerbottens län','AC',1204),(4375,'Västernorrlands län','Y',1204),(4376,'Västmanlands län','U',1204),(4377,'Västra Götalands län','Q',1204),(4378,'Örebro län','T',1204),(4379,'Östergötlands län','E',1204),(4380,'Saint Helena','SH',1180),(4381,'Ascension','AC',1180),(4382,'Tristan da Cunha','TA',1180),(4383,'AjdovÅ¡Äina','001',1193),(4384,'Beltinci','002',1193),(4385,'Benedikt','148',1193),(4386,'Bistrica ob Sotli','149',1193),(4387,'Bled','003',1193),(4388,'Bloke','150',1193),(4389,'Bohinj','004',1193),(4390,'Borovnica','005',1193),(4391,'Bovec','006',1193),(4392,'BraslovÄe','151',1193),(4393,'Brda','007',1193),(4394,'Brezovica','008',1193),(4395,'Brežice','009',1193),(4396,'Cankova','152',1193),(4397,'Celje','011',1193),(4398,'Cerklje na Gorenjskem','012',1193),(4399,'Cerknica','013',1193),(4400,'Cerkno','014',1193),(4401,'Cerkvenjak','153',1193),(4402,'ÄŒrenÅ¡ovci','015',1193),(4403,'ÄŒrna na KoroÅ¡kem','016',1193),(4404,'ÄŒrnomelj','017',1193),(4405,'Destrnik','018',1193),(4406,'DivaÄa','019',1193),(4407,'Dobje','154',1193),(4408,'Dobrepolje','020',1193),(4409,'Dobrna','155',1193),(4410,'Dobrova-Polhov Gradec','021',1193),(4411,'Dobrovnik','156',1193),(4412,'Dol pri Ljubljani','022',1193),(4413,'Dolenjske Toplice','157',1193),(4414,'Domžale','023',1193),(4415,'Dornava','024',1193),(4416,'Dravograd','025',1193),(4417,'Duplek','026',1193),(4418,'Gorenja vas-Poljane','027',1193),(4419,'GoriÅ¡nica','028',1193),(4420,'Gornja Radgona','029',1193),(4421,'Gornji Grad','030',1193),(4422,'Gornji Petrovci','031',1193),(4423,'Grad','158',1193),(4424,'Grosuplje','032',1193),(4425,'Hajdina','159',1193),(4426,'HoÄe-Slivnica','160',1193),(4427,'HodoÅ¡','161',1193),(4428,'Horjul','162',1193),(4429,'Hrastnik','034',1193),(4430,'Hrpelje-Kozina','035',1193),(4431,'Idrija','036',1193),(4432,'Ig','037',1193),(4433,'Ilirska Bistrica','038',1193),(4434,'IvanÄna Gorica','039',1193),(4435,'Izola','040',1193),(4436,'Jesenice','041',1193),(4437,'Jezersko','163',1193),(4438,'JurÅ¡inci','042',1193),(4439,'Kamnik','043',1193),(4440,'Kanal','044',1193),(4441,'KidriÄevo','045',1193),(4442,'Kobarid','046',1193),(4443,'Kobilje','047',1193),(4444,'KoÄevje','048',1193),(4445,'Komen','049',1193),(4446,'Komenda','164',1193),(4447,'Koper','050',1193),(4448,'Kostel','165',1193),(4449,'Kozje','051',1193),(4450,'Kranj','052',1193),(4451,'Kranjska Gora','053',1193),(4452,'Križevci','166',1193),(4453,'KrÅ¡ko','054',1193),(4454,'Kungota','055',1193),(4455,'Kuzma','056',1193),(4456,'LaÅ¡ko','057',1193),(4457,'Lenart','058',1193),(4458,'Lendava','059',1193),(4459,'Litija','060',1193),(4460,'Ljubljana','061',1193),(4461,'Ljubno','062',1193),(4462,'Ljutomer','063',1193),(4463,'Logatec','064',1193),(4464,'LoÅ¡ka dolina','065',1193),(4465,'LoÅ¡ki Potok','066',1193),(4466,'Lovrenc na Pohorju','167',1193),(4467,'LuÄe','067',1193),(4468,'Lukovica','068',1193),(4469,'MajÅ¡perk','069',1193),(4470,'Maribor','070',1193),(4471,'Markovci','168',1193),(4472,'Medvode','071',1193),(4473,'MengeÅ¡','072',1193),(4474,'Metlika','073',1193),(4475,'Mežica','074',1193),(4476,'Miklavž na Dravskem polju','169',1193),(4477,'Miren-Kostanjevica','075',1193),(4478,'Mirna PeÄ','170',1193),(4479,'Mislinja','076',1193),(4480,'MoravÄe','077',1193),(4481,'Moravske Toplice','078',1193),(4482,'Mozirje','079',1193),(4483,'Murska Sobota','080',1193),(4484,'Muta','081',1193),(4485,'Naklo','082',1193),(4486,'Nazarje','083',1193),(4487,'Nova Gorica','084',1193),(4488,'Novo mesto','085',1193),(4489,'Sveta Ana','181',1193),(4490,'Sveti Andraž v Slovenskih goricah','182',1193),(4491,'Sveti Jurij','116',1193),(4492,'Å alovci','033',1193),(4493,'Å empeter-Vrtojba','183',1193),(4494,'Å enÄur','117',1193),(4495,'Å entilj','118',1193),(4496,'Å entjernej','119',1193),(4497,'Å entjur','120',1193),(4498,'Å kocjan','121',1193),(4499,'Å kofja Loka','122',1193),(4500,'Å kofljica','123',1193),(4501,'Å marje pri JelÅ¡ah','124',1193),(4502,'Å martno ob Paki','125',1193),(4503,'Å martno pri Litiji','194',1193),(4504,'Å oÅ¡tanj','126',1193),(4505,'Å tore','127',1193),(4506,'Tabor','184',1193),(4507,'TiÅ¡ina','010',1193),(4508,'Tolmin','128',1193),(4509,'Trbovlje','129',1193),(4510,'Trebnje','130',1193),(4511,'Trnovska vas','185',1193),(4512,'TržiÄ','131',1193),(4513,'Trzin','186',1193),(4514,'TurniÅ¡Äe','132',1193),(4515,'Velenje','133',1193),(4516,'Velika Polana','187',1193),(4517,'Velike LaÅ¡Äe','134',1193),(4518,'Veržej','188',1193),(4519,'Videm','135',1193),(4520,'Vipava','136',1193),(4521,'Vitanje','137',1193),(4522,'Vojnik','138',1193),(4523,'Vransko','189',1193),(4524,'Vrhnika','140',1193),(4525,'Vuzenica','141',1193),(4526,'Zagorje ob Savi','142',1193),(4527,'ZavrÄ','143',1193),(4528,'ZreÄe','144',1193),(4529,'Žalec','190',1193),(4530,'Železniki','146',1193),(4531,'Žetale','191',1193),(4532,'Žiri','147',1193),(4533,'Žirovnica','192',1193),(4534,'Žužemberk','193',1193),(4535,'Banskobystrický kraj','BC',1192),(4536,'Bratislavský kraj','BL',1192),(4537,'KoÅ¡ický kraj','KI',1192),(4538,'Nitriansky kraj','NJ',1192),(4539,'PreÅ¡ovský kraj','PV',1192),(4540,'TrenÄiansky kraj','TC',1192),(4541,'Trnavský kraj','TA',1192),(4542,'Žilinský kraj','ZI',1192),(4543,'Western Area (Freetown)','W',1190),(4544,'Dakar','DK',1188),(4545,'Diourbel','DB',1188),(4546,'Fatick','FK',1188),(4547,'Kaolack','KL',1188),(4548,'Kolda','KD',1188),(4549,'Louga','LG',1188),(4550,'Matam','MT',1188),(4551,'Saint-Louis','SL',1188),(4552,'Tambacounda','TC',1188),(4553,'Thies','TH',1188),(4554,'Ziguinchor','ZG',1188),(4555,'Awdal','AW',1195),(4556,'Bakool','BK',1195),(4557,'Banaadir','BN',1195),(4558,'Bay','BY',1195),(4559,'Galguduud','GA',1195),(4560,'Gedo','GE',1195),(4561,'Hiirsan','HI',1195),(4562,'Jubbada Dhexe','JD',1195),(4563,'Jubbada Hoose','JH',1195),(4564,'Mudug','MU',1195),(4565,'Nugaal','NU',1195),(4566,'Saneag','SA',1195),(4567,'Shabeellaha Dhexe','SD',1195),(4568,'Shabeellaha Hoose','SH',1195),(4569,'Sool','SO',1195),(4570,'Togdheer','TO',1195),(4571,'Woqooyi Galbeed','WO',1195),(4572,'Brokopondo','BR',1201),(4573,'Commewijne','CM',1201),(4574,'Coronie','CR',1201),(4575,'Marowijne','MA',1201),(4576,'Nickerie','NI',1201),(4577,'Paramaribo','PM',1201),(4578,'Saramacca','SA',1201),(4579,'Sipaliwini','SI',1201),(4580,'Wanica','WA',1201),(4581,'Principe','P',1207),(4582,'Sao Tome','S',1207),(4583,'Ahuachapan','AH',1066),(4584,'Cabanas','CA',1066),(4585,'Cuscatlan','CU',1066),(4586,'Chalatenango','CH',1066),(4587,'Morazan','MO',1066),(4588,'San Miguel','SM',1066),(4589,'San Salvador','SS',1066),(4590,'Santa Ana','SA',1066),(4591,'San Vicente','SV',1066),(4592,'Sonsonate','SO',1066),(4593,'Usulutan','US',1066),(4594,'Al Hasakah','HA',1206),(4595,'Al Ladhiqiyah','LA',1206),(4596,'Al Qunaytirah','QU',1206),(4597,'Ar Raqqah','RA',1206),(4598,'As Suwayda\'','SU',1206),(4599,'Dar\'a','DR',1206),(4600,'Dayr az Zawr','DY',1206),(4601,'Dimashq','DI',1206),(4602,'Halab','HL',1206),(4603,'Hamah','HM',1206),(4604,'Jim\'','HI',1206),(4605,'Idlib','ID',1206),(4606,'Rif Dimashq','RD',1206),(4607,'Tarts','TA',1206),(4608,'Hhohho','HH',1203),(4609,'Lubombo','LU',1203),(4610,'Manzini','MA',1203),(4611,'Shiselweni','SH',1203),(4612,'Batha','BA',1043),(4613,'Biltine','BI',1043),(4614,'Borkou-Ennedi-Tibesti','BET',1043),(4615,'Chari-Baguirmi','CB',1043),(4616,'Guera','GR',1043),(4617,'Kanem','KA',1043),(4618,'Lac','LC',1043),(4619,'Logone-Occidental','LO',1043),(4620,'Logone-Oriental','LR',1043),(4621,'Mayo-Kebbi','MK',1043),(4622,'Moyen-Chari','MC',1043),(4623,'Ouaddai','OD',1043),(4624,'Salamat','SA',1043),(4625,'Tandjile','TA',1043),(4626,'Kara','K',1214),(4627,'Maritime (Region)','M',1214),(4628,'Savannes','S',1214),(4629,'Krung Thep Maha Nakhon Bangkok','10',1211),(4630,'Phatthaya','S',1211),(4631,'Amnat Charoen','37',1211),(4632,'Ang Thong','15',1211),(4633,'Buri Ram','31',1211),(4634,'Chachoengsao','24',1211),(4635,'Chai Nat','18',1211),(4636,'Chaiyaphum','36',1211),(4637,'Chanthaburi','22',1211),(4638,'Chiang Mai','50',1211),(4639,'Chiang Rai','57',1211),(4640,'Chon Buri','20',1211),(4641,'Chumphon','86',1211),(4642,'Kalasin','46',1211),(4643,'Kamphasng Phet','62',1211),(4644,'Kanchanaburi','71',1211),(4645,'Khon Kaen','40',1211),(4646,'Krabi','81',1211),(4647,'Lampang','52',1211),(4648,'Lamphun','51',1211),(4649,'Loei','42',1211),(4650,'Lop Buri','16',1211),(4651,'Mae Hong Son','58',1211),(4652,'Maha Sarakham','44',1211),(4653,'Mukdahan','49',1211),(4654,'Nakhon Nayok','26',1211),(4655,'Nakhon Pathom','73',1211),(4656,'Nakhon Phanom','48',1211),(4657,'Nakhon Ratchasima','30',1211),(4658,'Nakhon Sawan','60',1211),(4659,'Nakhon Si Thammarat','80',1211),(4660,'Nan','55',1211),(4661,'Narathiwat','96',1211),(4662,'Nong Bua Lam Phu','39',1211),(4663,'Nong Khai','43',1211),(4664,'Nonthaburi','12',1211),(4665,'Pathum Thani','13',1211),(4666,'Pattani','94',1211),(4667,'Phangnga','82',1211),(4668,'Phatthalung','93',1211),(4669,'Phayao','56',1211),(4670,'Phetchabun','67',1211),(4671,'Phetchaburi','76',1211),(4672,'Phichit','66',1211),(4673,'Phitsanulok','65',1211),(4674,'Phrae','54',1211),(4675,'Phra Nakhon Si Ayutthaya','14',1211),(4676,'Phuket','83',1211),(4677,'Prachin Buri','25',1211),(4678,'Prachuap Khiri Khan','77',1211),(4679,'Ranong','85',1211),(4680,'Ratchaburi','70',1211),(4681,'Rayong','21',1211),(4682,'Roi Et','45',1211),(4683,'Sa Kaeo','27',1211),(4684,'Sakon Nakhon','47',1211),(4685,'Samut Prakan','11',1211),(4686,'Samut Sakhon','74',1211),(4687,'Samut Songkhram','75',1211),(4688,'Saraburi','19',1211),(4689,'Satun','91',1211),(4690,'Sing Buri','17',1211),(4691,'Si Sa Ket','33',1211),(4692,'Songkhla','90',1211),(4693,'Sukhothai','64',1211),(4694,'Suphan Buri','72',1211),(4695,'Surat Thani','84',1211),(4696,'Surin','32',1211),(4697,'Tak','63',1211),(4698,'Trang','92',1211),(4699,'Trat','23',1211),(4700,'Ubon Ratchathani','34',1211),(4701,'Udon Thani','41',1211),(4702,'Uthai Thani','61',1211),(4703,'Uttaradit','53',1211),(4704,'Yala','95',1211),(4705,'Yasothon','35',1211),(4706,'Sughd','SU',1209),(4707,'Khatlon','KT',1209),(4708,'Gorno-Badakhshan','GB',1209),(4709,'Ahal','A',1220),(4710,'Balkan','B',1220),(4711,'Dasoguz','D',1220),(4712,'Lebap','L',1220),(4713,'Mary','M',1220),(4714,'Béja','31',1218),(4715,'Ben Arous','13',1218),(4716,'Bizerte','23',1218),(4717,'Gabès','81',1218),(4718,'Gafsa','71',1218),(4719,'Jendouba','32',1218),(4720,'Kairouan','41',1218),(4721,'Rasserine','42',1218),(4722,'Kebili','73',1218),(4723,'L\'Ariana','12',1218),(4724,'Le Ref','33',1218),(4725,'Mahdia','53',1218),(4726,'La Manouba','14',1218),(4727,'Medenine','82',1218),(4728,'Moneatir','52',1218),(4729,'Naboul','21',1218),(4730,'Sfax','61',1218),(4731,'Sidi Bouxid','43',1218),(4732,'Siliana','34',1218),(4733,'Sousse','51',1218),(4734,'Tataouine','83',1218),(4735,'Tozeur','72',1218),(4736,'Tunis','11',1218),(4737,'Zaghouan','22',1218),(4738,'Adana','01',1219),(4739,'Ad yaman','02',1219),(4740,'Afyon','03',1219),(4741,'Ag r','04',1219),(4742,'Aksaray','68',1219),(4743,'Amasya','05',1219),(4744,'Ankara','06',1219),(4745,'Antalya','07',1219),(4746,'Ardahan','75',1219),(4747,'Artvin','08',1219),(4748,'Aydin','09',1219),(4749,'Bal kesir','10',1219),(4750,'Bartin','74',1219),(4751,'Batman','72',1219),(4752,'Bayburt','69',1219),(4753,'Bilecik','11',1219),(4754,'Bingol','12',1219),(4755,'Bitlis','13',1219),(4756,'Bolu','14',1219),(4757,'Burdur','15',1219),(4758,'Bursa','16',1219),(4759,'Canakkale','17',1219),(4760,'Cankir','18',1219),(4761,'Corum','19',1219),(4762,'Denizli','20',1219),(4763,'Diyarbakir','21',1219),(4764,'Duzce','81',1219),(4765,'Edirne','22',1219),(4766,'Elazig','23',1219),(4767,'Erzincan','24',1219),(4768,'Erzurum','25',1219),(4769,'Eskis\'ehir','26',1219),(4770,'Gaziantep','27',1219),(4771,'Giresun','28',1219),(4772,'Gms\'hane','29',1219),(4773,'Hakkari','30',1219),(4774,'Hatay','31',1219),(4775,'Igidir','76',1219),(4776,'Isparta','32',1219),(4777,'Icel','33',1219),(4778,'Istanbul','34',1219),(4779,'Izmir','35',1219),(4780,'Kahramanmaras','46',1219),(4781,'Karabk','78',1219),(4782,'Karaman','70',1219),(4783,'Kars','36',1219),(4784,'Kastamonu','37',1219),(4785,'Kayseri','38',1219),(4786,'Kirikkale','71',1219),(4787,'Kirklareli','39',1219),(4788,'Kirs\'ehir','40',1219),(4789,'Kilis','79',1219),(4790,'Kocaeli','41',1219),(4791,'Konya','42',1219),(4792,'Ktahya','43',1219),(4793,'Malatya','44',1219),(4794,'Manisa','45',1219),(4795,'Mardin','47',1219),(4796,'Mugila','48',1219),(4797,'Mus','49',1219),(4798,'Nevs\'ehir','50',1219),(4799,'Nigide','51',1219),(4800,'Ordu','52',1219),(4801,'Osmaniye','80',1219),(4802,'Rize','53',1219),(4803,'Sakarya','54',1219),(4804,'Samsun','55',1219),(4805,'Siirt','56',1219),(4806,'Sinop','57',1219),(4807,'Sivas','58',1219),(4808,'S\'anliurfa','63',1219),(4809,'S\'rnak','73',1219),(4810,'Tekirdag','59',1219),(4811,'Tokat','60',1219),(4812,'Trabzon','61',1219),(4813,'Tunceli','62',1219),(4814,'Us\'ak','64',1219),(4815,'Van','65',1219),(4816,'Yalova','77',1219),(4817,'Yozgat','66',1219),(4818,'Zonguldak','67',1219),(4819,'Couva-Tabaquite-Talparo','CTT',1217),(4820,'Diego Martin','DMN',1217),(4821,'Eastern Tobago','ETO',1217),(4822,'Penal-Debe','PED',1217),(4823,'Princes Town','PRT',1217),(4824,'Rio Claro-Mayaro','RCM',1217),(4825,'Sangre Grande','SGE',1217),(4826,'San Juan-Laventille','SJL',1217),(4827,'Siparia','SIP',1217),(4828,'Tunapuna-Piarco','TUP',1217),(4829,'Western Tobago','WTO',1217),(4830,'Arima','ARI',1217),(4831,'Chaguanas','CHA',1217),(4832,'Point Fortin','PTF',1217),(4833,'Port of Spain','POS',1217),(4834,'San Fernando','SFO',1217),(4835,'Aileu','AL',1063),(4836,'Ainaro','AN',1063),(4837,'Bacucau','BA',1063),(4838,'Bobonaro','BO',1063),(4839,'Cova Lima','CO',1063),(4840,'Dili','DI',1063),(4841,'Ermera','ER',1063),(4842,'Laulem','LA',1063),(4843,'Liquica','LI',1063),(4844,'Manatuto','MT',1063),(4845,'Manafahi','MF',1063),(4846,'Oecussi','OE',1063),(4847,'Viqueque','VI',1063),(4848,'Changhua County','CHA',1208),(4849,'Chiayi County','CYQ',1208),(4850,'Hsinchu County','HSQ',1208),(4851,'Hualien County','HUA',1208),(4852,'Ilan County','ILA',1208),(4853,'Kaohsiung County','KHQ',1208),(4854,'Miaoli County','MIA',1208),(4855,'Nantou County','NAN',1208),(4856,'Penghu County','PEN',1208),(4857,'Pingtung County','PIF',1208),(4858,'Taichung County','TXQ',1208),(4859,'Tainan County','TNQ',1208),(4860,'Taipei County','TPQ',1208),(4861,'Taitung County','TTT',1208),(4862,'Taoyuan County','TAO',1208),(4863,'Yunlin County','YUN',1208),(4864,'Keelung City','KEE',1208),(4865,'Arusha','01',1210),(4866,'Dar-es-Salaam','02',1210),(4867,'Dodoma','03',1210),(4868,'Iringa','04',1210),(4869,'Kagera','05',1210),(4870,'Kaskazini Pemba','06',1210),(4871,'Kaskazini Unguja','07',1210),(4872,'Xigoma','08',1210),(4873,'Kilimanjaro','09',1210),(4874,'Rusini Pemba','10',1210),(4875,'Kusini Unguja','11',1210),(4876,'Lindi','12',1210),(4877,'Manyara','26',1210),(4878,'Mara','13',1210),(4879,'Mbeya','14',1210),(4880,'Mjini Magharibi','15',1210),(4881,'Morogoro','16',1210),(4882,'Mtwara','17',1210),(4883,'Pwani','19',1210),(4884,'Rukwa','20',1210),(4885,'Ruvuma','21',1210),(4886,'Shinyanga','22',1210),(4887,'Singida','23',1210),(4888,'Tabora','24',1210),(4889,'Tanga','25',1210),(4890,'Cherkas\'ka Oblast\'','71',1224),(4891,'Chernihivs\'ka Oblast\'','74',1224),(4892,'Chernivets\'ka Oblast\'','77',1224),(4893,'Dnipropetrovs\'ka Oblast\'','12',1224),(4894,'Donets\'ka Oblast\'','14',1224),(4895,'Ivano-Frankivs\'ka Oblast\'','26',1224),(4896,'Kharkivs\'ka Oblast\'','63',1224),(4897,'Khersons\'ka Oblast\'','65',1224),(4898,'Khmel\'nyts\'ka Oblast\'','68',1224),(4899,'Kirovohrads\'ka Oblast\'','35',1224),(4900,'Kyivs\'ka Oblast\'','32',1224),(4901,'Luhans\'ka Oblast\'','09',1224),(4902,'L\'vivs\'ka Oblast\'','46',1224),(4903,'Mykolaivs\'ka Oblast\'','48',1224),(4904,'Odes \'ka Oblast\'','51',1224),(4905,'Poltavs\'ka Oblast\'','53',1224),(4906,'Rivnens\'ka Oblast\'','56',1224),(4907,'Sums \'ka Oblast\'','59',1224),(4908,'Ternopil\'s\'ka Oblast\'','61',1224),(4909,'Vinnyts\'ka Oblast\'','05',1224),(4910,'Volyos\'ka Oblast\'','07',1224),(4911,'Zakarpats\'ka Oblast\'','21',1224),(4912,'Zaporiz\'ka Oblast\'','23',1224),(4913,'Zhytomyrs\'ka Oblast\'','18',1224),(4914,'Respublika Krym','43',1224),(4915,'Kyiv','30',1224),(4916,'Sevastopol','40',1224),(4917,'Adjumani','301',1223),(4918,'Apac','302',1223),(4919,'Arua','303',1223),(4920,'Bugiri','201',1223),(4921,'Bundibugyo','401',1223),(4922,'Bushenyi','402',1223),(4923,'Busia','202',1223),(4924,'Gulu','304',1223),(4925,'Hoima','403',1223),(4926,'Iganga','203',1223),(4927,'Jinja','204',1223),(4928,'Kabale','404',1223),(4929,'Kabarole','405',1223),(4930,'Kaberamaido','213',1223),(4931,'Kalangala','101',1223),(4932,'Kampala','102',1223),(4933,'Kamuli','205',1223),(4934,'Kamwenge','413',1223),(4935,'Kanungu','414',1223),(4936,'Kapchorwa','206',1223),(4937,'Kasese','406',1223),(4938,'Katakwi','207',1223),(4939,'Kayunga','112',1223),(4940,'Kibaale','407',1223),(4941,'Kiboga','103',1223),(4942,'Kisoro','408',1223),(4943,'Kitgum','305',1223),(4944,'Kotido','306',1223),(4945,'Kumi','208',1223),(4946,'Kyenjojo','415',1223),(4947,'Lira','307',1223),(4948,'Luwero','104',1223),(4949,'Masaka','105',1223),(4950,'Masindi','409',1223),(4951,'Mayuge','214',1223),(4952,'Mbale','209',1223),(4953,'Mbarara','410',1223),(4954,'Moroto','308',1223),(4955,'Moyo','309',1223),(4956,'Mpigi','106',1223),(4957,'Mubende','107',1223),(4958,'Mukono','108',1223),(4959,'Nakapiripirit','311',1223),(4960,'Nakasongola','109',1223),(4961,'Nebbi','310',1223),(4962,'Ntungamo','411',1223),(4963,'Pader','312',1223),(4964,'Pallisa','210',1223),(4965,'Rakai','110',1223),(4966,'Rukungiri','412',1223),(4967,'Sembabule','111',1223),(4968,'Sironko','215',1223),(4969,'Soroti','211',1223),(4970,'Tororo','212',1223),(4971,'Wakiso','113',1223),(4972,'Yumbe','313',1223),(4973,'Baker Island','81',1227),(4974,'Howland Island','84',1227),(4975,'Jarvis Island','86',1227),(4976,'Johnston Atoll','67',1227),(4977,'Kingman Reef','89',1227),(4978,'Midway Islands','71',1227),(4979,'Navassa Island','76',1227),(4980,'Palmyra Atoll','95',1227),(4981,'Wake Island','79',1227),(4982,'Artigsa','AR',1229),(4983,'Canelones','CA',1229),(4984,'Cerro Largo','CL',1229),(4985,'Colonia','CO',1229),(4986,'Durazno','DU',1229),(4987,'Flores','FS',1229),(4988,'Lavalleja','LA',1229),(4989,'Maldonado','MA',1229),(4990,'Montevideo','MO',1229),(4991,'Paysandu','PA',1229),(4992,'Rivera','RV',1229),(4993,'Rocha','RO',1229),(4994,'Salto','SA',1229),(4995,'Soriano','SO',1229),(4996,'Tacuarembo','TA',1229),(4997,'Treinta y Tres','TT',1229),(4998,'Toshkent (city)','TK',1230),(4999,'Qoraqalpogiston Respublikasi','QR',1230),(5000,'Andijon','AN',1230),(5001,'Buxoro','BU',1230),(5002,'Farg\'ona','FA',1230),(5003,'Jizzax','JI',1230),(5004,'Khorazm','KH',1230),(5005,'Namangan','NG',1230),(5006,'Navoiy','NW',1230),(5007,'Qashqadaryo','QA',1230),(5008,'Samarqand','SA',1230),(5009,'Sirdaryo','SI',1230),(5010,'Surxondaryo','SU',1230),(5011,'Toshkent','TO',1230),(5012,'Xorazm','XO',1230),(5013,'Distrito Federal','A',1232),(5014,'Anzoategui','B',1232),(5015,'Apure','C',1232),(5016,'Aragua','D',1232),(5017,'Barinas','E',1232),(5018,'Carabobo','G',1232),(5019,'Cojedes','H',1232),(5020,'Falcon','I',1232),(5021,'Guarico','J',1232),(5022,'Lara','K',1232),(5023,'Merida','L',1232),(5024,'Miranda','M',1232),(5025,'Monagas','N',1232),(5026,'Nueva Esparta','O',1232),(5027,'Portuguesa','P',1232),(5028,'Tachira','S',1232),(5029,'Trujillo','T',1232),(5030,'Vargas','X',1232),(5031,'Yaracuy','U',1232),(5032,'Zulia','V',1232),(5033,'Delta Amacuro','Y',1232),(5034,'Dependencias Federales','W',1232),(5035,'An Giang','44',1233),(5036,'Ba Ria - Vung Tau','43',1233),(5037,'Bac Can','53',1233),(5038,'Bac Giang','54',1233),(5039,'Bac Lieu','55',1233),(5040,'Bac Ninh','56',1233),(5041,'Ben Tre','50',1233),(5042,'Binh Dinh','31',1233),(5043,'Binh Duong','57',1233),(5044,'Binh Phuoc','58',1233),(5045,'Binh Thuan','40',1233),(5046,'Ca Mau','59',1233),(5047,'Can Tho','48',1233),(5048,'Cao Bang','04',1233),(5049,'Da Nang, thanh pho','60',1233),(5050,'Dong Nai','39',1233),(5051,'Dong Thap','45',1233),(5052,'Gia Lai','30',1233),(5053,'Ha Giang','03',1233),(5054,'Ha Nam','63',1233),(5055,'Ha Noi, thu do','64',1233),(5056,'Ha Tay','15',1233),(5057,'Ha Tinh','23',1233),(5058,'Hai Duong','61',1233),(5059,'Hai Phong, thanh pho','62',1233),(5060,'Hoa Binh','14',1233),(5061,'Ho Chi Minh, thanh pho [Sai Gon]','65',1233),(5062,'Hung Yen','66',1233),(5063,'Khanh Hoa','34',1233),(5064,'Kien Giang','47',1233),(5065,'Kon Tum','28',1233),(5066,'Lai Chau','01',1233),(5067,'Lam Dong','35',1233),(5068,'Lang Son','09',1233),(5069,'Lao Cai','02',1233),(5070,'Long An','41',1233),(5071,'Nam Dinh','67',1233),(5072,'Nghe An','22',1233),(5073,'Ninh Binh','18',1233),(5074,'Ninh Thuan','36',1233),(5075,'Phu Tho','68',1233),(5076,'Phu Yen','32',1233),(5077,'Quang Binh','24',1233),(5078,'Quang Nam','27',1233),(5079,'Quang Ngai','29',1233),(5080,'Quang Ninh','13',1233),(5081,'Quang Tri','25',1233),(5082,'Soc Trang','52',1233),(5083,'Son La','05',1233),(5084,'Tay Ninh','37',1233),(5085,'Thai Binh','20',1233),(5086,'Thai Nguyen','69',1233),(5087,'Thanh Hoa','21',1233),(5088,'Thua Thien-Hue','26',1233),(5089,'Tien Giang','46',1233),(5090,'Tra Vinh','51',1233),(5091,'Tuyen Quang','07',1233),(5092,'Vinh Long','49',1233),(5093,'Vinh Phuc','70',1233),(5094,'Yen Bai','06',1233),(5095,'Malampa','MAP',1231),(5096,'Penama','PAM',1231),(5097,'Sanma','SAM',1231),(5098,'Shefa','SEE',1231),(5099,'Tafea','TAE',1231),(5100,'Torba','TOB',1231),(5101,'A\'ana','AA',1185),(5102,'Aiga-i-le-Tai','AL',1185),(5103,'Atua','AT',1185),(5104,'Fa\'aaaleleaga','FA',1185),(5105,'Gaga\'emauga','GE',1185),(5106,'Gagaifomauga','GI',1185),(5107,'Palauli','PA',1185),(5108,'Satupa\'itea','SA',1185),(5109,'Tuamasaga','TU',1185),(5110,'Va\'a-o-Fonoti','VF',1185),(5111,'Vaisigano','VS',1185),(5112,'Crna Gora','CG',1243),(5113,'Srbija','SR',1242),(5114,'Kosovo-Metohija','KM',1242),(5115,'Vojvodina','VO',1242),(5116,'Abyan','AB',1237),(5117,'Adan','AD',1237),(5118,'Ad Dali','DA',1237),(5119,'Al Bayda\'','BA',1237),(5120,'Al Hudaydah','MU',1237),(5121,'Al Mahrah','MR',1237),(5122,'Al Mahwit','MW',1237),(5123,'Amran','AM',1237),(5124,'Dhamar','DH',1237),(5125,'Hadramawt','HD',1237),(5126,'Hajjah','HJ',1237),(5127,'Ibb','IB',1237),(5128,'Lahij','LA',1237),(5129,'Ma\'rib','MA',1237),(5130,'Sa\'dah','SD',1237),(5131,'San\'a\'','SN',1237),(5132,'Shabwah','SH',1237),(5133,'Ta\'izz','TA',1237),(5134,'Eastern Cape','EC',1196),(5135,'Free State','FS',1196),(5136,'Gauteng','GT',1196),(5137,'Kwazulu-Natal','NL',1196),(5138,'Mpumalanga','MP',1196),(5139,'Northern Cape','NC',1196),(5140,'Limpopo','NP',1196),(5141,'Western Cape','WC',1196),(5142,'Copperbelt','08',1239),(5143,'Luapula','04',1239),(5144,'Lusaka','09',1239),(5145,'North-Western','06',1239),(5146,'Bulawayo','BU',1240),(5147,'Harare','HA',1240),(5148,'Manicaland','MA',1240),(5149,'Mashonaland Central','MC',1240),(5150,'Mashonaland East','ME',1240),(5151,'Mashonaland West','MW',1240),(5152,'Masvingo','MV',1240),(5153,'Matabeleland North','MN',1240),(5154,'Matabeleland South','MS',1240),(5155,'Midlands','MI',1240),(5156,'South Karelia','SK',1075),(5157,'South Ostrobothnia','SO',1075),(5158,'Etelä-Savo','ES',1075),(5159,'Häme','HH',1075),(5160,'Itä-Uusimaa','IU',1075),(5161,'Kainuu','KA',1075),(5162,'Central Ostrobothnia','CO',1075),(5163,'Central Finland','CF',1075),(5164,'Kymenlaakso','KY',1075),(5165,'Lapland','LA',1075),(5166,'Tampere Region','TR',1075),(5167,'Ostrobothnia','OB',1075),(5168,'North Karelia','NK',1075),(5169,'Northern Ostrobothnia','NO',1075),(5170,'Northern Savo','NS',1075),(5171,'Päijät-Häme','PH',1075),(5172,'Satakunta','SK',1075),(5173,'Uusimaa','UM',1075),(5174,'South-West Finland','SW',1075),(5175,'Ã…land','AL',1075),(5176,'Limburg','LI',1152),(5177,'Central and Western','CW',1098),(5178,'Eastern','EA',1098),(5179,'Southern','SO',1098),(5180,'Wan Chai','WC',1098),(5181,'Kowloon City','KC',1098),(5182,'Kwun Tong','KU',1098),(5183,'Sham Shui Po','SS',1098),(5184,'Wong Tai Sin','WT',1098),(5185,'Yau Tsim Mong','YT',1098),(5186,'Islands','IS',1098),(5187,'Kwai Tsing','KI',1098),(5188,'North','NO',1098),(5189,'Sai Kung','SK',1098),(5190,'Sha Tin','ST',1098),(5191,'Tai Po','TP',1098),(5192,'Tsuen Wan','TW',1098),(5193,'Tuen Mun','TM',1098),(5194,'Yuen Long','YL',1098),(5195,'Manchester','MR',1108),(5196,'Al ManÄmah (Al ‘Āşimah)','13',1016),(5197,'Al JanÅ«bÄ«yah','14',1016),(5199,'Al Wusţá','16',1016),(5200,'Ash ShamÄlÄ«yah','17',1016),(5201,'Jenin','_A',1165),(5202,'Tubas','_B',1165),(5203,'Tulkarm','_C',1165),(5204,'Nablus','_D',1165),(5205,'Qalqilya','_E',1165),(5206,'Salfit','_F',1165),(5207,'Ramallah and Al-Bireh','_G',1165),(5208,'Jericho','_H',1165),(5209,'Jerusalem','_I',1165),(5210,'Bethlehem','_J',1165),(5211,'Hebron','_K',1165),(5212,'North Gaza','_L',1165),(5213,'Gaza','_M',1165),(5214,'Deir el-Balah','_N',1165),(5215,'Khan Yunis','_O',1165),(5216,'Rafah','_P',1165),(5217,'Brussels','BRU',1020),(5218,'Distrito Federal','DIF',1140),(5219,'Taichung City','TXG',1208),(5220,'Kaohsiung City','KHH',1208),(5221,'Taipei City','TPE',1208),(5222,'Chiayi City','CYI',1208),(5223,'Hsinchu City','HSZ',1208),(5224,'Tainan City','TNN',1208),(9000,'North West','NW',1196),(9986,'Tyne and Wear','TWR',1226),(9988,'Greater Manchester','GTM',1226),(9989,'Co Tyrone','TYR',1226),(9990,'West Yorkshire','WYK',1226),(9991,'South Yorkshire','SYK',1226),(9992,'Merseyside','MSY',1226),(9993,'Berkshire','BRK',1226),(9994,'West Midlands','WMD',1226),(9998,'West Glamorgan','WGM',1226),(9999,'London','LON',1226),(10000,'Carbonia-Iglesias','CI',1107),(10001,'Olbia-Tempio','OT',1107),(10002,'Medio Campidano','VS',1107),(10003,'Ogliastra','OG',1107),(10009,'Jura','39',1076),(10010,'Barletta-Andria-Trani','Bar',1107),(10011,'Fermo','Fer',1107),(10012,'Monza e Brianza','Mon',1107),(10013,'Clwyd','CWD',1226),(10014,'Dyfed','DFD',1226),(10015,'South Glamorgan','SGM',1226),(10016,'Artibonite','AR',1094),(10017,'Centre','CE',1094),(10018,'Nippes','NI',1094),(10019,'Nord','ND',1094),(10020,'La Rioja','F',1010),(10021,'Andorra la Vella','07',1005),(10022,'Canillo','02',1005),(10023,'Encamp','03',1005),(10024,'Escaldes-Engordany','08',1005),(10025,'La Massana','04',1005),(10026,'Ordino','05',1005),(10027,'Sant Julia de Loria','06',1005),(10028,'Abaco Islands','AB',1212),(10029,'Andros Island','AN',1212),(10030,'Berry Islands','BR',1212),(10031,'Eleuthera','EL',1212),(10032,'Grand Bahama','GB',1212),(10033,'Rum Cay','RC',1212),(10034,'San Salvador Island','SS',1212),(10035,'Kongo central','01',1050),(10036,'Kwango','02',1050),(10037,'Kwilu','03',1050),(10038,'Mai-Ndombe','04',1050),(10039,'Kasai','05',1050),(10040,'Lulua','06',1050),(10041,'Lomami','07',1050),(10042,'Sankuru','08',1050),(10043,'Ituri','09',1050),(10044,'Haut-Uele','10',1050),(10045,'Tshopo','11',1050),(10046,'Bas-Uele','12',1050),(10047,'Nord-Ubangi','13',1050),(10048,'Mongala','14',1050),(10049,'Sud-Ubangi','15',1050),(10050,'Tshuapa','16',1050),(10051,'Haut-Lomami','17',1050),(10052,'Lualaba','18',1050),(10053,'Haut-Katanga','19',1050),(10054,'Tanganyika','20',1050),(10055,'Toledo','TO',1198),(10056,'Córdoba','CO',1198),(10057,'Metropolitan Manila','MNL',1170),(10058,'La Paz','LP',1097),(10059,'Yinchuan','YN',1045),(10060,'Shizuishan','SZ',1045),(10061,'Wuzhong','WZ',1045),(10062,'Guyuan','GY',1045),(10063,'Zhongwei','ZW',1045),(10064,'Luxembourg','L',1126),(10065,'Aizkraukles novads','002',1119),(10066,'Jaunjelgavas novads','038',1119),(10067,'Pļaviņu novads','072',1119),(10068,'Kokneses novads','046',1119),(10069,'Neretas novads','065',1119),(10070,'SkrÄ«veru novads','092',1119),(10071,'AlÅ«ksnes novads','007',1119),(10072,'Apes novads','009',1119),(10073,'Balvu novads','015',1119),(10074,'Viļakas novads','108',1119),(10075,'Baltinavas novads','014',1119),(10076,'RugÄju novads','082',1119),(10077,'Bauskas novads','016',1119),(10078,'Iecavas novads','034',1119),(10079,'RundÄles novads','083',1119),(10080,'Vecumnieku novads','105',1119),(10081,'CÄ“su novads','022',1119),(10082,'LÄ«gatnes novads','055',1119),(10083,'Amatas novads','008',1119),(10084,'Jaunpiebalgas novads','039',1119),(10085,'Priekuļu novads','075',1119),(10086,'PÄrgaujas novads','070',1119),(10087,'Raunas novads','076',1119),(10088,'Vecpiebalgas novads','104',1119),(10089,'Daugavpils novads','025',1119),(10090,'IlÅ«kstes novads','036',1119),(10091,'Dobeles novads','026',1119),(10092,'Auces novads','010',1119),(10093,'TÄ“rvetes novads','098',1119),(10094,'Gulbenes novads','033',1119),(10095,'Jelgavas novads','041',1119),(10096,'Ozolnieku novads','069',1119),(10097,'JÄ“kabpils novads','042',1119),(10098,'AknÄ«stes novads','004',1119),(10099,'ViesÄ«tes novads','107',1119),(10100,'Krustpils novads','049',1119),(10101,'Salas novads','085',1119),(10102,'KrÄslavas novads','047',1119),(10103,'Dagdas novads','024',1119),(10104,'Aglonas novads','001',1119),(10105,'KuldÄ«gas novads','050',1119),(10106,'Skrundas novads','093',1119),(10107,'Alsungas novads','006',1119),(10108,'Aizputes novads','003',1119),(10109,'Durbes novads','028',1119),(10110,'Grobiņas novads','032',1119),(10111,'PÄvilostas novads','071',1119),(10112,'Priekules novads','074',1119),(10113,'NÄ«cas novads','066',1119),(10114,'Rucavas novads','081',1119),(10115,'Vaiņodes novads','100',1119),(10116,'Limbažu novads','054',1119),(10117,'Alojas novads','005',1119),(10118,'SalacgrÄ«vas novads','086',1119),(10119,'Ludzas novads','058',1119),(10120,'KÄrsavas novads','044',1119),(10121,'Zilupes novads','110',1119),(10122,'Ciblas novads','023',1119),(10123,'Madonas novads','059',1119),(10124,'Cesvaines novads','021',1119),(10125,'LubÄnas novads','057',1119),(10126,'VarakļÄnu novads','102',1119),(10127,'Ä’rgļu novads','030',1119),(10128,'Ogres novads','067',1119),(10129,'IkÅ¡Ä·iles novads','035',1119),(10130,'Ķeguma novads','051',1119),(10131,'LielvÄrdes novads','053',1119),(10132,'Preiļu novads','073',1119),(10133,'LÄ«vÄnu novads','056',1119),(10134,'Riebiņu novads','078',1119),(10135,'VÄrkavas novads','103',1119),(10136,'RÄ“zeknes novads','077',1119),(10137,'ViļÄnu novads','109',1119),(10138,'Baldones novads','013',1119),(10139,'Ķekavas novads','052',1119),(10140,'Olaines novads','068',1119),(10141,'Salaspils novads','087',1119),(10142,'Saulkrastu novads','089',1119),(10143,'Siguldas novads','091',1119),(10144,'InÄukalna novads','037',1119),(10145,'Ä€dažu novads','011',1119),(10146,'BabÄ«tes novads','012',1119),(10147,'Carnikavas novads','020',1119),(10148,'Garkalnes novads','031',1119),(10149,'Krimuldas novads','048',1119),(10150,'MÄlpils novads','061',1119),(10151,'MÄrupes novads','062',1119),(10152,'Ropažu novads','080',1119),(10153,'SÄ“jas novads','090',1119),(10154,'Stopiņu novads','095',1119),(10155,'Saldus novads','088',1119),(10156,'BrocÄ“nu novads','018',1119),(10157,'Talsu novads','097',1119),(10158,'Dundagas novads','027',1119),(10159,'MÄ“rsraga novads','063',1119),(10160,'Rojas novads','079',1119),(10161,'Tukuma novads','099',1119),(10162,'Kandavas novads','043',1119),(10163,'Engures novads','029',1119),(10164,'Jaunpils novads','040',1119),(10165,'Valkas novads','101',1119),(10166,'Smiltenes novads','094',1119),(10167,'StrenÄu novads','096',1119),(10168,'KocÄ“nu novads','045',1119),(10169,'Mazsalacas novads','060',1119),(10170,'RÅ«jienas novads','084',1119),(10171,'BeverÄ«nas novads','017',1119),(10172,'Burtnieku novads','019',1119),(10173,'NaukÅ¡Ä“nu novads','064',1119),(10174,'Ventspils novads','106',1119),(10175,'JÄ“kabpils','JKB',1119),(10176,'Valmiera','VMR',1119),(10177,'Florida','FL',1229),(10178,'Rio Negro','RN',1229),(10179,'San Jose','SJ',1229),(10180,'Plateau','PL',1157),(10181,'Pieria','61',1085),(10182,'Los Rios','LR',1044),(10183,'Arica y Parinacota','AP',1044),(10184,'Amazonas','AMA',1169),(10185,'Kalimantan Tengah','KT',1102),(10186,'Sulawesi Barat','SR',1102),(10187,'Kalimantan Utara','KU',1102),(10188,'Ankaran','86',1193),(10189,'ApaÄe','87',1193),(10190,'Cirkulane','88',1193),(10191,'Gorje','89',1193),(10192,'Kostanjevica na Krki','90',1193),(10193,'Log-Dragomer','91',1193),(10194,'Makole','92',1193),(10195,'Mirna','93',1193),(10196,'Mokronog-Trebelno','94',1193),(10197,'Odranci','95',1193),(10198,'Oplotnica','96',1193),(10199,'Ormož','97',1193),(10200,'Osilnica','98',1193),(10201,'Pesnica','99',1193),(10202,'Piran','100',1193),(10203,'Pivka','101',1193),(10204,'PodÄetrtek','102',1193),(10205,'Podlehnik','103',1193),(10206,'Podvelka','104',1193),(10207,'PoljÄane','105',1193),(10208,'Polzela','106',1193),(10209,'Postojna','107',1193),(10210,'Prebold','108',1193),(10211,'Preddvor','109',1193),(10212,'Prevalje','110',1193),(10213,'Ptuj','111',1193),(10214,'Puconci','112',1193),(10215,'RaÄe-Fram','113',1193),(10216,'RadeÄe','114',1193),(10217,'Radenci','115',1193),(10218,'Radlje ob Dravi','139',1193),(10219,'Radovljica','145',1193),(10220,'Ravne na KoroÅ¡kem','171',1193),(10221,'Razkrižje','172',1193),(10222,'ReÄica ob Savinji','173',1193),(10223,'RenÄe-Vogrsko','174',1193),(10224,'Ribnica','175',1193),(10225,'Ribnica na Pohorju','176',1193),(10226,'RogaÅ¡ka Slatina','177',1193),(10227,'RogaÅ¡ovci','178',1193),(10228,'Rogatec','179',1193),(10229,'RuÅ¡e','180',1193),(10230,'Selnica ob Dravi','195',1193),(10231,'SemiÄ','196',1193),(10232,'Å entrupert','197',1193),(10233,'Sevnica','198',1193),(10234,'Sežana','199',1193),(10235,'Slovenj Gradec','200',1193),(10236,'Slovenska Bistrica','201',1193),(10237,'Slovenske Konjice','202',1193),(10238,'Å marjeÅ¡ke Toplice','203',1193),(10239,'Sodražica','204',1193),(10240,'SolÄava','205',1193),(10241,'SrediÅ¡Äe ob Dravi','206',1193),(10242,'StarÅ¡e','207',1193),(10243,'Straža','208',1193),(10244,'Sveta Trojica v Slovenskih goricah','209',1193),(10245,'Sveti Jurij v Slovenskih goricah','210',1193),(10246,'Sveti Tomaž','211',1193),(10247,'Vodice','212',1193),(10248,'Abkhazia','AB',1081),(10249,'Adjara','AJ',1081),(10250,'Tbilisi','TB',1081),(10251,'Guria','GU',1081),(10252,'Imereti','IM',1081),(10253,'Kakheti','KA',1081),(10254,'Kvemo Kartli','KK',1081),(10255,'Mtskheta-Mtianeti','MM',1081),(10256,'Racha-Lechkhumi and Kvemo Svaneti','RL',1081),(10257,'Samegrelo-Zemo Svaneti','SZ',1081),(10258,'Samtskhe-Javakheti','SJ',1081),(10259,'Shida Kartli','SK',1081),(10260,'Central','C',1074),(10261,'Punjab','PB',1163),(10262,'La Libertad','LI',1066),(10263,'La Paz','PA',1066),(10264,'La Union','UN',1066),(10265,'Littoral','LT',1038),(10266,'Nord-Ouest','NW',1038),(10267,'Telangana','TG',1101),(10268,'Ash Sharqiyah','04',1187),(10269,'Guadeloupe','GP',1076),(10270,'Martinique','MQ',1076),(10271,'Guyane','GF',1076),(10272,'La Réunion','RE',1076),(10273,'Mayotte','YT',1076),(10274,'Baringo','01',1112),(10275,'Bomet','02',1112),(10276,'Bungoma','03',1112),(10277,'Busia','04',1112),(10278,'Elgeyo/Marakwet','05',1112),(10279,'Embu','06',1112),(10280,'Garissa','07',1112),(10281,'Homa Bay','08',1112),(10282,'Isiolo','09',1112),(10283,'Kajiado','10',1112),(10284,'Kakamega','11',1112),(10285,'Kericho','12',1112),(10286,'Kiambu','13',1112),(10287,'Kilifi','14',1112),(10288,'Kirinyaga','15',1112),(10289,'Kisii','16',1112),(10290,'Kisumu','17',1112),(10291,'Kitui','18',1112),(10292,'Kwale','19',1112),(10293,'Laikipia','20',1112),(10294,'Lamu','21',1112),(10295,'Machakos','22',1112),(10296,'Makueni','23',1112),(10297,'Mandera','24',1112),(10298,'Marsabit','25',1112),(10299,'Meru','26',1112),(10300,'Migori','27',1112),(10301,'Mombasa','28',1112),(10302,'Murang\'a','29',1112),(10303,'Nairobi City','30',1112),(10304,'Nakuru','31',1112),(10305,'Nandi','32',1112),(10306,'Narok','33',1112),(10307,'Nyamira','34',1112),(10308,'Nyandarua','35',1112),(10309,'Nyeri','36',1112),(10310,'Samburu','37',1112),(10311,'Siaya','38',1112),(10312,'Taita/Taveta','39',1112),(10313,'Tana River','40',1112),(10314,'Tharaka-Nithi','41',1112),(10315,'Trans Nzoia','42',1112),(10316,'Turkana','43',1112),(10317,'Uasin Gishu','44',1112),(10318,'Vihiga','45',1112),(10319,'Wajir','46',1112),(10320,'West Pokot','47',1112),(10321,'Chandigarh','CH',1101),(10322,'Central','CP',1083),(10323,'Eastern','EP',1083),(10324,'Northern','NP',1083),(10325,'Western','WP',1083),(10326,'Saint Kitts','K',1181),(10327,'Nevis','N',1181),(10328,'Eastern','E',1190),(10329,'Northern','N',1190),(10330,'Southern','S',1190),(10331,'Dushanbe','DU',1209),(10332,'Nohiyahoi Tobei JumhurÃ','RA',1209),(10333,'Wallis-et-Futuna','WF',1076),(10334,'Nouvelle-Calédonie','NC',1076),(10335,'Haute-Marne','52',1076),(10336,'Saint George','03',1009),(10337,'Saint John','04',1009),(10338,'Saint Mary','05',1009),(10339,'Saint Paul','06',1009),(10340,'Saint Peter','07',1009),(10341,'Saint Philip','08',1009),(10342,'Barbuda','10',1009),(10343,'Redonda','11',1009),(10344,'Christ Church','01',1018),(10345,'Saint Andrew','02',1018),(10346,'Saint George','03',1018),(10347,'Saint James','04',1018),(10348,'Saint John','05',1018),(10349,'Saint Joseph','06',1018),(10350,'Saint Lucy','07',1018),(10351,'Saint Michael','08',1018),(10352,'Saint Peter','09',1018),(10353,'Saint Philip','10',1018),(10354,'Saint Thomas','11',1018); +INSERT INTO `civicrm_state_province` (`id`, `name`, `abbreviation`, `country_id`) VALUES (1000,'Alabama','AL',1228),(1001,'Alaska','AK',1228),(1002,'Arizona','AZ',1228),(1003,'Arkansas','AR',1228),(1004,'California','CA',1228),(1005,'Colorado','CO',1228),(1006,'Connecticut','CT',1228),(1007,'Delaware','DE',1228),(1008,'Florida','FL',1228),(1009,'Georgia','GA',1228),(1010,'Hawaii','HI',1228),(1011,'Idaho','ID',1228),(1012,'Illinois','IL',1228),(1013,'Indiana','IN',1228),(1014,'Iowa','IA',1228),(1015,'Kansas','KS',1228),(1016,'Kentucky','KY',1228),(1017,'Louisiana','LA',1228),(1018,'Maine','ME',1228),(1019,'Maryland','MD',1228),(1020,'Massachusetts','MA',1228),(1021,'Michigan','MI',1228),(1022,'Minnesota','MN',1228),(1023,'Mississippi','MS',1228),(1024,'Missouri','MO',1228),(1025,'Montana','MT',1228),(1026,'Nebraska','NE',1228),(1027,'Nevada','NV',1228),(1028,'New Hampshire','NH',1228),(1029,'New Jersey','NJ',1228),(1030,'New Mexico','NM',1228),(1031,'New York','NY',1228),(1032,'North Carolina','NC',1228),(1033,'North Dakota','ND',1228),(1034,'Ohio','OH',1228),(1035,'Oklahoma','OK',1228),(1036,'Oregon','OR',1228),(1037,'Pennsylvania','PA',1228),(1038,'Rhode Island','RI',1228),(1039,'South Carolina','SC',1228),(1040,'South Dakota','SD',1228),(1041,'Tennessee','TN',1228),(1042,'Texas','TX',1228),(1043,'Utah','UT',1228),(1044,'Vermont','VT',1228),(1045,'Virginia','VA',1228),(1046,'Washington','WA',1228),(1047,'West Virginia','WV',1228),(1048,'Wisconsin','WI',1228),(1049,'Wyoming','WY',1228),(1050,'District of Columbia','DC',1228),(1052,'American Samoa','AS',1228),(1053,'Guam','GU',1228),(1055,'Northern Mariana Islands','MP',1228),(1056,'Puerto Rico','PR',1228),(1057,'Virgin Islands','VI',1228),(1058,'United States Minor Outlying Islands','UM',1228),(1059,'Armed Forces Europe','AE',1228),(1060,'Armed Forces Americas','AA',1228),(1061,'Armed Forces Pacific','AP',1228),(1100,'Alberta','AB',1039),(1101,'British Columbia','BC',1039),(1102,'Manitoba','MB',1039),(1103,'New Brunswick','NB',1039),(1104,'Newfoundland and Labrador','NL',1039),(1105,'Northwest Territories','NT',1039),(1106,'Nova Scotia','NS',1039),(1107,'Nunavut','NU',1039),(1108,'Ontario','ON',1039),(1109,'Prince Edward Island','PE',1039),(1110,'Quebec','QC',1039),(1111,'Saskatchewan','SK',1039),(1112,'Yukon Territory','YT',1039),(1200,'Maharashtra','MM',1101),(1201,'Karnataka','KA',1101),(1202,'Andhra Pradesh','AP',1101),(1203,'Arunachal Pradesh','AR',1101),(1204,'Assam','AS',1101),(1205,'Bihar','BR',1101),(1206,'Chhattisgarh','CH',1101),(1207,'Goa','GA',1101),(1208,'Gujarat','GJ',1101),(1209,'Haryana','HR',1101),(1210,'Himachal Pradesh','HP',1101),(1211,'Jammu and Kashmir','JK',1101),(1212,'Jharkhand','JH',1101),(1213,'Kerala','KL',1101),(1214,'Madhya Pradesh','MP',1101),(1215,'Manipur','MN',1101),(1216,'Meghalaya','ML',1101),(1217,'Mizoram','MZ',1101),(1218,'Nagaland','NL',1101),(1219,'Orissa','OR',1101),(1220,'Punjab','PB',1101),(1221,'Rajasthan','RJ',1101),(1222,'Sikkim','SK',1101),(1223,'Tamil Nadu','TN',1101),(1224,'Tripura','TR',1101),(1225,'Uttarakhand','UT',1101),(1226,'Uttar Pradesh','UP',1101),(1227,'West Bengal','WB',1101),(1228,'Andaman and Nicobar Islands','AN',1101),(1229,'Dadra and Nagar Haveli','DN',1101),(1230,'Daman and Diu','DD',1101),(1231,'Delhi','DL',1101),(1232,'Lakshadweep','LD',1101),(1233,'Pondicherry','PY',1101),(1300,'mazowieckie','MZ',1172),(1301,'pomorskie','PM',1172),(1302,'dolnoÅ›lÄ…skie','DS',1172),(1303,'kujawsko-pomorskie','KP',1172),(1304,'lubelskie','LU',1172),(1305,'lubuskie','LB',1172),(1306,'łódzkie','LD',1172),(1307,'maÅ‚opolskie','MA',1172),(1308,'opolskie','OP',1172),(1309,'podkarpackie','PK',1172),(1310,'podlaskie','PD',1172),(1311,'Å›lÄ…skie','SL',1172),(1312,'Å›wiÄ™tokrzyskie','SK',1172),(1313,'warmiÅ„sko-mazurskie','WN',1172),(1314,'wielkopolskie','WP',1172),(1315,'zachodniopomorskie','ZP',1172),(1500,'Abu Zaby','AZ',1225),(1501,'\'Ajman','AJ',1225),(1502,'Al Fujayrah','FU',1225),(1503,'Ash Shariqah','SH',1225),(1504,'Dubayy','DU',1225),(1505,'Ra\'s al Khaymah','RK',1225),(1506,'Dac Lac','33',1233),(1507,'Umm al Qaywayn','UQ',1225),(1508,'Badakhshan','BDS',1001),(1509,'Badghis','BDG',1001),(1510,'Baghlan','BGL',1001),(1511,'Balkh','BAL',1001),(1512,'Bamian','BAM',1001),(1513,'Farah','FRA',1001),(1514,'Faryab','FYB',1001),(1515,'Ghazni','GHA',1001),(1516,'Ghowr','GHO',1001),(1517,'Helmand','HEL',1001),(1518,'Herat','HER',1001),(1519,'Jowzjan','JOW',1001),(1520,'Kabul','KAB',1001),(1521,'Kandahar','KAN',1001),(1522,'Kapisa','KAP',1001),(1523,'Khowst','KHO',1001),(1524,'Konar','KNR',1001),(1525,'Kondoz','KDZ',1001),(1526,'Laghman','LAG',1001),(1527,'Lowgar','LOW',1001),(1528,'Nangrahar','NAN',1001),(1529,'Nimruz','NIM',1001),(1530,'Nurestan','NUR',1001),(1531,'Oruzgan','ORU',1001),(1532,'Paktia','PIA',1001),(1533,'Paktika','PKA',1001),(1534,'Parwan','PAR',1001),(1535,'Samangan','SAM',1001),(1536,'Sar-e Pol','SAR',1001),(1537,'Takhar','TAK',1001),(1538,'Wardak','WAR',1001),(1539,'Zabol','ZAB',1001),(1540,'Berat','BR',1002),(1541,'Bulqizë','BU',1002),(1542,'Delvinë','DL',1002),(1543,'Devoll','DV',1002),(1544,'Dibër','DI',1002),(1545,'Durrës','DR',1002),(1546,'Elbasan','EL',1002),(1547,'Fier','FR',1002),(1548,'Gramsh','GR',1002),(1549,'Gjirokastër','GJ',1002),(1550,'Has','HA',1002),(1551,'Kavajë','KA',1002),(1552,'Kolonjë','ER',1002),(1553,'Korçë','KO',1002),(1554,'Krujë','KR',1002),(1555,'Kuçovë','KC',1002),(1556,'Kukës','KU',1002),(1557,'Kurbin','KB',1002),(1558,'Lezhë','LE',1002),(1559,'Librazhd','LB',1002),(1560,'Lushnjë','LU',1002),(1561,'Malësi e Madhe','MM',1002),(1562,'Mallakastër','MK',1002),(1563,'Mat','MT',1002),(1564,'Mirditë','MR',1002),(1565,'Peqin','PQ',1002),(1566,'Përmet','PR',1002),(1567,'Pogradec','PG',1002),(1568,'Pukë','PU',1002),(1569,'Sarandë','SR',1002),(1570,'Skrapar','SK',1002),(1571,'Shkodër','SH',1002),(1572,'Tepelenë','TE',1002),(1573,'Tiranë','TR',1002),(1574,'Tropojë','TP',1002),(1575,'Vlorë','VL',1002),(1576,'Erevan','ER',1011),(1577,'Aragacotn','AG',1011),(1578,'Ararat','AR',1011),(1579,'Armavir','AV',1011),(1580,'Gegarkunik\'','GR',1011),(1581,'Kotayk\'','KT',1011),(1582,'Lory','LO',1011),(1583,'Sirak','SH',1011),(1584,'Syunik\'','SU',1011),(1585,'Tavus','TV',1011),(1586,'Vayoc Jor','VD',1011),(1587,'Bengo','BGO',1006),(1588,'Benguela','BGU',1006),(1589,'Bie','BIE',1006),(1590,'Cabinda','CAB',1006),(1591,'Cuando-Cubango','CCU',1006),(1592,'Cuanza Norte','CNO',1006),(1593,'Cuanza Sul','CUS',1006),(1594,'Cunene','CNN',1006),(1595,'Huambo','HUA',1006),(1596,'Huila','HUI',1006),(1597,'Luanda','LUA',1006),(1598,'Lunda Norte','LNO',1006),(1599,'Lunda Sul','LSU',1006),(1600,'Malange','MAL',1006),(1601,'Moxico','MOX',1006),(1602,'Namibe','NAM',1006),(1603,'Uige','UIG',1006),(1604,'Zaire','ZAI',1006),(1605,'Capital federal','C',1010),(1606,'Buenos Aires','B',1010),(1607,'Catamarca','K',1010),(1608,'Cordoba','X',1010),(1609,'Corrientes','W',1010),(1610,'Chaco','H',1010),(1611,'Chubut','U',1010),(1612,'Entre Rios','E',1010),(1613,'Formosa','P',1010),(1614,'Jujuy','Y',1010),(1615,'La Pampa','L',1010),(1616,'Mendoza','M',1010),(1617,'Misiones','N',1010),(1618,'Neuquen','Q',1010),(1619,'Rio Negro','R',1010),(1620,'Salta','A',1010),(1621,'San Juan','J',1010),(1622,'San Luis','D',1010),(1623,'Santa Cruz','Z',1010),(1624,'Santa Fe','S',1010),(1625,'Santiago del Estero','G',1010),(1626,'Tierra del Fuego','V',1010),(1627,'Tucuman','T',1010),(1628,'Burgenland','1',1014),(1629,'Kärnten','2',1014),(1630,'Niederösterreich','3',1014),(1631,'Oberösterreich','4',1014),(1632,'Salzburg','5',1014),(1633,'Steiermark','6',1014),(1634,'Tirol','7',1014),(1635,'Vorarlberg','8',1014),(1636,'Wien','9',1014),(1637,'Australian Antarctic Territory','AAT',1008),(1638,'Australian Capital Territory','ACT',1013),(1639,'Northern Territory','NT',1013),(1640,'New South Wales','NSW',1013),(1641,'Queensland','QLD',1013),(1642,'South Australia','SA',1013),(1643,'Tasmania','TAS',1013),(1644,'Victoria','VIC',1013),(1645,'Western Australia','WA',1013),(1646,'Naxcivan','NX',1015),(1647,'Ali Bayramli','AB',1015),(1648,'Baki','BA',1015),(1649,'Ganca','GA',1015),(1650,'Lankaran','LA',1015),(1651,'Mingacevir','MI',1015),(1652,'Naftalan','NA',1015),(1653,'Saki','SA',1015),(1654,'Sumqayit','SM',1015),(1655,'Susa','SS',1015),(1656,'Xankandi','XA',1015),(1657,'Yevlax','YE',1015),(1658,'Abseron','ABS',1015),(1659,'Agcabadi','AGC',1015),(1660,'Agdam','AGM',1015),(1661,'Agdas','AGS',1015),(1662,'Agstafa','AGA',1015),(1663,'Agsu','AGU',1015),(1664,'Astara','AST',1015),(1665,'Babak','BAB',1015),(1666,'Balakan','BAL',1015),(1667,'Barda','BAR',1015),(1668,'Beylagan','BEY',1015),(1669,'Bilasuvar','BIL',1015),(1670,'Cabrayll','CAB',1015),(1671,'Calilabad','CAL',1015),(1672,'Culfa','CUL',1015),(1673,'Daskasan','DAS',1015),(1674,'Davaci','DAV',1015),(1675,'Fuzuli','FUZ',1015),(1676,'Gadabay','GAD',1015),(1677,'Goranboy','GOR',1015),(1678,'Goycay','GOY',1015),(1679,'Haciqabul','HAC',1015),(1680,'Imisli','IMI',1015),(1681,'Ismayilli','ISM',1015),(1682,'Kalbacar','KAL',1015),(1683,'Kurdamir','KUR',1015),(1684,'Lacin','LAC',1015),(1685,'Lerik','LER',1015),(1686,'Masalli','MAS',1015),(1687,'Neftcala','NEF',1015),(1688,'Oguz','OGU',1015),(1689,'Ordubad','ORD',1015),(1690,'Qabala','QAB',1015),(1691,'Qax','QAX',1015),(1692,'Qazax','QAZ',1015),(1693,'Qobustan','QOB',1015),(1694,'Quba','QBA',1015),(1695,'Qubadli','QBI',1015),(1696,'Qusar','QUS',1015),(1697,'Saatli','SAT',1015),(1698,'Sabirabad','SAB',1015),(1699,'Sadarak','SAD',1015),(1700,'Sahbuz','SAH',1015),(1701,'Salyan','SAL',1015),(1702,'Samaxi','SMI',1015),(1703,'Samkir','SKR',1015),(1704,'Samux','SMX',1015),(1705,'Sarur','SAR',1015),(1706,'Siyazan','SIY',1015),(1707,'Tartar','TAR',1015),(1708,'Tovuz','TOV',1015),(1709,'Ucar','UCA',1015),(1710,'Xacmaz','XAC',1015),(1711,'Xanlar','XAN',1015),(1712,'Xizi','XIZ',1015),(1713,'Xocali','XCI',1015),(1714,'Xocavand','XVD',1015),(1715,'Yardimli','YAR',1015),(1716,'Zangilan','ZAN',1015),(1717,'Zaqatala','ZAQ',1015),(1718,'Zardab','ZAR',1015),(1719,'Federacija Bosna i Hercegovina','BIH',1026),(1720,'Republika Srpska','SRP',1026),(1721,'Bagerhat zila','05',1017),(1722,'Bandarban zila','01',1017),(1723,'Barguna zila','02',1017),(1724,'Barisal zila','06',1017),(1725,'Bhola zila','07',1017),(1726,'Bogra zila','03',1017),(1727,'Brahmanbaria zila','04',1017),(1728,'Chandpur zila','09',1017),(1729,'Chittagong zila','10',1017),(1730,'Chuadanga zila','12',1017),(1731,'Comilla zila','08',1017),(1732,'Cox\'s Bazar zila','11',1017),(1733,'Dhaka zila','13',1017),(1734,'Dinajpur zila','14',1017),(1735,'Faridpur zila','15',1017),(1736,'Feni zila','16',1017),(1737,'Gaibandha zila','19',1017),(1738,'Gazipur zila','18',1017),(1739,'Gopalganj zila','17',1017),(1740,'Habiganj zila','20',1017),(1741,'Jaipurhat zila','24',1017),(1742,'Jamalpur zila','21',1017),(1743,'Jessore zila','22',1017),(1744,'Jhalakati zila','25',1017),(1745,'Jhenaidah zila','23',1017),(1746,'Khagrachari zila','29',1017),(1747,'Khulna zila','27',1017),(1748,'Kishorganj zila','26',1017),(1749,'Kurigram zila','28',1017),(1750,'Kushtia zila','30',1017),(1751,'Lakshmipur zila','31',1017),(1752,'Lalmonirhat zila','32',1017),(1753,'Madaripur zila','36',1017),(1754,'Magura zila','37',1017),(1755,'Manikganj zila','33',1017),(1756,'Meherpur zila','39',1017),(1757,'Moulvibazar zila','38',1017),(1758,'Munshiganj zila','35',1017),(1759,'Mymensingh zila','34',1017),(1760,'Naogaon zila','48',1017),(1761,'Narail zila','43',1017),(1762,'Narayanganj zila','40',1017),(1763,'Narsingdi zila','42',1017),(1764,'Natore zila','44',1017),(1765,'Nawabganj zila','45',1017),(1766,'Netrakona zila','41',1017),(1767,'Nilphamari zila','46',1017),(1768,'Noakhali zila','47',1017),(1769,'Pabna zila','49',1017),(1770,'Panchagarh zila','52',1017),(1771,'Patuakhali zila','51',1017),(1772,'Pirojpur zila','50',1017),(1773,'Rajbari zila','53',1017),(1774,'Rajshahi zila','54',1017),(1775,'Rangamati zila','56',1017),(1776,'Rangpur zila','55',1017),(1777,'Satkhira zila','58',1017),(1778,'Shariatpur zila','62',1017),(1779,'Sherpur zila','57',1017),(1780,'Sirajganj zila','59',1017),(1781,'Sunamganj zila','61',1017),(1782,'Sylhet zila','60',1017),(1783,'Tangail zila','63',1017),(1784,'Thakurgaon zila','64',1017),(1785,'Antwerpen','VAN',1020),(1786,'Brabant Wallon','WBR',1020),(1787,'Hainaut','WHT',1020),(1788,'Liege','WLG',1020),(1789,'Limburg','VLI',1020),(1790,'Luxembourg','WLX',1020),(1791,'Namur','WNA',1020),(1792,'Oost-Vlaanderen','VOV',1020),(1793,'Vlaams-Brabant','VBR',1020),(1794,'West-Vlaanderen','VWV',1020),(1795,'Bale','BAL',1034),(1796,'Bam','BAM',1034),(1797,'Banwa','BAN',1034),(1798,'Bazega','BAZ',1034),(1799,'Bougouriba','BGR',1034),(1800,'Boulgou','BLG',1034),(1801,'Boulkiemde','BLK',1034),(1802,'Comoe','COM',1034),(1803,'Ganzourgou','GAN',1034),(1804,'Gnagna','GNA',1034),(1805,'Gourma','GOU',1034),(1806,'Houet','HOU',1034),(1807,'Ioba','IOB',1034),(1808,'Kadiogo','KAD',1034),(1809,'Kenedougou','KEN',1034),(1810,'Komondjari','KMD',1034),(1811,'Kompienga','KMP',1034),(1812,'Kossi','KOS',1034),(1813,'Koulpulogo','KOP',1034),(1814,'Kouritenga','KOT',1034),(1815,'Kourweogo','KOW',1034),(1816,'Leraba','LER',1034),(1817,'Loroum','LOR',1034),(1818,'Mouhoun','MOU',1034),(1819,'Nahouri','NAO',1034),(1820,'Namentenga','NAM',1034),(1821,'Nayala','NAY',1034),(1822,'Noumbiel','NOU',1034),(1823,'Oubritenga','OUB',1034),(1824,'Oudalan','OUD',1034),(1825,'Passore','PAS',1034),(1826,'Poni','PON',1034),(1827,'Sanguie','SNG',1034),(1828,'Sanmatenga','SMT',1034),(1829,'Seno','SEN',1034),(1830,'Siasili','SIS',1034),(1831,'Soum','SOM',1034),(1832,'Sourou','SOR',1034),(1833,'Tapoa','TAP',1034),(1834,'Tui','TUI',1034),(1835,'Yagha','YAG',1034),(1836,'Yatenga','YAT',1034),(1837,'Ziro','ZIR',1034),(1838,'Zondoma','ZON',1034),(1839,'Zoundweogo','ZOU',1034),(1840,'Blagoevgrad','01',1033),(1841,'Burgas','02',1033),(1842,'Dobrich','08',1033),(1843,'Gabrovo','07',1033),(1844,'Haskovo','26',1033),(1845,'Yambol','28',1033),(1846,'Kardzhali','09',1033),(1847,'Kyustendil','10',1033),(1848,'Lovech','11',1033),(1849,'Montana','12',1033),(1850,'Pazardzhik','13',1033),(1851,'Pernik','14',1033),(1852,'Pleven','15',1033),(1853,'Plovdiv','16',1033),(1854,'Razgrad','17',1033),(1855,'Ruse','18',1033),(1856,'Silistra','19',1033),(1857,'Sliven','20',1033),(1858,'Smolyan','21',1033),(1859,'Sofia','23',1033),(1860,'Stara Zagora','24',1033),(1861,'Shumen','27',1033),(1862,'Targovishte','25',1033),(1863,'Varna','03',1033),(1864,'Veliko Tarnovo','04',1033),(1865,'Vidin','05',1033),(1866,'Vratsa','06',1033),(1867,'Al Hadd','01',1016),(1868,'Al Manamah','03',1016),(1869,'Al Mintaqah al Gharbiyah','10',1016),(1870,'Al Mintagah al Wusta','07',1016),(1871,'Al Mintaqah ash Shamaliyah','05',1016),(1872,'Al Muharraq','02',1016),(1873,'Ar Rifa','09',1016),(1874,'Jidd Hafs','04',1016),(1875,'Madluat Jamad','12',1016),(1876,'Madluat Isa','08',1016),(1877,'Mintaqat Juzur tawar','11',1016),(1878,'Sitrah','06',1016),(1879,'Bubanza','BB',1036),(1880,'Bujumbura','BJ',1036),(1881,'Bururi','BR',1036),(1882,'Cankuzo','CA',1036),(1883,'Cibitoke','CI',1036),(1884,'Gitega','GI',1036),(1885,'Karuzi','KR',1036),(1886,'Kayanza','KY',1036),(1887,'Makamba','MA',1036),(1888,'Muramvya','MU',1036),(1889,'Mwaro','MW',1036),(1890,'Ngozi','NG',1036),(1891,'Rutana','RT',1036),(1892,'Ruyigi','RY',1036),(1893,'Alibori','AL',1022),(1894,'Atakora','AK',1022),(1895,'Atlantique','AQ',1022),(1896,'Borgou','BO',1022),(1897,'Collines','CO',1022),(1898,'Donga','DO',1022),(1899,'Kouffo','KO',1022),(1900,'Littoral','LI',1022),(1901,'Mono','MO',1022),(1902,'Oueme','OU',1022),(1903,'Plateau','PL',1022),(1904,'Zou','ZO',1022),(1905,'Belait','BE',1032),(1906,'Brunei-Muara','BM',1032),(1907,'Temburong','TE',1032),(1908,'Tutong','TU',1032),(1909,'Cochabamba','C',1025),(1910,'Chuquisaca','H',1025),(1911,'El Beni','B',1025),(1912,'La Paz','L',1025),(1913,'Oruro','O',1025),(1914,'Pando','N',1025),(1915,'Potosi','P',1025),(1916,'Tarija','T',1025),(1917,'Acre','AC',1029),(1918,'Alagoas','AL',1029),(1919,'Amazonas','AM',1029),(1920,'Amapa','AP',1029),(1921,'Bahia','BA',1029),(1922,'Ceara','CE',1029),(1923,'Distrito Federal','DF',1029),(1924,'Espirito Santo','ES',1029),(1926,'Goias','GO',1029),(1927,'Maranhao','MA',1029),(1928,'Minas Gerais','MG',1029),(1929,'Mato Grosso do Sul','MS',1029),(1930,'Mato Grosso','MT',1029),(1931,'Para','PA',1029),(1932,'Paraiba','PB',1029),(1933,'Pernambuco','PE',1029),(1934,'Piaui','PI',1029),(1935,'Parana','PR',1029),(1936,'Rio de Janeiro','RJ',1029),(1937,'Rio Grande do Norte','RN',1029),(1938,'Rondonia','RO',1029),(1939,'Roraima','RR',1029),(1940,'Rio Grande do Sul','RS',1029),(1941,'Santa Catarina','SC',1029),(1942,'Sergipe','SE',1029),(1943,'Sao Paulo','SP',1029),(1944,'Tocantins','TO',1029),(1945,'Acklins and Crooked Islands','AC',1212),(1946,'Bimini','BI',1212),(1947,'Cat Island','CI',1212),(1948,'Exuma','EX',1212),(1955,'Inagua','IN',1212),(1957,'Long Island','LI',1212),(1959,'Mayaguana','MG',1212),(1960,'New Providence','NP',1212),(1962,'Ragged Island','RI',1212),(1966,'Bumthang','33',1024),(1967,'Chhukha','12',1024),(1968,'Dagana','22',1024),(1969,'Gasa','GA',1024),(1970,'Ha','13',1024),(1971,'Lhuentse','44',1024),(1972,'Monggar','42',1024),(1973,'Paro','11',1024),(1974,'Pemagatshel','43',1024),(1975,'Punakha','23',1024),(1976,'Samdrup Jongkha','45',1024),(1977,'Samtee','14',1024),(1978,'Sarpang','31',1024),(1979,'Thimphu','15',1024),(1980,'Trashigang','41',1024),(1981,'Trashi Yangtse','TY',1024),(1982,'Trongsa','32',1024),(1983,'Tsirang','21',1024),(1984,'Wangdue Phodrang','24',1024),(1985,'Zhemgang','34',1024),(1986,'Central','CE',1027),(1987,'Ghanzi','GH',1027),(1988,'Kgalagadi','KG',1027),(1989,'Kgatleng','KL',1027),(1990,'Kweneng','KW',1027),(1991,'Ngamiland','NG',1027),(1992,'North-East','NE',1027),(1993,'North-West','NW',1027),(1994,'South-East','SE',1027),(1995,'Southern','SO',1027),(1996,'Brèsckaja voblasc\'','BR',1019),(1997,'Homel\'skaja voblasc\'','HO',1019),(1998,'Hrodzenskaja voblasc\'','HR',1019),(1999,'Mahilëuskaja voblasc\'','MA',1019),(2000,'Minskaja voblasc\'','MI',1019),(2001,'Vicebskaja voblasc\'','VI',1019),(2002,'Belize','BZ',1021),(2003,'Cayo','CY',1021),(2004,'Corozal','CZL',1021),(2005,'Orange Walk','OW',1021),(2006,'Stann Creek','SC',1021),(2007,'Toledo','TOL',1021),(2008,'Kinshasa','KN',1050),(2011,'Equateur','EQ',1050),(2014,'Kasai-Oriental','KE',1050),(2016,'Maniema','MA',1050),(2017,'Nord-Kivu','NK',1050),(2019,'Sud-Kivu','SK',1050),(2020,'Bangui','BGF',1042),(2021,'Bamingui-Bangoran','BB',1042),(2022,'Basse-Kotto','BK',1042),(2023,'Haute-Kotto','HK',1042),(2024,'Haut-Mbomou','HM',1042),(2025,'Kemo','KG',1042),(2026,'Lobaye','LB',1042),(2027,'Mambere-Kadei','HS',1042),(2028,'Mbomou','MB',1042),(2029,'Nana-Grebizi','KB',1042),(2030,'Nana-Mambere','NM',1042),(2031,'Ombella-Mpoko','MP',1042),(2032,'Ouaka','UK',1042),(2033,'Ouham','AC',1042),(2034,'Ouham-Pende','OP',1042),(2035,'Sangha-Mbaere','SE',1042),(2036,'Vakaga','VR',1042),(2037,'Brazzaville','BZV',1051),(2038,'Bouenza','11',1051),(2039,'Cuvette','8',1051),(2040,'Cuvette-Ouest','15',1051),(2041,'Kouilou','5',1051),(2042,'Lekoumou','2',1051),(2043,'Likouala','7',1051),(2044,'Niari','9',1051),(2045,'Plateaux','14',1051),(2046,'Pool','12',1051),(2047,'Sangha','13',1051),(2048,'Aargau','AG',1205),(2049,'Appenzell Innerrhoden','AI',1205),(2050,'Appenzell Ausserrhoden','AR',1205),(2051,'Bern','BE',1205),(2052,'Basel-Landschaft','BL',1205),(2053,'Basel-Stadt','BS',1205),(2054,'Fribourg','FR',1205),(2055,'Geneva','GE',1205),(2056,'Glarus','GL',1205),(2057,'Graubunden','GR',1205),(2058,'Jura','JU',1205),(2059,'Luzern','LU',1205),(2060,'Neuchatel','NE',1205),(2061,'Nidwalden','NW',1205),(2062,'Obwalden','OW',1205),(2063,'Sankt Gallen','SG',1205),(2064,'Schaffhausen','SH',1205),(2065,'Solothurn','SO',1205),(2066,'Schwyz','SZ',1205),(2067,'Thurgau','TG',1205),(2068,'Ticino','TI',1205),(2069,'Uri','UR',1205),(2070,'Vaud','VD',1205),(2071,'Valais','VS',1205),(2072,'Zug','ZG',1205),(2073,'Zurich','ZH',1205),(2074,'18 Montagnes','06',1054),(2075,'Agnebi','16',1054),(2076,'Bas-Sassandra','09',1054),(2077,'Denguele','10',1054),(2078,'Haut-Sassandra','02',1054),(2079,'Lacs','07',1054),(2080,'Lagunes','01',1054),(2081,'Marahoue','12',1054),(2082,'Moyen-Comoe','05',1054),(2083,'Nzi-Comoe','11',1054),(2084,'Savanes','03',1054),(2085,'Sud-Bandama','15',1054),(2086,'Sud-Comoe','13',1054),(2087,'Vallee du Bandama','04',1054),(2088,'Worodouqou','14',1054),(2089,'Zanzan','08',1054),(2090,'Aisen del General Carlos Ibanez del Campo','AI',1044),(2091,'Antofagasta','AN',1044),(2092,'Araucania','AR',1044),(2093,'Atacama','AT',1044),(2094,'Bio-Bio','BI',1044),(2095,'Coquimbo','CO',1044),(2096,'Libertador General Bernardo O\'Higgins','LI',1044),(2097,'Los Lagos','LL',1044),(2098,'Magallanes','MA',1044),(2099,'Maule','ML',1044),(2100,'Santiago Metropolitan','SM',1044),(2101,'Tarapaca','TA',1044),(2102,'Valparaiso','VS',1044),(2103,'Adamaoua','AD',1038),(2104,'Centre','CE',1038),(2105,'East','ES',1038),(2106,'Far North','EN',1038),(2107,'North','NO',1038),(2108,'South','SW',1038),(2109,'South-West','SW',1038),(2110,'West','OU',1038),(2111,'Beijing','11',1045),(2112,'Chongqing','50',1045),(2113,'Shanghai','31',1045),(2114,'Tianjin','12',1045),(2115,'Anhui','34',1045),(2116,'Fujian','35',1045),(2117,'Gansu','62',1045),(2118,'Guangdong','44',1045),(2119,'Guizhou','52',1045),(2120,'Hainan','46',1045),(2121,'Hebei','13',1045),(2122,'Heilongjiang','23',1045),(2123,'Henan','41',1045),(2124,'Hubei','42',1045),(2125,'Hunan','43',1045),(2126,'Jiangsu','32',1045),(2127,'Jiangxi','36',1045),(2128,'Jilin','22',1045),(2129,'Liaoning','21',1045),(2130,'Qinghai','63',1045),(2131,'Shaanxi','61',1045),(2132,'Shandong','37',1045),(2133,'Shanxi','14',1045),(2134,'Sichuan','51',1045),(2135,'Taiwan','71',1045),(2136,'Yunnan','53',1045),(2137,'Zhejiang','33',1045),(2138,'Guangxi','45',1045),(2139,'Neia Mongol (mn)','15',1045),(2140,'Xinjiang','65',1045),(2141,'Xizang','54',1045),(2142,'Hong Kong','91',1045),(2143,'Macau','92',1045),(2144,'Distrito Capital de Bogotá','DC',1048),(2145,'Amazonea','AMA',1048),(2146,'Antioquia','ANT',1048),(2147,'Arauca','ARA',1048),(2148,'Atlántico','ATL',1048),(2149,'BolÃvar','BOL',1048),(2150,'Boyacá','BOY',1048),(2151,'Caldea','CAL',1048),(2152,'Caquetá','CAQ',1048),(2153,'Casanare','CAS',1048),(2154,'Cauca','CAU',1048),(2155,'Cesar','CES',1048),(2156,'Córdoba','COR',1048),(2157,'Cundinamarca','CUN',1048),(2158,'Chocó','CHO',1048),(2159,'GuainÃa','GUA',1048),(2160,'Guaviare','GUV',1048),(2161,'La Guajira','LAG',1048),(2162,'Magdalena','MAG',1048),(2163,'Meta','MET',1048),(2164,'Nariño','NAR',1048),(2165,'Norte de Santander','NSA',1048),(2166,'Putumayo','PUT',1048),(2167,'Quindio','QUI',1048),(2168,'Risaralda','RIS',1048),(2169,'San Andrés, Providencia y Santa Catalina','SAP',1048),(2170,'Santander','SAN',1048),(2171,'Sucre','SUC',1048),(2172,'Tolima','TOL',1048),(2173,'Valle del Cauca','VAC',1048),(2174,'Vaupés','VAU',1048),(2175,'Vichada','VID',1048),(2176,'Alajuela','A',1053),(2177,'Cartago','C',1053),(2178,'Guanacaste','G',1053),(2179,'Heredia','H',1053),(2180,'Limon','L',1053),(2181,'Puntarenas','P',1053),(2182,'San Jose','SJ',1053),(2183,'Camagey','09',1056),(2184,'Ciego de `vila','08',1056),(2185,'Cienfuegos','06',1056),(2186,'Ciudad de La Habana','03',1056),(2187,'Granma','12',1056),(2188,'Guantanamo','14',1056),(2189,'Holquin','11',1056),(2190,'La Habana','02',1056),(2191,'Las Tunas','10',1056),(2192,'Matanzas','04',1056),(2193,'Pinar del Rio','01',1056),(2194,'Sancti Spiritus','07',1056),(2195,'Santiago de Cuba','13',1056),(2196,'Villa Clara','05',1056),(2197,'Isla de la Juventud','99',1056),(2198,'Pinar del Roo','PR',1056),(2199,'Ciego de Avila','CA',1056),(2200,'Camagoey','CG',1056),(2201,'Holgun','HO',1056),(2202,'Sancti Spritus','SS',1056),(2203,'Municipio Especial Isla de la Juventud','IJ',1056),(2204,'Boa Vista','BV',1040),(2205,'Brava','BR',1040),(2206,'Calheta de Sao Miguel','CS',1040),(2207,'Fogo','FO',1040),(2208,'Maio','MA',1040),(2209,'Mosteiros','MO',1040),(2210,'Paul','PA',1040),(2211,'Porto Novo','PN',1040),(2212,'Praia','PR',1040),(2213,'Ribeira Grande','RG',1040),(2214,'Sal','SL',1040),(2215,'Sao Domingos','SD',1040),(2216,'Sao Filipe','SF',1040),(2217,'Sao Nicolau','SN',1040),(2218,'Sao Vicente','SV',1040),(2219,'Tarrafal','TA',1040),(2220,'Ammochostos Magusa','04',1057),(2221,'Keryneia','06',1057),(2222,'Larnaka','03',1057),(2223,'Lefkosia','01',1057),(2224,'Lemesos','02',1057),(2225,'Pafos','05',1057),(2226,'JihoÄeský kraj','JC',1058),(2227,'Jihomoravský kraj','JM',1058),(2228,'Karlovarský kraj','KA',1058),(2229,'Královéhradecký kraj','KR',1058),(2230,'Liberecký kraj','LI',1058),(2231,'Moravskoslezský kraj','MO',1058),(2232,'Olomoucký kraj','OL',1058),(2233,'Pardubický kraj','PA',1058),(2234,'Plzeňský kraj','PL',1058),(2235,'Praha, hlavnà mÄ›sto','PR',1058),(2236,'StÅ™edoÄeský kraj','ST',1058),(2237,'Ústecký kraj','US',1058),(2238,'VysoÄina','VY',1058),(2239,'ZlÃnský kraj','ZL',1058),(2240,'Baden-Württemberg','BW',1082),(2241,'Bayern','BY',1082),(2242,'Bremen','HB',1082),(2243,'Hamburg','HH',1082),(2244,'Hessen','HE',1082),(2245,'Niedersachsen','NI',1082),(2246,'Nordrhein-Westfalen','NW',1082),(2247,'Rheinland-Pfalz','RP',1082),(2248,'Saarland','SL',1082),(2249,'Schleswig-Holstein','SH',1082),(2250,'Berlin','BE',1082),(2251,'Brandenburg','BB',1082),(2252,'Mecklenburg-Vorpommern','MV',1082),(2253,'Sachsen','SN',1082),(2254,'Sachsen-Anhalt','ST',1082),(2255,'Thüringen','TH',1082),(2256,'Ali Sabiah','AS',1060),(2257,'Dikhil','DI',1060),(2258,'Djibouti','DJ',1060),(2259,'Obock','OB',1060),(2260,'Tadjoura','TA',1060),(2261,'Frederiksberg','147',1059),(2262,'Copenhagen City','101',1059),(2263,'Copenhagen','015',1059),(2264,'Frederiksborg','020',1059),(2265,'Roskilde','025',1059),(2266,'Vestsjælland','030',1059),(2267,'Storstrøm','035',1059),(2268,'Bornholm','040',1059),(2269,'Fyn','042',1059),(2270,'South Jutland','050',1059),(2271,'Ribe','055',1059),(2272,'Vejle','060',1059),(2273,'Ringkjøbing','065',1059),(2274,'Ã…rhus','070',1059),(2275,'Viborg','076',1059),(2276,'North Jutland','080',1059),(2277,'Distrito Nacional (Santo Domingo)','01',1062),(2278,'Azua','02',1062),(2279,'Bahoruco','03',1062),(2280,'Barahona','04',1062),(2281,'Dajabón','05',1062),(2282,'Duarte','06',1062),(2283,'El Seybo [El Seibo]','08',1062),(2284,'Espaillat','09',1062),(2285,'Hato Mayor','30',1062),(2286,'Independencia','10',1062),(2287,'La Altagracia','11',1062),(2288,'La Estrelleta [Elias Pina]','07',1062),(2289,'La Romana','12',1062),(2290,'La Vega','13',1062),(2291,'Maroia Trinidad Sánchez','14',1062),(2292,'Monseñor Nouel','28',1062),(2293,'Monte Cristi','15',1062),(2294,'Monte Plata','29',1062),(2295,'Pedernales','16',1062),(2296,'Peravia','17',1062),(2297,'Puerto Plata','18',1062),(2298,'Salcedo','19',1062),(2299,'Samaná','20',1062),(2300,'San Cristóbal','21',1062),(2301,'San Pedro de MacorÃs','23',1062),(2302,'Sánchez RamÃrez','24',1062),(2303,'Santiago','25',1062),(2304,'Santiago RodrÃguez','26',1062),(2305,'Valverde','27',1062),(2306,'Adrar','01',1003),(2307,'Ain Defla','44',1003),(2308,'Ain Tmouchent','46',1003),(2309,'Alger','16',1003),(2310,'Annaba','23',1003),(2311,'Batna','05',1003),(2312,'Bechar','08',1003),(2313,'Bejaia','06',1003),(2314,'Biskra','07',1003),(2315,'Blida','09',1003),(2316,'Bordj Bou Arreridj','34',1003),(2317,'Bouira','10',1003),(2318,'Boumerdes','35',1003),(2319,'Chlef','02',1003),(2320,'Constantine','25',1003),(2321,'Djelfa','17',1003),(2322,'El Bayadh','32',1003),(2323,'El Oued','39',1003),(2324,'El Tarf','36',1003),(2325,'Ghardaia','47',1003),(2326,'Guelma','24',1003),(2327,'Illizi','33',1003),(2328,'Jijel','18',1003),(2329,'Khenchela','40',1003),(2330,'Laghouat','03',1003),(2331,'Mascara','29',1003),(2332,'Medea','26',1003),(2333,'Mila','43',1003),(2334,'Mostaganem','27',1003),(2335,'Msila','28',1003),(2336,'Naama','45',1003),(2337,'Oran','31',1003),(2338,'Ouargla','30',1003),(2339,'Oum el Bouaghi','04',1003),(2340,'Relizane','48',1003),(2341,'Saida','20',1003),(2342,'Setif','19',1003),(2343,'Sidi Bel Abbes','22',1003),(2344,'Skikda','21',1003),(2345,'Souk Ahras','41',1003),(2346,'Tamanghasset','11',1003),(2347,'Tebessa','12',1003),(2348,'Tiaret','14',1003),(2349,'Tindouf','37',1003),(2350,'Tipaza','42',1003),(2351,'Tissemsilt','38',1003),(2352,'Tizi Ouzou','15',1003),(2353,'Tlemcen','13',1003),(2354,'Azuay','A',1064),(2355,'Bolivar','B',1064),(2356,'Canar','F',1064),(2357,'Carchi','C',1064),(2358,'Cotopaxi','X',1064),(2359,'Chimborazo','H',1064),(2360,'El Oro','O',1064),(2361,'Esmeraldas','E',1064),(2362,'Galapagos','W',1064),(2363,'Guayas','G',1064),(2364,'Imbabura','I',1064),(2365,'Loja','L',1064),(2366,'Los Rios','R',1064),(2367,'Manabi','M',1064),(2368,'Morona-Santiago','S',1064),(2369,'Napo','N',1064),(2370,'Orellana','D',1064),(2371,'Pastaza','Y',1064),(2372,'Pichincha','P',1064),(2373,'Sucumbios','U',1064),(2374,'Tungurahua','T',1064),(2375,'Zamora-Chinchipe','Z',1064),(2376,'Harjumaa','37',1069),(2377,'Hiiumaa','39',1069),(2378,'Ida-Virumaa','44',1069),(2379,'Jõgevamaa','49',1069),(2380,'Järvamaa','51',1069),(2381,'Läänemaa','57',1069),(2382,'Lääne-Virumaa','59',1069),(2383,'Põlvamaa','65',1069),(2384,'Pärnumaa','67',1069),(2385,'Raplamaa','70',1069),(2386,'Saaremaa','74',1069),(2387,'Tartumaa','7B',1069),(2388,'Valgamaa','82',1069),(2389,'Viljandimaa','84',1069),(2390,'Võrumaa','86',1069),(2391,'Ad Daqahllyah','DK',1065),(2392,'Al Bahr al Ahmar','BA',1065),(2393,'Al Buhayrah','BH',1065),(2394,'Al Fayym','FYM',1065),(2395,'Al Gharbiyah','GH',1065),(2396,'Al Iskandarlyah','ALX',1065),(2397,'Al Isma illyah','IS',1065),(2398,'Al Jizah','GZ',1065),(2399,'Al Minuflyah','MNF',1065),(2400,'Al Minya','MN',1065),(2401,'Al Qahirah','C',1065),(2402,'Al Qalyublyah','KB',1065),(2403,'Al Wadi al Jadid','WAD',1065),(2404,'Ash Sharqiyah','SHR',1065),(2405,'As Suways','SUZ',1065),(2406,'Aswan','ASN',1065),(2407,'Asyut','AST',1065),(2408,'Bani Suwayf','BNS',1065),(2409,'Bur Sa\'id','PTS',1065),(2410,'Dumyat','DT',1065),(2411,'Janub Sina\'','JS',1065),(2412,'Kafr ash Shaykh','KFS',1065),(2413,'Matruh','MT',1065),(2414,'Qina','KN',1065),(2415,'Shamal Sina\'','SIN',1065),(2416,'Suhaj','SHG',1065),(2417,'Anseba','AN',1068),(2418,'Debub','DU',1068),(2419,'Debubawi Keyih Bahri [Debub-Keih-Bahri]','DK',1068),(2420,'Gash-Barka','GB',1068),(2421,'Maakel [Maekel]','MA',1068),(2422,'Semenawi Keyih Bahri [Semien-Keih-Bahri]','SK',1068),(2423,'Ãlava','VI',1198),(2424,'Albacete','AB',1198),(2425,'Alicante','A',1198),(2426,'AlmerÃa','AL',1198),(2427,'Asturias','O',1198),(2428,'Ãvila','AV',1198),(2429,'Badajoz','BA',1198),(2430,'Baleares','PM',1198),(2431,'Barcelona','B',1198),(2432,'Burgos','BU',1198),(2433,'Cáceres','CC',1198),(2434,'Cádiz','CA',1198),(2435,'Cantabria','S',1198),(2436,'Castellón','CS',1198),(2437,'Ciudad Real','CR',1198),(2438,'Cuenca','CU',1198),(2439,'Girona [Gerona]','GE',1198),(2440,'Granada','GR',1198),(2441,'Guadalajara','GU',1198),(2442,'Guipúzcoa','SS',1198),(2443,'Huelva','H',1198),(2444,'Huesca','HU',1198),(2445,'Jaén','J',1198),(2446,'La Coruña','C',1198),(2447,'La Rioja','LO',1198),(2448,'Las Palmas','GC',1198),(2449,'León','LE',1198),(2450,'Lleida [Lérida]','L',1198),(2451,'Lugo','LU',1198),(2452,'Madrid','M',1198),(2453,'Málaga','MA',1198),(2454,'Murcia','MU',1198),(2455,'Navarra','NA',1198),(2456,'Ourense','OR',1198),(2457,'Palencia','P',1198),(2458,'Pontevedra','PO',1198),(2459,'Salamanca','SA',1198),(2460,'Santa Cruz de Tenerife','TF',1198),(2461,'Segovia','SG',1198),(2462,'Sevilla','SE',1198),(2463,'Soria','SO',1198),(2464,'Tarragona','T',1198),(2465,'Teruel','TE',1198),(2466,'Valencia','V',1198),(2467,'Valladolid','VA',1198),(2468,'Vizcaya','BI',1198),(2469,'Zamora','ZA',1198),(2470,'Zaragoza','Z',1198),(2471,'Ceuta','CE',1198),(2472,'Melilla','ML',1198),(2473,'Addis Ababa','AA',1070),(2474,'Dire Dawa','DD',1070),(2475,'Afar','AF',1070),(2476,'Amara','AM',1070),(2477,'Benshangul-Gumaz','BE',1070),(2478,'Gambela Peoples','GA',1070),(2479,'Harari People','HA',1070),(2480,'Oromia','OR',1070),(2481,'Somali','SO',1070),(2482,'Southern Nations, Nationalities and Peoples','SN',1070),(2483,'Tigrai','TI',1070),(2490,'Eastern','E',1074),(2491,'Northern','N',1074),(2492,'Western','W',1074),(2493,'Rotuma','R',1074),(2494,'Chuuk','TRK',1141),(2495,'Kosrae','KSA',1141),(2496,'Pohnpei','PNI',1141),(2497,'Yap','YAP',1141),(2498,'Ain','01',1076),(2499,'Aisne','02',1076),(2500,'Allier','03',1076),(2501,'Alpes-de-Haute-Provence','04',1076),(2502,'Alpes-Maritimes','06',1076),(2503,'Ardèche','07',1076),(2504,'Ardennes','08',1076),(2505,'Ariège','09',1076),(2506,'Aube','10',1076),(2507,'Aude','11',1076),(2508,'Aveyron','12',1076),(2509,'Bas-Rhin','67',1076),(2510,'Bouches-du-Rhône','13',1076),(2511,'Calvados','14',1076),(2512,'Cantal','15',1076),(2513,'Charente','16',1076),(2514,'Charente-Maritime','17',1076),(2515,'Cher','18',1076),(2516,'Corrèze','19',1076),(2517,'Corse-du-Sud','20A',1076),(2518,'Côte-d\'Or','21',1076),(2519,'Côtes-d\'Armor','22',1076),(2520,'Creuse','23',1076),(2521,'Deux-Sèvres','79',1076),(2522,'Dordogne','24',1076),(2523,'Doubs','25',1076),(2524,'Drôme','26',1076),(2525,'Essonne','91',1076),(2526,'Eure','27',1076),(2527,'Eure-et-Loir','28',1076),(2528,'Finistère','29',1076),(2529,'Gard','30',1076),(2530,'Gers','32',1076),(2531,'Gironde','33',1076),(2532,'Haut-Rhin','68',1076),(2533,'Haute-Corse','20B',1076),(2534,'Haute-Garonne','31',1076),(2535,'Haute-Loire','43',1076),(2536,'Haute-Saône','70',1076),(2537,'Haute-Savoie','74',1076),(2538,'Haute-Vienne','87',1076),(2539,'Hautes-Alpes','05',1076),(2540,'Hautes-Pyrénées','65',1076),(2541,'Hauts-de-Seine','92',1076),(2542,'Hérault','34',1076),(2543,'Indre','36',1076),(2544,'Ille-et-Vilaine','35',1076),(2545,'Indre-et-Loire','37',1076),(2546,'Isère','38',1076),(2547,'Landes','40',1076),(2548,'Loir-et-Cher','41',1076),(2549,'Loire','42',1076),(2550,'Loire-Atlantique','44',1076),(2551,'Loiret','45',1076),(2552,'Lot','46',1076),(2553,'Lot-et-Garonne','47',1076),(2554,'Lozère','48',1076),(2555,'Maine-et-Loire','49',1076),(2556,'Manche','50',1076),(2557,'Marne','51',1076),(2558,'Mayenne','53',1076),(2559,'Meurthe-et-Moselle','54',1076),(2560,'Meuse','55',1076),(2561,'Morbihan','56',1076),(2562,'Moselle','57',1076),(2563,'Nièvre','58',1076),(2564,'Nord','59',1076),(2565,'Oise','60',1076),(2566,'Orne','61',1076),(2567,'Paris','75',1076),(2568,'Pas-de-Calais','62',1076),(2569,'Puy-de-Dôme','63',1076),(2570,'Pyrénées-Atlantiques','64',1076),(2571,'Pyrénées-Orientales','66',1076),(2572,'Rhône','69',1076),(2573,'Saône-et-Loire','71',1076),(2574,'Sarthe','72',1076),(2575,'Savoie','73',1076),(2576,'Seine-et-Marne','77',1076),(2577,'Seine-Maritime','76',1076),(2578,'Seine-Saint-Denis','93',1076),(2579,'Somme','80',1076),(2580,'Tarn','81',1076),(2581,'Tarn-et-Garonne','82',1076),(2582,'Val d\'Oise','95',1076),(2583,'Territoire de Belfort','90',1076),(2584,'Val-de-Marne','94',1076),(2585,'Var','83',1076),(2586,'Vaucluse','84',1076),(2587,'Vendée','85',1076),(2588,'Vienne','86',1076),(2589,'Vosges','88',1076),(2590,'Yonne','89',1076),(2591,'Yvelines','78',1076),(2592,'Aberdeen City','ABE',1226),(2593,'Aberdeenshire','ABD',1226),(2594,'Angus','ANS',1226),(2595,'Co Antrim','ANT',1226),(2597,'Argyll and Bute','AGB',1226),(2598,'Co Armagh','ARM',1226),(2606,'Bedfordshire','BDF',1226),(2612,'Gwent','BGW',1226),(2620,'Bristol, City of','BST',1226),(2622,'Buckinghamshire','BKM',1226),(2626,'Cambridgeshire','CAM',1226),(2634,'Cheshire','CHS',1226),(2635,'Clackmannanshire','CLK',1226),(2639,'Cornwall','CON',1226),(2643,'Cumbria','CMA',1226),(2647,'Derbyshire','DBY',1226),(2648,'Co Londonderry','DRY',1226),(2649,'Devon','DEV',1226),(2651,'Dorset','DOR',1226),(2652,'Co Down','DOW',1226),(2654,'Dumfries and Galloway','DGY',1226),(2655,'Dundee City','DND',1226),(2657,'County Durham','DUR',1226),(2659,'East Ayrshire','EAY',1226),(2660,'East Dunbartonshire','EDU',1226),(2661,'East Lothian','ELN',1226),(2662,'East Renfrewshire','ERW',1226),(2663,'East Riding of Yorkshire','ERY',1226),(2664,'East Sussex','ESX',1226),(2665,'Edinburgh, City of','EDH',1226),(2666,'Na h-Eileanan Siar','ELS',1226),(2668,'Essex','ESS',1226),(2669,'Falkirk','FAL',1226),(2670,'Co Fermanagh','FER',1226),(2671,'Fife','FIF',1226),(2674,'Glasgow City','GLG',1226),(2675,'Gloucestershire','GLS',1226),(2678,'Gwynedd','GWN',1226),(2682,'Hampshire','HAM',1226),(2687,'Herefordshire','HEF',1226),(2688,'Hertfordshire','HRT',1226),(2689,'Highland','HED',1226),(2692,'Inverclyde','IVC',1226),(2694,'Isle of Wight','IOW',1226),(2699,'Kent','KEN',1226),(2705,'Lancashire','LAN',1226),(2709,'Leicestershire','LEC',1226),(2712,'Lincolnshire','LIN',1226),(2723,'Midlothian','MLN',1226),(2726,'Moray','MRY',1226),(2734,'Norfolk','NFK',1226),(2735,'North Ayrshire','NAY',1226),(2738,'North Lanarkshire','NLK',1226),(2742,'North Yorkshire','NYK',1226),(2743,'Northamptonshire','NTH',1226),(2744,'Northumberland','NBL',1226),(2746,'Nottinghamshire','NTT',1226),(2747,'Oldham','OLD',1226),(2748,'Omagh','OMH',1226),(2749,'Orkney Islands','ORR',1226),(2750,'Oxfordshire','OXF',1226),(2752,'Perth and Kinross','PKN',1226),(2757,'Powys','POW',1226),(2761,'Renfrewshire','RFW',1226),(2766,'Rutland','RUT',1226),(2770,'Scottish Borders','SCB',1226),(2773,'Shetland Islands','ZET',1226),(2774,'Shropshire','SHR',1226),(2777,'Somerset','SOM',1226),(2778,'South Ayrshire','SAY',1226),(2779,'South Gloucestershire','SGC',1226),(2780,'South Lanarkshire','SLK',1226),(2785,'Staffordshire','STS',1226),(2786,'Stirling','STG',1226),(2791,'Suffolk','SFK',1226),(2793,'Surrey','SRY',1226),(2804,'Mid Glamorgan','VGL',1226),(2811,'Warwickshire','WAR',1226),(2813,'West Dunbartonshire','WDU',1226),(2814,'West Lothian','WLN',1226),(2815,'West Sussex','WSX',1226),(2818,'Wiltshire','WIL',1226),(2823,'Worcestershire','WOR',1226),(2826,'Ashanti','AH',1083),(2827,'Brong-Ahafo','BA',1083),(2828,'Greater Accra','AA',1083),(2829,'Upper East','UE',1083),(2830,'Upper West','UW',1083),(2831,'Volta','TV',1083),(2832,'Banjul','B',1213),(2833,'Lower River','L',1213),(2834,'MacCarthy Island','M',1213),(2835,'North Bank','N',1213),(2836,'Upper River','U',1213),(2837,'Beyla','BE',1091),(2838,'Boffa','BF',1091),(2839,'Boke','BK',1091),(2840,'Coyah','CO',1091),(2841,'Dabola','DB',1091),(2842,'Dalaba','DL',1091),(2843,'Dinguiraye','DI',1091),(2844,'Dubreka','DU',1091),(2845,'Faranah','FA',1091),(2846,'Forecariah','FO',1091),(2847,'Fria','FR',1091),(2848,'Gaoual','GA',1091),(2849,'Guekedou','GU',1091),(2850,'Kankan','KA',1091),(2851,'Kerouane','KE',1091),(2852,'Kindia','KD',1091),(2853,'Kissidougou','KS',1091),(2854,'Koubia','KB',1091),(2855,'Koundara','KN',1091),(2856,'Kouroussa','KO',1091),(2857,'Labe','LA',1091),(2858,'Lelouma','LE',1091),(2859,'Lola','LO',1091),(2860,'Macenta','MC',1091),(2861,'Mali','ML',1091),(2862,'Mamou','MM',1091),(2863,'Mandiana','MD',1091),(2864,'Nzerekore','NZ',1091),(2865,'Pita','PI',1091),(2866,'Siguiri','SI',1091),(2867,'Telimele','TE',1091),(2868,'Tougue','TO',1091),(2869,'Yomou','YO',1091),(2870,'Region Continental','C',1067),(2871,'Region Insular','I',1067),(2872,'Annobon','AN',1067),(2873,'Bioko Norte','BN',1067),(2874,'Bioko Sur','BS',1067),(2875,'Centro Sur','CS',1067),(2876,'Kie-Ntem','KN',1067),(2877,'Litoral','LI',1067),(2878,'Wele-Nzas','WN',1067),(2879,'Achaïa','13',1085),(2880,'Aitolia-Akarnania','01',1085),(2881,'Argolis','11',1085),(2882,'Arkadia','12',1085),(2883,'Arta','31',1085),(2884,'Attiki','A1',1085),(2885,'Chalkidiki','64',1085),(2886,'Chania','94',1085),(2887,'Chios','85',1085),(2888,'Dodekanisos','81',1085),(2889,'Drama','52',1085),(2890,'Evros','71',1085),(2891,'Evrytania','05',1085),(2892,'Evvoia','04',1085),(2893,'Florina','63',1085),(2894,'Fokis','07',1085),(2895,'Fthiotis','06',1085),(2896,'Grevena','51',1085),(2897,'Ileia','14',1085),(2898,'Imathia','53',1085),(2899,'Ioannina','33',1085),(2900,'Irakleion','91',1085),(2901,'Karditsa','41',1085),(2902,'Kastoria','56',1085),(2903,'Kavalla','55',1085),(2904,'Kefallinia','23',1085),(2905,'Kerkyra','22',1085),(2906,'Kilkis','57',1085),(2907,'Korinthia','15',1085),(2908,'Kozani','58',1085),(2909,'Kyklades','82',1085),(2910,'Lakonia','16',1085),(2911,'Larisa','42',1085),(2912,'Lasithion','92',1085),(2913,'Lefkas','24',1085),(2914,'Lesvos','83',1085),(2915,'Magnisia','43',1085),(2916,'Messinia','17',1085),(2917,'Pella','59',1085),(2918,'Preveza','34',1085),(2919,'Rethymnon','93',1085),(2920,'Rodopi','73',1085),(2921,'Samos','84',1085),(2922,'Serrai','62',1085),(2923,'Thesprotia','32',1085),(2924,'Thessaloniki','54',1085),(2925,'Trikala','44',1085),(2926,'Voiotia','03',1085),(2927,'Xanthi','72',1085),(2928,'Zakynthos','21',1085),(2929,'Agio Oros','69',1085),(2930,'Alta Verapaz','AV',1090),(2931,'Baja Verapaz','BV',1090),(2932,'Chimaltenango','CM',1090),(2933,'Chiquimula','CQ',1090),(2934,'El Progreso','PR',1090),(2935,'Escuintla','ES',1090),(2936,'Guatemala','GU',1090),(2937,'Huehuetenango','HU',1090),(2938,'Izabal','IZ',1090),(2939,'Jalapa','JA',1090),(2940,'Jutiapa','JU',1090),(2941,'Peten','PE',1090),(2942,'Quetzaltenango','QZ',1090),(2943,'Quiche','QC',1090),(2944,'Retalhuleu','RE',1090),(2945,'Sacatepequez','SA',1090),(2946,'San Marcos','SM',1090),(2947,'Santa Rosa','SR',1090),(2948,'Sololá','SO',1090),(2949,'Suchitepequez','SU',1090),(2950,'Totonicapan','TO',1090),(2951,'Zacapa','ZA',1090),(2952,'Bissau','BS',1092),(2953,'Bafata','BA',1092),(2954,'Biombo','BM',1092),(2955,'Bolama','BL',1092),(2956,'Cacheu','CA',1092),(2957,'Gabu','GA',1092),(2958,'Oio','OI',1092),(2959,'Quloara','QU',1092),(2960,'Tombali S','TO',1092),(2961,'Barima-Waini','BA',1093),(2962,'Cuyuni-Mazaruni','CU',1093),(2963,'Demerara-Mahaica','DE',1093),(2964,'East Berbice-Corentyne','EB',1093),(2965,'Essequibo Islands-West Demerara','ES',1093),(2966,'Mahaica-Berbice','MA',1093),(2967,'Pomeroon-Supenaam','PM',1093),(2968,'Potaro-Siparuni','PT',1093),(2969,'Upper Demerara-Berbice','UD',1093),(2970,'Upper Takutu-Upper Essequibo','UT',1093),(2971,'Atlantida','AT',1097),(2972,'Colon','CL',1097),(2973,'Comayagua','CM',1097),(2974,'Copan','CP',1097),(2975,'Cortes','CR',1097),(2976,'Choluteca','CH',1097),(2977,'El Paraiso','EP',1097),(2978,'Francisco Morazan','FM',1097),(2979,'Gracias a Dios','GD',1097),(2980,'Intibuca','IN',1097),(2981,'Islas de la Bahia','IB',1097),(2982,'Lempira','LE',1097),(2983,'Ocotepeque','OC',1097),(2984,'Olancho','OL',1097),(2985,'Santa Barbara','SB',1097),(2986,'Valle','VA',1097),(2987,'Yoro','YO',1097),(2988,'Bjelovarsko-bilogorska zupanija','07',1055),(2989,'Brodsko-posavska zupanija','12',1055),(2990,'Dubrovacko-neretvanska zupanija','19',1055),(2991,'Istarska zupanija','18',1055),(2992,'Karlovacka zupanija','04',1055),(2993,'Koprivnickco-krizevacka zupanija','06',1055),(2994,'Krapinako-zagorska zupanija','02',1055),(2995,'Licko-senjska zupanija','09',1055),(2996,'Medimurska zupanija','20',1055),(2997,'Osjecko-baranjska zupanija','14',1055),(2998,'Pozesko-slavonska zupanija','11',1055),(2999,'Primorsko-goranska zupanija','08',1055),(3000,'Sisacko-moelavacka Iupanija','03',1055),(3001,'Splitako-dalmatinska zupanija','17',1055),(3002,'Sibenako-kninska zupanija','15',1055),(3003,'Varaidinska zupanija','05',1055),(3004,'VirovitiEko-podravska zupanija','10',1055),(3005,'VuRovarako-srijemska zupanija','16',1055),(3006,'Zadaraka','13',1055),(3007,'Zagrebacka zupanija','01',1055),(3008,'Grande-Anse','GA',1094),(3009,'Nord-Est','NE',1094),(3010,'Nord-Ouest','NO',1094),(3011,'Ouest','OU',1094),(3012,'Sud','SD',1094),(3013,'Sud-Est','SE',1094),(3014,'Budapest','BU',1099),(3015,'Bács-Kiskun','BK',1099),(3016,'Baranya','BA',1099),(3017,'Békés','BE',1099),(3018,'Borsod-Abaúj-Zemplén','BZ',1099),(3019,'Csongrád','CS',1099),(3020,'Fejér','FE',1099),(3021,'GyÅ‘r-Moson-Sopron','GS',1099),(3022,'Hajdu-Bihar','HB',1099),(3023,'Heves','HE',1099),(3024,'Jász-Nagykun-Szolnok','JN',1099),(3025,'Komárom-Esztergom','KE',1099),(3026,'Nográd','NO',1099),(3027,'Pest','PE',1099),(3028,'Somogy','SO',1099),(3029,'Szabolcs-Szatmár-Bereg','SZ',1099),(3030,'Tolna','TO',1099),(3031,'Vas','VA',1099),(3032,'Veszprém','VE',1099),(3033,'Zala','ZA',1099),(3034,'Békéscsaba','BC',1099),(3035,'Debrecen','DE',1099),(3036,'Dunaújváros','DU',1099),(3037,'Eger','EG',1099),(3038,'GyÅ‘r','GY',1099),(3039,'HódmezÅ‘vásárhely','HV',1099),(3040,'Kaposvár','KV',1099),(3041,'Kecskemét','KM',1099),(3042,'Miskolc','MI',1099),(3043,'Nagykanizsa','NK',1099),(3044,'Nyiregyháza','NY',1099),(3045,'Pécs','PS',1099),(3046,'Salgótarján','ST',1099),(3047,'Sopron','SN',1099),(3048,'Szeged','SD',1099),(3049,'Székesfehérvár','SF',1099),(3050,'Szekszárd','SS',1099),(3051,'Szolnok','SK',1099),(3052,'Szombathely','SH',1099),(3053,'Tatabánya','TB',1099),(3054,'Zalaegerszeg','ZE',1099),(3055,'Bali','BA',1102),(3056,'Kepulauan Bangka Belitung','BB',1102),(3057,'Banten','BT',1102),(3058,'Bengkulu','BE',1102),(3059,'Gorontalo','GO',1102),(3060,'Papua Barat','PB',1102),(3061,'Jambi','JA',1102),(3062,'Jawa Barat','JB',1102),(3063,'Jawa Tengah','JT',1102),(3064,'Jawa Timur','JI',1102),(3065,'Kalimantan Barat','KB',1102),(3066,'Kalimantan Timur','KI',1102),(3067,'Kalimantan Selatan','KS',1102),(3068,'Kepulauan Riau','KR',1102),(3069,'Lampung','LA',1102),(3070,'Maluku','MA',1102),(3071,'Maluku Utara','MU',1102),(3072,'Nusa Tenggara Barat','NB',1102),(3073,'Nusa Tenggara Timur','NT',1102),(3074,'Papua','PA',1102),(3075,'Riau','RI',1102),(3076,'Sulawesi Selatan','SN',1102),(3077,'Sulawesi Tengah','ST',1102),(3078,'Sulawesi Tenggara','SG',1102),(3079,'Sulawesi Utara','SA',1102),(3080,'Sumatra Barat','SB',1102),(3081,'Sumatra Selatan','SS',1102),(3082,'Sumatera Utara','SU',1102),(3083,'DKI Jakarta','JK',1102),(3084,'Aceh','AC',1102),(3085,'DI Yogyakarta','YO',1102),(3086,'Cork','C',1105),(3087,'Clare','CE',1105),(3088,'Cavan','CN',1105),(3089,'Carlow','CW',1105),(3090,'Dublin','D',1105),(3091,'Donegal','DL',1105),(3092,'Galway','G',1105),(3093,'Kildare','KE',1105),(3094,'Kilkenny','KK',1105),(3095,'Kerry','KY',1105),(3096,'Longford','LD',1105),(3097,'Louth','LH',1105),(3098,'Limerick','LK',1105),(3099,'Leitrim','LM',1105),(3100,'Laois','LS',1105),(3101,'Meath','MH',1105),(3102,'Monaghan','MN',1105),(3103,'Mayo','MO',1105),(3104,'Offaly','OY',1105),(3105,'Roscommon','RN',1105),(3106,'Sligo','SO',1105),(3107,'Tipperary','TA',1105),(3108,'Waterford','WD',1105),(3109,'Westmeath','WH',1105),(3110,'Wicklow','WW',1105),(3111,'Wexford','WX',1105),(3112,'HaDarom','D',1106),(3113,'HaMerkaz','M',1106),(3114,'HaZafon','Z',1106),(3115,'Haifa','HA',1106),(3116,'Tel-Aviv','TA',1106),(3117,'Jerusalem','JM',1106),(3118,'Al Anbar','AN',1104),(3119,'Al Ba,rah','BA',1104),(3120,'Al Muthanna','MU',1104),(3121,'Al Qadisiyah','QA',1104),(3122,'An Najef','NA',1104),(3123,'Arbil','AR',1104),(3124,'As Sulaymaniyah','SW',1104),(3125,'At Ta\'mim','TS',1104),(3126,'Babil','BB',1104),(3127,'Baghdad','BG',1104),(3128,'Dahuk','DA',1104),(3129,'Dhi Qar','DQ',1104),(3130,'Diyala','DI',1104),(3131,'Karbala\'','KA',1104),(3132,'Maysan','MA',1104),(3133,'Ninawa','NI',1104),(3134,'Salah ad Din','SD',1104),(3135,'Wasit','WA',1104),(3136,'Ardabil','03',1103),(3137,'Azarbayjan-e Gharbi','02',1103),(3138,'Azarbayjan-e Sharqi','01',1103),(3139,'Bushehr','06',1103),(3140,'Chahar Mahall va Bakhtiari','08',1103),(3141,'Esfahan','04',1103),(3142,'Fars','14',1103),(3143,'Gilan','19',1103),(3144,'Golestan','27',1103),(3145,'Hamadan','24',1103),(3146,'Hormozgan','23',1103),(3147,'Iiam','05',1103),(3148,'Kerman','15',1103),(3149,'Kermanshah','17',1103),(3150,'Khorasan','09',1103),(3151,'Khuzestan','10',1103),(3152,'Kohjiluyeh va Buyer Ahmad','18',1103),(3153,'Kordestan','16',1103),(3154,'Lorestan','20',1103),(3155,'Markazi','22',1103),(3156,'Mazandaran','21',1103),(3157,'Qazvin','28',1103),(3158,'Qom','26',1103),(3159,'Semnan','12',1103),(3160,'Sistan va Baluchestan','13',1103),(3161,'Tehran','07',1103),(3162,'Yazd','25',1103),(3163,'Zanjan','11',1103),(3164,'Austurland','7',1100),(3165,'Hofuoborgarsvaeoi utan Reykjavikur','1',1100),(3166,'Norourland eystra','6',1100),(3167,'Norourland vestra','5',1100),(3168,'Reykjavik','0',1100),(3169,'Suourland','8',1100),(3170,'Suournes','2',1100),(3171,'Vestfirolr','4',1100),(3172,'Vesturland','3',1100),(3173,'Agrigento','AG',1107),(3174,'Alessandria','AL',1107),(3175,'Ancona','AN',1107),(3176,'Aosta','AO',1107),(3177,'Arezzo','AR',1107),(3178,'Ascoli Piceno','AP',1107),(3179,'Asti','AT',1107),(3180,'Avellino','AV',1107),(3181,'Bari','BA',1107),(3182,'Belluno','BL',1107),(3183,'Benevento','BN',1107),(3184,'Bergamo','BG',1107),(3185,'Biella','BI',1107),(3186,'Bologna','BO',1107),(3187,'Bolzano','BZ',1107),(3188,'Brescia','BS',1107),(3189,'Brindisi','BR',1107),(3190,'Cagliari','CA',1107),(3191,'Caltanissetta','CL',1107),(3192,'Campobasso','CB',1107),(3193,'Caserta','CE',1107),(3194,'Catania','CT',1107),(3195,'Catanzaro','CZ',1107),(3196,'Chieti','CH',1107),(3197,'Como','CO',1107),(3198,'Cosenza','CS',1107),(3199,'Cremona','CR',1107),(3200,'Crotone','KR',1107),(3201,'Cuneo','CN',1107),(3202,'Enna','EN',1107),(3203,'Ferrara','FE',1107),(3204,'Firenze','FI',1107),(3205,'Foggia','FG',1107),(3206,'Forlì-Cesena','FC',1107),(3207,'Frosinone','FR',1107),(3208,'Genova','GE',1107),(3209,'Gorizia','GO',1107),(3210,'Grosseto','GR',1107),(3211,'Imperia','IM',1107),(3212,'Isernia','IS',1107),(3213,'L\'Aquila','AQ',1107),(3214,'La Spezia','SP',1107),(3215,'Latina','LT',1107),(3216,'Lecce','LE',1107),(3217,'Lecco','LC',1107),(3218,'Livorno','LI',1107),(3219,'Lodi','LO',1107),(3220,'Lucca','LU',1107),(3221,'Macerata','MC',1107),(3222,'Mantova','MN',1107),(3223,'Massa-Carrara','MS',1107),(3224,'Matera','MT',1107),(3225,'Messina','ME',1107),(3226,'Milano','MI',1107),(3227,'Modena','MO',1107),(3228,'Napoli','NA',1107),(3229,'Novara','NO',1107),(3230,'Nuoro','NU',1107),(3231,'Oristano','OR',1107),(3232,'Padova','PD',1107),(3233,'Palermo','PA',1107),(3234,'Parma','PR',1107),(3235,'Pavia','PV',1107),(3236,'Perugia','PG',1107),(3237,'Pesaro e Urbino','PU',1107),(3238,'Pescara','PE',1107),(3239,'Piacenza','PC',1107),(3240,'Pisa','PI',1107),(3241,'Pistoia','PT',1107),(3242,'Pordenone','PN',1107),(3243,'Potenza','PZ',1107),(3244,'Prato','PO',1107),(3245,'Ragusa','RG',1107),(3246,'Ravenna','RA',1107),(3247,'Reggio Calabria','RC',1107),(3248,'Reggio Emilia','RE',1107),(3249,'Rieti','RI',1107),(3250,'Rimini','RN',1107),(3251,'Roma','RM',1107),(3252,'Rovigo','RO',1107),(3253,'Salerno','SA',1107),(3254,'Sassari','SS',1107),(3255,'Savona','SV',1107),(3256,'Siena','SI',1107),(3257,'Siracusa','SR',1107),(3258,'Sondrio','SO',1107),(3259,'Taranto','TA',1107),(3260,'Teramo','TE',1107),(3261,'Terni','TR',1107),(3262,'Torino','TO',1107),(3263,'Trapani','TP',1107),(3264,'Trento','TN',1107),(3265,'Treviso','TV',1107),(3266,'Trieste','TS',1107),(3267,'Udine','UD',1107),(3268,'Varese','VA',1107),(3269,'Venezia','VE',1107),(3270,'Verbano-Cusio-Ossola','VB',1107),(3271,'Vercelli','VC',1107),(3272,'Verona','VR',1107),(3273,'Vibo Valentia','VV',1107),(3274,'Vicenza','VI',1107),(3275,'Viterbo','VT',1107),(3276,'Aichi','23',1109),(3277,'Akita','05',1109),(3278,'Aomori','02',1109),(3279,'Chiba','12',1109),(3280,'Ehime','38',1109),(3281,'Fukui','18',1109),(3282,'Fukuoka','40',1109),(3283,'Fukusima','07',1109),(3284,'Gifu','21',1109),(3285,'Gunma','10',1109),(3286,'Hiroshima','34',1109),(3287,'Hokkaido','01',1109),(3288,'Hyogo','28',1109),(3289,'Ibaraki','08',1109),(3290,'Ishikawa','17',1109),(3291,'Iwate','03',1109),(3292,'Kagawa','37',1109),(3293,'Kagoshima','46',1109),(3294,'Kanagawa','14',1109),(3295,'Kochi','39',1109),(3296,'Kumamoto','43',1109),(3297,'Kyoto','26',1109),(3298,'Mie','24',1109),(3299,'Miyagi','04',1109),(3300,'Miyazaki','45',1109),(3301,'Nagano','20',1109),(3302,'Nagasaki','42',1109),(3303,'Nara','29',1109),(3304,'Niigata','15',1109),(3305,'Oita','44',1109),(3306,'Okayama','33',1109),(3307,'Okinawa','47',1109),(3308,'Osaka','27',1109),(3309,'Saga','41',1109),(3310,'Saitama','11',1109),(3311,'Shiga','25',1109),(3312,'Shimane','32',1109),(3313,'Shizuoka','22',1109),(3314,'Tochigi','09',1109),(3315,'Tokushima','36',1109),(3316,'Tokyo','13',1109),(3317,'Tottori','31',1109),(3318,'Toyama','16',1109),(3319,'Wakayama','30',1109),(3320,'Yamagata','06',1109),(3321,'Yamaguchi','35',1109),(3322,'Yamanashi','19',1109),(3323,'Clarendon','CN',1108),(3324,'Hanover','HR',1108),(3325,'Kingston','KN',1108),(3326,'Portland','PD',1108),(3327,'Saint Andrew','AW',1108),(3328,'Saint Ann','AN',1108),(3329,'Saint Catherine','CE',1108),(3330,'Saint Elizabeth','EH',1108),(3331,'Saint James','JS',1108),(3332,'Saint Mary','MY',1108),(3333,'Saint Thomas','TS',1108),(3334,'Trelawny','TY',1108),(3335,'Westmoreland','WD',1108),(3336,'Ajln','AJ',1110),(3337,'Al \'Aqaba','AQ',1110),(3338,'Al Balqa\'','BA',1110),(3339,'Al Karak','KA',1110),(3340,'Al Mafraq','MA',1110),(3341,'Amman','AM',1110),(3342,'At Tafilah','AT',1110),(3343,'Az Zarga','AZ',1110),(3344,'Irbid','JR',1110),(3345,'Jarash','JA',1110),(3346,'Ma\'an','MN',1110),(3347,'Madaba','MD',1110),(3353,'Bishkek','GB',1117),(3354,'Batken','B',1117),(3355,'Chu','C',1117),(3356,'Jalal-Abad','J',1117),(3357,'Naryn','N',1117),(3358,'Osh','O',1117),(3359,'Talas','T',1117),(3360,'Ysyk-Kol','Y',1117),(3361,'Krong Kaeb','23',1037),(3362,'Krong Pailin','24',1037),(3363,'Xrong Preah Sihanouk','18',1037),(3364,'Phnom Penh','12',1037),(3365,'Baat Dambang','2',1037),(3366,'Banteay Mean Chey','1',1037),(3367,'Rampong Chaam','3',1037),(3368,'Kampong Chhnang','4',1037),(3369,'Kampong Spueu','5',1037),(3370,'Kampong Thum','6',1037),(3371,'Kampot','7',1037),(3372,'Kandaal','8',1037),(3373,'Kach Kong','9',1037),(3374,'Krachoh','10',1037),(3375,'Mondol Kiri','11',1037),(3376,'Otdar Mean Chey','22',1037),(3377,'Pousaat','15',1037),(3378,'Preah Vihear','13',1037),(3379,'Prey Veaeng','14',1037),(3380,'Rotanak Kiri','16',1037),(3381,'Siem Reab','17',1037),(3382,'Stueng Traeng','19',1037),(3383,'Svaay Rieng','20',1037),(3384,'Taakaev','21',1037),(3385,'Gilbert Islands','G',1113),(3386,'Line Islands','L',1113),(3387,'Phoenix Islands','P',1113),(3388,'Anjouan Ndzouani','A',1049),(3389,'Grande Comore Ngazidja','G',1049),(3390,'Moheli Moili','M',1049),(3391,'Kaesong-si','KAE',1114),(3392,'Nampo-si','NAM',1114),(3393,'Pyongyang-ai','PYO',1114),(3394,'Chagang-do','CHA',1114),(3395,'Hamgyongbuk-do','HAB',1114),(3396,'Hamgyongnam-do','HAN',1114),(3397,'Hwanghaebuk-do','HWB',1114),(3398,'Hwanghaenam-do','HWN',1114),(3399,'Kangwon-do','KAN',1114),(3400,'Pyonganbuk-do','PYB',1114),(3401,'Pyongannam-do','PYN',1114),(3402,'Yanggang-do','YAN',1114),(3403,'Najin Sonbong-si','NAJ',1114),(3404,'Seoul Teugbyeolsi','11',1115),(3405,'Busan Gwang\'yeogsi','26',1115),(3406,'Daegu Gwang\'yeogsi','27',1115),(3407,'Daejeon Gwang\'yeogsi','30',1115),(3408,'Gwangju Gwang\'yeogsi','29',1115),(3409,'Incheon Gwang\'yeogsi','28',1115),(3410,'Ulsan Gwang\'yeogsi','31',1115),(3411,'Chungcheongbugdo','43',1115),(3412,'Chungcheongnamdo','44',1115),(3413,'Gang\'weondo','42',1115),(3414,'Gyeonggido','41',1115),(3415,'Gyeongsangbugdo','47',1115),(3416,'Gyeongsangnamdo','48',1115),(3417,'Jejudo','49',1115),(3418,'Jeonrabugdo','45',1115),(3419,'Jeonranamdo','46',1115),(3420,'Al Ahmadi','AH',1116),(3421,'Al Farwanlyah','FA',1116),(3422,'Al Jahrah','JA',1116),(3423,'Al Kuwayt','KU',1116),(3424,'Hawalli','HA',1116),(3425,'Almaty','ALA',1111),(3426,'Astana','AST',1111),(3427,'Almaty oblysy','ALM',1111),(3428,'Aqmola oblysy','AKM',1111),(3429,'Aqtobe oblysy','AKT',1111),(3430,'Atyrau oblyfiy','ATY',1111),(3431,'Batys Quzaqstan oblysy','ZAP',1111),(3432,'Mangghystau oblysy','MAN',1111),(3433,'Ongtustik Quzaqstan oblysy','YUZ',1111),(3434,'Pavlodar oblysy','PAV',1111),(3435,'Qaraghandy oblysy','KAR',1111),(3436,'Qostanay oblysy','KUS',1111),(3437,'Qyzylorda oblysy','KZY',1111),(3438,'Shyghys Quzaqstan oblysy','VOS',1111),(3439,'Soltustik Quzaqstan oblysy','SEV',1111),(3440,'Zhambyl oblysy Zhambylskaya oblast\'','ZHA',1111),(3441,'Vientiane','VT',1118),(3442,'Attapu','AT',1118),(3443,'Bokeo','BK',1118),(3444,'Bolikhamxai','BL',1118),(3445,'Champasak','CH',1118),(3446,'Houaphan','HO',1118),(3447,'Khammouan','KH',1118),(3448,'Louang Namtha','LM',1118),(3449,'Louangphabang','LP',1118),(3450,'Oudomxai','OU',1118),(3451,'Phongsali','PH',1118),(3452,'Salavan','SL',1118),(3453,'Savannakhet','SV',1118),(3454,'Xaignabouli','XA',1118),(3455,'Xiasomboun','XN',1118),(3456,'Xekong','XE',1118),(3457,'Xiangkhoang','XI',1118),(3458,'Beirut','BA',1120),(3459,'Beqaa','BI',1120),(3460,'Mount Lebanon','JL',1120),(3461,'North Lebanon','AS',1120),(3462,'South Lebanon','JA',1120),(3463,'Nabatieh','NA',1120),(3464,'Ampara','52',1199),(3465,'Anuradhapura','71',1199),(3466,'Badulla','81',1199),(3467,'Batticaloa','51',1199),(3468,'Colombo','11',1199),(3469,'Galle','31',1199),(3470,'Gampaha','12',1199),(3471,'Hambantota','33',1199),(3472,'Jaffna','41',1199),(3473,'Kalutara','13',1199),(3474,'Kandy','21',1199),(3475,'Kegalla','92',1199),(3476,'Kilinochchi','42',1199),(3477,'Kurunegala','61',1199),(3478,'Mannar','43',1199),(3479,'Matale','22',1199),(3480,'Matara','32',1199),(3481,'Monaragala','82',1199),(3482,'Mullaittivu','45',1199),(3483,'Nuwara Eliya','23',1199),(3484,'Polonnaruwa','72',1199),(3485,'Puttalum','62',1199),(3486,'Ratnapura','91',1199),(3487,'Trincomalee','53',1199),(3488,'VavunLya','44',1199),(3489,'Bomi','BM',1122),(3490,'Bong','BG',1122),(3491,'Grand Basaa','GB',1122),(3492,'Grand Cape Mount','CM',1122),(3493,'Grand Gedeh','GG',1122),(3494,'Grand Kru','GK',1122),(3495,'Lofa','LO',1122),(3496,'Margibi','MG',1122),(3497,'Maryland','MY',1122),(3498,'Montserrado','MO',1122),(3499,'Nimba','NI',1122),(3500,'Rivercess','RI',1122),(3501,'Sinoe','SI',1122),(3502,'Berea','D',1121),(3503,'Butha-Buthe','B',1121),(3504,'Leribe','C',1121),(3505,'Mafeteng','E',1121),(3506,'Maseru','A',1121),(3507,'Mohale\'s Hoek','F',1121),(3508,'Mokhotlong','J',1121),(3509,'Qacha\'s Nek','H',1121),(3510,'Quthing','G',1121),(3511,'Thaba-Tseka','K',1121),(3512,'Alytaus Apskritis','AL',1125),(3513,'Kauno Apskritis','KU',1125),(3514,'KlaipÄ—dos Apskritis','KL',1125),(3515,'MarijampolÄ—s Apskritis','MR',1125),(3516,'Panevėžio Apskritis','PN',1125),(3517,'Å iaulių Apskritis','SA',1125),(3518,'TauragÄ—s Apskritis','TA',1125),(3519,'TelÅ¡ių Apskritis','TE',1125),(3520,'Utenos Apskritis','UT',1125),(3521,'Vilniaus Apskritis','VL',1125),(3522,'Diekirch','D',1126),(3523,'GreveNmacher','G',1126),(3550,'Daugavpils','DGV',1119),(3551,'Jelgava','JEL',1119),(3552,'JÅ«rmala','JUR',1119),(3553,'LiepÄja','LPX',1119),(3554,'RÄ“zekne','REZ',1119),(3555,'RÄ«ga','RIX',1119),(3556,'Ventspils','VEN',1119),(3557,'AjdÄbiyÄ','AJ',1123),(3558,'Al BuÅ£nÄn','BU',1123),(3559,'Al HizÄm al Akhdar','HZ',1123),(3560,'Al Jabal al Akhdar','JA',1123),(3561,'Al JifÄrah','JI',1123),(3562,'Al Jufrah','JU',1123),(3563,'Al Kufrah','KF',1123),(3564,'Al Marj','MJ',1123),(3565,'Al Marqab','MB',1123),(3566,'Al QaÅ£rÅ«n','QT',1123),(3567,'Al Qubbah','QB',1123),(3568,'Al WÄhah','WA',1123),(3569,'An NuqaÅ£ al Khams','NQ',1123),(3570,'Ash ShÄÅ£i\'','SH',1123),(3571,'Az ZÄwiyah','ZA',1123),(3572,'BanghÄzÄ«','BA',1123),(3573,'BanÄ« WalÄ«d','BW',1123),(3574,'Darnah','DR',1123),(3575,'GhadÄmis','GD',1123),(3576,'GharyÄn','GR',1123),(3577,'GhÄt','GT',1123),(3578,'JaghbÅ«b','JB',1123),(3579,'MiÅŸrÄtah','MI',1123),(3580,'Mizdah','MZ',1123),(3581,'Murzuq','MQ',1123),(3582,'NÄlÅ«t','NL',1123),(3583,'SabhÄ','SB',1123),(3584,'ÅžabrÄtah ÅžurmÄn','SS',1123),(3585,'Surt','SR',1123),(3586,'TÄjÅ«rÄ\' wa an NawÄhÄ« al ArbÄh','TN',1123),(3587,'Å¢arÄbulus','TB',1123),(3588,'TarhÅ«nah-MasallÄtah','TM',1123),(3589,'WÄdÄ« al hayÄt','WD',1123),(3590,'Yafran-JÄdÅ«','YJ',1123),(3591,'Agadir','AGD',1146),(3592,'Aït Baha','BAH',1146),(3593,'Aït Melloul','MEL',1146),(3594,'Al Haouz','HAO',1146),(3595,'Al Hoceïma','HOC',1146),(3596,'Assa-Zag','ASZ',1146),(3597,'Azilal','AZI',1146),(3598,'Beni Mellal','BEM',1146),(3599,'Ben Sllmane','BES',1146),(3600,'Berkane','BER',1146),(3601,'Boujdour','BOD',1146),(3602,'Boulemane','BOM',1146),(3603,'Casablanca [Dar el Beïda]','CAS',1146),(3604,'Chefchaouene','CHE',1146),(3605,'Chichaoua','CHI',1146),(3606,'El Hajeb','HAJ',1146),(3607,'El Jadida','JDI',1146),(3608,'Errachidia','ERR',1146),(3609,'Essaouira','ESI',1146),(3610,'Es Smara','ESM',1146),(3611,'Fès','FES',1146),(3612,'Figuig','FIG',1146),(3613,'Guelmim','GUE',1146),(3614,'Ifrane','IFR',1146),(3615,'Jerada','JRA',1146),(3616,'Kelaat Sraghna','KES',1146),(3617,'Kénitra','KEN',1146),(3618,'Khemisaet','KHE',1146),(3619,'Khenifra','KHN',1146),(3620,'Khouribga','KHO',1146),(3621,'Laâyoune (EH)','LAA',1146),(3622,'Larache','LAP',1146),(3623,'Marrakech','MAR',1146),(3624,'Meknsès','MEK',1146),(3625,'Nador','NAD',1146),(3626,'Ouarzazate','OUA',1146),(3627,'Oued ed Dahab (EH)','OUD',1146),(3628,'Oujda','OUJ',1146),(3629,'Rabat-Salé','RBA',1146),(3630,'Safi','SAF',1146),(3631,'Sefrou','SEF',1146),(3632,'Settat','SET',1146),(3633,'Sidl Kacem','SIK',1146),(3634,'Tanger','TNG',1146),(3635,'Tan-Tan','TNT',1146),(3636,'Taounate','TAO',1146),(3637,'Taroudannt','TAR',1146),(3638,'Tata','TAT',1146),(3639,'Taza','TAZ',1146),(3640,'Tétouan','TET',1146),(3641,'Tiznit','TIZ',1146),(3642,'Gagauzia, Unitate Teritoriala Autonoma','GA',1142),(3643,'Chisinau','CU',1142),(3644,'Stinga Nistrului, unitatea teritoriala din','SN',1142),(3645,'Balti','BA',1142),(3646,'Cahul','CA',1142),(3647,'Edinet','ED',1142),(3648,'Lapusna','LA',1142),(3649,'Orhei','OR',1142),(3650,'Soroca','SO',1142),(3651,'Taraclia','TA',1142),(3652,'Tighina [Bender]','TI',1142),(3653,'Ungheni','UN',1142),(3654,'Antananarivo','T',1129),(3655,'Antsiranana','D',1129),(3656,'Fianarantsoa','F',1129),(3657,'Mahajanga','M',1129),(3658,'Toamasina','A',1129),(3659,'Toliara','U',1129),(3660,'Ailinglapalap','ALL',1135),(3661,'Ailuk','ALK',1135),(3662,'Arno','ARN',1135),(3663,'Aur','AUR',1135),(3664,'Ebon','EBO',1135),(3665,'Eniwetok','ENI',1135),(3666,'Jaluit','JAL',1135),(3667,'Kili','KIL',1135),(3668,'Kwajalein','KWA',1135),(3669,'Lae','LAE',1135),(3670,'Lib','LIB',1135),(3671,'Likiep','LIK',1135),(3672,'Majuro','MAJ',1135),(3673,'Maloelap','MAL',1135),(3674,'Mejit','MEJ',1135),(3675,'Mili','MIL',1135),(3676,'Namorik','NMK',1135),(3677,'Namu','NMU',1135),(3678,'Rongelap','RON',1135),(3679,'Ujae','UJA',1135),(3680,'Ujelang','UJL',1135),(3681,'Utirik','UTI',1135),(3682,'Wotho','WTN',1135),(3683,'Wotje','WTJ',1135),(3684,'Bamako','BK0',1133),(3685,'Gao','7',1133),(3686,'Kayes','1',1133),(3687,'Kidal','8',1133),(3688,'Xoulikoro','2',1133),(3689,'Mopti','5',1133),(3690,'S69ou','4',1133),(3691,'Sikasso','3',1133),(3692,'Tombouctou','6',1133),(3693,'Ayeyarwady','07',1035),(3694,'Bago','02',1035),(3695,'Magway','03',1035),(3696,'Mandalay','04',1035),(3697,'Sagaing','01',1035),(3698,'Tanintharyi','05',1035),(3699,'Yangon','06',1035),(3700,'Chin','14',1035),(3701,'Kachin','11',1035),(3702,'Kayah','12',1035),(3703,'Kayin','13',1035),(3704,'Mon','15',1035),(3705,'Rakhine','16',1035),(3706,'Shan','17',1035),(3707,'Ulaanbaatar','1',1144),(3708,'Arhangay','073',1144),(3709,'Bayanhongor','069',1144),(3710,'Bayan-Olgiy','071',1144),(3711,'Bulgan','067',1144),(3712,'Darhan uul','037',1144),(3713,'Dornod','061',1144),(3714,'Dornogov,','063',1144),(3715,'DundgovL','059',1144),(3716,'Dzavhan','057',1144),(3717,'Govi-Altay','065',1144),(3718,'Govi-Smber','064',1144),(3719,'Hentiy','039',1144),(3720,'Hovd','043',1144),(3721,'Hovsgol','041',1144),(3722,'Omnogovi','053',1144),(3723,'Orhon','035',1144),(3724,'Ovorhangay','055',1144),(3725,'Selenge','049',1144),(3726,'Shbaatar','051',1144),(3727,'Tov','047',1144),(3728,'Uvs','046',1144),(3729,'Nouakchott','NKC',1137),(3730,'Assaba','03',1137),(3731,'Brakna','05',1137),(3732,'Dakhlet Nouadhibou','08',1137),(3733,'Gorgol','04',1137),(3734,'Guidimaka','10',1137),(3735,'Hodh ech Chargui','01',1137),(3736,'Hodh el Charbi','02',1137),(3737,'Inchiri','12',1137),(3738,'Tagant','09',1137),(3739,'Tiris Zemmour','11',1137),(3740,'Trarza','06',1137),(3741,'Beau Bassin-Rose Hill','BR',1138),(3742,'Curepipe','CU',1138),(3743,'Port Louis','PU',1138),(3744,'Quatre Bornes','QB',1138),(3745,'Vacosa-Phoenix','VP',1138),(3746,'Black River','BL',1138),(3747,'Flacq','FL',1138),(3748,'Grand Port','GP',1138),(3749,'Moka','MO',1138),(3750,'Pamplemousses','PA',1138),(3751,'Plaines Wilhems','PW',1138),(3752,'Riviere du Rempart','RP',1138),(3753,'Savanne','SA',1138),(3754,'Agalega Islands','AG',1138),(3755,'Cargados Carajos Shoals','CC',1138),(3756,'Rodrigues Island','RO',1138),(3757,'Male','MLE',1132),(3758,'Alif','02',1132),(3759,'Baa','20',1132),(3760,'Dhaalu','17',1132),(3761,'Faafu','14',1132),(3762,'Gaaf Alif','27',1132),(3763,'Gaefu Dhaalu','28',1132),(3764,'Gnaviyani','29',1132),(3765,'Haa Alif','07',1132),(3766,'Haa Dhaalu','23',1132),(3767,'Kaafu','26',1132),(3768,'Laamu','05',1132),(3769,'Lhaviyani','03',1132),(3770,'Meemu','12',1132),(3771,'Noonu','25',1132),(3772,'Raa','13',1132),(3773,'Seenu','01',1132),(3774,'Shaviyani','24',1132),(3775,'Thaa','08',1132),(3776,'Vaavu','04',1132),(3777,'Balaka','BA',1130),(3778,'Blantyre','BL',1130),(3779,'Chikwawa','CK',1130),(3780,'Chiradzulu','CR',1130),(3781,'Chitipa','CT',1130),(3782,'Dedza','DE',1130),(3783,'Dowa','DO',1130),(3784,'Karonga','KR',1130),(3785,'Kasungu','KS',1130),(3786,'Likoma Island','LK',1130),(3787,'Lilongwe','LI',1130),(3788,'Machinga','MH',1130),(3789,'Mangochi','MG',1130),(3790,'Mchinji','MC',1130),(3791,'Mulanje','MU',1130),(3792,'Mwanza','MW',1130),(3793,'Mzimba','MZ',1130),(3794,'Nkhata Bay','NB',1130),(3795,'Nkhotakota','NK',1130),(3796,'Nsanje','NS',1130),(3797,'Ntcheu','NU',1130),(3798,'Ntchisi','NI',1130),(3799,'Phalomba','PH',1130),(3800,'Rumphi','RU',1130),(3801,'Salima','SA',1130),(3802,'Thyolo','TH',1130),(3803,'Zomba','ZO',1130),(3804,'Aguascalientes','AGU',1140),(3805,'Baja California','BCN',1140),(3806,'Baja California Sur','BCS',1140),(3807,'Campeche','CAM',1140),(3808,'Coahuila','COA',1140),(3809,'Colima','COL',1140),(3810,'Chiapas','CHP',1140),(3811,'Chihuahua','CHH',1140),(3812,'Durango','DUR',1140),(3813,'Guanajuato','GUA',1140),(3814,'Guerrero','GRO',1140),(3815,'Hidalgo','HID',1140),(3816,'Jalisco','JAL',1140),(3817,'Mexico','MEX',1140),(3818,'Michoacin','MIC',1140),(3819,'Morelos','MOR',1140),(3820,'Nayarit','NAY',1140),(3821,'Nuevo Leon','NLE',1140),(3822,'Oaxaca','OAX',1140),(3823,'Puebla','PUE',1140),(3824,'Queretaro','QUE',1140),(3825,'Quintana Roo','ROO',1140),(3826,'San Luis Potosi','SLP',1140),(3827,'Sinaloa','SIN',1140),(3828,'Sonora','SON',1140),(3829,'Tabasco','TAB',1140),(3830,'Tamaulipas','TAM',1140),(3831,'Tlaxcala','TLA',1140),(3832,'Veracruz','VER',1140),(3833,'Yucatan','YUC',1140),(3834,'Zacatecas','ZAC',1140),(3835,'Wilayah Persekutuan Kuala Lumpur','14',1131),(3836,'Wilayah Persekutuan Labuan','15',1131),(3837,'Wilayah Persekutuan Putrajaya','16',1131),(3838,'Johor','01',1131),(3839,'Kedah','02',1131),(3840,'Kelantan','03',1131),(3841,'Melaka','04',1131),(3842,'Negeri Sembilan','05',1131),(3843,'Pahang','06',1131),(3844,'Perak','08',1131),(3845,'Perlis','09',1131),(3846,'Pulau Pinang','07',1131),(3847,'Sabah','12',1131),(3848,'Sarawak','13',1131),(3849,'Selangor','10',1131),(3850,'Terengganu','11',1131),(3851,'Maputo','MPM',1147),(3852,'Cabo Delgado','P',1147),(3853,'Gaza','G',1147),(3854,'Inhambane','I',1147),(3855,'Manica','B',1147),(3856,'Numpula','N',1147),(3857,'Niaaea','A',1147),(3858,'Sofala','S',1147),(3859,'Tete','T',1147),(3860,'Zambezia','Q',1147),(3861,'Caprivi','CA',1148),(3862,'Erongo','ER',1148),(3863,'Hardap','HA',1148),(3864,'Karas','KA',1148),(3865,'Khomas','KH',1148),(3866,'Kunene','KU',1148),(3867,'Ohangwena','OW',1148),(3868,'Okavango','OK',1148),(3869,'Omaheke','OH',1148),(3870,'Omusati','OS',1148),(3871,'Oshana','ON',1148),(3872,'Oshikoto','OT',1148),(3873,'Otjozondjupa','OD',1148),(3874,'Niamey','8',1156),(3875,'Agadez','1',1156),(3876,'Diffa','2',1156),(3877,'Dosso','3',1156),(3878,'Maradi','4',1156),(3879,'Tahoua','S',1156),(3880,'Tillaberi','6',1156),(3881,'Zinder','7',1156),(3882,'Abuja Federal Capital Territory','FC',1157),(3883,'Abia','AB',1157),(3884,'Adamawa','AD',1157),(3885,'Akwa Ibom','AK',1157),(3886,'Anambra','AN',1157),(3887,'Bauchi','BA',1157),(3888,'Bayelsa','BY',1157),(3889,'Benue','BE',1157),(3890,'Borno','BO',1157),(3891,'Cross River','CR',1157),(3892,'Delta','DE',1157),(3893,'Ebonyi','EB',1157),(3894,'Edo','ED',1157),(3895,'Ekiti','EK',1157),(3896,'Enugu','EN',1157),(3897,'Gombe','GO',1157),(3898,'Imo','IM',1157),(3899,'Jigawa','JI',1157),(3900,'Kaduna','KD',1157),(3901,'Kano','KN',1157),(3902,'Katsina','KT',1157),(3903,'Kebbi','KE',1157),(3904,'Kogi','KO',1157),(3905,'Kwara','KW',1157),(3906,'Lagos','LA',1157),(3907,'Nassarawa','NA',1157),(3908,'Niger','NI',1157),(3909,'Ogun','OG',1157),(3910,'Ondo','ON',1157),(3911,'Osun','OS',1157),(3912,'Oyo','OY',1157),(3913,'Rivers','RI',1157),(3914,'Sokoto','SO',1157),(3915,'Taraba','TA',1157),(3916,'Yobe','YO',1157),(3917,'Zamfara','ZA',1157),(3918,'Boaco','BO',1155),(3919,'Carazo','CA',1155),(3920,'Chinandega','CI',1155),(3921,'Chontales','CO',1155),(3922,'Esteli','ES',1155),(3923,'Jinotega','JI',1155),(3924,'Leon','LE',1155),(3925,'Madriz','MD',1155),(3926,'Managua','MN',1155),(3927,'Masaya','MS',1155),(3928,'Matagalpa','MT',1155),(3929,'Nueva Segovia','NS',1155),(3930,'Rio San Juan','SJ',1155),(3931,'Rivas','RI',1155),(3932,'Atlantico Norte','AN',1155),(3933,'Atlantico Sur','AS',1155),(3934,'Drente','DR',1152),(3935,'Flevoland','FL',1152),(3936,'Friesland','FR',1152),(3937,'Gelderland','GL',1152),(3938,'Groningen','GR',1152),(3939,'Noord-Brabant','NB',1152),(3940,'Noord-Holland','NH',1152),(3941,'Overijssel','OV',1152),(3942,'Utrecht','UT',1152),(3943,'Zuid-Holland','ZH',1152),(3944,'Zeeland','ZL',1152),(3945,'Akershus','02',1161),(3946,'Aust-Agder','09',1161),(3947,'Buskerud','06',1161),(3948,'Finnmark','20',1161),(3949,'Hedmark','04',1161),(3950,'Hordaland','12',1161),(3951,'Møre og Romsdal','15',1161),(3952,'Nordland','18',1161),(3953,'Nord-Trøndelag','17',1161),(3954,'Oppland','05',1161),(3955,'Oslo','03',1161),(3956,'Rogaland','11',1161),(3957,'Sogn og Fjordane','14',1161),(3958,'Sør-Trøndelag','16',1161),(3959,'Telemark','06',1161),(3960,'Troms','19',1161),(3961,'Vest-Agder','10',1161),(3962,'Vestfold','07',1161),(3963,'Østfold','01',1161),(3964,'Jan Mayen','22',1161),(3965,'Svalbard','21',1161),(3966,'Auckland','AUK',1154),(3967,'Bay of Plenty','BOP',1154),(3968,'Canterbury','CAN',1154),(3969,'Gisborne','GIS',1154),(3970,'Hawkes Bay','HKB',1154),(3971,'Manawatu-Wanganui','MWT',1154),(3972,'Marlborough','MBH',1154),(3973,'Nelson','NSN',1154),(3974,'Northland','NTL',1154),(3975,'Otago','OTA',1154),(3976,'Southland','STL',1154),(3977,'Taranaki','TKI',1154),(3978,'Tasman','TAS',1154),(3979,'Waikato','WKO',1154),(3980,'Wellington','WGN',1154),(3981,'West Coast','WTC',1154),(3982,'Ad Dakhillyah','DA',1162),(3983,'Al Batinah','BA',1162),(3984,'Al Janblyah','JA',1162),(3985,'Al Wusta','WU',1162),(3986,'Ash Sharqlyah','SH',1162),(3987,'Az Zahirah','ZA',1162),(3988,'Masqat','MA',1162),(3989,'Musandam','MU',1162),(3990,'Bocas del Toro','1',1166),(3991,'Cocle','2',1166),(3992,'Chiriqui','4',1166),(3993,'Darien','5',1166),(3994,'Herrera','6',1166),(3995,'Loa Santoa','7',1166),(3996,'Panama','8',1166),(3997,'Veraguas','9',1166),(3998,'Comarca de San Blas','Q',1166),(3999,'El Callao','CAL',1169),(4000,'Ancash','ANC',1169),(4001,'Apurimac','APU',1169),(4002,'Arequipa','ARE',1169),(4003,'Ayacucho','AYA',1169),(4004,'Cajamarca','CAJ',1169),(4005,'Cuzco','CUS',1169),(4006,'Huancavelica','HUV',1169),(4007,'Huanuco','HUC',1169),(4008,'Ica','ICA',1169),(4009,'Junin','JUN',1169),(4010,'La Libertad','LAL',1169),(4011,'Lambayeque','LAM',1169),(4012,'Lima','LIM',1169),(4013,'Loreto','LOR',1169),(4014,'Madre de Dios','MDD',1169),(4015,'Moquegua','MOQ',1169),(4016,'Pasco','PAS',1169),(4017,'Piura','PIU',1169),(4018,'Puno','PUN',1169),(4019,'San Martin','SAM',1169),(4020,'Tacna','TAC',1169),(4021,'Tumbes','TUM',1169),(4022,'Ucayali','UCA',1169),(4023,'National Capital District (Port Moresby)','NCD',1167),(4024,'Chimbu','CPK',1167),(4025,'Eastern Highlands','EHG',1167),(4026,'East New Britain','EBR',1167),(4027,'East Sepik','ESW',1167),(4028,'Enga','EPW',1167),(4029,'Gulf','GPK',1167),(4030,'Madang','MPM',1167),(4031,'Manus','MRL',1167),(4032,'Milne Bay','MBA',1167),(4033,'Morobe','MPL',1167),(4034,'New Ireland','NIK',1167),(4035,'North Solomons','NSA',1167),(4036,'Santaun','SAN',1167),(4037,'Southern Highlands','SHM',1167),(4038,'Western Highlands','WHM',1167),(4039,'West New Britain','WBK',1167),(4040,'Abra','ABR',1170),(4041,'Agusan del Norte','AGN',1170),(4042,'Agusan del Sur','AGS',1170),(4043,'Aklan','AKL',1170),(4044,'Albay','ALB',1170),(4045,'Antique','ANT',1170),(4046,'Apayao','APA',1170),(4047,'Aurora','AUR',1170),(4048,'Basilan','BAS',1170),(4049,'Bataan','BAN',1170),(4050,'Batanes','BTN',1170),(4051,'Batangas','BTG',1170),(4052,'Benguet','BEN',1170),(4053,'Biliran','BIL',1170),(4054,'Bohol','BOH',1170),(4055,'Bukidnon','BUK',1170),(4056,'Bulacan','BUL',1170),(4057,'Cagayan','CAG',1170),(4058,'Camarines Norte','CAN',1170),(4059,'Camarines Sur','CAS',1170),(4060,'Camiguin','CAM',1170),(4061,'Capiz','CAP',1170),(4062,'Catanduanes','CAT',1170),(4063,'Cavite','CAV',1170),(4064,'Cebu','CEB',1170),(4065,'Compostela Valley','COM',1170),(4066,'Davao','DAV',1170),(4067,'Davao del Sur','DAS',1170),(4068,'Davao Oriental','DAO',1170),(4069,'Eastern Samar','EAS',1170),(4070,'Guimaras','GUI',1170),(4071,'Ifugao','IFU',1170),(4072,'Ilocos Norte','ILN',1170),(4073,'Ilocos Sur','ILS',1170),(4074,'Iloilo','ILI',1170),(4075,'Isabela','ISA',1170),(4076,'Kalinga-Apayso','KAL',1170),(4077,'Laguna','LAG',1170),(4078,'Lanao del Norte','LAN',1170),(4079,'Lanao del Sur','LAS',1170),(4080,'La Union','LUN',1170),(4081,'Leyte','LEY',1170),(4082,'Maguindanao','MAG',1170),(4083,'Marinduque','MAD',1170),(4084,'Masbate','MAS',1170),(4085,'Mindoro Occidental','MDC',1170),(4086,'Mindoro Oriental','MDR',1170),(4087,'Misamis Occidental','MSC',1170),(4088,'Misamis Oriental','MSR',1170),(4089,'Mountain Province','MOU',1170),(4090,'Negroe Occidental','NEC',1170),(4091,'Negros Oriental','NER',1170),(4092,'North Cotabato','NCO',1170),(4093,'Northern Samar','NSA',1170),(4094,'Nueva Ecija','NUE',1170),(4095,'Nueva Vizcaya','NUV',1170),(4096,'Palawan','PLW',1170),(4097,'Pampanga','PAM',1170),(4098,'Pangasinan','PAN',1170),(4099,'Quezon','QUE',1170),(4100,'Quirino','QUI',1170),(4101,'Rizal','RIZ',1170),(4102,'Romblon','ROM',1170),(4103,'Sarangani','SAR',1170),(4104,'Siquijor','SIG',1170),(4105,'Sorsogon','SOR',1170),(4106,'South Cotabato','SCO',1170),(4107,'Southern Leyte','SLE',1170),(4108,'Sultan Kudarat','SUK',1170),(4109,'Sulu','SLU',1170),(4110,'Surigao del Norte','SUN',1170),(4111,'Surigao del Sur','SUR',1170),(4112,'Tarlac','TAR',1170),(4113,'Tawi-Tawi','TAW',1170),(4114,'Western Samar','WSA',1170),(4115,'Zambales','ZMB',1170),(4116,'Zamboanga del Norte','ZAN',1170),(4117,'Zamboanga del Sur','ZAS',1170),(4118,'Zamboanga Sibiguey','ZSI',1170),(4119,'Islamabad Federal Capital Area','IS',1163),(4120,'Baluchistan','BA',1163),(4121,'Khyber Pakhtun Khawa','NW',1163),(4122,'Sindh','SD',1163),(4123,'Federally Administered Tribal Areas','TA',1163),(4124,'Azad Kashmir','JK',1163),(4125,'Gilgit-Baltistan','NA',1163),(4126,'Aveiro','01',1173),(4127,'Beja','02',1173),(4128,'Braga','03',1173),(4129,'Braganca','04',1173),(4130,'Castelo Branco','05',1173),(4131,'Colmbra','06',1173),(4132,'Ovora','07',1173),(4133,'Faro','08',1173),(4134,'Guarda','09',1173),(4135,'Leiria','10',1173),(4136,'Lisboa','11',1173),(4137,'Portalegre','12',1173),(4138,'Porto','13',1173),(4139,'Santarem','14',1173),(4140,'Setubal','15',1173),(4141,'Viana do Castelo','16',1173),(4142,'Vila Real','17',1173),(4143,'Viseu','18',1173),(4144,'Regiao Autonoma dos Acores','20',1173),(4145,'Regiao Autonoma da Madeira','30',1173),(4146,'Asuncion','ASU',1168),(4147,'Alto Paraguay','16',1168),(4148,'Alto Parana','10',1168),(4149,'Amambay','13',1168),(4150,'Boqueron','19',1168),(4151,'Caeguazu','5',1168),(4152,'Caazapl','6',1168),(4153,'Canindeyu','14',1168),(4154,'Concepcion','1',1168),(4155,'Cordillera','3',1168),(4156,'Guaira','4',1168),(4157,'Itapua','7',1168),(4158,'Miaiones','8',1168),(4159,'Neembucu','12',1168),(4160,'Paraguari','9',1168),(4161,'Presidente Hayes','15',1168),(4162,'San Pedro','2',1168),(4163,'Ad Dawhah','DA',1175),(4164,'Al Ghuwayriyah','GH',1175),(4165,'Al Jumayliyah','JU',1175),(4166,'Al Khawr','KH',1175),(4167,'Al Wakrah','WA',1175),(4168,'Ar Rayyan','RA',1175),(4169,'Jariyan al Batnah','JB',1175),(4170,'Madinat ash Shamal','MS',1175),(4171,'Umm Salal','US',1175),(4172,'Bucuresti','B',1176),(4173,'Alba','AB',1176),(4174,'Arad','AR',1176),(4175,'ArgeÈ™','AG',1176),(4176,'Bacău','BC',1176),(4177,'Bihor','BH',1176),(4178,'BistriÈ›a-Năsăud','BN',1176),(4179,'BotoÈ™ani','BT',1176),(4180,'BraÈ™ov','BV',1176),(4181,'Brăila','BR',1176),(4182,'Buzău','BZ',1176),(4183,'CaraÈ™-Severin','CS',1176),(4184,'CălăraÈ™i','CL',1176),(4185,'Cluj','CJ',1176),(4186,'ConstanÈ›a','CT',1176),(4187,'Covasna','CV',1176),(4188,'DâmboviÈ›a','DB',1176),(4189,'Dolj','DJ',1176),(4190,'GalaÈ›i','GL',1176),(4191,'Giurgiu','GR',1176),(4192,'Gorj','GJ',1176),(4193,'Harghita','HR',1176),(4194,'Hunedoara','HD',1176),(4195,'IalomiÈ›a','IL',1176),(4196,'IaÈ™i','IS',1176),(4197,'Ilfov','IF',1176),(4198,'MaramureÈ™','MM',1176),(4199,'MehedinÈ›i','MH',1176),(4200,'MureÈ™','MS',1176),(4201,'NeamÈ›','NT',1176),(4202,'Olt','OT',1176),(4203,'Prahova','PH',1176),(4204,'Satu Mare','SM',1176),(4205,'Sălaj','SJ',1176),(4206,'Sibiu','SB',1176),(4207,'Suceava','SV',1176),(4208,'Teleorman','TR',1176),(4209,'TimiÈ™','TM',1176),(4210,'Tulcea','TL',1176),(4211,'Vaslui','VS',1176),(4212,'Vâlcea','VL',1176),(4213,'Vrancea','VN',1176),(4214,'Adygeya, Respublika','AD',1177),(4215,'Altay, Respublika','AL',1177),(4216,'Bashkortostan, Respublika','BA',1177),(4217,'Buryatiya, Respublika','BU',1177),(4218,'Chechenskaya Respublika','CE',1177),(4219,'Chuvashskaya Respublika','CU',1177),(4220,'Dagestan, Respublika','DA',1177),(4221,'Ingushskaya Respublika','IN',1177),(4222,'Kabardino-Balkarskaya','KB',1177),(4223,'Kalmykiya, Respublika','KL',1177),(4224,'Karachayevo-Cherkesskaya Respublika','KC',1177),(4225,'Kareliya, Respublika','KR',1177),(4226,'Khakasiya, Respublika','KK',1177),(4227,'Komi, Respublika','KO',1177),(4228,'Mariy El, Respublika','ME',1177),(4229,'Mordoviya, Respublika','MO',1177),(4230,'Sakha, Respublika [Yakutiya]','SA',1177),(4231,'Severnaya Osetiya, Respublika','SE',1177),(4232,'Tatarstan, Respublika','TA',1177),(4233,'Tyva, Respublika [Tuva]','TY',1177),(4234,'Udmurtskaya Respublika','UD',1177),(4235,'Altayskiy kray','ALT',1177),(4236,'Khabarovskiy kray','KHA',1177),(4237,'Krasnodarskiy kray','KDA',1177),(4238,'Krasnoyarskiy kray','KYA',1177),(4239,'Primorskiy kray','PRI',1177),(4240,'Stavropol\'skiy kray','STA',1177),(4241,'Amurskaya oblast\'','AMU',1177),(4242,'Arkhangel\'skaya oblast\'','ARK',1177),(4243,'Astrakhanskaya oblast\'','AST',1177),(4244,'Belgorodskaya oblast\'','BEL',1177),(4245,'Bryanskaya oblast\'','BRY',1177),(4246,'Chelyabinskaya oblast\'','CHE',1177),(4247,'Zabaykalsky Krai\'','ZSK',1177),(4248,'Irkutskaya oblast\'','IRK',1177),(4249,'Ivanovskaya oblast\'','IVA',1177),(4250,'Kaliningradskaya oblast\'','KGD',1177),(4251,'Kaluzhskaya oblast\'','KLU',1177),(4252,'Kamchatka Krai\'','KAM',1177),(4253,'Kemerovskaya oblast\'','KEM',1177),(4254,'Kirovskaya oblast\'','KIR',1177),(4255,'Kostromskaya oblast\'','KOS',1177),(4256,'Kurganskaya oblast\'','KGN',1177),(4257,'Kurskaya oblast\'','KRS',1177),(4258,'Leningradskaya oblast\'','LEN',1177),(4259,'Lipetskaya oblast\'','LIP',1177),(4260,'Magadanskaya oblast\'','MAG',1177),(4261,'Moskovskaya oblast\'','MOS',1177),(4262,'Murmanskaya oblast\'','MUR',1177),(4263,'Nizhegorodskaya oblast\'','NIZ',1177),(4264,'Novgorodskaya oblast\'','NGR',1177),(4265,'Novosibirskaya oblast\'','NVS',1177),(4266,'Omskaya oblast\'','OMS',1177),(4267,'Orenburgskaya oblast\'','ORE',1177),(4268,'Orlovskaya oblast\'','ORL',1177),(4269,'Penzenskaya oblast\'','PNZ',1177),(4270,'Perm krai\'','PEK',1177),(4271,'Pskovskaya oblast\'','PSK',1177),(4272,'Rostovskaya oblast\'','ROS',1177),(4273,'Ryazanskaya oblast\'','RYA',1177),(4274,'Sakhalinskaya oblast\'','SAK',1177),(4275,'Samarskaya oblast\'','SAM',1177),(4276,'Saratovskaya oblast\'','SAR',1177),(4277,'Smolenskaya oblast\'','SMO',1177),(4278,'Sverdlovskaya oblast\'','SVE',1177),(4279,'Tambovskaya oblast\'','TAM',1177),(4280,'Tomskaya oblast\'','TOM',1177),(4281,'Tul\'skaya oblast\'','TUL',1177),(4282,'Tverskaya oblast\'','TVE',1177),(4283,'Tyumenskaya oblast\'','TYU',1177),(4284,'Ul\'yanovskaya oblast\'','ULY',1177),(4285,'Vladimirskaya oblast\'','VLA',1177),(4286,'Volgogradskaya oblast\'','VGG',1177),(4287,'Vologodskaya oblast\'','VLG',1177),(4288,'Voronezhskaya oblast\'','VOR',1177),(4289,'Yaroslavskaya oblast\'','YAR',1177),(4290,'Moskva','MOW',1177),(4291,'Sankt-Peterburg','SPE',1177),(4292,'Yevreyskaya avtonomnaya oblast\'','YEV',1177),(4294,'Chukotskiy avtonomnyy okrug','CHU',1177),(4296,'Khanty-Mansiyskiy avtonomnyy okrug','KHM',1177),(4299,'Nenetskiy avtonomnyy okrug','NEN',1177),(4302,'Yamalo-Nenetskiy avtonomnyy okrug','YAN',1177),(4303,'Butare','C',1178),(4304,'Byumba','I',1178),(4305,'Cyangugu','E',1178),(4306,'Gikongoro','D',1178),(4307,'Gisenyi','G',1178),(4308,'Gitarama','B',1178),(4309,'Kibungo','J',1178),(4310,'Kibuye','F',1178),(4311,'Kigali-Rural Kigali y\' Icyaro','K',1178),(4312,'Kigali-Ville Kigali Ngari','L',1178),(4313,'Mutara','M',1178),(4314,'Ruhengeri','H',1178),(4315,'Al Bahah','11',1187),(4316,'Al Hudud Ash Shamaliyah','08',1187),(4317,'Al Jawf','12',1187),(4318,'Al Madinah','03',1187),(4319,'Al Qasim','05',1187),(4320,'Ar Riyad','01',1187),(4321,'Asir','14',1187),(4322,'Ha\'il','06',1187),(4323,'Jlzan','09',1187),(4324,'Makkah','02',1187),(4325,'Najran','10',1187),(4326,'Tabuk','07',1187),(4327,'Capital Territory (Honiara)','CT',1194),(4328,'Guadalcanal','GU',1194),(4329,'Isabel','IS',1194),(4330,'Makira','MK',1194),(4331,'Malaita','ML',1194),(4332,'Temotu','TE',1194),(4333,'A\'ali an Nil','23',1200),(4334,'Al Bah al Ahmar','26',1200),(4335,'Al Buhayrat','18',1200),(4336,'Al Jazirah','07',1200),(4337,'Al Khartum','03',1200),(4338,'Al Qadarif','06',1200),(4339,'Al Wahdah','22',1200),(4340,'An Nil','04',1200),(4341,'An Nil al Abyaq','08',1200),(4342,'An Nil al Azraq','24',1200),(4343,'Ash Shamallyah','01',1200),(4344,'Bahr al Jabal','17',1200),(4345,'Gharb al Istiwa\'iyah','16',1200),(4346,'Gharb Ba~r al Ghazal','14',1200),(4347,'Gharb Darfur','12',1200),(4348,'Gharb Kurdufan','10',1200),(4349,'Janub Darfur','11',1200),(4350,'Janub Rurdufan','13',1200),(4351,'Jnqall','20',1200),(4352,'Kassala','05',1200),(4353,'Shamal Batr al Ghazal','15',1200),(4354,'Shamal Darfur','02',1200),(4355,'Shamal Kurdufan','09',1200),(4356,'Sharq al Istiwa\'iyah','19',1200),(4357,'Sinnar','25',1200),(4358,'Warab','21',1200),(4359,'Blekinge län','K',1204),(4360,'Dalarnas län','W',1204),(4361,'Gotlands län','I',1204),(4362,'Gävleborgs län','X',1204),(4363,'Hallands län','N',1204),(4364,'Jämtlands län','Z',1204),(4365,'Jönkopings län','F',1204),(4366,'Kalmar län','H',1204),(4367,'Kronobergs län','G',1204),(4368,'Norrbottens län','BD',1204),(4369,'SkÃ¥ne län','M',1204),(4370,'Stockholms län','AB',1204),(4371,'Södermanlands län','D',1204),(4372,'Uppsala län','C',1204),(4373,'Värmlands län','S',1204),(4374,'Västerbottens län','AC',1204),(4375,'Västernorrlands län','Y',1204),(4376,'Västmanlands län','U',1204),(4377,'Västra Götalands län','Q',1204),(4378,'Örebro län','T',1204),(4379,'Östergötlands län','E',1204),(4380,'Saint Helena','SH',1180),(4381,'Ascension','AC',1180),(4382,'Tristan da Cunha','TA',1180),(4383,'AjdovÅ¡Äina','001',1193),(4384,'Beltinci','002',1193),(4385,'Benedikt','148',1193),(4386,'Bistrica ob Sotli','149',1193),(4387,'Bled','003',1193),(4388,'Bloke','150',1193),(4389,'Bohinj','004',1193),(4390,'Borovnica','005',1193),(4391,'Bovec','006',1193),(4392,'BraslovÄe','151',1193),(4393,'Brda','007',1193),(4394,'Brezovica','008',1193),(4395,'Brežice','009',1193),(4396,'Cankova','152',1193),(4397,'Celje','011',1193),(4398,'Cerklje na Gorenjskem','012',1193),(4399,'Cerknica','013',1193),(4400,'Cerkno','014',1193),(4401,'Cerkvenjak','153',1193),(4402,'ÄŒrenÅ¡ovci','015',1193),(4403,'ÄŒrna na KoroÅ¡kem','016',1193),(4404,'ÄŒrnomelj','017',1193),(4405,'Destrnik','018',1193),(4406,'DivaÄa','019',1193),(4407,'Dobje','154',1193),(4408,'Dobrepolje','020',1193),(4409,'Dobrna','155',1193),(4410,'Dobrova-Polhov Gradec','021',1193),(4411,'Dobrovnik','156',1193),(4412,'Dol pri Ljubljani','022',1193),(4413,'Dolenjske Toplice','157',1193),(4414,'Domžale','023',1193),(4415,'Dornava','024',1193),(4416,'Dravograd','025',1193),(4417,'Duplek','026',1193),(4418,'Gorenja vas-Poljane','027',1193),(4419,'GoriÅ¡nica','028',1193),(4420,'Gornja Radgona','029',1193),(4421,'Gornji Grad','030',1193),(4422,'Gornji Petrovci','031',1193),(4423,'Grad','158',1193),(4424,'Grosuplje','032',1193),(4425,'Hajdina','159',1193),(4426,'HoÄe-Slivnica','160',1193),(4427,'HodoÅ¡','161',1193),(4428,'Horjul','162',1193),(4429,'Hrastnik','034',1193),(4430,'Hrpelje-Kozina','035',1193),(4431,'Idrija','036',1193),(4432,'Ig','037',1193),(4433,'Ilirska Bistrica','038',1193),(4434,'IvanÄna Gorica','039',1193),(4435,'Izola','040',1193),(4436,'Jesenice','041',1193),(4437,'Jezersko','163',1193),(4438,'JurÅ¡inci','042',1193),(4439,'Kamnik','043',1193),(4440,'Kanal','044',1193),(4441,'KidriÄevo','045',1193),(4442,'Kobarid','046',1193),(4443,'Kobilje','047',1193),(4444,'KoÄevje','048',1193),(4445,'Komen','049',1193),(4446,'Komenda','164',1193),(4447,'Koper','050',1193),(4448,'Kostel','165',1193),(4449,'Kozje','051',1193),(4450,'Kranj','052',1193),(4451,'Kranjska Gora','053',1193),(4452,'Križevci','166',1193),(4453,'KrÅ¡ko','054',1193),(4454,'Kungota','055',1193),(4455,'Kuzma','056',1193),(4456,'LaÅ¡ko','057',1193),(4457,'Lenart','058',1193),(4458,'Lendava','059',1193),(4459,'Litija','060',1193),(4460,'Ljubljana','061',1193),(4461,'Ljubno','062',1193),(4462,'Ljutomer','063',1193),(4463,'Logatec','064',1193),(4464,'LoÅ¡ka dolina','065',1193),(4465,'LoÅ¡ki Potok','066',1193),(4466,'Lovrenc na Pohorju','167',1193),(4467,'LuÄe','067',1193),(4468,'Lukovica','068',1193),(4469,'MajÅ¡perk','069',1193),(4470,'Maribor','070',1193),(4471,'Markovci','168',1193),(4472,'Medvode','071',1193),(4473,'MengeÅ¡','072',1193),(4474,'Metlika','073',1193),(4475,'Mežica','074',1193),(4476,'Miklavž na Dravskem polju','169',1193),(4477,'Miren-Kostanjevica','075',1193),(4478,'Mirna PeÄ','170',1193),(4479,'Mislinja','076',1193),(4480,'MoravÄe','077',1193),(4481,'Moravske Toplice','078',1193),(4482,'Mozirje','079',1193),(4483,'Murska Sobota','080',1193),(4484,'Muta','081',1193),(4485,'Naklo','082',1193),(4486,'Nazarje','083',1193),(4487,'Nova Gorica','084',1193),(4488,'Novo mesto','085',1193),(4489,'Sveta Ana','181',1193),(4490,'Sveti Andraž v Slovenskih goricah','182',1193),(4491,'Sveti Jurij','116',1193),(4492,'Å alovci','033',1193),(4493,'Å empeter-Vrtojba','183',1193),(4494,'Å enÄur','117',1193),(4495,'Å entilj','118',1193),(4496,'Å entjernej','119',1193),(4497,'Å entjur','120',1193),(4498,'Å kocjan','121',1193),(4499,'Å kofja Loka','122',1193),(4500,'Å kofljica','123',1193),(4501,'Å marje pri JelÅ¡ah','124',1193),(4502,'Å martno ob Paki','125',1193),(4503,'Å martno pri Litiji','194',1193),(4504,'Å oÅ¡tanj','126',1193),(4505,'Å tore','127',1193),(4506,'Tabor','184',1193),(4507,'TiÅ¡ina','010',1193),(4508,'Tolmin','128',1193),(4509,'Trbovlje','129',1193),(4510,'Trebnje','130',1193),(4511,'Trnovska vas','185',1193),(4512,'TržiÄ','131',1193),(4513,'Trzin','186',1193),(4514,'TurniÅ¡Äe','132',1193),(4515,'Velenje','133',1193),(4516,'Velika Polana','187',1193),(4517,'Velike LaÅ¡Äe','134',1193),(4518,'Veržej','188',1193),(4519,'Videm','135',1193),(4520,'Vipava','136',1193),(4521,'Vitanje','137',1193),(4522,'Vojnik','138',1193),(4523,'Vransko','189',1193),(4524,'Vrhnika','140',1193),(4525,'Vuzenica','141',1193),(4526,'Zagorje ob Savi','142',1193),(4527,'ZavrÄ','143',1193),(4528,'ZreÄe','144',1193),(4529,'Žalec','190',1193),(4530,'Železniki','146',1193),(4531,'Žetale','191',1193),(4532,'Žiri','147',1193),(4533,'Žirovnica','192',1193),(4534,'Žužemberk','193',1193),(4535,'Banskobystrický kraj','BC',1192),(4536,'Bratislavský kraj','BL',1192),(4537,'KoÅ¡ický kraj','KI',1192),(4538,'Nitriansky kraj','NJ',1192),(4539,'PreÅ¡ovský kraj','PV',1192),(4540,'TrenÄiansky kraj','TC',1192),(4541,'Trnavský kraj','TA',1192),(4542,'Žilinský kraj','ZI',1192),(4543,'Western Area (Freetown)','W',1190),(4544,'Dakar','DK',1188),(4545,'Diourbel','DB',1188),(4546,'Fatick','FK',1188),(4547,'Kaolack','KL',1188),(4548,'Kolda','KD',1188),(4549,'Louga','LG',1188),(4550,'Matam','MT',1188),(4551,'Saint-Louis','SL',1188),(4552,'Tambacounda','TC',1188),(4553,'Thies','TH',1188),(4554,'Ziguinchor','ZG',1188),(4555,'Awdal','AW',1195),(4556,'Bakool','BK',1195),(4557,'Banaadir','BN',1195),(4558,'Bay','BY',1195),(4559,'Galguduud','GA',1195),(4560,'Gedo','GE',1195),(4561,'Hiirsan','HI',1195),(4562,'Jubbada Dhexe','JD',1195),(4563,'Jubbada Hoose','JH',1195),(4564,'Mudug','MU',1195),(4565,'Nugaal','NU',1195),(4566,'Saneag','SA',1195),(4567,'Shabeellaha Dhexe','SD',1195),(4568,'Shabeellaha Hoose','SH',1195),(4569,'Sool','SO',1195),(4570,'Togdheer','TO',1195),(4571,'Woqooyi Galbeed','WO',1195),(4572,'Brokopondo','BR',1201),(4573,'Commewijne','CM',1201),(4574,'Coronie','CR',1201),(4575,'Marowijne','MA',1201),(4576,'Nickerie','NI',1201),(4577,'Paramaribo','PM',1201),(4578,'Saramacca','SA',1201),(4579,'Sipaliwini','SI',1201),(4580,'Wanica','WA',1201),(4581,'Principe','P',1207),(4582,'Sao Tome','S',1207),(4583,'Ahuachapan','AH',1066),(4584,'Cabanas','CA',1066),(4585,'Cuscatlan','CU',1066),(4586,'Chalatenango','CH',1066),(4587,'Morazan','MO',1066),(4588,'San Miguel','SM',1066),(4589,'San Salvador','SS',1066),(4590,'Santa Ana','SA',1066),(4591,'San Vicente','SV',1066),(4592,'Sonsonate','SO',1066),(4593,'Usulutan','US',1066),(4594,'Al Hasakah','HA',1206),(4595,'Al Ladhiqiyah','LA',1206),(4596,'Al Qunaytirah','QU',1206),(4597,'Ar Raqqah','RA',1206),(4598,'As Suwayda\'','SU',1206),(4599,'Dar\'a','DR',1206),(4600,'Dayr az Zawr','DY',1206),(4601,'Dimashq','DI',1206),(4602,'Halab','HL',1206),(4603,'Hamah','HM',1206),(4604,'Jim\'','HI',1206),(4605,'Idlib','ID',1206),(4606,'Rif Dimashq','RD',1206),(4607,'Tarts','TA',1206),(4608,'Hhohho','HH',1203),(4609,'Lubombo','LU',1203),(4610,'Manzini','MA',1203),(4611,'Shiselweni','SH',1203),(4612,'Batha','BA',1043),(4613,'Biltine','BI',1043),(4614,'Borkou-Ennedi-Tibesti','BET',1043),(4615,'Chari-Baguirmi','CB',1043),(4616,'Guera','GR',1043),(4617,'Kanem','KA',1043),(4618,'Lac','LC',1043),(4619,'Logone-Occidental','LO',1043),(4620,'Logone-Oriental','LR',1043),(4621,'Mayo-Kebbi','MK',1043),(4622,'Moyen-Chari','MC',1043),(4623,'Ouaddai','OD',1043),(4624,'Salamat','SA',1043),(4625,'Tandjile','TA',1043),(4626,'Kara','K',1214),(4627,'Maritime (Region)','M',1214),(4628,'Savannes','S',1214),(4629,'Krung Thep Maha Nakhon Bangkok','10',1211),(4630,'Phatthaya','S',1211),(4631,'Amnat Charoen','37',1211),(4632,'Ang Thong','15',1211),(4633,'Buri Ram','31',1211),(4634,'Chachoengsao','24',1211),(4635,'Chai Nat','18',1211),(4636,'Chaiyaphum','36',1211),(4637,'Chanthaburi','22',1211),(4638,'Chiang Mai','50',1211),(4639,'Chiang Rai','57',1211),(4640,'Chon Buri','20',1211),(4641,'Chumphon','86',1211),(4642,'Kalasin','46',1211),(4643,'Kamphasng Phet','62',1211),(4644,'Kanchanaburi','71',1211),(4645,'Khon Kaen','40',1211),(4646,'Krabi','81',1211),(4647,'Lampang','52',1211),(4648,'Lamphun','51',1211),(4649,'Loei','42',1211),(4650,'Lop Buri','16',1211),(4651,'Mae Hong Son','58',1211),(4652,'Maha Sarakham','44',1211),(4653,'Mukdahan','49',1211),(4654,'Nakhon Nayok','26',1211),(4655,'Nakhon Pathom','73',1211),(4656,'Nakhon Phanom','48',1211),(4657,'Nakhon Ratchasima','30',1211),(4658,'Nakhon Sawan','60',1211),(4659,'Nakhon Si Thammarat','80',1211),(4660,'Nan','55',1211),(4661,'Narathiwat','96',1211),(4662,'Nong Bua Lam Phu','39',1211),(4663,'Nong Khai','43',1211),(4664,'Nonthaburi','12',1211),(4665,'Pathum Thani','13',1211),(4666,'Pattani','94',1211),(4667,'Phangnga','82',1211),(4668,'Phatthalung','93',1211),(4669,'Phayao','56',1211),(4670,'Phetchabun','67',1211),(4671,'Phetchaburi','76',1211),(4672,'Phichit','66',1211),(4673,'Phitsanulok','65',1211),(4674,'Phrae','54',1211),(4675,'Phra Nakhon Si Ayutthaya','14',1211),(4676,'Phuket','83',1211),(4677,'Prachin Buri','25',1211),(4678,'Prachuap Khiri Khan','77',1211),(4679,'Ranong','85',1211),(4680,'Ratchaburi','70',1211),(4681,'Rayong','21',1211),(4682,'Roi Et','45',1211),(4683,'Sa Kaeo','27',1211),(4684,'Sakon Nakhon','47',1211),(4685,'Samut Prakan','11',1211),(4686,'Samut Sakhon','74',1211),(4687,'Samut Songkhram','75',1211),(4688,'Saraburi','19',1211),(4689,'Satun','91',1211),(4690,'Sing Buri','17',1211),(4691,'Si Sa Ket','33',1211),(4692,'Songkhla','90',1211),(4693,'Sukhothai','64',1211),(4694,'Suphan Buri','72',1211),(4695,'Surat Thani','84',1211),(4696,'Surin','32',1211),(4697,'Tak','63',1211),(4698,'Trang','92',1211),(4699,'Trat','23',1211),(4700,'Ubon Ratchathani','34',1211),(4701,'Udon Thani','41',1211),(4702,'Uthai Thani','61',1211),(4703,'Uttaradit','53',1211),(4704,'Yala','95',1211),(4705,'Yasothon','35',1211),(4706,'Sughd','SU',1209),(4707,'Khatlon','KT',1209),(4708,'Gorno-Badakhshan','GB',1209),(4709,'Ahal','A',1220),(4710,'Balkan','B',1220),(4711,'Dasoguz','D',1220),(4712,'Lebap','L',1220),(4713,'Mary','M',1220),(4714,'Béja','31',1218),(4715,'Ben Arous','13',1218),(4716,'Bizerte','23',1218),(4717,'Gabès','81',1218),(4718,'Gafsa','71',1218),(4719,'Jendouba','32',1218),(4720,'Kairouan','41',1218),(4721,'Rasserine','42',1218),(4722,'Kebili','73',1218),(4723,'L\'Ariana','12',1218),(4724,'Le Ref','33',1218),(4725,'Mahdia','53',1218),(4726,'La Manouba','14',1218),(4727,'Medenine','82',1218),(4728,'Moneatir','52',1218),(4729,'Naboul','21',1218),(4730,'Sfax','61',1218),(4731,'Sidi Bouxid','43',1218),(4732,'Siliana','34',1218),(4733,'Sousse','51',1218),(4734,'Tataouine','83',1218),(4735,'Tozeur','72',1218),(4736,'Tunis','11',1218),(4737,'Zaghouan','22',1218),(4738,'Adana','01',1219),(4739,'Ad yaman','02',1219),(4740,'Afyon','03',1219),(4741,'Ag r','04',1219),(4742,'Aksaray','68',1219),(4743,'Amasya','05',1219),(4744,'Ankara','06',1219),(4745,'Antalya','07',1219),(4746,'Ardahan','75',1219),(4747,'Artvin','08',1219),(4748,'Aydin','09',1219),(4749,'Bal kesir','10',1219),(4750,'Bartin','74',1219),(4751,'Batman','72',1219),(4752,'Bayburt','69',1219),(4753,'Bilecik','11',1219),(4754,'Bingol','12',1219),(4755,'Bitlis','13',1219),(4756,'Bolu','14',1219),(4757,'Burdur','15',1219),(4758,'Bursa','16',1219),(4759,'Canakkale','17',1219),(4760,'Cankir','18',1219),(4761,'Corum','19',1219),(4762,'Denizli','20',1219),(4763,'Diyarbakir','21',1219),(4764,'Duzce','81',1219),(4765,'Edirne','22',1219),(4766,'Elazig','23',1219),(4767,'Erzincan','24',1219),(4768,'Erzurum','25',1219),(4769,'Eskis\'ehir','26',1219),(4770,'Gaziantep','27',1219),(4771,'Giresun','28',1219),(4772,'Gms\'hane','29',1219),(4773,'Hakkari','30',1219),(4774,'Hatay','31',1219),(4775,'Igidir','76',1219),(4776,'Isparta','32',1219),(4777,'Icel','33',1219),(4778,'Istanbul','34',1219),(4779,'Izmir','35',1219),(4780,'Kahramanmaras','46',1219),(4781,'Karabk','78',1219),(4782,'Karaman','70',1219),(4783,'Kars','36',1219),(4784,'Kastamonu','37',1219),(4785,'Kayseri','38',1219),(4786,'Kirikkale','71',1219),(4787,'Kirklareli','39',1219),(4788,'Kirs\'ehir','40',1219),(4789,'Kilis','79',1219),(4790,'Kocaeli','41',1219),(4791,'Konya','42',1219),(4792,'Ktahya','43',1219),(4793,'Malatya','44',1219),(4794,'Manisa','45',1219),(4795,'Mardin','47',1219),(4796,'Mugila','48',1219),(4797,'Mus','49',1219),(4798,'Nevs\'ehir','50',1219),(4799,'Nigide','51',1219),(4800,'Ordu','52',1219),(4801,'Osmaniye','80',1219),(4802,'Rize','53',1219),(4803,'Sakarya','54',1219),(4804,'Samsun','55',1219),(4805,'Siirt','56',1219),(4806,'Sinop','57',1219),(4807,'Sivas','58',1219),(4808,'S\'anliurfa','63',1219),(4809,'S\'rnak','73',1219),(4810,'Tekirdag','59',1219),(4811,'Tokat','60',1219),(4812,'Trabzon','61',1219),(4813,'Tunceli','62',1219),(4814,'Us\'ak','64',1219),(4815,'Van','65',1219),(4816,'Yalova','77',1219),(4817,'Yozgat','66',1219),(4818,'Zonguldak','67',1219),(4819,'Couva-Tabaquite-Talparo','CTT',1217),(4820,'Diego Martin','DMN',1217),(4821,'Eastern Tobago','ETO',1217),(4822,'Penal-Debe','PED',1217),(4823,'Princes Town','PRT',1217),(4824,'Rio Claro-Mayaro','RCM',1217),(4825,'Sangre Grande','SGE',1217),(4826,'San Juan-Laventille','SJL',1217),(4827,'Siparia','SIP',1217),(4828,'Tunapuna-Piarco','TUP',1217),(4829,'Western Tobago','WTO',1217),(4830,'Arima','ARI',1217),(4831,'Chaguanas','CHA',1217),(4832,'Point Fortin','PTF',1217),(4833,'Port of Spain','POS',1217),(4834,'San Fernando','SFO',1217),(4835,'Aileu','AL',1063),(4836,'Ainaro','AN',1063),(4837,'Bacucau','BA',1063),(4838,'Bobonaro','BO',1063),(4839,'Cova Lima','CO',1063),(4840,'Dili','DI',1063),(4841,'Ermera','ER',1063),(4842,'Laulem','LA',1063),(4843,'Liquica','LI',1063),(4844,'Manatuto','MT',1063),(4845,'Manafahi','MF',1063),(4846,'Oecussi','OE',1063),(4847,'Viqueque','VI',1063),(4848,'Changhua County','CHA',1208),(4849,'Chiayi County','CYQ',1208),(4850,'Hsinchu County','HSQ',1208),(4851,'Hualien County','HUA',1208),(4852,'Ilan County','ILA',1208),(4853,'Kaohsiung County','KHQ',1208),(4854,'Miaoli County','MIA',1208),(4855,'Nantou County','NAN',1208),(4856,'Penghu County','PEN',1208),(4857,'Pingtung County','PIF',1208),(4858,'Taichung County','TXQ',1208),(4859,'Tainan County','TNQ',1208),(4860,'Taipei County','TPQ',1208),(4861,'Taitung County','TTT',1208),(4862,'Taoyuan County','TAO',1208),(4863,'Yunlin County','YUN',1208),(4864,'Keelung City','KEE',1208),(4865,'Arusha','01',1210),(4866,'Dar-es-Salaam','02',1210),(4867,'Dodoma','03',1210),(4868,'Iringa','04',1210),(4869,'Kagera','05',1210),(4870,'Kaskazini Pemba','06',1210),(4871,'Kaskazini Unguja','07',1210),(4872,'Xigoma','08',1210),(4873,'Kilimanjaro','09',1210),(4874,'Rusini Pemba','10',1210),(4875,'Kusini Unguja','11',1210),(4876,'Lindi','12',1210),(4877,'Manyara','26',1210),(4878,'Mara','13',1210),(4879,'Mbeya','14',1210),(4880,'Mjini Magharibi','15',1210),(4881,'Morogoro','16',1210),(4882,'Mtwara','17',1210),(4883,'Pwani','19',1210),(4884,'Rukwa','20',1210),(4885,'Ruvuma','21',1210),(4886,'Shinyanga','22',1210),(4887,'Singida','23',1210),(4888,'Tabora','24',1210),(4889,'Tanga','25',1210),(4890,'Cherkas\'ka Oblast\'','71',1224),(4891,'Chernihivs\'ka Oblast\'','74',1224),(4892,'Chernivets\'ka Oblast\'','77',1224),(4893,'Dnipropetrovs\'ka Oblast\'','12',1224),(4894,'Donets\'ka Oblast\'','14',1224),(4895,'Ivano-Frankivs\'ka Oblast\'','26',1224),(4896,'Kharkivs\'ka Oblast\'','63',1224),(4897,'Khersons\'ka Oblast\'','65',1224),(4898,'Khmel\'nyts\'ka Oblast\'','68',1224),(4899,'Kirovohrads\'ka Oblast\'','35',1224),(4900,'Kyivs\'ka Oblast\'','32',1224),(4901,'Luhans\'ka Oblast\'','09',1224),(4902,'L\'vivs\'ka Oblast\'','46',1224),(4903,'Mykolaivs\'ka Oblast\'','48',1224),(4904,'Odes \'ka Oblast\'','51',1224),(4905,'Poltavs\'ka Oblast\'','53',1224),(4906,'Rivnens\'ka Oblast\'','56',1224),(4907,'Sums \'ka Oblast\'','59',1224),(4908,'Ternopil\'s\'ka Oblast\'','61',1224),(4909,'Vinnyts\'ka Oblast\'','05',1224),(4910,'Volyos\'ka Oblast\'','07',1224),(4911,'Zakarpats\'ka Oblast\'','21',1224),(4912,'Zaporiz\'ka Oblast\'','23',1224),(4913,'Zhytomyrs\'ka Oblast\'','18',1224),(4914,'Respublika Krym','43',1224),(4915,'Kyiv','30',1224),(4916,'Sevastopol','40',1224),(4917,'Adjumani','301',1223),(4918,'Apac','302',1223),(4919,'Arua','303',1223),(4920,'Bugiri','201',1223),(4921,'Bundibugyo','401',1223),(4922,'Bushenyi','402',1223),(4923,'Busia','202',1223),(4924,'Gulu','304',1223),(4925,'Hoima','403',1223),(4926,'Iganga','203',1223),(4927,'Jinja','204',1223),(4928,'Kabale','404',1223),(4929,'Kabarole','405',1223),(4930,'Kaberamaido','213',1223),(4931,'Kalangala','101',1223),(4932,'Kampala','102',1223),(4933,'Kamuli','205',1223),(4934,'Kamwenge','413',1223),(4935,'Kanungu','414',1223),(4936,'Kapchorwa','206',1223),(4937,'Kasese','406',1223),(4938,'Katakwi','207',1223),(4939,'Kayunga','112',1223),(4940,'Kibaale','407',1223),(4941,'Kiboga','103',1223),(4942,'Kisoro','408',1223),(4943,'Kitgum','305',1223),(4944,'Kotido','306',1223),(4945,'Kumi','208',1223),(4946,'Kyenjojo','415',1223),(4947,'Lira','307',1223),(4948,'Luwero','104',1223),(4949,'Masaka','105',1223),(4950,'Masindi','409',1223),(4951,'Mayuge','214',1223),(4952,'Mbale','209',1223),(4953,'Mbarara','410',1223),(4954,'Moroto','308',1223),(4955,'Moyo','309',1223),(4956,'Mpigi','106',1223),(4957,'Mubende','107',1223),(4958,'Mukono','108',1223),(4959,'Nakapiripirit','311',1223),(4960,'Nakasongola','109',1223),(4961,'Nebbi','310',1223),(4962,'Ntungamo','411',1223),(4963,'Pader','312',1223),(4964,'Pallisa','210',1223),(4965,'Rakai','110',1223),(4966,'Rukungiri','412',1223),(4967,'Sembabule','111',1223),(4968,'Sironko','215',1223),(4969,'Soroti','211',1223),(4970,'Tororo','212',1223),(4971,'Wakiso','113',1223),(4972,'Yumbe','313',1223),(4973,'Baker Island','81',1227),(4974,'Howland Island','84',1227),(4975,'Jarvis Island','86',1227),(4976,'Johnston Atoll','67',1227),(4977,'Kingman Reef','89',1227),(4978,'Midway Islands','71',1227),(4979,'Navassa Island','76',1227),(4980,'Palmyra Atoll','95',1227),(4981,'Wake Island','79',1227),(4982,'Artigsa','AR',1229),(4983,'Canelones','CA',1229),(4984,'Cerro Largo','CL',1229),(4985,'Colonia','CO',1229),(4986,'Durazno','DU',1229),(4987,'Flores','FS',1229),(4988,'Lavalleja','LA',1229),(4989,'Maldonado','MA',1229),(4990,'Montevideo','MO',1229),(4991,'Paysandu','PA',1229),(4992,'Rivera','RV',1229),(4993,'Rocha','RO',1229),(4994,'Salto','SA',1229),(4995,'Soriano','SO',1229),(4996,'Tacuarembo','TA',1229),(4997,'Treinta y Tres','TT',1229),(4998,'Toshkent (city)','TK',1230),(4999,'Qoraqalpogiston Respublikasi','QR',1230),(5000,'Andijon','AN',1230),(5001,'Buxoro','BU',1230),(5002,'Farg\'ona','FA',1230),(5003,'Jizzax','JI',1230),(5004,'Khorazm','KH',1230),(5005,'Namangan','NG',1230),(5006,'Navoiy','NW',1230),(5007,'Qashqadaryo','QA',1230),(5008,'Samarqand','SA',1230),(5009,'Sirdaryo','SI',1230),(5010,'Surxondaryo','SU',1230),(5011,'Toshkent','TO',1230),(5012,'Xorazm','XO',1230),(5013,'Distrito Federal','A',1232),(5014,'Anzoategui','B',1232),(5015,'Apure','C',1232),(5016,'Aragua','D',1232),(5017,'Barinas','E',1232),(5018,'Carabobo','G',1232),(5019,'Cojedes','H',1232),(5020,'Falcon','I',1232),(5021,'Guarico','J',1232),(5022,'Lara','K',1232),(5023,'Merida','L',1232),(5024,'Miranda','M',1232),(5025,'Monagas','N',1232),(5026,'Nueva Esparta','O',1232),(5027,'Portuguesa','P',1232),(5028,'Tachira','S',1232),(5029,'Trujillo','T',1232),(5030,'Vargas','X',1232),(5031,'Yaracuy','U',1232),(5032,'Zulia','V',1232),(5033,'Delta Amacuro','Y',1232),(5034,'Dependencias Federales','W',1232),(5035,'An Giang','44',1233),(5036,'Ba Ria - Vung Tau','43',1233),(5037,'Bac Can','53',1233),(5038,'Bac Giang','54',1233),(5039,'Bac Lieu','55',1233),(5040,'Bac Ninh','56',1233),(5041,'Ben Tre','50',1233),(5042,'Binh Dinh','31',1233),(5043,'Binh Duong','57',1233),(5044,'Binh Phuoc','58',1233),(5045,'Binh Thuan','40',1233),(5046,'Ca Mau','59',1233),(5047,'Can Tho','48',1233),(5048,'Cao Bang','04',1233),(5049,'Da Nang, thanh pho','60',1233),(5050,'Dong Nai','39',1233),(5051,'Dong Thap','45',1233),(5052,'Gia Lai','30',1233),(5053,'Ha Giang','03',1233),(5054,'Ha Nam','63',1233),(5055,'Ha Noi, thu do','64',1233),(5056,'Ha Tay','15',1233),(5057,'Ha Tinh','23',1233),(5058,'Hai Duong','61',1233),(5059,'Hai Phong, thanh pho','62',1233),(5060,'Hoa Binh','14',1233),(5061,'Ho Chi Minh, thanh pho [Sai Gon]','65',1233),(5062,'Hung Yen','66',1233),(5063,'Khanh Hoa','34',1233),(5064,'Kien Giang','47',1233),(5065,'Kon Tum','28',1233),(5066,'Lai Chau','01',1233),(5067,'Lam Dong','35',1233),(5068,'Lang Son','09',1233),(5069,'Lao Cai','02',1233),(5070,'Long An','41',1233),(5071,'Nam Dinh','67',1233),(5072,'Nghe An','22',1233),(5073,'Ninh Binh','18',1233),(5074,'Ninh Thuan','36',1233),(5075,'Phu Tho','68',1233),(5076,'Phu Yen','32',1233),(5077,'Quang Binh','24',1233),(5078,'Quang Nam','27',1233),(5079,'Quang Ngai','29',1233),(5080,'Quang Ninh','13',1233),(5081,'Quang Tri','25',1233),(5082,'Soc Trang','52',1233),(5083,'Son La','05',1233),(5084,'Tay Ninh','37',1233),(5085,'Thai Binh','20',1233),(5086,'Thai Nguyen','69',1233),(5087,'Thanh Hoa','21',1233),(5088,'Thua Thien-Hue','26',1233),(5089,'Tien Giang','46',1233),(5090,'Tra Vinh','51',1233),(5091,'Tuyen Quang','07',1233),(5092,'Vinh Long','49',1233),(5093,'Vinh Phuc','70',1233),(5094,'Yen Bai','06',1233),(5095,'Malampa','MAP',1231),(5096,'Penama','PAM',1231),(5097,'Sanma','SAM',1231),(5098,'Shefa','SEE',1231),(5099,'Tafea','TAE',1231),(5100,'Torba','TOB',1231),(5101,'A\'ana','AA',1185),(5102,'Aiga-i-le-Tai','AL',1185),(5103,'Atua','AT',1185),(5104,'Fa\'aaaleleaga','FA',1185),(5105,'Gaga\'emauga','GE',1185),(5106,'Gagaifomauga','GI',1185),(5107,'Palauli','PA',1185),(5108,'Satupa\'itea','SA',1185),(5109,'Tuamasaga','TU',1185),(5110,'Va\'a-o-Fonoti','VF',1185),(5111,'Vaisigano','VS',1185),(5112,'Crna Gora','CG',1243),(5113,'Srbija','SR',1242),(5114,'Kosovo-Metohija','KM',1242),(5115,'Vojvodina','VO',1242),(5116,'Abyan','AB',1237),(5117,'Adan','AD',1237),(5118,'Ad Dali','DA',1237),(5119,'Al Bayda\'','BA',1237),(5120,'Al Hudaydah','MU',1237),(5121,'Al Mahrah','MR',1237),(5122,'Al Mahwit','MW',1237),(5123,'Amran','AM',1237),(5124,'Dhamar','DH',1237),(5125,'Hadramawt','HD',1237),(5126,'Hajjah','HJ',1237),(5127,'Ibb','IB',1237),(5128,'Lahij','LA',1237),(5129,'Ma\'rib','MA',1237),(5130,'Sa\'dah','SD',1237),(5131,'San\'a\'','SN',1237),(5132,'Shabwah','SH',1237),(5133,'Ta\'izz','TA',1237),(5134,'Eastern Cape','EC',1196),(5135,'Free State','FS',1196),(5136,'Gauteng','GT',1196),(5137,'Kwazulu-Natal','NL',1196),(5138,'Mpumalanga','MP',1196),(5139,'Northern Cape','NC',1196),(5140,'Limpopo','NP',1196),(5141,'Western Cape','WC',1196),(5142,'Copperbelt','08',1239),(5143,'Luapula','04',1239),(5144,'Lusaka','09',1239),(5145,'North-Western','06',1239),(5146,'Bulawayo','BU',1240),(5147,'Harare','HA',1240),(5148,'Manicaland','MA',1240),(5149,'Mashonaland Central','MC',1240),(5150,'Mashonaland East','ME',1240),(5151,'Mashonaland West','MW',1240),(5152,'Masvingo','MV',1240),(5153,'Matabeleland North','MN',1240),(5154,'Matabeleland South','MS',1240),(5155,'Midlands','MI',1240),(5156,'South Karelia','SK',1075),(5157,'South Ostrobothnia','SO',1075),(5158,'Etelä-Savo','ES',1075),(5159,'Häme','HH',1075),(5160,'Itä-Uusimaa','IU',1075),(5161,'Kainuu','KA',1075),(5162,'Central Ostrobothnia','CO',1075),(5163,'Central Finland','CF',1075),(5164,'Kymenlaakso','KY',1075),(5165,'Lapland','LA',1075),(5166,'Tampere Region','TR',1075),(5167,'Ostrobothnia','OB',1075),(5168,'North Karelia','NK',1075),(5169,'Northern Ostrobothnia','NO',1075),(5170,'Northern Savo','NS',1075),(5171,'Päijät-Häme','PH',1075),(5172,'Satakunta','SK',1075),(5173,'Uusimaa','UM',1075),(5174,'South-West Finland','SW',1075),(5175,'Ã…land','AL',1075),(5176,'Limburg','LI',1152),(5177,'Central and Western','CW',1098),(5178,'Eastern','EA',1098),(5179,'Southern','SO',1098),(5180,'Wan Chai','WC',1098),(5181,'Kowloon City','KC',1098),(5182,'Kwun Tong','KU',1098),(5183,'Sham Shui Po','SS',1098),(5184,'Wong Tai Sin','WT',1098),(5185,'Yau Tsim Mong','YT',1098),(5186,'Islands','IS',1098),(5187,'Kwai Tsing','KI',1098),(5188,'North','NO',1098),(5189,'Sai Kung','SK',1098),(5190,'Sha Tin','ST',1098),(5191,'Tai Po','TP',1098),(5192,'Tsuen Wan','TW',1098),(5193,'Tuen Mun','TM',1098),(5194,'Yuen Long','YL',1098),(5195,'Manchester','MR',1108),(5196,'Al ManÄmah (Al ‘Āşimah)','13',1016),(5197,'Al JanÅ«bÄ«yah','14',1016),(5199,'Al Wusţá','16',1016),(5200,'Ash ShamÄlÄ«yah','17',1016),(5201,'Jenin','_A',1165),(5202,'Tubas','_B',1165),(5203,'Tulkarm','_C',1165),(5204,'Nablus','_D',1165),(5205,'Qalqilya','_E',1165),(5206,'Salfit','_F',1165),(5207,'Ramallah and Al-Bireh','_G',1165),(5208,'Jericho','_H',1165),(5209,'Jerusalem','_I',1165),(5210,'Bethlehem','_J',1165),(5211,'Hebron','_K',1165),(5212,'North Gaza','_L',1165),(5213,'Gaza','_M',1165),(5214,'Deir el-Balah','_N',1165),(5215,'Khan Yunis','_O',1165),(5216,'Rafah','_P',1165),(5217,'Brussels','BRU',1020),(5218,'Distrito Federal','DIF',1140),(5219,'Taichung City','TXG',1208),(5220,'Kaohsiung City','KHH',1208),(5221,'Taipei City','TPE',1208),(5222,'Chiayi City','CYI',1208),(5223,'Hsinchu City','HSZ',1208),(5224,'Tainan City','TNN',1208),(9000,'North West','NW',1196),(9986,'Tyne and Wear','TWR',1226),(9988,'Greater Manchester','GTM',1226),(9989,'Co Tyrone','TYR',1226),(9990,'West Yorkshire','WYK',1226),(9991,'South Yorkshire','SYK',1226),(9992,'Merseyside','MSY',1226),(9993,'Berkshire','BRK',1226),(9994,'West Midlands','WMD',1226),(9998,'West Glamorgan','WGM',1226),(9999,'London','LON',1226),(10000,'Carbonia-Iglesias','CI',1107),(10001,'Olbia-Tempio','OT',1107),(10002,'Medio Campidano','VS',1107),(10003,'Ogliastra','OG',1107),(10009,'Jura','39',1076),(10010,'Barletta-Andria-Trani','Bar',1107),(10011,'Fermo','Fer',1107),(10012,'Monza e Brianza','Mon',1107),(10013,'Clwyd','CWD',1226),(10014,'Dyfed','DFD',1226),(10015,'South Glamorgan','SGM',1226),(10016,'Artibonite','AR',1094),(10017,'Centre','CE',1094),(10018,'Nippes','NI',1094),(10019,'Nord','ND',1094),(10020,'La Rioja','F',1010),(10021,'Andorra la Vella','07',1005),(10022,'Canillo','02',1005),(10023,'Encamp','03',1005),(10024,'Escaldes-Engordany','08',1005),(10025,'La Massana','04',1005),(10026,'Ordino','05',1005),(10027,'Sant Julia de Loria','06',1005),(10028,'Abaco Islands','AB',1212),(10029,'Andros Island','AN',1212),(10030,'Berry Islands','BR',1212),(10031,'Eleuthera','EL',1212),(10032,'Grand Bahama','GB',1212),(10033,'Rum Cay','RC',1212),(10034,'San Salvador Island','SS',1212),(10035,'Kongo central','01',1050),(10036,'Kwango','02',1050),(10037,'Kwilu','03',1050),(10038,'Mai-Ndombe','04',1050),(10039,'Kasai','05',1050),(10040,'Lulua','06',1050),(10041,'Lomami','07',1050),(10042,'Sankuru','08',1050),(10043,'Ituri','09',1050),(10044,'Haut-Uele','10',1050),(10045,'Tshopo','11',1050),(10046,'Bas-Uele','12',1050),(10047,'Nord-Ubangi','13',1050),(10048,'Mongala','14',1050),(10049,'Sud-Ubangi','15',1050),(10050,'Tshuapa','16',1050),(10051,'Haut-Lomami','17',1050),(10052,'Lualaba','18',1050),(10053,'Haut-Katanga','19',1050),(10054,'Tanganyika','20',1050),(10055,'Toledo','TO',1198),(10056,'Córdoba','CO',1198),(10057,'Metropolitan Manila','MNL',1170),(10058,'La Paz','LP',1097),(10059,'Yinchuan','YN',1045),(10060,'Shizuishan','SZ',1045),(10061,'Wuzhong','WZ',1045),(10062,'Guyuan','GY',1045),(10063,'Zhongwei','ZW',1045),(10064,'Luxembourg','L',1126),(10065,'Aizkraukles novads','002',1119),(10066,'Jaunjelgavas novads','038',1119),(10067,'Pļaviņu novads','072',1119),(10068,'Kokneses novads','046',1119),(10069,'Neretas novads','065',1119),(10070,'SkrÄ«veru novads','092',1119),(10071,'AlÅ«ksnes novads','007',1119),(10072,'Apes novads','009',1119),(10073,'Balvu novads','015',1119),(10074,'Viļakas novads','108',1119),(10075,'Baltinavas novads','014',1119),(10076,'RugÄju novads','082',1119),(10077,'Bauskas novads','016',1119),(10078,'Iecavas novads','034',1119),(10079,'RundÄles novads','083',1119),(10080,'Vecumnieku novads','105',1119),(10081,'CÄ“su novads','022',1119),(10082,'LÄ«gatnes novads','055',1119),(10083,'Amatas novads','008',1119),(10084,'Jaunpiebalgas novads','039',1119),(10085,'Priekuļu novads','075',1119),(10086,'PÄrgaujas novads','070',1119),(10087,'Raunas novads','076',1119),(10088,'Vecpiebalgas novads','104',1119),(10089,'Daugavpils novads','025',1119),(10090,'IlÅ«kstes novads','036',1119),(10091,'Dobeles novads','026',1119),(10092,'Auces novads','010',1119),(10093,'TÄ“rvetes novads','098',1119),(10094,'Gulbenes novads','033',1119),(10095,'Jelgavas novads','041',1119),(10096,'Ozolnieku novads','069',1119),(10097,'JÄ“kabpils novads','042',1119),(10098,'AknÄ«stes novads','004',1119),(10099,'ViesÄ«tes novads','107',1119),(10100,'Krustpils novads','049',1119),(10101,'Salas novads','085',1119),(10102,'KrÄslavas novads','047',1119),(10103,'Dagdas novads','024',1119),(10104,'Aglonas novads','001',1119),(10105,'KuldÄ«gas novads','050',1119),(10106,'Skrundas novads','093',1119),(10107,'Alsungas novads','006',1119),(10108,'Aizputes novads','003',1119),(10109,'Durbes novads','028',1119),(10110,'Grobiņas novads','032',1119),(10111,'PÄvilostas novads','071',1119),(10112,'Priekules novads','074',1119),(10113,'NÄ«cas novads','066',1119),(10114,'Rucavas novads','081',1119),(10115,'Vaiņodes novads','100',1119),(10116,'Limbažu novads','054',1119),(10117,'Alojas novads','005',1119),(10118,'SalacgrÄ«vas novads','086',1119),(10119,'Ludzas novads','058',1119),(10120,'KÄrsavas novads','044',1119),(10121,'Zilupes novads','110',1119),(10122,'Ciblas novads','023',1119),(10123,'Madonas novads','059',1119),(10124,'Cesvaines novads','021',1119),(10125,'LubÄnas novads','057',1119),(10126,'VarakļÄnu novads','102',1119),(10127,'Ä’rgļu novads','030',1119),(10128,'Ogres novads','067',1119),(10129,'IkÅ¡Ä·iles novads','035',1119),(10130,'Ķeguma novads','051',1119),(10131,'LielvÄrdes novads','053',1119),(10132,'Preiļu novads','073',1119),(10133,'LÄ«vÄnu novads','056',1119),(10134,'Riebiņu novads','078',1119),(10135,'VÄrkavas novads','103',1119),(10136,'RÄ“zeknes novads','077',1119),(10137,'ViļÄnu novads','109',1119),(10138,'Baldones novads','013',1119),(10139,'Ķekavas novads','052',1119),(10140,'Olaines novads','068',1119),(10141,'Salaspils novads','087',1119),(10142,'Saulkrastu novads','089',1119),(10143,'Siguldas novads','091',1119),(10144,'InÄukalna novads','037',1119),(10145,'Ä€dažu novads','011',1119),(10146,'BabÄ«tes novads','012',1119),(10147,'Carnikavas novads','020',1119),(10148,'Garkalnes novads','031',1119),(10149,'Krimuldas novads','048',1119),(10150,'MÄlpils novads','061',1119),(10151,'MÄrupes novads','062',1119),(10152,'Ropažu novads','080',1119),(10153,'SÄ“jas novads','090',1119),(10154,'Stopiņu novads','095',1119),(10155,'Saldus novads','088',1119),(10156,'BrocÄ“nu novads','018',1119),(10157,'Talsu novads','097',1119),(10158,'Dundagas novads','027',1119),(10159,'MÄ“rsraga novads','063',1119),(10160,'Rojas novads','079',1119),(10161,'Tukuma novads','099',1119),(10162,'Kandavas novads','043',1119),(10163,'Engures novads','029',1119),(10164,'Jaunpils novads','040',1119),(10165,'Valkas novads','101',1119),(10166,'Smiltenes novads','094',1119),(10167,'StrenÄu novads','096',1119),(10168,'KocÄ“nu novads','045',1119),(10169,'Mazsalacas novads','060',1119),(10170,'RÅ«jienas novads','084',1119),(10171,'BeverÄ«nas novads','017',1119),(10172,'Burtnieku novads','019',1119),(10173,'NaukÅ¡Ä“nu novads','064',1119),(10174,'Ventspils novads','106',1119),(10175,'JÄ“kabpils','JKB',1119),(10176,'Valmiera','VMR',1119),(10177,'Florida','FL',1229),(10178,'Rio Negro','RN',1229),(10179,'San Jose','SJ',1229),(10180,'Plateau','PL',1157),(10181,'Pieria','61',1085),(10182,'Los Rios','LR',1044),(10183,'Arica y Parinacota','AP',1044),(10184,'Amazonas','AMA',1169),(10185,'Kalimantan Tengah','KT',1102),(10186,'Sulawesi Barat','SR',1102),(10187,'Kalimantan Utara','KU',1102),(10188,'Ankaran','86',1193),(10189,'ApaÄe','87',1193),(10190,'Cirkulane','88',1193),(10191,'Gorje','89',1193),(10192,'Kostanjevica na Krki','90',1193),(10193,'Log-Dragomer','91',1193),(10194,'Makole','92',1193),(10195,'Mirna','93',1193),(10196,'Mokronog-Trebelno','94',1193),(10197,'Odranci','95',1193),(10198,'Oplotnica','96',1193),(10199,'Ormož','97',1193),(10200,'Osilnica','98',1193),(10201,'Pesnica','99',1193),(10202,'Piran','100',1193),(10203,'Pivka','101',1193),(10204,'PodÄetrtek','102',1193),(10205,'Podlehnik','103',1193),(10206,'Podvelka','104',1193),(10207,'PoljÄane','105',1193),(10208,'Polzela','106',1193),(10209,'Postojna','107',1193),(10210,'Prebold','108',1193),(10211,'Preddvor','109',1193),(10212,'Prevalje','110',1193),(10213,'Ptuj','111',1193),(10214,'Puconci','112',1193),(10215,'RaÄe-Fram','113',1193),(10216,'RadeÄe','114',1193),(10217,'Radenci','115',1193),(10218,'Radlje ob Dravi','139',1193),(10219,'Radovljica','145',1193),(10220,'Ravne na KoroÅ¡kem','171',1193),(10221,'Razkrižje','172',1193),(10222,'ReÄica ob Savinji','173',1193),(10223,'RenÄe-Vogrsko','174',1193),(10224,'Ribnica','175',1193),(10225,'Ribnica na Pohorju','176',1193),(10226,'RogaÅ¡ka Slatina','177',1193),(10227,'RogaÅ¡ovci','178',1193),(10228,'Rogatec','179',1193),(10229,'RuÅ¡e','180',1193),(10230,'Selnica ob Dravi','195',1193),(10231,'SemiÄ','196',1193),(10232,'Å entrupert','197',1193),(10233,'Sevnica','198',1193),(10234,'Sežana','199',1193),(10235,'Slovenj Gradec','200',1193),(10236,'Slovenska Bistrica','201',1193),(10237,'Slovenske Konjice','202',1193),(10238,'Å marjeÅ¡ke Toplice','203',1193),(10239,'Sodražica','204',1193),(10240,'SolÄava','205',1193),(10241,'SrediÅ¡Äe ob Dravi','206',1193),(10242,'StarÅ¡e','207',1193),(10243,'Straža','208',1193),(10244,'Sveta Trojica v Slovenskih goricah','209',1193),(10245,'Sveti Jurij v Slovenskih goricah','210',1193),(10246,'Sveti Tomaž','211',1193),(10247,'Vodice','212',1193),(10248,'Abkhazia','AB',1081),(10249,'Adjara','AJ',1081),(10250,'Tbilisi','TB',1081),(10251,'Guria','GU',1081),(10252,'Imereti','IM',1081),(10253,'Kakheti','KA',1081),(10254,'Kvemo Kartli','KK',1081),(10255,'Mtskheta-Mtianeti','MM',1081),(10256,'Racha-Lechkhumi and Kvemo Svaneti','RL',1081),(10257,'Samegrelo-Zemo Svaneti','SZ',1081),(10258,'Samtskhe-Javakheti','SJ',1081),(10259,'Shida Kartli','SK',1081),(10260,'Central','C',1074),(10261,'Punjab','PB',1163),(10262,'La Libertad','LI',1066),(10263,'La Paz','PA',1066),(10264,'La Union','UN',1066),(10265,'Littoral','LT',1038),(10266,'Nord-Ouest','NW',1038),(10267,'Telangana','TG',1101),(10268,'Ash Sharqiyah','04',1187),(10269,'Guadeloupe','GP',1076),(10270,'Martinique','MQ',1076),(10271,'Guyane','GF',1076),(10272,'La Réunion','RE',1076),(10273,'Mayotte','YT',1076),(10274,'Baringo','01',1112),(10275,'Bomet','02',1112),(10276,'Bungoma','03',1112),(10277,'Busia','04',1112),(10278,'Elgeyo/Marakwet','05',1112),(10279,'Embu','06',1112),(10280,'Garissa','07',1112),(10281,'Homa Bay','08',1112),(10282,'Isiolo','09',1112),(10283,'Kajiado','10',1112),(10284,'Kakamega','11',1112),(10285,'Kericho','12',1112),(10286,'Kiambu','13',1112),(10287,'Kilifi','14',1112),(10288,'Kirinyaga','15',1112),(10289,'Kisii','16',1112),(10290,'Kisumu','17',1112),(10291,'Kitui','18',1112),(10292,'Kwale','19',1112),(10293,'Laikipia','20',1112),(10294,'Lamu','21',1112),(10295,'Machakos','22',1112),(10296,'Makueni','23',1112),(10297,'Mandera','24',1112),(10298,'Marsabit','25',1112),(10299,'Meru','26',1112),(10300,'Migori','27',1112),(10301,'Mombasa','28',1112),(10302,'Murang\'a','29',1112),(10303,'Nairobi City','30',1112),(10304,'Nakuru','31',1112),(10305,'Nandi','32',1112),(10306,'Narok','33',1112),(10307,'Nyamira','34',1112),(10308,'Nyandarua','35',1112),(10309,'Nyeri','36',1112),(10310,'Samburu','37',1112),(10311,'Siaya','38',1112),(10312,'Taita/Taveta','39',1112),(10313,'Tana River','40',1112),(10314,'Tharaka-Nithi','41',1112),(10315,'Trans Nzoia','42',1112),(10316,'Turkana','43',1112),(10317,'Uasin Gishu','44',1112),(10318,'Vihiga','45',1112),(10319,'Wajir','46',1112),(10320,'West Pokot','47',1112),(10321,'Chandigarh','CH',1101),(10322,'Central','CP',1083),(10323,'Eastern','EP',1083),(10324,'Northern','NP',1083),(10325,'Western','WP',1083),(10326,'Saint Kitts','K',1181),(10327,'Nevis','N',1181),(10328,'Eastern','E',1190),(10329,'Northern','N',1190),(10330,'Southern','S',1190),(10331,'Dushanbe','DU',1209),(10332,'Nohiyahoi Tobei JumhurÃ','RA',1209),(10333,'Wallis-et-Futuna','WF',1076),(10334,'Nouvelle-Calédonie','NC',1076),(10335,'Haute-Marne','52',1076),(10336,'Saint George','03',1009),(10337,'Saint John','04',1009),(10338,'Saint Mary','05',1009),(10339,'Saint Paul','06',1009),(10340,'Saint Peter','07',1009),(10341,'Saint Philip','08',1009),(10342,'Barbuda','10',1009),(10343,'Redonda','11',1009),(10344,'Christ Church','01',1018),(10345,'Saint Andrew','02',1018),(10346,'Saint George','03',1018),(10347,'Saint James','04',1018),(10348,'Saint John','05',1018),(10349,'Saint Joseph','06',1018),(10350,'Saint Lucy','07',1018),(10351,'Saint Michael','08',1018),(10352,'Saint Peter','09',1018),(10353,'Saint Philip','10',1018),(10354,'Saint Thomas','11',1018),(10355, 'Estuaire', '01', 1080),(10356, 'Haut-Ogooué', '02', 1080),(10357, 'Moyen-Ogooué', '03', 1080),(10358, 'Ngounié', '04', 'Ngounié'),(10359, 'Nyanga', '05', 1080),(10360, 'Ogooué-Ivindo', '06', 1080),(10361, 'Ogooué-Lolo', '07', 'Ogooué-Lolo'),(10362, 'Ogooué-Maritime', '08', 1080),(10363, 'Woleu-Ntem', '09', 1080); /*!40000 ALTER TABLE `civicrm_state_province` ENABLE KEYS */; UNLOCK TABLES; diff --git a/civicrm/sql/civicrm_navigation.mysql b/civicrm/sql/civicrm_navigation.mysql index d145d85929588b2e1aceb56a8534f06e1720d2ef..d844e88e51f68e376c640f101568928e973dc9b6 100644 --- a/civicrm/sql/civicrm_navigation.mysql +++ b/civicrm/sql/civicrm_navigation.mysql @@ -1,7 +1,7 @@ -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -187,7 +187,7 @@ VALUES INSERT INTO civicrm_navigation ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) VALUES - ( @domainID, NULL, 'Mailings', 'Mailings', 'access CiviMail,create mailings,approve mailings,schedule mailings', 'OR', NULL, '1', NULL, 50 ); + ( @domainID, NULL, 'Mailings', 'Mailings', 'access CiviMail,create mailings,approve mailings,schedule mailings,send SMS', 'OR', NULL, '1', NULL, 50 ); SET @mailinglastID:=LAST_INSERT_ID(); INSERT INTO civicrm_navigation @@ -201,8 +201,8 @@ VALUES ( @domainID, 'civicrm/admin/component?reset=1', 'Headers, Footers, and Automated Messages', 'Headers, Footers, and Automated Messages', 'access CiviMail,administer CiviCRM', 'AND', @mailinglastID, '1', NULL, 6 ), ( @domainID, 'civicrm/admin/messageTemplates?reset=1', 'Message Templates', 'Message Templates', 'edit message templates', '', @mailinglastID, '1', NULL, 7 ), ( @domainID, 'civicrm/admin/options/from_email_address?reset=1', 'From Email Addresses', 'From Email Addresses', 'administer CiviCRM', '', @mailinglastID, '1', 1, 8 ), - ( @domainID, 'civicrm/sms/send?reset=1', 'New SMS', 'New SMS', 'administer CiviCRM', NULL, @mailinglastID, '1', NULL, 9 ), - ( @domainID, 'civicrm/mailing/browse?reset=1&sms=1', 'Find Mass SMS', 'Find Mass SMS', 'administer CiviCRM', NULL, @mailinglastID, '1', 1, 10 ), + ( @domainID, 'civicrm/sms/send?reset=1', 'New SMS', 'New SMS', 'send SMS', NULL, @mailinglastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/mailing/browse?reset=1&sms=1', 'Find Mass SMS', 'Find Mass SMS', 'send SMS', NULL, @mailinglastID, '1', 1, 10 ), ( @domainID, 'civicrm/a/#/abtest/new', 'New A/B Test', 'New A/B Test', 'access CiviMail', '', @mailinglastID, '1', NULL, 15 ), ( @domainID, 'civicrm/a/#/abtest', 'Manage A/B Tests', 'Manage A/B Tests', 'access CiviMail', '', @mailinglastID, '1', 1, 16 ); @@ -816,4 +816,4 @@ VALUES INSERT INTO `civicrm_report_instance` ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) VALUES - ( @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}'); + ( @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}'); \ No newline at end of file diff --git a/civicrm/sql/civicrm_sample.mysql b/civicrm/sql/civicrm_sample.mysql index c30d78c4adb6eea900333bde8268f9d1d0cb46e7..9eaf66dbc8e334610ddc3aea06aff8c818f46b26 100644 --- a/civicrm/sql/civicrm_sample.mysql +++ b/civicrm/sql/civicrm_sample.mysql @@ -1,7 +1,7 @@ -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -251,11 +251,10 @@ VALUES (@priceFieldID,'bass','Bass','25',1,1,1,2), (@priceFieldID,'tenor','Tenor','40',2,1,0,2), (@priceFieldID,'soprano','Soprano','50',3,1,0,2); - -- +--------------------------------------------------------------------+ -- | CiviCRM version 4.7 | -- +--------------------------------------------------------------------+ --- | Copyright CiviCRM LLC (c) 2004-2017 | +-- | Copyright CiviCRM LLC (c) 2004-2018 | -- +--------------------------------------------------------------------+ -- | This file is a part of CiviCRM. | -- | | @@ -358,4 +357,3 @@ INSERT INTO civicrm_acl_entity_role (`acl_role_id`, `entity_table`, `entity_id`, `is_active`) VALUES (1, 'civicrm_group', 1, 1); - diff --git a/civicrm/templates/CRM/ACL/Form/ACL.tpl b/civicrm/templates/CRM/ACL/Form/ACL.tpl index b6a96c19eefe5ca5be4af1f5a90648b06b353b12..eed5ed0fc3ccd3c21f5b4deaa437e073fa753974 100644 --- a/civicrm/templates/CRM/ACL/Form/ACL.tpl +++ b/civicrm/templates/CRM/ACL/Form/ACL.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/ACL/Form/ACLBasic.tpl b/civicrm/templates/CRM/ACL/Form/ACLBasic.tpl index 801b7f3567452702b14abb7d79e2713a2add402a..902218a0353c93d4846e9b8f0a567742e022db1c 100644 --- a/civicrm/templates/CRM/ACL/Form/ACLBasic.tpl +++ b/civicrm/templates/CRM/ACL/Form/ACLBasic.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/ACL/Form/EntityRole.tpl b/civicrm/templates/CRM/ACL/Form/EntityRole.tpl index c3289aee882a9d8b3179271df9771f947f03fa91..eea780563513e928048c3216c1c9cfef81fbaa58 100644 --- a/civicrm/templates/CRM/ACL/Form/EntityRole.tpl +++ b/civicrm/templates/CRM/ACL/Form/EntityRole.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/ACL/Form/WordPress/Permissions.tpl b/civicrm/templates/CRM/ACL/Form/WordPress/Permissions.tpl index d6772743dae0dd117e141dc930bd4ecbadafdce1..21dc63d64dfeabe96be93a64d01008463c39d762 100644 --- a/civicrm/templates/CRM/ACL/Form/WordPress/Permissions.tpl +++ b/civicrm/templates/CRM/ACL/Form/WordPress/Permissions.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/ACL/Header.tpl b/civicrm/templates/CRM/ACL/Header.tpl index b2cbfed9842acb924eac7c1d9c7d9e3843d122a8..8c73d8eb180c36a6839f6f3a64c2b430cedb5762 100644 --- a/civicrm/templates/CRM/ACL/Header.tpl +++ b/civicrm/templates/CRM/ACL/Header.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/ACL/Page/ACL.tpl b/civicrm/templates/CRM/ACL/Page/ACL.tpl index b1e9bca92f594f66c08f78983e47824b7d6fd0a3..80d3dc6faaef172d0612a45959b21f6ec7cee56d 100644 --- a/civicrm/templates/CRM/ACL/Page/ACL.tpl +++ b/civicrm/templates/CRM/ACL/Page/ACL.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/ACL/Page/ACLBasic.tpl b/civicrm/templates/CRM/ACL/Page/ACLBasic.tpl index 6d154b0648c44d71147abf70464e0f6c5a8aeb67..c9c122bacfd6c27d6bf540e04513d40c9cf1a2c3 100644 --- a/civicrm/templates/CRM/ACL/Page/ACLBasic.tpl +++ b/civicrm/templates/CRM/ACL/Page/ACLBasic.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/ACL/Page/EntityRole.tpl b/civicrm/templates/CRM/ACL/Page/EntityRole.tpl index 4a7e7ade58b892b4d11fbcef103218eb379b337f..5875cdaf905f117e04f6a959517f49baacc90417 100644 --- a/civicrm/templates/CRM/ACL/Page/EntityRole.tpl +++ b/civicrm/templates/CRM/ACL/Page/EntityRole.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Calendar/ICal.tpl b/civicrm/templates/CRM/Activity/Calendar/ICal.tpl index 1466b95a2cfdfa72d6adedcabaa01542e710305b..11f914146956df9be0253bd28bb9bad0cf3fe9d4 100644 --- a/civicrm/templates/CRM/Activity/Calendar/ICal.tpl +++ b/civicrm/templates/CRM/Activity/Calendar/ICal.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Activity.hlp b/civicrm/templates/CRM/Activity/Form/Activity.hlp index 25c4b7193f3da4576eb41886cae310a07a011771..e8b6dbe32ebd27182ca90892a2fa92d5277c0fa5 100644 --- a/civicrm/templates/CRM/Activity/Form/Activity.hlp +++ b/civicrm/templates/CRM/Activity/Form/Activity.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Activity.tpl b/civicrm/templates/CRM/Activity/Form/Activity.tpl index 0cd025ed4dfe084d4328d06fd84a4f70235f7583..816b507a579a20099c0765d53f47336330d9441b 100644 --- a/civicrm/templates/CRM/Activity/Form/Activity.tpl +++ b/civicrm/templates/CRM/Activity/Form/Activity.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/ActivityJs.tpl b/civicrm/templates/CRM/Activity/Form/ActivityJs.tpl index 8fb3ae03d82a3d2d263d41dd88c88a9e544e8a6b..e7c0945a3dcdf52971024b325845ddf1f7edd1d4 100644 --- a/civicrm/templates/CRM/Activity/Form/ActivityJs.tpl +++ b/civicrm/templates/CRM/Activity/Form/ActivityJs.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/ActivityLinks.tpl b/civicrm/templates/CRM/Activity/Form/ActivityLinks.tpl index a3b2332d81af9c9a247f5c7c732bf1a8aefa546c..7289080ac47837635e3f899a603d90c0dc0909d8 100644 --- a/civicrm/templates/CRM/Activity/Form/ActivityLinks.tpl +++ b/civicrm/templates/CRM/Activity/Form/ActivityLinks.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/ActivityView.tpl b/civicrm/templates/CRM/Activity/Form/ActivityView.tpl index b9770b53f81bd183b38207633b40b7c3db35bbdd..f5a71a739d05bacc64e2f1d66997f7b6df37d20b 100644 --- a/civicrm/templates/CRM/Activity/Form/ActivityView.tpl +++ b/civicrm/templates/CRM/Activity/Form/ActivityView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Search.tpl b/civicrm/templates/CRM/Activity/Form/Search.tpl index 59cffaa7430885452ed4a620a4481a6004cf9d84..6294f89ed634c146d6a53d39ae5d469bd9795d19 100644 --- a/civicrm/templates/CRM/Activity/Form/Search.tpl +++ b/civicrm/templates/CRM/Activity/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Search/Common.tpl b/civicrm/templates/CRM/Activity/Form/Search/Common.tpl index df9923c00f140544934c133e2dd81a1932a1458b..e4b83eca7a5ce5a38a9068581dcb3c946a8ef67a 100644 --- a/civicrm/templates/CRM/Activity/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Activity/Form/Search/Common.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Activity/Form/Search/EmptyResults.tpl index 09ec65c321b141ccaa19e02d0e0bf078979fdd37..ea7dfcd9b1b60529894d688e4b04a856c3679f39 100644 --- a/civicrm/templates/CRM/Activity/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Activity/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Selector.tpl b/civicrm/templates/CRM/Activity/Form/Selector.tpl index cec452a156e34cc98f7d81f940575e619fd89455..a0cefd052e85e148699261f7a312b374bfcf9bda 100644 --- a/civicrm/templates/CRM/Activity/Form/Selector.tpl +++ b/civicrm/templates/CRM/Activity/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task.tpl b/civicrm/templates/CRM/Activity/Form/Task.tpl index 261f8f94b6f8220a9d549f755ddee2418ac41335..2975e9590e3819d6e5e5ea92a26487be28ad2f4a 100644 --- a/civicrm/templates/CRM/Activity/Form/Task.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/AddToTag.tpl b/civicrm/templates/CRM/Activity/Form/Task/AddToTag.tpl index 192dde4b9ec00ea855e77d95d992bafc3e4cd73d..e85c7ad614d50535b32c3ce45acbe815133ab03d 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/AddToTag.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/AddToTag.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/Batch.tpl b/civicrm/templates/CRM/Activity/Form/Task/Batch.tpl index e57a71bcc3ccbfdf846e8bb2724e8af0d414737f..681b977432192a8efe08a0a7bb2013eb5bae0ae4 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/Batch.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/Batch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/Delete.tpl b/civicrm/templates/CRM/Activity/Form/Task/Delete.tpl index 02ad552fcc523b19972816a780a944ac71f10425..b758f5a7294a16889ce282e3f4cbb93283238484 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/Delete.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/Email.tpl b/civicrm/templates/CRM/Activity/Form/Task/Email.tpl index aaed296b1be2bafb31bc83cd0e73e9e8f03f5b38..9b7a13ada8bd503c9f100352fed2af347406aecd 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/Email.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/FileOnCase.tpl b/civicrm/templates/CRM/Activity/Form/Task/FileOnCase.tpl index 04a3474f339dd3afdfa4e2649eb60e7c76ae4ba3..07c9bae6bbfabc9027c48af9f9b1bd0d9b959d8c 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/FileOnCase.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/FileOnCase.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/PickOption.tpl b/civicrm/templates/CRM/Activity/Form/Task/PickOption.tpl index 1731894a2d23f3e8528e13269b2762861c32bb80..fcc11e968d81bf0a8d840b59565c74d796ca4c42 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/PickOption.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/PickOption.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/PickProfile.tpl b/civicrm/templates/CRM/Activity/Form/Task/PickProfile.tpl index 9fb90630c3a4d917261cd9385fac90c579ffe922..7865ddc48f705602f12f2c7af7392676aab3ddda 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/PickProfile.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/PickProfile.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/Print.tpl b/civicrm/templates/CRM/Activity/Form/Task/Print.tpl index 0f08bd8d373ae529f59b568fa0471bdd44b8ddf0..cd18d4ebb1b8ecebd9121d6c14c2acf7e603863a 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/RemoveFromTag.tpl b/civicrm/templates/CRM/Activity/Form/Task/RemoveFromTag.tpl index 02de88e4e7d4918856c28010915a92622ddfb8e6..d26cc18a4c9eb3989fda2c4b10e1792753ae9596 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/RemoveFromTag.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/RemoveFromTag.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/SMS.tpl b/civicrm/templates/CRM/Activity/Form/Task/SMS.tpl index ebc404fa9e56ad59fe413285e3c07a7a698606f4..805e94166d78535ded5ec71e689549a37fbd3d5c 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/SMS.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/SMS.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Form/Task/SearchTaskHookSample.tpl b/civicrm/templates/CRM/Activity/Form/Task/SearchTaskHookSample.tpl index 3f9df6a5dff69d96efe50d78a679f15fe19b1e3b..1480afe853d918db9617324605157df9b54803ef 100644 --- a/civicrm/templates/CRM/Activity/Form/Task/SearchTaskHookSample.tpl +++ b/civicrm/templates/CRM/Activity/Form/Task/SearchTaskHookSample.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Import/Form/DataSource.hlp b/civicrm/templates/CRM/Activity/Import/Form/DataSource.hlp index 75ae807a1ca0ad803fa0f9c5cdfabf7af81a163a..329be7992cdc90abd96fcb8c0b4229761577d2d0 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/DataSource.hlp +++ b/civicrm/templates/CRM/Activity/Import/Form/DataSource.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Activity/Import/Form/DataSource.tpl index ce306201aff885b8b4de4ef7da490f7683514103..939c265318b392ac3f7c267073c70a6450b95f4c 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Activity/Import/Form/DataSource.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Import/Form/MapField.tpl b/civicrm/templates/CRM/Activity/Import/Form/MapField.tpl index ad3ee806c126e9dff0f746befd6d16294de8fe16..a8af2f2009353fb16d80be3fa6e1559d1aad1ea9 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/MapField.tpl +++ b/civicrm/templates/CRM/Activity/Import/Form/MapField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Import/Form/MapTable.tpl b/civicrm/templates/CRM/Activity/Import/Form/MapTable.tpl index 07e006b53d96c78be1734ae930b9cf82fc43d948..13af32e2676a5a55f48c5a00ff2529bf1214eb7c 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/MapTable.tpl +++ b/civicrm/templates/CRM/Activity/Import/Form/MapTable.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Import/Form/Preview.tpl b/civicrm/templates/CRM/Activity/Import/Form/Preview.tpl index a59bb6caae85af1239cb0faab8b22936387866d1..b3ff141a24fcca700f43445082f7e9b6169aa367 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Activity/Import/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Import/Form/Summary.tpl b/civicrm/templates/CRM/Activity/Import/Form/Summary.tpl index aff0c3ac83e759c3ffe02f222294212e84880663..2da3ff56215a2121646f941cf7cdbfe82659c934 100644 --- a/civicrm/templates/CRM/Activity/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Activity/Import/Form/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Page/Tab.tpl b/civicrm/templates/CRM/Activity/Page/Tab.tpl index a5daa10cf656dba94ad68ecdf790ad4560029a4c..a7b4ed2774c15a2cc0c55aa427a01215dcfe30eb 100644 --- a/civicrm/templates/CRM/Activity/Page/Tab.tpl +++ b/civicrm/templates/CRM/Activity/Page/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Page/UserDashboard.tpl b/civicrm/templates/CRM/Activity/Page/UserDashboard.tpl index c183ed9d4dd7b8a02e4e2b01ace08ea0f4bf4259..4d9de96e7584cf258bb8482ac7b7d2e5c1687e93 100644 --- a/civicrm/templates/CRM/Activity/Page/UserDashboard.tpl +++ b/civicrm/templates/CRM/Activity/Page/UserDashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Selector/Activity.tpl b/civicrm/templates/CRM/Activity/Selector/Activity.tpl index 32ba0bbda639abdd31b8fdbcde652b0d298d9ff0..84ea3e12d9817d630984d150df06ec589f2b72f3 100644 --- a/civicrm/templates/CRM/Activity/Selector/Activity.tpl +++ b/civicrm/templates/CRM/Activity/Selector/Activity.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Activity/Selector/Selector.tpl b/civicrm/templates/CRM/Activity/Selector/Selector.tpl index d934a36b55a13c4e17b7bf0df12c27772d8edf6d..a9a7c883994b8ac8fb65eb5a4876a2aeda344c7d 100644 --- a/civicrm/templates/CRM/Activity/Selector/Selector.tpl +++ b/civicrm/templates/CRM/Activity/Selector/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/CMSUser.tpl b/civicrm/templates/CRM/Admin/Form/CMSUser.tpl index 07c3f1122830937e714fd9bc5fac0d32aef04447..8652253d7ef2787bbebc42163e4917f763320802 100644 --- a/civicrm/templates/CRM/Admin/Form/CMSUser.tpl +++ b/civicrm/templates/CRM/Admin/Form/CMSUser.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/ContactType.tpl b/civicrm/templates/CRM/Admin/Form/ContactType.tpl index a579ffe2276aee986bca32e1901cf4d0f9a186eb..29b7dbf8c15380124c272770bcc78d4087f54848 100644 --- a/civicrm/templates/CRM/Admin/Form/ContactType.tpl +++ b/civicrm/templates/CRM/Admin/Form/ContactType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Extensions.tpl b/civicrm/templates/CRM/Admin/Form/Extensions.tpl index 9f26cb07ca991568e477baa4ff9597c430cd33e7..a55c3748d492abda932cfa5c4b86fbf981680f07 100644 --- a/civicrm/templates/CRM/Admin/Form/Extensions.tpl +++ b/civicrm/templates/CRM/Admin/Form/Extensions.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Job.tpl b/civicrm/templates/CRM/Admin/Form/Job.tpl index 4d4d2f10d986de310cc38f3337601088f284ba50..576266e31340ac82f171c365321f50fa7f64b0ff 100644 --- a/civicrm/templates/CRM/Admin/Form/Job.tpl +++ b/civicrm/templates/CRM/Admin/Form/Job.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/LocationType.tpl b/civicrm/templates/CRM/Admin/Form/LocationType.tpl index 3e2a5370e2f47342c3592300631b4fc1d27a7bcd..cc6bbb250fcd26d9bc2a98dfe13447136319c9d2 100644 --- a/civicrm/templates/CRM/Admin/Form/LocationType.tpl +++ b/civicrm/templates/CRM/Admin/Form/LocationType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/MailSettings.tpl b/civicrm/templates/CRM/Admin/Form/MailSettings.tpl index 0175b060a0661550192c5b18b0d222013ee3439b..b6d77db43d07bf21e69868c5717420a44da3dcb2 100644 --- a/civicrm/templates/CRM/Admin/Form/MailSettings.tpl +++ b/civicrm/templates/CRM/Admin/Form/MailSettings.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Mapping.tpl b/civicrm/templates/CRM/Admin/Form/Mapping.tpl index 02a4ebdc6818f1856411fc31da7b917e27f1dda5..45ea2f1e5c1a20d0e85f38209843326af533624b 100644 --- a/civicrm/templates/CRM/Admin/Form/Mapping.tpl +++ b/civicrm/templates/CRM/Admin/Form/Mapping.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl b/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl index d3add4b05b62f40333f98a7abd8ec2a873216347..9ef2c6c860e438cea3765831389d335da208b223 100644 --- a/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl +++ b/civicrm/templates/CRM/Admin/Form/MessageTemplates.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -96,7 +96,7 @@ </div> <div class="clear"></div> <div class='html'> - {$form.msg_html.html} + {$form.msg_html.html|crmAddClass:huge} <div class="description">{ts}An HTML formatted version of this message will be sent to contacts whose Email Format preference is 'HTML' or 'Both'.{/ts} {ts 1=$tokenDocsRepeated}Tokens may be included (%1).{/ts}</div> </div> </div><!-- /.crm-accordion-body --> diff --git a/civicrm/templates/CRM/Admin/Form/Navigation.hlp b/civicrm/templates/CRM/Admin/Form/Navigation.hlp index b5102b17c9ea861f77db4f44b92269d75a362724..c66f5b75266902c35c7459a612013d2d2aca722e 100644 --- a/civicrm/templates/CRM/Admin/Form/Navigation.hlp +++ b/civicrm/templates/CRM/Admin/Form/Navigation.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Navigation.tpl b/civicrm/templates/CRM/Admin/Form/Navigation.tpl index 2ab70a8bf4be208f340d51617a24bdd0e0451bd3..04de18f62c97fa97a84bc832b069ce1ac6d9377f 100644 --- a/civicrm/templates/CRM/Admin/Form/Navigation.tpl +++ b/civicrm/templates/CRM/Admin/Form/Navigation.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/OptionGroup.tpl b/civicrm/templates/CRM/Admin/Form/OptionGroup.tpl index d3ac30bb34a666882ea237a95dbc951e7408a52c..40ffd2f3079afa159961c2476d7ff7b70219d01b 100644 --- a/civicrm/templates/CRM/Admin/Form/OptionGroup.tpl +++ b/civicrm/templates/CRM/Admin/Form/OptionGroup.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Options.tpl b/civicrm/templates/CRM/Admin/Form/Options.tpl index 4bf0bfee8b5fc8f95d8ecadbdbfa585ca0921551..cf06414e879be42e80f0de0a6bb38346d5ebbc33 100644 --- a/civicrm/templates/CRM/Admin/Form/Options.tpl +++ b/civicrm/templates/CRM/Admin/Form/Options.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/ParticipantStatusType.tpl b/civicrm/templates/CRM/Admin/Form/ParticipantStatusType.tpl index 1faf7c7fd8ebe13cd7ba61312e65480c8db1bcbc..1831c999779611f6c6b7913160db95e80502db30 100644 --- a/civicrm/templates/CRM/Admin/Form/ParticipantStatusType.tpl +++ b/civicrm/templates/CRM/Admin/Form/ParticipantStatusType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/PaymentProcessor.tpl b/civicrm/templates/CRM/Admin/Form/PaymentProcessor.tpl index ae16c9cfd0f3c0767b719dd8a4214e749d40f669..4fd720e8f86d94f57dd882ac1db63587195bb4aa 100644 --- a/civicrm/templates/CRM/Admin/Form/PaymentProcessor.tpl +++ b/civicrm/templates/CRM/Admin/Form/PaymentProcessor.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/PaymentProcessorType.tpl b/civicrm/templates/CRM/Admin/Form/PaymentProcessorType.tpl index b656a94d311f35e34b46dcdb986d8ded9f91f237..8cc89f58fa01bd9be49521df797d507282711c44 100644 --- a/civicrm/templates/CRM/Admin/Form/PaymentProcessorType.tpl +++ b/civicrm/templates/CRM/Admin/Form/PaymentProcessorType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Address.hlp b/civicrm/templates/CRM/Admin/Form/Preferences/Address.hlp index 74861621f7baf983a140f4b7cd9e4a47706c4080..2da099ab1164dfbc8dcf8052f7b897207e3faa95 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Address.hlp +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Address.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Address.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Address.tpl index 0bb88cc93ea2211f4b42452feec6f8766b464bb4..2ea927ed2232cf795452e3f1c2999a50141bbdb3 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Address.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Address.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Campaign.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Campaign.tpl index 63ccb8a3b08f41b73b8e354cf35fa14159e13bfe..491ca38e9652845a7bca8bfba8df70872f58bcc1 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Campaign.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Campaign.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Contribute.hlp b/civicrm/templates/CRM/Admin/Form/Preferences/Contribute.hlp index 50081066502ff28eadae811a6b21aa6d30719306..8e36068e84daaa3c62f2bbe301ed3c0d602a1235 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Contribute.hlp +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Contribute.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Contribute.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Contribute.tpl index 63ccb8a3b08f41b73b8e354cf35fa14159e13bfe..491ca38e9652845a7bca8bfba8df70872f58bcc1 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Contribute.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Contribute.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Display.hlp b/civicrm/templates/CRM/Admin/Form/Preferences/Display.hlp index 197f0de13d8c1d11ea03b88fc5fa91f39c9af2a4..3d2777dc9c53c5c72dea835062f7103d0eae7989 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Display.hlp +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Display.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Display.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Display.tpl index 04c7263d4e0a1eec6115e08650406cdf5954d9b5..1ac6cb910cf8d0eeb0793c96c53ed3301d54c120 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Display.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Display.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Event.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Event.tpl index 63ccb8a3b08f41b73b8e354cf35fa14159e13bfe..491ca38e9652845a7bca8bfba8df70872f58bcc1 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Event.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Event.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Mailing.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Mailing.tpl index 63ccb8a3b08f41b73b8e354cf35fa14159e13bfe..491ca38e9652845a7bca8bfba8df70872f58bcc1 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Mailing.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Mailing.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Member.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Member.tpl index 63ccb8a3b08f41b73b8e354cf35fa14159e13bfe..491ca38e9652845a7bca8bfba8df70872f58bcc1 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Member.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Member.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Preferences/Multisite.tpl b/civicrm/templates/CRM/Admin/Form/Preferences/Multisite.tpl index 63ccb8a3b08f41b73b8e354cf35fa14159e13bfe..491ca38e9652845a7bca8bfba8df70872f58bcc1 100644 --- a/civicrm/templates/CRM/Admin/Form/Preferences/Multisite.tpl +++ b/civicrm/templates/CRM/Admin/Form/Preferences/Multisite.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/PreferencesDate.tpl b/civicrm/templates/CRM/Admin/Form/PreferencesDate.tpl index 69375872718ac106aa03a8521c9011afad33fb8a..a5dbd44a27bd87e4334775751f3afac7b4cd9565 100644 --- a/civicrm/templates/CRM/Admin/Form/PreferencesDate.tpl +++ b/civicrm/templates/CRM/Admin/Form/PreferencesDate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/RelationshipType.tpl b/civicrm/templates/CRM/Admin/Form/RelationshipType.tpl index cda0323be98db7fa5ba358e9b4bc323aa0403222..4de2bc249b5e151b1f83f38bcef88d9e0d70dce4 100644 --- a/civicrm/templates/CRM/Admin/Form/RelationshipType.tpl +++ b/civicrm/templates/CRM/Admin/Form/RelationshipType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl b/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl index 259148dafb24a750934dc8a681d803ba4b7fc051..6e375712ba0280adf6203e5d4fb43bbc59464f67 100644 --- a/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl +++ b/civicrm/templates/CRM/Admin/Form/ScheduleReminders.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Case.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Case.tpl index 820f2607d54cb9229212c924e2fcfbf262f840ac..9eb9d2bd8d7d5dc792ee2dd1db859476ee75cbaa 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Case.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Case.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Component.hlp b/civicrm/templates/CRM/Admin/Form/Setting/Component.hlp index e7587203ec5b121d301d95cbf2f10b899099d359..aa212527a859bae4f65c908085a7b9b24b1b65c5 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Component.hlp +++ b/civicrm/templates/CRM/Admin/Form/Setting/Component.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Component.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Component.tpl index 4e1b446ac97bd6068eb2c9964c1bc1c261935433..53854c913c9691dc2254ad26126a4e2a459c483e 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Component.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Component.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,10 +23,10 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-component-form-block"> <div class="help"> {ts}CiviCRM includes several optional components which give you more tools to connect with and engage your constituents.{/ts}{help id="components"} </div> +<div class="crm-block crm-form-block crm-component-form-block"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> {$form.enableComponents.html} <p class="description"> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Date.hlp b/civicrm/templates/CRM/Admin/Form/Setting/Date.hlp index 96a0a06e66f6fe84c62d7e47e6651372b78ff645..5fc76319dcacb81614fb444dae1d5473130c6cf7 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Date.hlp +++ b/civicrm/templates/CRM/Admin/Form/Setting/Date.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Date.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Date.tpl index 3ed4b0865132a87dc1905e0387394699681a2966..7eef5127cad11831a987e4abd05966eb9b46be06 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Date.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Date.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,11 +23,11 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-date-form-block"> <div class="help"> {capture assign=crmURL}{crmURL p='civicrm/admin/setting/preferences/date' q='action=reset=1'}{/capture} {ts 1=$crmURL}Use this screen to configure default formats for date display and date input fields throughout your site. Settings use standard POSIX specifiers. New installations are preconfigured with standard United States formats. You can override this default setting and define the range of allowed dates for specific field types at <a href="%1">Administer > Customize Data and Screens > Date Preferences</a>{/ts} {help id='date-format'} </div> +<div class="crm-block crm-form-block crm-date-form-block"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <fieldset><legend>{ts}Date Display{/ts}</legend> <table class="form-layout-compressed"> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Debugging.hlp b/civicrm/templates/CRM/Admin/Form/Setting/Debugging.hlp index cff75470650621d94de72dc9da460f784e68e0d6..35b9595ad50cdcf04f76c10bf56adae7668099fd 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Debugging.hlp +++ b/civicrm/templates/CRM/Admin/Form/Setting/Debugging.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Debugging.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Debugging.tpl index 45a1edbc182bb49c5965cf11529ed28b7d1b1352..721d7ef13e9370a334c12cec0c55aaa65319291a 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Debugging.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Debugging.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,10 +23,10 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-debugging-form-block"> <div class="help"> {ts}In addition to the settings on this screen, there are a number of settings you can add to your sites's settings file (civicrm.settings.php) to provide additional debugging information.{/ts} {docURL page="Debugging for developers" resource="wiki"} </div> +<div class="crm-block crm-form-block crm-debugging-form-block"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout"> {if $form.userFrameworkLogging} diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Event.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Event.tpl index 610c11049460b5f0835b3d46086573910a2930ea..fab4552f0c8cf549f3881683bf25d7fa38eab6a0 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Event.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Event.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Localization.hlp b/civicrm/templates/CRM/Admin/Form/Setting/Localization.hlp index 05934a98ab2f7710df511ccceea1a5d06a03d956..081d68b55f2018bd382f35151e32c3a6a94be1fb 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Localization.hlp +++ b/civicrm/templates/CRM/Admin/Form/Setting/Localization.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl index 585b09a61b5f9b9af2f4bfeda33b39aa2f20f462..7089c61f2460f40351d0b6b076c90564d1eec605 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Localization.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,11 +23,11 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} +<div class="help"> + {ts}Configure CiviCRM for your country and language.{/ts} + {docURL page="i18n Administrator's Guide: Using CiviCRM in your own language" resource="wiki"} +</div> <div class="crm-block crm-form-block crm-localization-form-block"> - <div class="help"> - {ts}Configure CiviCRM for your country and language.{/ts} - {docURL page="i18n Administrator's Guide: Using CiviCRM in your own language" resource="wiki"} - </div> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"} </div> <h3>{ts}Language and Currency{/ts}</h3> <table class="form-layout-compressed"> @@ -123,19 +123,19 @@ <td class="label">{$form.makeSinglelingual.label}</td> <td>{$form.makeSinglelingual.html}<br /> <span class="description">{ts}Check this box and click 'Save' to switch this installation from multi- to single-language.{/ts}</span><br /><br /> - <span class="description" style="color:red">{$warning}</span></td> + <span class="description font-red">{$warning}</span></td> </tr> {elseif $form.makeMultilingual} <tr class="crm-localization-form-block-makeMultilingual"> <td class="label">{$form.makeMultilingual.label}</td> <td>{$form.makeMultilingual.html}<br /> <span class="description">{ts}Check this box and click 'Save' to switch this installation from single- to multi-language, then add further languages.{/ts}</span><br /><br /> - <span class="description" style="color:red">{$warning}</span></td> + <span class="description font-red">{$warning}</span></td> {else} <tr class="crm-localization-form-block-description"> <td> <span class="description">{ts}In order to use this functionality, the installation's database user must have privileges to create triggers and views (in MySQL 5.0 – and in MySQL 5.1 if binary logging is enabled – this means the SUPER privilege). This install either does not seem to have the required privilege enabled.{/ts} {ts}(Multilingual support currently cannot be enabled on installations with enabled logging.){/ts}</span><br /><br /> - <span class="description" style="color:red">{$warning}</span></td> + <span class="description font-red">{$warning}</span></td> </tr> {/if} </table> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Mail.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Mail.tpl index 86194e7c6a275f488e72fee2469870fdbde7a9f6..3235e35dfeb674599ccb0f30c0148b4994e2ae9d 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Mail.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Mail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Mapping.hlp b/civicrm/templates/CRM/Admin/Form/Setting/Mapping.hlp index 8a62509a818078822e65fbfa4e238821c86128f7..f353b8792a6b046d0ecf32763046ccb295f5093a 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Mapping.hlp +++ b/civicrm/templates/CRM/Admin/Form/Setting/Mapping.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Mapping.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Mapping.tpl index 2f87771b35545203966666b9027d93fccf9d6036..8088ed1d0ce2d001a65dc7a61a7c06e0b77ebb3b 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Mapping.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Mapping.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,10 +23,10 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-map-form-block"> <div class="help"> {ts}CiviCRM includes plugins for several mapping and geocoding web services. When your users save a contact or event location address, a geocoding service will convert the address into geographical coordinates, which are required for mapping. Yahoo’s geocoder will also automatically populate the postal code field. Mapping services allow your users to display addresses on a map.{/ts} {help id='map-intro-id'} </div> +<div class="crm-block crm-form-block crm-map-form-block"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout-compressed"> <tr class="crm-map-form-block-mapProvider"> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl index f58f79590c0ddfe96336b522bc2ea66d3a115357..b0394429198298e248b2ed6aab78e6379ad8ab01 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Miscellaneous.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Path.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Path.tpl index f94e3831cccc536296bd5d5105cd113c354c6360..463b758c299ed41f50ef258bdcfc3604c9780311 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Path.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Path.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,8 +23,7 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-path-form-block"> - <div class="help"> +<div class="help"> <p> {ts}You may configure these upload directories using absolute paths or path variables.{/ts} {help id='id-path_vars'} @@ -32,8 +31,8 @@ <p> {ts}If you modify the defaults, make sure that your web server has write access to the directories.{/ts} </p> - - </div> +</div> +<div class="crm-block crm-form-block crm-path-form-block"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout"> <tr class="crm-path-form-block-uploadDir"> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Search.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Search.tpl index aa5a8766f3809b3e35d6152ae0bf43d3080a64c1..000faab7446e224d4a3da37f3e853b2746b4f45c 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Search.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/SettingForm.tpl b/civicrm/templates/CRM/Admin/Form/Setting/SettingForm.tpl index 7e3b4e675b57853121b7a548f8b70382645bea14..cd36044efcfdebce05b5033bc782027f02a2eef1 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/SettingForm.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/SettingForm.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Smtp.hlp b/civicrm/templates/CRM/Admin/Form/Setting/Smtp.hlp index ed5f9fd4668a57c2cb336593278b9a5af5193516..aedfd8224fa400aab51e736d8f41cd914fd921e1 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Smtp.hlp +++ b/civicrm/templates/CRM/Admin/Form/Setting/Smtp.hlp @@ -1,7 +1,7 @@ {*--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Smtp.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Smtp.tpl index 8ab910f8abdd7cbbd4990ea34077a838e0a2a91c..cccc0eb97e03680295dc23b225130041e2030bf3 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Smtp.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Smtp.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/UF.tpl b/civicrm/templates/CRM/Admin/Form/Setting/UF.tpl index a38feec15b701043829a8d89355457b2608e0b87..68439d61a2da9b1c110568b3faba45f3f63de65a 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/UF.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/UF.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,10 +23,10 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-uf-form-block"> <div class="help"> {ts}These settings define the CMS variables that are used with CiviCRM.{/ts} </div> +<div class="crm-block crm-form-block crm-uf-form-block"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout-compressed"> <tr class="crm-uf-form-block-userFrameworkUsersTableName"> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/UpdateConfigBackend.tpl b/civicrm/templates/CRM/Admin/Form/Setting/UpdateConfigBackend.tpl index 6e11eabb16990cc28aa2fa286c0035fab66a1b1c..59dfaf64d9cad629d55b7083c4248e8b53457c30 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/UpdateConfigBackend.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/UpdateConfigBackend.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,7 +23,6 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-config-backend-form-block"> <div class="help"> <p> {ts}When migrating a site to a new server, the paths and URLs of your CiviCRM installation may change. {/ts} @@ -34,6 +33,7 @@ {ts 1=$pathsURL 2=$urlsURL}The old paths and URLs may be retained in some database records. Use this form to clear caches or to reset paths to their defaults. If you need further customizations, then update the <a href="%1">Directories</a> and <a href="%2">Resource URLs</a>.{/ts} </p> </div> +<div class="crm-block crm-form-block crm-config-backend-form-block"> <div class="crm-submit-buttons"> <span class="crm-button crm-i-button"> <i class="crm-i fa-undo"></i> diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Url.hlp b/civicrm/templates/CRM/Admin/Form/Setting/Url.hlp index d7a6965eac2fdd48170209b571c39ba242075066..e16e34fe4678579c1f1b3b42be98abbc0d444188 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Url.hlp +++ b/civicrm/templates/CRM/Admin/Form/Setting/Url.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/Setting/Url.tpl b/civicrm/templates/CRM/Admin/Form/Setting/Url.tpl index 22fe60364e31db5699cc4ae7435b0287b4a26698..d10cac3cab0c42a1cd8612af7c7c17ee19604c75 100644 --- a/civicrm/templates/CRM/Admin/Form/Setting/Url.tpl +++ b/civicrm/templates/CRM/Admin/Form/Setting/Url.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,7 +23,6 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-url-form-block"> <div class="help"> <p> {ts}These settings define the URLs used to access CiviCRM resources (CSS files, Javascript files, images, etc.).{/ts} @@ -32,8 +31,8 @@ {ts}You may configure these settings using absolute URLs or URL variables.{/ts} {help id='id-url_vars'} </p> - </div> +<div class="crm-block crm-form-block crm-url-form-block"> <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout"> <tr class="crm-url-form-block-userFrameworkResourceURL"> diff --git a/civicrm/templates/CRM/Admin/Form/WordReplacements.hlp b/civicrm/templates/CRM/Admin/Form/WordReplacements.hlp index e69c1bfd6a47f2748bf05256b03214b51f8e9dfb..86c67c7cd8e948918cac01daf9588971971c50df 100644 --- a/civicrm/templates/CRM/Admin/Form/WordReplacements.hlp +++ b/civicrm/templates/CRM/Admin/Form/WordReplacements.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Form/WordReplacements.tpl b/civicrm/templates/CRM/Admin/Form/WordReplacements.tpl index 083b10c778a4d308fe84e9cdee07facba1b19777..d1f451b2fbe87e37fb67b463021c1decabe2ad1a 100644 --- a/civicrm/templates/CRM/Admin/Form/WordReplacements.tpl +++ b/civicrm/templates/CRM/Admin/Form/WordReplacements.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -36,10 +36,10 @@ {else} {* this template is used for adding/editing string overrides *} + <div class="help"> + {ts}Use <strong>Word Replacements</strong> to change all occurrences of a word or phrase in CiviCRM screens (e.g. replace all occurrences of 'Contribution' with 'Donation').{/ts} {help id="id-word_replace"} + </div> <div class="crm-form crm-form-block crm-string_override-form-block"> - <div class="help"> - {ts}Use <strong>Word Replacements</strong> to change all occurrences of a word or phrase in CiviCRM screens (e.g. replace all occurrences of 'Contribution' with 'Donation').{/ts} {help id="id-word_replace"} - </div> <div class="crm-submit-buttons"> {include file="CRM/common/formButtons.tpl" location='top'} </div> diff --git a/civicrm/templates/CRM/Admin/Page/APIExplorer.hlp b/civicrm/templates/CRM/Admin/Page/APIExplorer.hlp index 0918768f59470706ef4fec3635b35f9f8a4a925c..9e9acf2e8f50887847f1d6a3983274202df21626 100644 --- a/civicrm/templates/CRM/Admin/Page/APIExplorer.hlp +++ b/civicrm/templates/CRM/Admin/Page/APIExplorer.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/APIExplorer.tpl b/civicrm/templates/CRM/Admin/Page/APIExplorer.tpl index 2aa5c85b5e43b647a5617535bb5e29f20f83d482..e7cd0181fd7c5c2f327b18c111173638f9782cb7 100644 --- a/civicrm/templates/CRM/Admin/Page/APIExplorer.tpl +++ b/civicrm/templates/CRM/Admin/Page/APIExplorer.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Access.tpl b/civicrm/templates/CRM/Admin/Page/Access.tpl index 96215fe8033b819260bd61898a80ff0058f0640d..5759af62c4d0b9d558ee05844a7f367b65962a1a 100644 --- a/civicrm/templates/CRM/Admin/Page/Access.tpl +++ b/civicrm/templates/CRM/Admin/Page/Access.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Admin.tpl b/civicrm/templates/CRM/Admin/Page/Admin.tpl index 0a00fa7e4ecfe90d170c2bf429173dc0328ba182..a6d9e0b3ccc1afb2d27e3b233ace3f05f92bdca1 100644 --- a/civicrm/templates/CRM/Admin/Page/Admin.tpl +++ b/civicrm/templates/CRM/Admin/Page/Admin.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/CKEditorConfig.tpl b/civicrm/templates/CRM/Admin/Page/CKEditorConfig.tpl index 9011381c78390bd75a725b4490e05abfc70b6401..b92082c3bd3be1f86eb9206924a5bcf19e556e2a 100644 --- a/civicrm/templates/CRM/Admin/Page/CKEditorConfig.tpl +++ b/civicrm/templates/CRM/Admin/Page/CKEditorConfig.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -60,6 +60,10 @@ border-bottom: 0 none; padding: 3px 10px 1px !important; } + .crm-config-option-row span.crm-error:after { + font-family: FontAwesome; + content: " \f071 Invalid JSON" + } {/literal}</style> {* Force the custom config file to reload by appending a new query string *} <script type="text/javascript"> @@ -105,7 +109,7 @@ <div class="crm-block crm-form-block"> <fieldset> <legend>{ts}Advanced Options{/ts}</legend> - <div class="description">{ts 1='href="http://docs.ckeditor.com/#!/api/CKEDITOR.config" target="_blank"'}Refer to the <a %1>CKEditor Api Documentation</a> for details.{/ts}</div> + <div class="description">{ts 1='href="https://docs.ckeditor.com/ckeditor4/latest/api/CKEDITOR_config.html" target="_blank"'}Refer to the <a %1>CKEditor Api Documentation</a> for details.{/ts}</div> <div id="crm-custom-config-options"></div> </fieldset> </div> diff --git a/civicrm/templates/CRM/Admin/Page/ConfigTaskList.tpl b/civicrm/templates/CRM/Admin/Page/ConfigTaskList.tpl index 0c665420d33951b3adc68047b886434bd6c06bb3..242eb8956a20017310d7879184fb0358cc547fb7 100644 --- a/civicrm/templates/CRM/Admin/Page/ConfigTaskList.tpl +++ b/civicrm/templates/CRM/Admin/Page/ConfigTaskList.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -26,7 +26,7 @@ {capture assign="linkTitle"}{ts}Edit settings{/ts}{/capture} {capture assign="adminMenu"}{crmURL p="civicrm/admin" q="reset=1"}{/capture} -<div id="help" class="description"> +<div class="help"> {ts 1=$adminMenu}Use this checklist to review and complete configuration tasks for your site. You will be redirected back to this checklist after saving each setting. Settings which you have not yet reviewed will be <span class="status-overdue">displayed in red</span>. After you have visited a page, the links will <span class="status-pending">display in green</span> (although you may still need to revisit the page to complete or update the settings). You can access this page again from the <a href="%1">Administer CiviCRM</a> menu at any time.{/ts} </div> diff --git a/civicrm/templates/CRM/Admin/Page/ContactType.hlp b/civicrm/templates/CRM/Admin/Page/ContactType.hlp index 57a923e45590f16cf4b141470fcd488c2e6c6747..e6b4f5079d983b6b07e08b3ce6a2f41b381e05f6 100644 --- a/civicrm/templates/CRM/Admin/Page/ContactType.hlp +++ b/civicrm/templates/CRM/Admin/Page/ContactType.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/ContactType.tpl b/civicrm/templates/CRM/Admin/Page/ContactType.tpl index 155a79deb3b89ad7ee8d5681fb5d7e882fe38aad..067d503f64a775fe103754bc16ed71609951858d 100644 --- a/civicrm/templates/CRM/Admin/Page/ContactType.tpl +++ b/civicrm/templates/CRM/Admin/Page/ContactType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/EventTemplate.tpl b/civicrm/templates/CRM/Admin/Page/EventTemplate.tpl index 47f8091a4fbd8518a4c0cfd064a4b293d831a323..5cb3ce91da2d3c2d7fbd475631ddd3aa70a26196 100644 --- a/civicrm/templates/CRM/Admin/Page/EventTemplate.tpl +++ b/civicrm/templates/CRM/Admin/Page/EventTemplate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Extensions.tpl b/civicrm/templates/CRM/Admin/Page/Extensions.tpl index 7d7144f9fc02232858bc876a4499a48657ee2348..c802208a85e0826c9e481b9c0f69690802836de9 100644 --- a/civicrm/templates/CRM/Admin/Page/Extensions.tpl +++ b/civicrm/templates/CRM/Admin/Page/Extensions.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Job.tpl b/civicrm/templates/CRM/Admin/Page/Job.tpl index 049a07c840566000d969dda6cfa4cc009bb7d312..a02830cf57f7ed01053d4da4b8b9fce2419cd9e1 100644 --- a/civicrm/templates/CRM/Admin/Page/Job.tpl +++ b/civicrm/templates/CRM/Admin/Page/Job.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/JobLog.tpl b/civicrm/templates/CRM/Admin/Page/JobLog.tpl index 5dc9970b1d4058e95477854500941276ce968ec6..3f74f1df935dcb5865a606261854203428cd7b03 100644 --- a/civicrm/templates/CRM/Admin/Page/JobLog.tpl +++ b/civicrm/templates/CRM/Admin/Page/JobLog.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/LocationType.tpl b/civicrm/templates/CRM/Admin/Page/LocationType.tpl index c2d58ff333760aef691f0ffb9156af5c9e1afa43..1cbbd6e0ad9ae77f90f51676d0397ac2bb12fc8c 100644 --- a/civicrm/templates/CRM/Admin/Page/LocationType.tpl +++ b/civicrm/templates/CRM/Admin/Page/LocationType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/MailSettings.tpl b/civicrm/templates/CRM/Admin/Page/MailSettings.tpl index a8f7b004b27806eceacf60ba96e33b80229ea059..a5f543cc8570582833803a32dc7d04195503f372 100644 --- a/civicrm/templates/CRM/Admin/Page/MailSettings.tpl +++ b/civicrm/templates/CRM/Admin/Page/MailSettings.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Mapping.tpl b/civicrm/templates/CRM/Admin/Page/Mapping.tpl index 73781c95bf25b2ea6aad10c011560ec8307cab48..7688948d6afe5a08c264bb51c5caa850404794af 100644 --- a/civicrm/templates/CRM/Admin/Page/Mapping.tpl +++ b/civicrm/templates/CRM/Admin/Page/Mapping.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -33,7 +33,6 @@ <div class="crm-content-block crm-block"> {if $rows} <div id="mapping"> - <p></p> <div class="form-item"> {strip} <table cellpadding="0" cellspacing="0" border="0"> diff --git a/civicrm/templates/CRM/Admin/Page/MessageTemplates.hlp b/civicrm/templates/CRM/Admin/Page/MessageTemplates.hlp index 80aea4622972ba1607274e661ae80fc53f901d7b..fab9d1b8762914fe59793aadf9eb292e926fb829 100644 --- a/civicrm/templates/CRM/Admin/Page/MessageTemplates.hlp +++ b/civicrm/templates/CRM/Admin/Page/MessageTemplates.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl b/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl index a2795be12ed7408a06855d40e2416651d6693175..cabc8ba2a336bdf3273bfaa532638c70c82dec71 100644 --- a/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl +++ b/civicrm/templates/CRM/Admin/Page/MessageTemplates.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -81,7 +81,7 @@ </div> </div> - <div id="crm-submit-buttons">{$form.buttons.html}</div> + <div id="crm-submit-buttons" class="crm-submit-buttons">{$form.buttons.html}</div> </fieldset> {/if} diff --git a/civicrm/templates/CRM/Admin/Page/Navigation.hlp b/civicrm/templates/CRM/Admin/Page/Navigation.hlp index d8e791670ef30e58aea16736f754e10aec135e7b..57dc2097b5623ee4617ac83aa193f208c0ec8a87 100644 --- a/civicrm/templates/CRM/Admin/Page/Navigation.hlp +++ b/civicrm/templates/CRM/Admin/Page/Navigation.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Navigation.tpl b/civicrm/templates/CRM/Admin/Page/Navigation.tpl index 53df3b70d2b14e3245a5ec8537273a9109da78c0..440a975df0db3fe9b188f3b94323d6127d519125 100644 --- a/civicrm/templates/CRM/Admin/Page/Navigation.tpl +++ b/civicrm/templates/CRM/Admin/Page/Navigation.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/OptionGroup.tpl b/civicrm/templates/CRM/Admin/Page/OptionGroup.tpl index f67463f97be5329c85c37c86793c9db027fcf8bd..38de6bd8ff16d5d5b3e9db475019a20c2e2a0af2 100644 --- a/civicrm/templates/CRM/Admin/Page/OptionGroup.tpl +++ b/civicrm/templates/CRM/Admin/Page/OptionGroup.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Options.hlp b/civicrm/templates/CRM/Admin/Page/Options.hlp index 394dd296fe61082ded1a91a6d3f81dfc731388c2..236467022e211fe84cee1690cb229a40d0a529d4 100644 --- a/civicrm/templates/CRM/Admin/Page/Options.hlp +++ b/civicrm/templates/CRM/Admin/Page/Options.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Options.tpl b/civicrm/templates/CRM/Admin/Page/Options.tpl index ca300b89ddc934ccb433f3db4f2e97297f3c79eb..d1e7af21c83a6028b6bad8b1c54ee5f2f99c4c5f 100644 --- a/civicrm/templates/CRM/Admin/Page/Options.tpl +++ b/civicrm/templates/CRM/Admin/Page/Options.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -59,7 +59,11 @@ {elseif $gName eq 'participant_status'} {ts}Define statuses for event participants here (e.g. Registered, Attended, Cancelled...). You can then assign statuses and search for participants by status.{/ts} {ts}"Counted?" controls whether a person with that status is counted as participant for the purpose of controlling the Maximum Number of Participants.{/ts} {elseif $gName eq 'from_email_address'} - {ts}By default, CiviCRM uses the primary email address of the logged in user as the FROM address when sending emails to contacts. However, you can use this page to define one or more general Email Addresses that can be selected as an alternative. EXAMPLE: <em>"Client Services" <clientservices@example.org></em>{/ts} + {if $allowLoggedIn} + {ts}By default, CiviCRM uses the primary email address of the logged in user as the FROM address when sending emails to contacts. However, you can use this page to define one or more general Email Addresses that can be selected as an alternative. EXAMPLE: <em>"Client Services" <clientservices@example.org></em>{/ts} + {else} + {ts}You can use this page to define one or more general Email Addresses that can be selected as the From Address. EXAMPLE: <em>"Client Services" <clientservices@example.org></em>{/ts} + {/if} {elseif $isLocked} {ts}This option group is reserved for system use. You cannot add or delete options in this list.{/ts} {else} diff --git a/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.hlp b/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.hlp index bdf46dc1eb6c379eea5ee788d0649f6075e34f1d..91c531dfad4d327949b141539fd8ea0e2c10a73c 100644 --- a/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.hlp +++ b/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.tpl b/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.tpl index 9875d3700e4f055efacef18f9caedd64d1898de5..fe18f2e252947fb31e64444b85f64975328f476a 100644 --- a/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.tpl +++ b/civicrm/templates/CRM/Admin/Page/ParticipantStatusType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/PaymentProcessor.hlp b/civicrm/templates/CRM/Admin/Page/PaymentProcessor.hlp index ecd5c89df23b1de152aceccba65158272e9e0c0f..a3d030274e921c9146910e7fe4c2c4df96d82aa2 100644 --- a/civicrm/templates/CRM/Admin/Page/PaymentProcessor.hlp +++ b/civicrm/templates/CRM/Admin/Page/PaymentProcessor.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/PaymentProcessor.tpl b/civicrm/templates/CRM/Admin/Page/PaymentProcessor.tpl index 0a0180e3855f9e5ce5d596e72a48f2a13752f23e..3176c492ec888a7c4f019994d788323151b65aaa 100644 --- a/civicrm/templates/CRM/Admin/Page/PaymentProcessor.tpl +++ b/civicrm/templates/CRM/Admin/Page/PaymentProcessor.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/PaymentProcessorType.tpl b/civicrm/templates/CRM/Admin/Page/PaymentProcessorType.tpl index 490970325b8717c496a56d1b31359d08f06486f0..f70c19badcaf38226027fa4e29ee64479c95cb60 100644 --- a/civicrm/templates/CRM/Admin/Page/PaymentProcessorType.tpl +++ b/civicrm/templates/CRM/Admin/Page/PaymentProcessorType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/PreferencesDate.tpl b/civicrm/templates/CRM/Admin/Page/PreferencesDate.tpl index eab7b4b69619c1cc103e0a4edf6f214630a50d23..a5f89154a93ffa610d55a922797695224fea69c8 100644 --- a/civicrm/templates/CRM/Admin/Page/PreferencesDate.tpl +++ b/civicrm/templates/CRM/Admin/Page/PreferencesDate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/RelationshipType.hlp b/civicrm/templates/CRM/Admin/Page/RelationshipType.hlp index 3ec94d09b1982e555d5349f8466f52b635e57f08..4d034ecb4c0c4c4406b42d8301138a2027c8dafe 100644 --- a/civicrm/templates/CRM/Admin/Page/RelationshipType.hlp +++ b/civicrm/templates/CRM/Admin/Page/RelationshipType.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/RelationshipType.tpl b/civicrm/templates/CRM/Admin/Page/RelationshipType.tpl index af3c2f86f7b7ebf3929f38313d5535db2a45c4dd..dc4a1a9a98b488936ba434dc9a1e35e655add9b2 100644 --- a/civicrm/templates/CRM/Admin/Page/RelationshipType.tpl +++ b/civicrm/templates/CRM/Admin/Page/RelationshipType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Reminders.tpl b/civicrm/templates/CRM/Admin/Page/Reminders.tpl index a9c7a8926fe55466f9b7585ec82a4cb80adda538..498208502d1d2e4145f3ca5c7934b634de007e3b 100644 --- a/civicrm/templates/CRM/Admin/Page/Reminders.tpl +++ b/civicrm/templates/CRM/Admin/Page/Reminders.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/ScheduleReminders.hlp b/civicrm/templates/CRM/Admin/Page/ScheduleReminders.hlp index d28c95252e517670c3ad346713df7b94f99d1482..af36c4a4ab1d09e5a632e09edbdeaab2de1a1668 100644 --- a/civicrm/templates/CRM/Admin/Page/ScheduleReminders.hlp +++ b/civicrm/templates/CRM/Admin/Page/ScheduleReminders.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/ScheduleReminders.tpl b/civicrm/templates/CRM/Admin/Page/ScheduleReminders.tpl index 7690c70850519059dba915d739bc8717d467378f..ef528e81ff222af08a7ee4e71b316833f16aeabf 100644 --- a/civicrm/templates/CRM/Admin/Page/ScheduleReminders.tpl +++ b/civicrm/templates/CRM/Admin/Page/ScheduleReminders.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Admin/Page/Setting.tpl b/civicrm/templates/CRM/Admin/Page/Setting.tpl index fdbc51ee018b959f7a2876033890eb355ca267dc..e156a2b42cc0a9bd48b1d7fe5028d0a21144aa26 100644 --- a/civicrm/templates/CRM/Admin/Page/Setting.tpl +++ b/civicrm/templates/CRM/Admin/Page/Setting.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Badge/Form/Layout.tpl b/civicrm/templates/CRM/Badge/Form/Layout.tpl index a53d6c963cbb21ffc0375eef20dd0d6d1e61b95b..788a05800f325744c50be8aab226a7b8787fde3c 100644 --- a/civicrm/templates/CRM/Badge/Form/Layout.tpl +++ b/civicrm/templates/CRM/Badge/Form/Layout.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -109,7 +109,7 @@ </td> </tr> <tr class="crm-badge-layout-form-block-elements"> - <td class="label">{ts}Elements{/ts}</td> + <td class="label"><label>{ts}Elements{/ts}</label></td> <td> <table class="form-layout-compressed"> <tr> diff --git a/civicrm/templates/CRM/Badge/Page/Layout.hlp b/civicrm/templates/CRM/Badge/Page/Layout.hlp index b91d10396cf24bfc0f9721ae61b9d760544efcbb..90ef4226f371548f7013d4ddac03e2273a9619cc 100644 --- a/civicrm/templates/CRM/Badge/Page/Layout.hlp +++ b/civicrm/templates/CRM/Badge/Page/Layout.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Badge/Page/Layout.tpl b/civicrm/templates/CRM/Badge/Page/Layout.tpl index 9d53dafccaab48891376d8a4c2437509ff3d1565..d426c1d78157b18f5d3d14fb1c3e867531153ad7 100644 --- a/civicrm/templates/CRM/Badge/Page/Layout.tpl +++ b/civicrm/templates/CRM/Badge/Page/Layout.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Batch/Form/Batch.tpl b/civicrm/templates/CRM/Batch/Form/Batch.tpl index 02cd72c2e5c6578a4814d329e68d6d4f1577577a..ee625a297c774184b93354f8a635effea84ef15f 100644 --- a/civicrm/templates/CRM/Batch/Form/Batch.tpl +++ b/civicrm/templates/CRM/Batch/Form/Batch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Batch/Form/Entry.tpl b/civicrm/templates/CRM/Batch/Form/Entry.tpl index 017938abdc992c36b4ea8f05859ec5ae9785281c..60340e1fa9e02a5152be77315995d3e926f295c1 100644 --- a/civicrm/templates/CRM/Batch/Form/Entry.tpl +++ b/civicrm/templates/CRM/Batch/Form/Entry.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -38,9 +38,9 @@ <div class="status message status-warning"> <i class="crm-i fa-exclamation-triangle"></i> {ts}Total for amounts entered below does not match the expected batch total.{/ts} </div> - <div class="crm-button crm-button_qf_Entry_upload_force-save"> + <span class="crm-button crm-button_qf_Entry_upload_force-save"> {$form._qf_Entry_upload_force.html} - </div> + </span> <div class="clear"></div> {/if} <table class="form-layout-compressed batch-totals"> diff --git a/civicrm/templates/CRM/Batch/Form/Search.tpl b/civicrm/templates/CRM/Batch/Form/Search.tpl index e13b309016b517f8e89848f2c48ce8dedfbe41ec..7241500a49ab657d209cc3262288f27070be5a9a 100644 --- a/civicrm/templates/CRM/Batch/Form/Search.tpl +++ b/civicrm/templates/CRM/Batch/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -37,7 +37,7 @@ </tr> </table> </div> -<div class="crm-submit-buttons"> +<div class="action-link"> {crmButton accesskey="N" p="civicrm/batch/add" q="reset=1&action=add" id="newBatch" icon="crm-i fa-plus-circle"}{ts}New Data Entry Batch{/ts}{/crmButton}<br/> </div> <table class="crm-batch-selector"> diff --git a/civicrm/templates/CRM/Batch/Page/Batch.tpl b/civicrm/templates/CRM/Batch/Page/Batch.tpl index 2d4f541b68d623d73a5d7d63b59099450d8cd92b..bf7f4faa483d7f0fe653cc0248625b9e929f1b6a 100644 --- a/civicrm/templates/CRM/Batch/Page/Batch.tpl +++ b/civicrm/templates/CRM/Batch/Page/Batch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/Add.tpl b/civicrm/templates/CRM/Block/Add.tpl index 865e7285fa2588ed77a1e8240050443f35b4deef..cec066bf29534df411d0fadd41d95ae0ab7cde91 100644 --- a/civicrm/templates/CRM/Block/Add.tpl +++ b/civicrm/templates/CRM/Block/Add.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/Dashboard.tpl b/civicrm/templates/CRM/Block/Dashboard.tpl index bd82dc3968c87ed3c0a9eccec7ba32813405e636..cb7e906b52c6d5c6203e421e30e136f8f6d6b445 100644 --- a/civicrm/templates/CRM/Block/Dashboard.tpl +++ b/civicrm/templates/CRM/Block/Dashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/Event.tpl b/civicrm/templates/CRM/Block/Event.tpl index ad954ba27d17716b49eb0921b0ff8a633734a486..75f7af708bd4566e170f75ab1c7cf1853ee79280 100644 --- a/civicrm/templates/CRM/Block/Event.tpl +++ b/civicrm/templates/CRM/Block/Event.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/FullTextSearch.tpl b/civicrm/templates/CRM/Block/FullTextSearch.tpl index 42cf14587de150d5e0b14d2353abbd9bd80b5b80..fd3d3ba97a423e2e54811b2d5a224a49137761af 100644 --- a/civicrm/templates/CRM/Block/FullTextSearch.tpl +++ b/civicrm/templates/CRM/Block/FullTextSearch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/LangSwitch.tpl b/civicrm/templates/CRM/Block/LangSwitch.tpl index d564a8dc300e584c97cb1df927d61d0827109860..9bb253c0a4281628af8e744c6b380b989fa7c1e3 100644 --- a/civicrm/templates/CRM/Block/LangSwitch.tpl +++ b/civicrm/templates/CRM/Block/LangSwitch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/Mail.tpl b/civicrm/templates/CRM/Block/Mail.tpl index 9f79c75380314cf17dcf5f3e73c7b023892b65c5..2d7f37429e87a154f97564678b06c7e5e1d96f4e 100644 --- a/civicrm/templates/CRM/Block/Mail.tpl +++ b/civicrm/templates/CRM/Block/Mail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/RecentlyViewed.tpl b/civicrm/templates/CRM/Block/RecentlyViewed.tpl index 571bf07520f0147435bf17e6b15e27850ffd02a7..3de450d55af5dc637f125a0eef49e917820a142e 100644 --- a/civicrm/templates/CRM/Block/RecentlyViewed.tpl +++ b/civicrm/templates/CRM/Block/RecentlyViewed.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/Subject.tpl b/civicrm/templates/CRM/Block/Subject.tpl index f7b81d1a9a06b608460107bae56ad897a0955622..b005cd380a221f8a24c38b58922163a0a28fdca4 100644 --- a/civicrm/templates/CRM/Block/Subject.tpl +++ b/civicrm/templates/CRM/Block/Subject.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Block/blocks.tpl b/civicrm/templates/CRM/Block/blocks.tpl index 568cb928d32d5f7ed43aaf828cc9030d2dc1c077..bef56240785ae2b08e67f3fe2dbb496bd1268390 100644 --- a/civicrm/templates/CRM/Block/blocks.tpl +++ b/civicrm/templates/CRM/Block/blocks.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Campaign.tpl b/civicrm/templates/CRM/Campaign/Form/Campaign.tpl index e2616f14acbf95876c566eff92999cb9bcf8d192..c8745a408775223c73fe2a9b8bb25d82209b47d7 100644 --- a/civicrm/templates/CRM/Campaign/Form/Campaign.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Campaign.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Gotv.tpl b/civicrm/templates/CRM/Campaign/Form/Gotv.tpl index 9095904cb1e144b4be177b25369507b28bdf87f1..415a8c159442ab07a87b6506e1339f4b9d7bc001 100644 --- a/civicrm/templates/CRM/Campaign/Form/Gotv.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Gotv.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Petition.tpl b/civicrm/templates/CRM/Campaign/Form/Petition.tpl index f77d14021477f69c92a3776e7853b732eee531a5..7d06418585d5b07bcece50c92620136d492ae594 100644 --- a/civicrm/templates/CRM/Campaign/Form/Petition.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Petition.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Petition/Signature.tpl b/civicrm/templates/CRM/Campaign/Form/Petition/Signature.tpl index b8e88fbf9271f33af13f0a97bb18b19d4dd9a2d6..804165020480c9aaf1375094ae33020d8e7fa2b8 100644 --- a/civicrm/templates/CRM/Campaign/Form/Petition/Signature.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Petition/Signature.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/ResultOptions.tpl b/civicrm/templates/CRM/Campaign/Form/ResultOptions.tpl index ef723b93494b411b60f179b516c3ea4b3c575133..3150296f8416084938d454a0316660c95216bd7c 100644 --- a/civicrm/templates/CRM/Campaign/Form/ResultOptions.tpl +++ b/civicrm/templates/CRM/Campaign/Form/ResultOptions.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Search.tpl b/civicrm/templates/CRM/Campaign/Form/Search.tpl index 1606a0392f4a6cd025d7c8b47bd76b756e77f660..5d6e53c8548cd627a2da435ad87be5e72e239775 100644 --- a/civicrm/templates/CRM/Campaign/Form/Search.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Search/Campaign.tpl b/civicrm/templates/CRM/Campaign/Form/Search/Campaign.tpl index 067c6b2e9eb28bd223a4641b03ed120d18e626af..d2a792a869076fbf2a23554e1d0689b160587803 100644 --- a/civicrm/templates/CRM/Campaign/Form/Search/Campaign.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Search/Campaign.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Search/Common.tpl b/civicrm/templates/CRM/Campaign/Form/Search/Common.tpl index 4869ce8f37ea2d721fe5e760bfe92f2aa6f74be2..9c3b2c789161dbd4a4d476987fda472dddea12d1 100644 --- a/civicrm/templates/CRM/Campaign/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Search/Common.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -60,16 +60,25 @@ <td class="font-size12pt"> {$form.sort_name.label} </td> - <td> + <td colspan="3"> {$form.sort_name.html|crmAddClass:'twenty'} </td> - <td><label>{ts}Contact Type(s){/ts}</label><br /> + </tr> + <tr> + <td> + <label>{ts}Contact Type(s){/ts}</label> + </td> + <td> {$form.contact_type.html} </td> - <td><label>{ts}Group(s){/ts}</label> + <td> + <label>{ts}Group(s){/ts}</label> + </td> + <td > {$form.group.html} </td> </tr> + <tr> <td class="font-size12pt"> {$form.street_address.label} diff --git a/civicrm/templates/CRM/Campaign/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Campaign/Form/Search/EmptyResults.tpl index 68a109957e430e5dcc78141ef8915bb48ee46507..93c6b82b96dcc9904069c6f27a0b7fcee9e020ed 100644 --- a/civicrm/templates/CRM/Campaign/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Search/Petition.tpl b/civicrm/templates/CRM/Campaign/Form/Search/Petition.tpl index 3bc931d8f60ea2a4936e252a44e7b8d539a7be0d..ff43a3d9319aceb4438ba1792510523f24a323c4 100644 --- a/civicrm/templates/CRM/Campaign/Form/Search/Petition.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Search/Petition.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Search/Survey.tpl b/civicrm/templates/CRM/Campaign/Form/Search/Survey.tpl index c4de9a9c2c3b921c22ca08e786eb0804cbcf29f7..ae6b84317aafac4a3d5d290918a8fc1b8f345955 100644 --- a/civicrm/templates/CRM/Campaign/Form/Search/Survey.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Search/Survey.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Selector.tpl b/civicrm/templates/CRM/Campaign/Form/Selector.tpl index 7f906611912856821ea5e7245a10c9a29f57065a..ab42135866aef508878de2842ad3775e7e03aa89 100644 --- a/civicrm/templates/CRM/Campaign/Form/Selector.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Survey/Delete.tpl b/civicrm/templates/CRM/Campaign/Form/Survey/Delete.tpl index 983d58a9f4e3f22b1d1677b88f7201cb0664ab01..b222f39e0c3aeb34909b09776e809f1ba43057de 100644 --- a/civicrm/templates/CRM/Campaign/Form/Survey/Delete.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Survey/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Survey/Main.tpl b/civicrm/templates/CRM/Campaign/Form/Survey/Main.tpl index 786b327659ec49f516ab3792bd3a5b5782b49279..bafe38402a376a05d272d8e50abc2a35d62882cd 100644 --- a/civicrm/templates/CRM/Campaign/Form/Survey/Main.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Survey/Main.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Survey/Questions.tpl b/civicrm/templates/CRM/Campaign/Form/Survey/Questions.tpl index e6c27a124337217fc5521529e631a35ae7e15f66..e8d9201443dd87668ce90e6ea55dbde190c73af2 100644 --- a/civicrm/templates/CRM/Campaign/Form/Survey/Questions.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Survey/Questions.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Survey/Results.tpl b/civicrm/templates/CRM/Campaign/Form/Survey/Results.tpl index 863b17c47e6354f5f3ada1bd76011824977461d9..95424e10f4f828977234825481c8ec052de11fad 100644 --- a/civicrm/templates/CRM/Campaign/Form/Survey/Results.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Survey/Results.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -46,11 +46,11 @@ <div class="crm-accordion-body"> <table class="form-layout-compressed"> <tr> - <td class="description label">{$form.create_report.label}</td> + <td class="label">{$form.create_report.label}</td> <td>{$form.create_report.html}</td> </tr> <tr> - <td class="description label">{$form.report_title.label}</td> + <td class="label">{$form.report_title.label}</td> <td>{$form.report_title.html|crmAddClass:big}</td> </tr> </table> diff --git a/civicrm/templates/CRM/Campaign/Form/Survey/Tab.tpl b/civicrm/templates/CRM/Campaign/Form/Survey/Tab.tpl index 9f64b2e65a6c214a2579a35f46758c938eecfc91..20e69d9267638eccce48352d625da232fbfc80f9 100644 --- a/civicrm/templates/CRM/Campaign/Form/Survey/Tab.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Survey/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Task/Interview.tpl b/civicrm/templates/CRM/Campaign/Form/Task/Interview.tpl index e05ad166d011b1dc5cb42c9e6a094b1be348987b..6661217d8f4c9958668db7ee2b7691f113ca4d65 100644 --- a/civicrm/templates/CRM/Campaign/Form/Task/Interview.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Task/Interview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Task/Print.tpl b/civicrm/templates/CRM/Campaign/Form/Task/Print.tpl index 7919c41ab14ef15f8dc006d3538238607a6e8579..a538e12efae55bfbc98a960c8dd681b389e79455 100644 --- a/civicrm/templates/CRM/Campaign/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Task/Release.tpl b/civicrm/templates/CRM/Campaign/Form/Task/Release.tpl index 613b9bb622de5ed15df6a2b6bb1d1c77808b3b57..316755747b990c47d903a7ee2c79112bf8549d5f 100644 --- a/civicrm/templates/CRM/Campaign/Form/Task/Release.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Task/Release.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Task/Reserve.tpl b/civicrm/templates/CRM/Campaign/Form/Task/Reserve.tpl index 80dc5b63c830848514b53f07ec9a9b2507ee0f4a..305815b639dbb2790578922b78089cf2fc0e2dec 100644 --- a/civicrm/templates/CRM/Campaign/Form/Task/Reserve.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Task/Reserve.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/Task/Result.tpl b/civicrm/templates/CRM/Campaign/Form/Task/Result.tpl index 41e2af425d30170d92207d2df8cb59b72a6646c3..466bee7e8df2335e671f321a005d411d0fca4b34 100644 --- a/civicrm/templates/CRM/Campaign/Form/Task/Result.tpl +++ b/civicrm/templates/CRM/Campaign/Form/Task/Result.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.hlp b/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.hlp index 1cc90f375a31f156ad306cbcf0635a194bdd88cb..0f3fb85d8a7cd8af4fbd5b6c4ddec6459e925f66 100644 --- a/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.hlp +++ b/civicrm/templates/CRM/Campaign/Form/addCampaignToComponent.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Page/DashBoard.tpl b/civicrm/templates/CRM/Campaign/Page/DashBoard.tpl index d6eb0c9e7d446afd2d841d30e861a48755b30f67..db652698dea3ed0e8c1164e1b90dbd6290429c39 100644 --- a/civicrm/templates/CRM/Campaign/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Campaign/Page/DashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Page/Petition.tpl b/civicrm/templates/CRM/Campaign/Page/Petition.tpl index 6a91d2ad43c257fc69bff8609573e8e6c3be1860..af10925dcadf36cba45c78077b9e9c20e25f6477 100644 --- a/civicrm/templates/CRM/Campaign/Page/Petition.tpl +++ b/civicrm/templates/CRM/Campaign/Page/Petition.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Page/Petition/Confirm.tpl b/civicrm/templates/CRM/Campaign/Page/Petition/Confirm.tpl index aeb205b9f36d8a411814d0a83c6b80a9bfd8b3b7..67cf67ef19169423c448385b47b46be307eb8101 100644 --- a/civicrm/templates/CRM/Campaign/Page/Petition/Confirm.tpl +++ b/civicrm/templates/CRM/Campaign/Page/Petition/Confirm.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Page/Petition/ThankYou.tpl b/civicrm/templates/CRM/Campaign/Page/Petition/ThankYou.tpl index 64058868378d5c72bac9525c781390bcbdf3bc12..d05ed19df0385251372d52bf52e20953a1837a4a 100644 --- a/civicrm/templates/CRM/Campaign/Page/Petition/ThankYou.tpl +++ b/civicrm/templates/CRM/Campaign/Page/Petition/ThankYou.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Campaign/Page/Vote.tpl b/civicrm/templates/CRM/Campaign/Page/Vote.tpl index f0b5537e1a3bc7442ff51dd08c3c24f28c5fbe57..3e9879c8f0c87dfb373f2763b0606a9d377d1b11 100644 --- a/civicrm/templates/CRM/Campaign/Page/Vote.tpl +++ b/civicrm/templates/CRM/Campaign/Page/Vote.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Audit/Audit.tpl b/civicrm/templates/CRM/Case/Audit/Audit.tpl index f69bf02b832ca8bb1fc76f751dce79162b177dbb..7590a03286c40c280657b042b75f301d8c2eb927 100644 --- a/civicrm/templates/CRM/Case/Audit/Audit.tpl +++ b/civicrm/templates/CRM/Case/Audit/Audit.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Audit/Report.tpl b/civicrm/templates/CRM/Case/Audit/Report.tpl index 6cbc3d3ef979ad091f1d976fe4e0be1e43ef8db2..a610e9ea9ab96eabaf9e058a60d416ac61ddf7b7 100644 --- a/civicrm/templates/CRM/Case/Audit/Report.tpl +++ b/civicrm/templates/CRM/Case/Audit/Report.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Activity.tpl b/civicrm/templates/CRM/Case/Form/Activity.tpl index 3ee462da20d41ce3e223ee8993d169727171698c..c30c34f1438ea43513b65be85ca7ae8f1897a71d 100644 --- a/civicrm/templates/CRM/Case/Form/Activity.tpl +++ b/civicrm/templates/CRM/Case/Form/Activity.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseStartDate.tpl b/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseStartDate.tpl index 9caba89b1d20c444ec502f5a7b26463c50b11e46..e07aebd8a265d0dd80a06d81d1c2262e97140df1 100644 --- a/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseStartDate.tpl +++ b/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseStartDate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseStatus.tpl b/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseStatus.tpl index 5070b1d57c5a305ecb8244d83f13e2b70926de01..4eee6962163bb4431dcbb85492422500ee8e1e7c 100644 --- a/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseStatus.tpl +++ b/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseStatus.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseType.tpl b/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseType.tpl index 283c323adb93069ded5dbb7880bb14535630c512..09427e9d99e41d4ac72df2e0fb3679096998ee28 100644 --- a/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseType.tpl +++ b/civicrm/templates/CRM/Case/Form/Activity/ChangeCaseType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Activity/LinkCases.tpl b/civicrm/templates/CRM/Case/Form/Activity/LinkCases.tpl index 5d8abd125eb5af54574b63c0157d3bfc5626ad6a..69bd93d9f440773247fd2567772fd6335f430878 100644 --- a/civicrm/templates/CRM/Case/Form/Activity/LinkCases.tpl +++ b/civicrm/templates/CRM/Case/Form/Activity/LinkCases.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Activity/OpenCase.tpl b/civicrm/templates/CRM/Case/Form/Activity/OpenCase.tpl index ab9ba07df3534c74589093572011e370c73b123a..d2675f99b3a341a106578b1d83f89584bdb9baf7 100644 --- a/civicrm/templates/CRM/Case/Form/Activity/OpenCase.tpl +++ b/civicrm/templates/CRM/Case/Form/Activity/OpenCase.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/ActivityTab.tpl b/civicrm/templates/CRM/Case/Form/ActivityTab.tpl index b1cedf4f086e671574bb73cf5fa7e297cf7c575d..14796de4616231fc3368d632a70fdbb3c483dd1f 100644 --- a/civicrm/templates/CRM/Case/Form/ActivityTab.tpl +++ b/civicrm/templates/CRM/Case/Form/ActivityTab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/ActivityToCase.tpl b/civicrm/templates/CRM/Case/Form/ActivityToCase.tpl index c7f1eaf53e854c96f88735343aee4fd6387d3a60..2a24cf7639597566e56cc8cb58ef205cdb8927de 100644 --- a/civicrm/templates/CRM/Case/Form/ActivityToCase.tpl +++ b/civicrm/templates/CRM/Case/Form/ActivityToCase.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/ActivityView.tpl b/civicrm/templates/CRM/Case/Form/ActivityView.tpl index 7d1ea9569a5151d149cabaee97587fd85670c126..0d4194dd27a1ed145cd5dc300821b12c74261d35 100644 --- a/civicrm/templates/CRM/Case/Form/ActivityView.tpl +++ b/civicrm/templates/CRM/Case/Form/ActivityView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Case.hlp b/civicrm/templates/CRM/Case/Form/Case.hlp index 043624d98635191b377654ec7113f83e346f2f54..d9fbedebf7eaaaa860c6ece9fb9970e06df470eb 100644 --- a/civicrm/templates/CRM/Case/Form/Case.hlp +++ b/civicrm/templates/CRM/Case/Form/Case.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Case.tpl b/civicrm/templates/CRM/Case/Form/Case.tpl index f16c78fdffdb3b5dd98324f1e3e61789c93e92e5..8f1339ce6644ca16972cbc15439f812d81fad50b 100644 --- a/civicrm/templates/CRM/Case/Form/Case.tpl +++ b/civicrm/templates/CRM/Case/Form/Case.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/CaseFilter.tpl b/civicrm/templates/CRM/Case/Form/CaseFilter.tpl index fdf156d91c8422c14da60b7d815f6b77368753d4..b2b7ce348e530d0011452894748120a99f1cb69c 100644 --- a/civicrm/templates/CRM/Case/Form/CaseFilter.tpl +++ b/civicrm/templates/CRM/Case/Form/CaseFilter.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/CaseView.tpl b/civicrm/templates/CRM/Case/Form/CaseView.tpl index 351ee62afb61dfa2bfc81e06fdd010362c53f350..21704601c81818d05127950a5517cbeaf00ffded 100644 --- a/civicrm/templates/CRM/Case/Form/CaseView.tpl +++ b/civicrm/templates/CRM/Case/Form/CaseView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/CustomData.tpl b/civicrm/templates/CRM/Case/Form/CustomData.tpl index ffd232200cb2ea0b8df9768157bc57a2c957a2c6..9bb2efe5661605be726a9f9a31bbd401454a5271 100644 --- a/civicrm/templates/CRM/Case/Form/CustomData.tpl +++ b/civicrm/templates/CRM/Case/Form/CustomData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/EditClient.tpl b/civicrm/templates/CRM/Case/Form/EditClient.tpl index 9a28ebd764d875eb26910dec45a6a862dd04162d..57304bf9268966a1b2ea3d9ca6deb8fce411cc12 100644 --- a/civicrm/templates/CRM/Case/Form/EditClient.tpl +++ b/civicrm/templates/CRM/Case/Form/EditClient.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Report.tpl b/civicrm/templates/CRM/Case/Form/Report.tpl index a5b379551978b348753c6b1cd1ac0a7cb2ce61a6..b0ffe221d28f1730adee384d54adb9dbc6012f4b 100644 --- a/civicrm/templates/CRM/Case/Form/Report.tpl +++ b/civicrm/templates/CRM/Case/Form/Report.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Search.tpl b/civicrm/templates/CRM/Case/Form/Search.tpl index 630f1a3ffc6aa0b9ea3058fea8d1ee023e596468..b3f9c6f9a80a7b68a7a23c546c2435a15bd42a27 100644 --- a/civicrm/templates/CRM/Case/Form/Search.tpl +++ b/civicrm/templates/CRM/Case/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Search/AdvancedSearchPane.tpl b/civicrm/templates/CRM/Case/Form/Search/AdvancedSearchPane.tpl index 4402387c8502f1ede2d100c86d10d57fb277b6a7..1744c25ac1c2e9f7f0a50aaf2c332b301f85ccb1 100644 --- a/civicrm/templates/CRM/Case/Form/Search/AdvancedSearchPane.tpl +++ b/civicrm/templates/CRM/Case/Form/Search/AdvancedSearchPane.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Search/Common.tpl b/civicrm/templates/CRM/Case/Form/Search/Common.tpl index 4423f75d790a5851511440595094b6de5ed4629c..9050c4dc169647907d03123f28bbd0de973b8d8e 100644 --- a/civicrm/templates/CRM/Case/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Case/Form/Search/Common.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Case/Form/Search/EmptyResults.tpl index 0a30c00218cac7c9c936a0d0d2bae203033f46e8..01181d11d7ecba1c2ea31d11250c405a0f8b36d3 100644 --- a/civicrm/templates/CRM/Case/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Case/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Selector.tpl b/civicrm/templates/CRM/Case/Form/Selector.tpl index 2bfd6d26cbd8b670650418554d2102937ac596ca..b465a5ef9d888d645dfd9ea7c8b3a3dc533dbc3e 100644 --- a/civicrm/templates/CRM/Case/Form/Selector.tpl +++ b/civicrm/templates/CRM/Case/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Task.tpl b/civicrm/templates/CRM/Case/Form/Task.tpl index e633e5b7e18d179ed8ce505b763f31fca0826fa8..c8703ed02075a10e39bd69da09f0ee8203bff54d 100644 --- a/civicrm/templates/CRM/Case/Form/Task.tpl +++ b/civicrm/templates/CRM/Case/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Task/Batch.tpl b/civicrm/templates/CRM/Case/Form/Task/Batch.tpl new file mode 100644 index 0000000000000000000000000000000000000000..cb492e4c430c64d4c1505d269d224c4ede639e6f --- /dev/null +++ b/civicrm/templates/CRM/Case/Form/Task/Batch.tpl @@ -0,0 +1,26 @@ +{* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ +*} +{include file="CRM/Core/Form/Task/Batch.tpl"} \ No newline at end of file diff --git a/civicrm/templates/CRM/Case/Form/Task/Delete.tpl b/civicrm/templates/CRM/Case/Form/Task/Delete.tpl index f74bd879a21cfaf1e1f96e573ef7d544bbe29a21..c5e75b66f744ae5120773c8730244031343e1bdb 100644 --- a/civicrm/templates/CRM/Case/Form/Task/Delete.tpl +++ b/civicrm/templates/CRM/Case/Form/Task/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Task/PDF.tpl b/civicrm/templates/CRM/Case/Form/Task/PDF.tpl index f47d7cefbf4db8eebdbf447743811e8fd9aed09d..2969b3b8a0868ac50fe9de865c7fa9c74d133185 100644 --- a/civicrm/templates/CRM/Case/Form/Task/PDF.tpl +++ b/civicrm/templates/CRM/Case/Form/Task/PDF.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Task/PickProfile.tpl b/civicrm/templates/CRM/Case/Form/Task/PickProfile.tpl new file mode 100644 index 0000000000000000000000000000000000000000..76ef91896a6025dbe52b2b753c2a8a9156256e71 --- /dev/null +++ b/civicrm/templates/CRM/Case/Form/Task/PickProfile.tpl @@ -0,0 +1,26 @@ +{* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ +*} +{include file="CRM/Core/Form/Task/PickProfile.tpl"} diff --git a/civicrm/templates/CRM/Case/Form/Task/Print.tpl b/civicrm/templates/CRM/Case/Form/Task/Print.tpl index ed5d271f83b424b8ee7637babff491608591cb41..813405f0cbea66374f3d396afb26b9b33ef4a101 100644 --- a/civicrm/templates/CRM/Case/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Case/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/Task/Restore.tpl b/civicrm/templates/CRM/Case/Form/Task/Restore.tpl index 78452589880acada4f7a230593b0cc15f41c6941..264d4991662c44d1ce706a8f44edfa3b6d05c155 100644 --- a/civicrm/templates/CRM/Case/Form/Task/Restore.tpl +++ b/civicrm/templates/CRM/Case/Form/Task/Restore.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Form/ViewRelatedCases.tpl b/civicrm/templates/CRM/Case/Form/ViewRelatedCases.tpl index 7b6b0efc01292b42a6a13ac2274d763627840b79..493087853f6b17a89434019859104849708f67c0 100644 --- a/civicrm/templates/CRM/Case/Form/ViewRelatedCases.tpl +++ b/civicrm/templates/CRM/Case/Form/ViewRelatedCases.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Page/CaseDetails.tpl b/civicrm/templates/CRM/Case/Page/CaseDetails.tpl index 09aa34a16dbd7aeb64c26c314c1b483ca55f13cf..eeee9e8e176f3f50fc1331517d8cc5277fbae879 100644 --- a/civicrm/templates/CRM/Case/Page/CaseDetails.tpl +++ b/civicrm/templates/CRM/Case/Page/CaseDetails.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Page/ConfigureError.tpl b/civicrm/templates/CRM/Case/Page/ConfigureError.tpl index 846b3696b40b881148e032a665cceff1a2e8cf8d..6e16d6457e5af28a659d57b0ac6ac86ed93e0e05 100644 --- a/civicrm/templates/CRM/Case/Page/ConfigureError.tpl +++ b/civicrm/templates/CRM/Case/Page/ConfigureError.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Page/CustomDataView.tpl b/civicrm/templates/CRM/Case/Page/CustomDataView.tpl index e1f68b9b7647176880b8ce8f27c410132e9b6088..e00108d734f245873cbdb6056e10f7ae3d55d468 100644 --- a/civicrm/templates/CRM/Case/Page/CustomDataView.tpl +++ b/civicrm/templates/CRM/Case/Page/CustomDataView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Page/DashBoard.tpl b/civicrm/templates/CRM/Case/Page/DashBoard.tpl index 082b0323b52670eb4dae1bc106e2eeed92a43caa..e42331b5296159ce597218fbcb5467117dad24a8 100644 --- a/civicrm/templates/CRM/Case/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Case/Page/DashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Page/DashboardSelector.tpl b/civicrm/templates/CRM/Case/Page/DashboardSelector.tpl index 70349625ffbb0b44e8d27097a20b458b6816dc62..4681a7fb5073de0c96f8a3c16229c6b31112ca3d 100644 --- a/civicrm/templates/CRM/Case/Page/DashboardSelector.tpl +++ b/civicrm/templates/CRM/Case/Page/DashboardSelector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/Page/Tab.tpl b/civicrm/templates/CRM/Case/Page/Tab.tpl index a5ff8653d8edd928dcd3d5763e19d25a43cb423e..465feefdbc376b487214e0918b0166ea8cca97de 100644 --- a/civicrm/templates/CRM/Case/Page/Tab.tpl +++ b/civicrm/templates/CRM/Case/Page/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Case/XMLProcessor/Report.tpl b/civicrm/templates/CRM/Case/XMLProcessor/Report.tpl index bbe76d94a0b0577b40b182b61bb2038755d14f7c..53a5d66c9ee3c3efe4be727d72e00fa3c020a073 100644 --- a/civicrm/templates/CRM/Case/XMLProcessor/Report.tpl +++ b/civicrm/templates/CRM/Case/XMLProcessor/Report.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Contact.hlp b/civicrm/templates/CRM/Contact/Form/Contact.hlp index 7d300a51200db32974ad4fcc2394437b8939c77e..2fe6220c6a778c81624d54c836756123f179216b 100644 --- a/civicrm/templates/CRM/Contact/Form/Contact.hlp +++ b/civicrm/templates/CRM/Contact/Form/Contact.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Contact.tpl b/civicrm/templates/CRM/Contact/Form/Contact.tpl index e6c56f2608d27ca9780332aa7a447c07f8e136f3..6b59ec94f83e2c7815590033e9cfabf855351fec 100644 --- a/civicrm/templates/CRM/Contact/Form/Contact.tpl +++ b/civicrm/templates/CRM/Contact/Form/Contact.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/CustomData.tpl b/civicrm/templates/CRM/Contact/Form/CustomData.tpl index ef8eeb320e3ba2fe5f334b2278c2cceb50610531..fe03951dbad5e5f9602c9626fa3b282e2eab05aa 100644 --- a/civicrm/templates/CRM/Contact/Form/CustomData.tpl +++ b/civicrm/templates/CRM/Contact/Form/CustomData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/DedupeFind.tpl b/civicrm/templates/CRM/Contact/Form/DedupeFind.tpl index 7c1034207792567479d024f74556403c5a27016e..90570703f812ec76169e8ecb1c75b1637bce7525 100644 --- a/civicrm/templates/CRM/Contact/Form/DedupeFind.tpl +++ b/civicrm/templates/CRM/Contact/Form/DedupeFind.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/DedupeRules.tpl b/civicrm/templates/CRM/Contact/Form/DedupeRules.tpl index bb91f94922b62ee646e4e475ccc2ca2257af415a..97e87f6cf8529a3b3af048db0547f3f868c467d6 100644 --- a/civicrm/templates/CRM/Contact/Form/DedupeRules.tpl +++ b/civicrm/templates/CRM/Contact/Form/DedupeRules.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Domain.hlp b/civicrm/templates/CRM/Contact/Form/Domain.hlp index 0a41cc92325f74f8368a834a3e9f9e7ac8a3c1b8..1487060b4f9bfd2681d4737343c12a03b938f75d 100644 --- a/civicrm/templates/CRM/Contact/Form/Domain.hlp +++ b/civicrm/templates/CRM/Contact/Form/Domain.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Domain.tpl b/civicrm/templates/CRM/Contact/Form/Domain.tpl index 81affcc9d38f56ab30beeaf6f4141f9e58c39034..614820741ad4724975d2d2d747fc8a69ae684de1 100644 --- a/civicrm/templates/CRM/Contact/Form/Domain.tpl +++ b/civicrm/templates/CRM/Contact/Form/Domain.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address.tpl index 7d631c233b8ffbc75d0ab33dd64df50ef157be4e..f349211b2fe52bf6bf8abc11e75c864b51652123 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/CustomData.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/CustomData.tpl index c3640271dfc50ffc2d6e74772f3b5429667cf3b6..5f2b6a2f3d2f3de54789afba0fc4abad47be110a 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/CustomData.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/CustomData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/CustomField.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/CustomField.tpl index 06febd14c99795e1bfe0e59f937ba60a701e4891..3ce814cc997a73e8a025d50c5a67338d9e14ff62 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/CustomField.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/CustomField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/address_name.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/address_name.tpl index 49cf298598b7efda43a049a380d7d32daeb658fb..c880bd91c6aa6e01206c16735e2edf78cee5c9fe 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/address_name.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/address_name.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/city_postal_code.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/city_postal_code.tpl index 4c5d316b9f845f72fdd75d04e151a89b956462bd..dcc3a6c4773eb5b2331c2847a24b14858a452336 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/city_postal_code.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/city_postal_code.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/country_state_province.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/country_state_province.tpl index dcc38f151d059e98e9a1f9b4cd4d2e3d562fa482..d5e563b9b98e6a3e5536c785bc3e8c7ced3603d1 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/country_state_province.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/country_state_province.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/county.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/county.tpl index 7ee8c1b29eed154a65956349cd4841a1c5a058fb..137f74ac1d458388f1d5a5bb17d056e1902d451b 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/county.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/county.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/geo_code.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/geo_code.tpl index e4d98463062b66d545db44d5f583f3a7f5141cd4..052d4cc86b0840621193585a12361a911eac5caa 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/geo_code.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/geo_code.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/street_address.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/street_address.tpl index 39c3496a88975955110131af3c39012aa0a2f898..d635797bab8517419835687a523b665bf7342db4 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/street_address.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/street_address.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_1.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_1.tpl index e0159ab024ee8e8f6174c03135ee1f4638affef7..871edb93b8de9a6e25a8c78298c5813b223b4090 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_1.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_1.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_2.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_2.tpl index 634a1feec871b5f337b9843a33070206ac982c13..36c44a361f7143fb667cff353941f535f692d006 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_2.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_2.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_3.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_3.tpl index ec46b6053b3ab2b40e82a851af84bf2f93578f61..2c98345031a36ec52b823b382c021f3e08e8ddd7 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_3.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Address/supplemental_address_3.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/CommunicationPreferences.js.tpl b/civicrm/templates/CRM/Contact/Form/Edit/CommunicationPreferences.js.tpl index 589006c980e8351685b32e7826602ac2204f80cf..a6d8c8b4d926ccb1f2554bb6a8699c4ee89fba23 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/CommunicationPreferences.js.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/CommunicationPreferences.js.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/CommunicationPreferences.tpl b/civicrm/templates/CRM/Contact/Form/Edit/CommunicationPreferences.tpl index 054e87c812ff6939abfb28d7e523d1568a0a2841..e9c4e3c3a92f3b5428244f4b89a13f1a5d95f7f1 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/CommunicationPreferences.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/CommunicationPreferences.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/CustomData.tpl b/civicrm/templates/CRM/Contact/Form/Edit/CustomData.tpl index 243504eb583469f1395f8322a3947f1dfd0b1e5c..73d994396bdc7433cef15af18de3110f2e8240a0 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/CustomData.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/CustomData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Demographics.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Demographics.tpl index 1b6113be306913c8353466b832105a7ef19ca164..afcb2731c2599d7fb92a56d01a41c0f8414772c2 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Demographics.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Demographics.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Email.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Email.tpl index 59d122b16a8068ddecd02150fff652a78687a4b0..94323e8dafb77e017fc12ae10f033f9f634fc99d 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Email.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Household.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Household.tpl index 3cd7716f351969e918b0c0104a27641bab016002..20adf26f8313b645164a0de58e7a4a4b7e38891e 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Household.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Household.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/IM.tpl b/civicrm/templates/CRM/Contact/Form/Edit/IM.tpl index 49226dcb515d476a5e983d585264d7432fc96f3f..996133e1225f35ab6bdeb72a1226cfb8019bd355 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/IM.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/IM.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl index 39d18e6d718f33be0e6d2470d9f4e00112433973..75e64e8e03baea9a762cc6c59bd89e0367296e4c 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Individual.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Notes.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Notes.tpl index 1962120993ed33d38740dcad75256aa25349868a..60e80f9387eea523b9ead98bd444ce78f7878939 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Notes.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Notes.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/OpenID.tpl b/civicrm/templates/CRM/Contact/Form/Edit/OpenID.tpl index 21da9a4d6c6af25ab87361c00c15a075efb8c0d2..d5f286a4e38af1fca2def00007cc1ab7497cb02a 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/OpenID.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/OpenID.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Organization.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Organization.tpl index 6ae0e5b0d8dcfd4d4750442800da85ea1e0bee74..c42419fac9c2ea118c44f6118ae57d8aa6932d16 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Organization.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Organization.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Phone.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Phone.tpl index 55f08926f842709a822d78954d7882a23c3fa693..184c0a46083d88c4670f91e785005990f9edc12c 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Phone.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Phone.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -56,7 +56,7 @@ {if !$addBlock} <tr> <td colspan="4"> - <a id='addPhone' href="#" title={ts}Add{/ts} onClick="buildAdditionalBlocks( 'Phone', '{$className}');return false;">{ts}Add another Phone number{/ts}</a> + <a id='addPhone' href="#" title={ts}Add{/ts} onClick="buildAdditionalBlocks( 'Phone', '{$className}');return false;">{ts}Add another phone number{/ts}</a> </td> </tr> {/if} diff --git a/civicrm/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl b/civicrm/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl index e13c4c50d23f2839436b903ac302a6b7029d9d81..dd726fc421b6ea6ba9a24143b0893313d00f48fe 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/TagsAndGroups.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Tagtree.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Tagtree.tpl index cc5a8849347e69be61720ce1a1c7d9df4d81670d..7866184299b16964a7f4c9bcfef8c587d359245b 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Tagtree.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Tagtree.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Edit/Website.tpl b/civicrm/templates/CRM/Contact/Form/Edit/Website.tpl index c4ec37f6fd28a25f77cca0fb826f458ef420b25d..f4cae01a1fb5f78f4d86ee06411a853952a2a115 100644 --- a/civicrm/templates/CRM/Contact/Form/Edit/Website.tpl +++ b/civicrm/templates/CRM/Contact/Form/Edit/Website.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/GroupContact.tpl b/civicrm/templates/CRM/Contact/Form/GroupContact.tpl index b66e704a73118cfa719ef058e6a391a306df4261..95e2eb37d95e0862368c434201363f1ac14e4e63 100644 --- a/civicrm/templates/CRM/Contact/Form/GroupContact.tpl +++ b/civicrm/templates/CRM/Contact/Form/GroupContact.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/Address.tpl b/civicrm/templates/CRM/Contact/Form/Inline/Address.tpl index 6ff608b53ea5f018e0d48b07e170cf33303b82b7..75042ca6ece42c85a221d05112d8122106d0c75d 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/Address.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/Address.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/CommunicationPreferences.tpl b/civicrm/templates/CRM/Contact/Form/Inline/CommunicationPreferences.tpl index bde538b1e3f3cbe32283c9d5dbc7603eaa713a2e..ff8b07cd60cd5d268d7a524c404955110139280c 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/CommunicationPreferences.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/CommunicationPreferences.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/ContactInfo.tpl b/civicrm/templates/CRM/Contact/Form/Inline/ContactInfo.tpl index 685ec6983add3ce2af6205b9100d6dca80995e0c..e91e157f7e87cfbdcc01447317b5234696f3c860 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/ContactInfo.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/ContactInfo.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl b/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl index ab0696fac595e80d923cb4252d3d63c53a9a7312..d2f8ebe784ee60c7b77cd7d36062e257a80fb030 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/ContactName.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/CustomData.tpl b/civicrm/templates/CRM/Contact/Form/Inline/CustomData.tpl index 1af9950866952c63d3501c7207739acb2c45f8a6..02d657b2fe77e83479ec52199e962c05bc1756b4 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/CustomData.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/CustomData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/Demographics.tpl b/civicrm/templates/CRM/Contact/Form/Inline/Demographics.tpl index dbc3b9dbc14c1f648512c47bb2ed04681d3ebd73..2e6605f9f08d184f4db0d9c67e31823bae3d4fc4 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/Demographics.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/Demographics.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/Email.tpl b/civicrm/templates/CRM/Contact/Form/Inline/Email.tpl index d70c3d44c00af07112dbe9433261c1b8a8a0532d..be0767213e28c507f7bfdcff446dc5d5746a85bf 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/Email.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/IM.tpl b/civicrm/templates/CRM/Contact/Form/Inline/IM.tpl index 9ec782d773f70f90434e21f34c8fa5489964518c..22a6b2424cc1e17ad7fa0f4a109dd7b7701a565d 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/IM.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/IM.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/OpenID.tpl b/civicrm/templates/CRM/Contact/Form/Inline/OpenID.tpl index 3070fd607c59847b3ea492459f4f7572b2b5a631..972e280ad67093530e0104b28275ef4042527f7e 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/OpenID.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/OpenID.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/Phone.tpl b/civicrm/templates/CRM/Contact/Form/Inline/Phone.tpl index 627aeba3a0c15140dda07e76e6a261b682e2cf6d..074c9afee727daaefd09c8ac4d23697c03d1f30c 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/Phone.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/Phone.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Inline/Website.tpl b/civicrm/templates/CRM/Contact/Form/Inline/Website.tpl index 5e261158653b7b27ab774cfedb84ea8bfcfce650..a3060909caabd88e52816837cd7dfd4452157670 100644 --- a/civicrm/templates/CRM/Contact/Form/Inline/Website.tpl +++ b/civicrm/templates/CRM/Contact/Form/Inline/Website.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Merge.hlp b/civicrm/templates/CRM/Contact/Form/Merge.hlp index bedfc7b3d8095e01027f247163869debed8e00c3..8a39a0c98b62acf0d6881a8fe66ce39320590c2d 100644 --- a/civicrm/templates/CRM/Contact/Form/Merge.hlp +++ b/civicrm/templates/CRM/Contact/Form/Merge.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Merge.tpl b/civicrm/templates/CRM/Contact/Form/Merge.tpl index ca2de4c87ad5302fc901725ae452550a289a5d93..ce3a6ebd3b1bcee685492a138c1964a07248c9fd 100644 --- a/civicrm/templates/CRM/Contact/Form/Merge.tpl +++ b/civicrm/templates/CRM/Contact/Form/Merge.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/OnBehalfOf.tpl b/civicrm/templates/CRM/Contact/Form/OnBehalfOf.tpl index 653420f73912cdca7b6d21dd760694f820e6cb22..207e9c0654ca2b84c1e5a86ccd3198cbdd30a69a 100644 --- a/civicrm/templates/CRM/Contact/Form/OnBehalfOf.tpl +++ b/civicrm/templates/CRM/Contact/Form/OnBehalfOf.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/RelatedContact.tpl b/civicrm/templates/CRM/Contact/Form/RelatedContact.tpl index 4f9cd7618b5de6ca1ce1a68d2ecd3b70febeefb0..947bac84c9e1585bd4e82a118ea4f0f7e2f5eb79 100644 --- a/civicrm/templates/CRM/Contact/Form/RelatedContact.tpl +++ b/civicrm/templates/CRM/Contact/Form/RelatedContact.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Relationship.tpl b/civicrm/templates/CRM/Contact/Form/Relationship.tpl index 28f496c22a7dceaf3d9cc34364c526941119f948..77a3244014735d9a69e69071cc47b124be11895f 100644 --- a/civicrm/templates/CRM/Contact/Form/Relationship.tpl +++ b/civicrm/templates/CRM/Contact/Form/Relationship.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Advanced.hlp b/civicrm/templates/CRM/Contact/Form/Search/Advanced.hlp index d9e25dd5f959f87295804489ccb28134e22246b1..b183ab6b852bfc4b490b59a85f3086ec6a2aa885 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Advanced.hlp +++ b/civicrm/templates/CRM/Contact/Form/Search/Advanced.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Advanced.tpl b/civicrm/templates/CRM/Contact/Form/Search/Advanced.tpl index 112a044df01b16f51a96a5fcbd4f6ecdca4628cf..a9a3f61a479f14c55da4527dc792ef7fdfc64495 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Advanced.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Advanced.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/AdvancedCriteria.tpl b/civicrm/templates/CRM/Contact/Form/Search/AdvancedCriteria.tpl index 76da30fc3561c9db3d7ecf0e406ef29ad6c7f846..8f2f0acb8c058856e8e51a7cef4b5d3e8dd61f09 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/AdvancedCriteria.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/AdvancedCriteria.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Basic.hlp b/civicrm/templates/CRM/Contact/Form/Search/Basic.hlp index f6e7d08a00d44479887aed6e536f3029215cad04..d7580546b21dd62fd755e60214121c9d40e5462a 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Basic.hlp +++ b/civicrm/templates/CRM/Contact/Form/Search/Basic.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Basic.tpl b/civicrm/templates/CRM/Contact/Form/Search/Basic.tpl index c5f5d2cef61351b0578965ac03c9cc0e3c004de0..ea9c89326107c3c9e318520c8af28736eeb01d7f 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Basic.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Basic.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/BasicCriteria.tpl b/civicrm/templates/CRM/Contact/Form/Search/BasicCriteria.tpl index c27f0f086cb6e4595cd1ddc6d3e8b312fa953cd6..0e48d148c66bb4a7893812b77c21bbf45ffdf37c 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/BasicCriteria.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/BasicCriteria.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Builder.hlp b/civicrm/templates/CRM/Contact/Form/Search/Builder.hlp index e633bcf7522507103b5b0c3cdb31c61821f24bff..3a7d844650d490e8883fd2d74d30b606e4f23103 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Builder.hlp +++ b/civicrm/templates/CRM/Contact/Form/Search/Builder.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Builder.tpl b/civicrm/templates/CRM/Contact/Form/Search/Builder.tpl index 694d457872d78ae902fa98359e11a417ca993fec..0c86a8ef1c81aad9a6bc7ecc7a0c6da73a6b11a1 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Builder.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Builder.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -35,7 +35,7 @@ {* Table for adding search criteria. *} {include file="CRM/Contact/Form/Search/table.tpl"} <div class="clear"></div> - <div id="crm-submit-buttons"> + <div id="crm-submit-buttons" class="crm-submit-buttons"> {$form.buttons.html} </div> </div> diff --git a/civicrm/templates/CRM/Contact/Form/Search/ContactSearchFields.tpl b/civicrm/templates/CRM/Contact/Form/Search/ContactSearchFields.tpl index 53aef6858c41abd8a3c253384fba3560245a6367..dded60f42c52adf101c568b375722990d78f3232 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/ContactSearchFields.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/ContactSearchFields.tpl @@ -1,12 +1,16 @@ <tr> <td class="font-size12pt"> - {$form.sort_name.label} {$form.sort_name.html|crmAddClass:'twenty'} + {$form.sort_name.label} + <br> + {$form.sort_name.html|crmAddClass:'twenty'} </td> <td>{$form.buttons.html}</td> </tr> <tr> {if $form.contact_tags} - <td><label>{$form.contact_tags.label}</label> + <td> + <label>{$form.contact_tags.label}</label> + <br> {$form.contact_tags.html} </td> {else} @@ -14,7 +18,9 @@ {/if} {if $form.group} - <td><label>{$form.group.label}</label> + <td> + <label>{$form.group.label}</label> + <br> {$form.group.html} </td> {else} @@ -22,7 +28,11 @@ {/if} </tr> <tr class="crm-event-search-form-block-deleted_contacts"> - <td>{$form.contact_type.label} {$form.contact_type.html}<br></td> + <td> + {$form.contact_type.label} + <br> + {$form.contact_type.html} + </td> <td> {if $form.deleted_contacts} {$form.deleted_contacts.html} {$form.deleted_contacts.label} diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Activity.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Activity.tpl index d4e47ed95ee305a2c730d7d52210ceb344e7b298..931405104f28ffd20127340131431878d8ee992c 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Activity.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Activity.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Basic.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Basic.tpl index 2e9573912435148ea0a7a6afe6f0f5965a13f2b1..212655dd57eabffb7a81c7b098ab45c35f5df8f2 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Basic.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Basic.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/ChangeLog.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/ChangeLog.tpl index b0ee3828649c4f67fc1dc3efe8c732edba93b8c3..42d294d6ada09a0aeb51122ccb985b200d69d7e9 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/ChangeLog.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/ChangeLog.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -26,24 +26,24 @@ <div id="changelog" class="form-item"> <table class="form-layout"> <tr> - <td> - <span class="modifiedBy"><label>{ts}Modified By{/ts}</label></span> - <span class="hiddenElement addedBy"><label>{ts}Added By{/ts}</label></span> - <br/> - {$form.changed_by.html} - </td> - <td width="100%"> + <td colspan="2"> {$form.log_date.html} - <br/> </td> </tr> <tr> + <td width="30%"> + <span class="modifiedBy"><label>{ts}Modified By{/ts}</label></span> + <span class="hiddenElement addedBy"><label>{ts}Added By{/ts}</label></span> + </td> <td> <span class="modifiedBy"><label>{ts}Modified Between{/ts}</label></span> <span class="hiddenElement addedBy"><label>{ts}Added Between{/ts}</label></span> </td> </tr> <tr> + <td> + {$form.changed_by.html} + </td> {include file="CRM/Core/DateRange.tpl" fieldName="log_date" from='_low' to='_high'} </tr> </table> diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Custom.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Custom.tpl index 039bd58389eef01794e7d2ad9d84890e43b4dafc..c6b1f4fc35eac43a38697346adfa96405f0cabdb 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Custom.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Custom.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Demographics.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Demographics.tpl index 586d627a0fea8eaf30a27fb5a6677a5aed935c2a..fe16f5163adbeab0663fb8250fe5e0d30ff6fa32 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Demographics.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Demographics.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.hlp b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.hlp index 967c8fd56adb5b76da53c66af1e4a16a1f51954d..a3014e3e6aba22227ee6533a91e44f0b77496ded 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.hlp +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.tpl index 65b5cc38cad6b95d837205cab2a2733a3f4a975c..6d72f6ba121077f5599efb0bf501cf8e18376d4d 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Location.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Notes.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Notes.tpl index ad15a412f9f15660b572935ab2f525a7cd3fbaec..44c8367eee949470c8cb2b8471bee65024394063 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Notes.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Notes.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Relationship.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Relationship.tpl index f0c3aef3c23f1f75ea7d68bd2e8e5c3a3273318e..21f68c2696b25da3aa8d4d3ec1f40a39b726cdbd 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Relationship.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Relationship.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Task.tpl b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Task.tpl index 7fd028c8312cdcc6e460b0c24084f141164291c8..8c4c533324769f41bbb7d59d92ce19718ff0c040 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Criteria/Task.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Criteria/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom.tpl index 9f876b491215d1bf3108f5af41a26fbc892f7ece..a47c940c2b8b01b1e745259c3932cd7aa1075e26 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/ActivitySearch.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/ActivitySearch.tpl index 27be968bcfd6fdf8cf17530b3e1f34ca5863a704..fbab9251ee2e0cff7982a65a0a59c1eee2715f4b 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/ActivitySearch.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/ActivitySearch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/ContribSYBNT.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/ContribSYBNT.tpl index 32368a6d795c0ba18e066fda072ca4d20480b609..a9bd1cc5492cafb6432a2d0703466b84d62454ad 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/ContribSYBNT.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/ContribSYBNT.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/ContributionAggregate.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/ContributionAggregate.tpl index c1df9210d93fd71637a67ac5e5aa0a814ae08ffc..77e905180c4785626b3677155e456b93aadac564 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/ContributionAggregate.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/ContributionAggregate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/EmptyResults.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/EmptyResults.tpl index f511700d81e0af0a39844caf078cabd3a4998a22..c1c045a85f8b5f2d53f2b629da93ffa7defe822f 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/EmptyResults.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/EventDetails.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/EventDetails.tpl index 5522021bb6df75ad0840d17080110b62b9a8be7b..939cc87446e9cdfe562f51942335dce6a5b9c04b 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/EventDetails.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/EventDetails.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/FullText.hlp b/civicrm/templates/CRM/Contact/Form/Search/Custom/FullText.hlp index a0a650654dcb080976f4bf68e741fafb410f454c..ca4cee3d36f996eeaa2f14258c8778e7d375cb57 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/FullText.hlp +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/FullText.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/FullText.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/FullText.tpl index 1fb7b5646264dc15bfa817a5094ac8a6893831fb..57c42b6da617afe21b72bd5b22052c39eeba71bb 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/FullText.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/FullText.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/MultipleValues.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/MultipleValues.tpl index fe38f6f0ee1df7979642ad08f8b5e2c6c07cb4c9..c3e4e9bc7d53fc4b81f958688842502f923b8892 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/MultipleValues.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/MultipleValues.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/MultipleValuesCriteria.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/MultipleValuesCriteria.tpl index aa8a94af35c96248698f59599e23c37bf361b0e2..f7a479e9be02f4961b4d7e22fff07919ac516faf 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/MultipleValuesCriteria.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/MultipleValuesCriteria.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/Proximity.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/Proximity.tpl index 309c00120233ca28ae58cce484792cc3ed26b202..cf0f376ca51023063a2b753bd09199cb13500f81 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/Proximity.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/Proximity.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Custom/Sample.tpl b/civicrm/templates/CRM/Contact/Form/Search/Custom/Sample.tpl index 03995482fa7f90892be794e5b36c2e4364ece5d1..692c245c1632ac13c5bb3ef074f387a17185ae3f 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Custom/Sample.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Custom/Sample.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Contact/Form/Search/EmptyResults.tpl index 1f6c9cd171d301f305c10878af04b177859a2315..8e16a4a2d2e9da7e42cb76631e5559a9d4afbada 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/Intro.tpl b/civicrm/templates/CRM/Contact/Form/Search/Intro.tpl index eb4f6e742235880a70ae7227901e056a8fe0e23c..c75a1729777f5546a38e575a25552645425f8ea7 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/Intro.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/Intro.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/ResultTasks.tpl b/civicrm/templates/CRM/Contact/Form/Search/ResultTasks.tpl index d0d8b616e28e57aa31009c981e93e13fad5d45a1..e50d86464e8fd03612d19ab05b2093a99b96bcd3 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/ResultTasks.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/ResultTasks.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Search/table.tpl b/civicrm/templates/CRM/Contact/Form/Search/table.tpl index 65508b9d295de91881e6baa562a15838e34658b5..777f54525d08ca31e955f827effca1d7c644e7a5 100644 --- a/civicrm/templates/CRM/Contact/Form/Search/table.tpl +++ b/civicrm/templates/CRM/Contact/Form/Search/table.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Selector.tpl b/civicrm/templates/CRM/Contact/Form/Selector.tpl index e49d7e54c220ce28eadc5303250faa4d630d2929..e90648834ae92d1360357c604f5f54c6ac4592b5 100644 --- a/civicrm/templates/CRM/Contact/Form/Selector.tpl +++ b/civicrm/templates/CRM/Contact/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/ShareAddress.tpl b/civicrm/templates/CRM/Contact/Form/ShareAddress.tpl index cd39230c468a678a0cbeb515060ce876cd2cb2ab..d74f44b43db5615427ea5e729fdefde265338958 100644 --- a/civicrm/templates/CRM/Contact/Form/ShareAddress.tpl +++ b/civicrm/templates/CRM/Contact/Form/ShareAddress.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task.tpl b/civicrm/templates/CRM/Contact/Form/Task.tpl index 3ce4502cb5c0c5d85f2b59b07997b746977528f4..170096b790a8b278514dd25737ce7a8a085810d2 100644 --- a/civicrm/templates/CRM/Contact/Form/Task.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/AddToGroup.tpl b/civicrm/templates/CRM/Contact/Form/Task/AddToGroup.tpl index f1f35395f07588e13b07822d1235f82a3689bb7b..9973398771e6dc6f40a3e07ab9372aa389ffbf74 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/AddToGroup.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/AddToGroup.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/AddToHousehold.tpl b/civicrm/templates/CRM/Contact/Form/Task/AddToHousehold.tpl index c48d57431e9e1cd12a96588859b6b064b6fbb808..a11a6c950769fc99fc64ada0611a749f9786c3c7 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/AddToHousehold.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/AddToHousehold.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/AddToIndividual.tpl b/civicrm/templates/CRM/Contact/Form/Task/AddToIndividual.tpl index f9c3741eae6f776ed0fd6e1e977678d3307d0057..ad75b414f9c9376e9652586ad028b8437175eeea 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/AddToIndividual.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/AddToIndividual.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/AddToOrganization.tpl b/civicrm/templates/CRM/Contact/Form/Task/AddToOrganization.tpl index c48d57431e9e1cd12a96588859b6b064b6fbb808..a11a6c950769fc99fc64ada0611a749f9786c3c7 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/AddToOrganization.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/AddToOrganization.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/AddToParentClass.tpl b/civicrm/templates/CRM/Contact/Form/Task/AddToParentClass.tpl index 090c65b9a30f1dee7ac96b5979cc20a3dd5b3896..9b903698f9fe1f473cb921b71115fc8be275671d 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/AddToParentClass.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/AddToParentClass.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/AddToTag.tpl b/civicrm/templates/CRM/Contact/Form/Task/AddToTag.tpl index a31dd18fac0ae534b9369bfe2cf934ca6fc6690f..9dbf3a06b18287870bc1949f3fc40f80af86d4d6 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/AddToTag.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/AddToTag.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/AlterPreferences.tpl b/civicrm/templates/CRM/Contact/Form/Task/AlterPreferences.tpl index 6feba629dc6fc3fa69832e227c477f9dbd931dab..b9dd0fb7c8b54c112cb4aaadd36249ba38b4c20d 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/AlterPreferences.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/AlterPreferences.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Batch.tpl b/civicrm/templates/CRM/Contact/Form/Task/Batch.tpl index 1653ecb8839792343789a036bc63aae79405099b..c21611add9c171bfea35103af16efed80afe8869 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Batch.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Batch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Delete.tpl b/civicrm/templates/CRM/Contact/Form/Task/Delete.tpl index 005d6b6bf782b88d87c5badf3e8f1e16ef946f73..1a0c95e7b5946a9ad9cebe28ae5e43d4b4db3a43 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Delete.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Email.hlp b/civicrm/templates/CRM/Contact/Form/Task/Email.hlp index 8120ca316fcd80f71e92014fe3103944383dd239..37a5ddecfae96b7b57b8bccbd936205c35a1b14c 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Email.hlp +++ b/civicrm/templates/CRM/Contact/Form/Task/Email.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,10 +27,18 @@ {ts}From Address{/ts} {/htxt} {htxt id="id-from_email"} -<p>{ts}By default, CiviCRM uses the primary email address of the logged in user as the FROM address when sending emails to contacts. However, users with Administer CiviCRM permission can configure one or more general email addresses that can be selected as an alternative. EXAMPLE: "Client Services" <clientservices@example.org>{/ts}</p> +{if $params.logged_in_email_setting == "1"} + <p>{ts}By default, CiviCRM uses the primary email address of the logged in user as the FROM address when sending emails to contacts. However, users with Administer CiviCRM permission can configure one or more general email addresses that can be selected as an alternative. EXAMPLE: "Client Services" <clientservices@example.org>{/ts}</p> +{else} + <p>{ts}CiviCRM is currently configured to only use the defined From Email addresses. If you wish to be able to use the email address of the logged in user as the From Address you will need to set the setting "Allow mail from loged in contact" setting. Users with Administer CiviCRM can set this setting in the SMTP settings.{/ts}<p> + {if $params.isAdmin} + {capture assign="smtpUrl"}{crmURL p="civicrm/admin/setting/smtp" q="reset=1"}{/capture} + <p>{ts 1=$smtpUrl}Go to <a href='%1'>Settings - Outbound Mail</a> to enable the usage of the logged in contact's email address as the from email{/ts}</p> + {/if} +{/if} {if $params.isAdmin} - {capture assign="fromConfig"}{crmURL p="civicrm/admin/options/from_email_address" q="reset=1"}{/capture} - <p>{ts 1=$fromConfig}Go to <a href='%1'>Administer CiviCRM » Communications » FROM Email Addresses</a> to add or edit general email addresses. Make sure these email addresses are valid email accounts with your email service provider.{/ts}</p> + {capture assign="fromConfig"}{crmURL p="civicrm/admin/options/from_email_address" q="reset=1"}{/capture} + <p>{ts 1=$fromConfig}Go to <a href='%1'>Administer CiviCRM » Communications » FROM Email Addresses</a> to add or edit general email addresses. Make sure these email addresses are valid email accounts with your email service provider.{/ts}</p> {/if} {/htxt} diff --git a/civicrm/templates/CRM/Contact/Form/Task/Email.tpl b/civicrm/templates/CRM/Contact/Form/Task/Email.tpl index e3ca4f8e617300df881a8817e494910558eb6729..107d23f7dc4e78ef0d9f4a597ed8e6ecf62d1905 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Email.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,10 +30,11 @@ <p>{ts count=$suppressedEmails plural='Email will NOT be sent to %count contacts - (no email address on file, or communication preferences specify DO NOT EMAIL, or contact is deceased).'}Email will NOT be sent to %count contact - (no email address on file, or communication preferences specify DO NOT EMAIL, or contact is deceased).{/ts}</p> </div> {/if} +{crmSetting var="logged_in_email_setting" name="allow_mail_from_logged_in_contact"} <table class="form-layout-compressed"> <tr id="selectEmailFrom" class="crm-contactEmail-form-block-fromEmailAddress crm-email-element"> <td class="label">{$form.from_email_address.label}</td> - <td>{$form.from_email_address.html} {help id="id-from_email" file="CRM/Contact/Form/Task/Email.hlp" isAdmin=$isAdmin}</td> + <td>{$form.from_email_address.html} {help id="id-from_email" file="CRM/Contact/Form/Task/Email.hlp" isAdmin=$isAdmin logged_in_email_setting=$logged_in_email_setting}</td> </tr> <tr class="crm-contactEmail-form-block-recipient"> <td class="label">{if $single eq false}{ts}Recipient(s){/ts}{else}{$form.to.label}{/if}</td> diff --git a/civicrm/templates/CRM/Contact/Form/Task/EmailCommon.tpl b/civicrm/templates/CRM/Contact/Form/Task/EmailCommon.tpl index d3b3b1cd433120a18c850d939e0ca321b69eadbe..6a8c4f10d4148f3d0f72f506422c334d2250174d 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/EmailCommon.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/EmailCommon.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/GMapsInput.tpl b/civicrm/templates/CRM/Contact/Form/Task/GMapsInput.tpl index cd770ffe34853b2066427aec207aaf5c71b5a552..dc9b5b74e90763755704bd7b44910a46aea63442 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/GMapsInput.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/GMapsInput.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/HookSample.tpl b/civicrm/templates/CRM/Contact/Form/Task/HookSample.tpl index 5c9f7c693d77b9a3233da68ff0a73d4561036110..da42f18dd1d64d7ee8ddc6848ecc38089eda26b9 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/HookSample.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/HookSample.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Label.tpl b/civicrm/templates/CRM/Contact/Form/Task/Label.tpl index c3f297da72e0ebe9f6d372614f07ae3353f2e793..e92df216f558c5bd527fd21b7801730965a98f74 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Label.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Label.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Map.tpl b/civicrm/templates/CRM/Contact/Form/Task/Map.tpl index 1948550ed89fdcb8eb2db39cf70d40fed372320c..bbb001f165fa5567b409ed15f82686cb194be638 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Map.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Map.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Map/Google.tpl b/civicrm/templates/CRM/Contact/Form/Task/Map/Google.tpl index c765c01767b2854790fe54c388284f8295d3bcf2..6de47fef8f714ba7a2669a6dae13cbd08736a68c 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Map/Google.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Map/Google.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl b/civicrm/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl index d7033caa12988c1298800d53ab3b0143a8b1b1b1..b306ffb692bf085843937722185835e1031382b1 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Map/OpenStreetMaps.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/PDF.tpl b/civicrm/templates/CRM/Contact/Form/Task/PDF.tpl index 190a27fe890ea56d7c32f6d35de402098ccf884d..45b59cfd4d121c4ae5426e40c81bfff8e4928244 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/PDF.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/PDF.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/PDFLetterCommon.tpl b/civicrm/templates/CRM/Contact/Form/Task/PDFLetterCommon.tpl index 5391f478c5589c48c914faedf6a3965310967c41..caec3822383770e3450c20a514bfc781ca6cf2ac 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/PDFLetterCommon.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/PDFLetterCommon.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/PickProfile.tpl b/civicrm/templates/CRM/Contact/Form/Task/PickProfile.tpl index e9e216978b78d250138577bcd856155473feee70..4c1e0b961b498ed160f6889b4537689652aa47a4 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/PickProfile.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/PickProfile.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Print.tpl b/civicrm/templates/CRM/Contact/Form/Task/Print.tpl index 26879dd6fed60b593390b70e3056a302039c8425..a93b7712b0687944ed7251a5f8e045471aa525fc 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/ProximityCommon.tpl b/civicrm/templates/CRM/Contact/Form/Task/ProximityCommon.tpl index a1ad901ef4dc7fffa119b95fc74dd66db407d21d..8d1f9d60b76bc1fd6e380b994f55eef42992c963 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/ProximityCommon.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/ProximityCommon.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/RemoveFromGroup.tpl b/civicrm/templates/CRM/Contact/Form/Task/RemoveFromGroup.tpl index 208835044d5ad36a4e0d013229cdb945146a8ff0..e31c5da22417becdc38d38f476bfca6b0d973645 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/RemoveFromGroup.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/RemoveFromGroup.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/RemoveFromTag.tpl b/civicrm/templates/CRM/Contact/Form/Task/RemoveFromTag.tpl index b3347e6e2073b798131ee90416110f2878e04cbd..cddbdd3cb0f444d94d525fb0899773e9eccdeadd 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/RemoveFromTag.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/RemoveFromTag.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Result.tpl b/civicrm/templates/CRM/Contact/Form/Task/Result.tpl index ccc917c0863722e3e2d3e86bd0fa56168dc66adc..f8d68676380328d24bb14fe1b6bc88a59862cd34 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Result.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Result.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/SMS.hlp b/civicrm/templates/CRM/Contact/Form/Task/SMS.hlp index 53c222212f319c76a50ac1d7681a468ec19545b3..13b28ce4b762a25c0504b89a180786c4508bcf6e 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/SMS.hlp +++ b/civicrm/templates/CRM/Contact/Form/Task/SMS.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/SMS.tpl b/civicrm/templates/CRM/Contact/Form/Task/SMS.tpl index 043660b41d1727bc8a35940c7a986a0e9ff76a02..7dc476b172b1187578a439a0f57ca21d1f28daf1 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/SMS.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/SMS.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/SMSCommon.tpl b/civicrm/templates/CRM/Contact/Form/Task/SMSCommon.tpl index ee804ad10c9afb0aa067a02ca17846e1efb5494e..7bddfed1ab0a78c9c68dcdc0313bda29906bbd96 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/SMSCommon.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/SMSCommon.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/SaveSearch.tpl b/civicrm/templates/CRM/Contact/Form/Task/SaveSearch.tpl index 18b6a22d4f1d4cd7c5b27d99ad49a4da52f9da69..8ddbd87a3fa8cfac3694f1d72f571d06e6c9e035 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/SaveSearch.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/SaveSearch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/SaveSearch/Update.tpl b/civicrm/templates/CRM/Contact/Form/Task/SaveSearch/Update.tpl index de47b1e394fc08e4663b6f4ff9b82da3df90f18e..e1dd8981d1e8586b0f433fe0a3294625cf04a698 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/SaveSearch/Update.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/SaveSearch/Update.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Form/Task/Unhold.tpl b/civicrm/templates/CRM/Contact/Form/Task/Unhold.tpl index cb597780218f276c389fbed9561afb3265aafd11..99cc1c57d7b7839a067b00a7694fe42e0cbb4f53 100644 --- a/civicrm/templates/CRM/Contact/Form/Task/Unhold.tpl +++ b/civicrm/templates/CRM/Contact/Form/Task/Unhold.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Import/Form/CSV.tpl b/civicrm/templates/CRM/Contact/Import/Form/CSV.tpl index 5e12f51dc3e515698f18f43f19f96022b47860aa..670b08ace0bab4a7863de3aa9b7317c0e09a5ec4 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/CSV.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/CSV.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Import/Form/DataSource.hlp b/civicrm/templates/CRM/Contact/Import/Form/DataSource.hlp index c4256275df6e486f8b3e3a9550deb95a66aba2ec..6d9ecc8b7b892acccdb6f6f05a111801fa7fa40c 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/DataSource.hlp +++ b/civicrm/templates/CRM/Contact/Import/Form/DataSource.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -94,7 +94,7 @@ <tr><td>{ts}A spreadsheet-like file with the contact data in each row. Data fields are separated by commas. You can export to a "CSV" file from most spreadsheet applications, many database managers, as well as other contact management and address book applications. Consult the documentation for your application if you're not sure how to do this. Save this file to your local hard drive (or an accessible drive on your network) - and then choose that file as your Import Upload File.{/ts}</td></tr> <tr><td><strong>{ts}SQL Query{/ts}</strong></td></tr> <tr><td>{ts}A direct SQL query in the form of a SELECT query. For example:{/ts}</td></tr> - <tr><td><code>SELECT first_name, last_name, email FROM somedatabase.sometable</code><td></tr> + <tr><td><code>SELECT first_name, last_name, email FROM somedatabase.sometable</code></td></tr> <tr><td>{ts}This query can be against a different database, but that database has to be on the same database server and the CiviCRM database user has to have the SELECT privilege (and any other privileges required to execute the query).{/ts}</td></tr> </table> </p> diff --git a/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl index e418c12a7c79467ef85e54c9951795842a957f4f..451c23ae03f53e95b8910125ae8d337f37323c8c 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/DataSource.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Import/Form/MapField.tpl b/civicrm/templates/CRM/Contact/Import/Form/MapField.tpl index ab34cead73858b51c19afc93e45a119de506f236..e46f313a30a7cb31ba0f1d50ffb9c8f646acef85 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/MapField.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/MapField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Import/Form/MapTable.tpl b/civicrm/templates/CRM/Contact/Import/Form/MapTable.tpl index d1f3401049144321977744aa93a76447f60be445..bc9566fdba3a2953ecd8161ac2e5053ee9cf4a27 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/MapTable.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/MapTable.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Import/Form/Mapper.tpl b/civicrm/templates/CRM/Contact/Import/Form/Mapper.tpl index 528fb142bf962ace40ff7587e5595df53c1358d7..336041f9c9f00d3109f7c74bc4106d60336ef65f 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/Mapper.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/Mapper.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl b/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl index dc0fb0afbc4c6c5ca3b2241781681c55d071f940..41311a389d39109c172034824f19e38295075933 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Import/Form/SQL.tpl b/civicrm/templates/CRM/Contact/Import/Form/SQL.tpl index a8d7b78d0bbfce40d0cedb2bad6befff87c040ad..da703a12ad0fc4fdb9f226305febbd3578284799 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/SQL.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/SQL.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Import/Form/Summary.tpl b/civicrm/templates/CRM/Contact/Import/Form/Summary.tpl index fc8f617e6132c94387a40b9081a41749da487d2d..63951daa6126cb7db80465f351921c1798a36380 100644 --- a/civicrm/templates/CRM/Contact/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Contact/Import/Form/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/ContactImage.tpl b/civicrm/templates/CRM/Contact/Page/ContactImage.tpl index 6e33513d04b425377b4655158b9f8b8d78621cef..7ccc2ae3a21f0068a8a32e8611cdff000382af09 100644 --- a/civicrm/templates/CRM/Contact/Page/ContactImage.tpl +++ b/civicrm/templates/CRM/Contact/Page/ContactImage.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/CustomSearch.hlp b/civicrm/templates/CRM/Contact/Page/CustomSearch.hlp index 73be89f8b365b70a1ec90eadaf57860249a9bdf0..0837c6be665dbe2d194b0c80e1486605816508e8 100644 --- a/civicrm/templates/CRM/Contact/Page/CustomSearch.hlp +++ b/civicrm/templates/CRM/Contact/Page/CustomSearch.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/CustomSearch.tpl b/civicrm/templates/CRM/Contact/Page/CustomSearch.tpl index e87730a625510b2a3e4b0480d9bd7ad1656c4cca..f6b405c1c7f4eeb04d724b198d1fd2af143a5727 100644 --- a/civicrm/templates/CRM/Contact/Page/CustomSearch.tpl +++ b/civicrm/templates/CRM/Contact/Page/CustomSearch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/DashBoard.tpl b/civicrm/templates/CRM/Contact/Page/DashBoard.tpl index 009d8fb79f0af2e5e667dad2f4bfccf7739c7271..9cab7b26ee392c073aae2284354da615ea854e5d 100644 --- a/civicrm/templates/CRM/Contact/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Contact/Page/DashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/DashBoardDashlet.tpl b/civicrm/templates/CRM/Contact/Page/DashBoardDashlet.tpl index 831621bb0fdbd3a39a564a626043ce943428623c..811c9a72432b69cb36c02f177f36f0fcfcd1322d 100644 --- a/civicrm/templates/CRM/Contact/Page/DashBoardDashlet.tpl +++ b/civicrm/templates/CRM/Contact/Page/DashBoardDashlet.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Dashboard.hlp b/civicrm/templates/CRM/Contact/Page/Dashboard.hlp index 22a98f89f9d5f9811be17e738b9445fff8c3f13e..6256458ad8bcc3ec4f03d435db00fcae6437223d 100644 --- a/civicrm/templates/CRM/Contact/Page/Dashboard.hlp +++ b/civicrm/templates/CRM/Contact/Page/Dashboard.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Dashlet.tpl b/civicrm/templates/CRM/Contact/Page/Dashlet.tpl index e3cb4a324aa75f6c35876a33915bab97679e3c77..9d9d6f5b3ff8e3f08be757ff8a5df414c95ddc07 100644 --- a/civicrm/templates/CRM/Contact/Page/Dashlet.tpl +++ b/civicrm/templates/CRM/Contact/Page/Dashlet.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/DedupeException.tpl b/civicrm/templates/CRM/Contact/Page/DedupeException.tpl index 65e567670716c3ce1f3c0d387adf0da8e2473a94..aea2cd1f7af9fb5304266a3970ccba5ac1ffe0c5 100644 --- a/civicrm/templates/CRM/Contact/Page/DedupeException.tpl +++ b/civicrm/templates/CRM/Contact/Page/DedupeException.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/DedupeFind.tpl b/civicrm/templates/CRM/Contact/Page/DedupeFind.tpl index 17e2edc09d51501fb0c2411a023de11a946067b1..7e3a10d6a14a97d1c02d860ea24ea1999a6f3606 100644 --- a/civicrm/templates/CRM/Contact/Page/DedupeFind.tpl +++ b/civicrm/templates/CRM/Contact/Page/DedupeFind.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/DedupeMerge.tpl b/civicrm/templates/CRM/Contact/Page/DedupeMerge.tpl index 155e5ddab380ee7630e28757b7810cccbad8e01d..e362ce913e4320cc6836e60fbf367e662b39ffb5 100644 --- a/civicrm/templates/CRM/Contact/Page/DedupeMerge.tpl +++ b/civicrm/templates/CRM/Contact/Page/DedupeMerge.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/DedupeRules.hlp b/civicrm/templates/CRM/Contact/Page/DedupeRules.hlp index 6f0277a02bdba2b89433d2cc01d1381f2fb9dc95..26e6a817a64f71214928e68560b73ce2a95a4712 100644 --- a/civicrm/templates/CRM/Contact/Page/DedupeRules.hlp +++ b/civicrm/templates/CRM/Contact/Page/DedupeRules.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/DedupeRules.tpl b/civicrm/templates/CRM/Contact/Page/DedupeRules.tpl index 80ae56b5367344d4f5fe8f7bd0e20099f8f269af..ad53b5eb680d91db01cf49221f9dbe68ae3dc6ba 100644 --- a/civicrm/templates/CRM/Contact/Page/DedupeRules.tpl +++ b/civicrm/templates/CRM/Contact/Page/DedupeRules.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Actions.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Actions.tpl index 788bfbf13cc27b6f4a561678ca3de7b5cba4f09e..fdd790a1077d235ddcb0877314fcf5ed1a09114e 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Actions.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Actions.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Address.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Address.tpl index 7aeab90fc8f3a6289f31eb4d923cf067a3776107..195a6d8414a6c489ba47ad8a3cc4b0d729c2ee45 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Address.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Address.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/CommunicationPreferences.tpl b/civicrm/templates/CRM/Contact/Page/Inline/CommunicationPreferences.tpl index 9a10f58e7f1fb42e8f57c9e5f653dcfbb10affc4..85585db1b2d3587c442190861a7e52a1f6463730 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/CommunicationPreferences.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/CommunicationPreferences.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/ContactInfo.tpl b/civicrm/templates/CRM/Contact/Page/Inline/ContactInfo.tpl index 4d4b0b38ad650c3d66e23838a35c8d082b1bb137..02f31adab1f8975a23261fcb524e6382a5484865 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/ContactInfo.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/ContactInfo.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/ContactName.tpl b/civicrm/templates/CRM/Contact/Page/Inline/ContactName.tpl index 768282b912e33442aa69c0112dc68c3e7513b100..ddb734b353379a061d03acf204b3a8560727a5cd 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/ContactName.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/ContactName.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/CustomData.tpl b/civicrm/templates/CRM/Contact/Page/Inline/CustomData.tpl index 4e691ef770e89a4c69c3e6159dd129fc8a28e9d8..d3b80bdc2186288c5971aa6d1e6669bc7135ebf6 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/CustomData.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/CustomData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Demographics.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Demographics.tpl index 672324d2170c0e533df2bd849b0a999bd6044f51..0953b70c96b3e801949ce2c79457988f2d06f75a 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Demographics.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Demographics.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Email.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Email.tpl index 397cb0bd530a09d0d3fc6e8346e2e42fe3aa6495..20bd83720915eb032f8082aaba253866b7b13134 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Email.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/IM.tpl b/civicrm/templates/CRM/Contact/Page/Inline/IM.tpl index 2f41e389cdb29fa93fe3c6c5c17bdb501ad4a712..2a59796c5d929dadea5a258baaacb12c6b162e9b 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/IM.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/IM.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/OpenID.tpl b/civicrm/templates/CRM/Contact/Page/Inline/OpenID.tpl index e30e04da24d81e76232f03cd2e68ccaba27a8700..0310a7c6bf21c7ab87314177b4775c8b05fedb3b 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/OpenID.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/OpenID.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Phone.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Phone.tpl index 496b6bcbe9122d499c67a9ad4e1e5b6bfdc306e4..cc81dcc87321b5a7c6e9208dd8387b3f0aa3eaf6 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Phone.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Phone.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/Inline/Website.tpl b/civicrm/templates/CRM/Contact/Page/Inline/Website.tpl index 68ad1e6b5f12c96f1fba305e858adbcfa20444f6..622ba32c516f338152e2e8d600fef18e80847243 100644 --- a/civicrm/templates/CRM/Contact/Page/Inline/Website.tpl +++ b/civicrm/templates/CRM/Contact/Page/Inline/Website.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/SavedSearch.tpl b/civicrm/templates/CRM/Contact/Page/SavedSearch.tpl index ae7ee86661770576e165b7f7bd17cb4fb38cdadd..f75810e15e6551e4e3916c55b32a221b17402da1 100644 --- a/civicrm/templates/CRM/Contact/Page/SavedSearch.tpl +++ b/civicrm/templates/CRM/Contact/Page/SavedSearch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/ContactSmartGroup.tpl b/civicrm/templates/CRM/Contact/Page/View/ContactSmartGroup.tpl index bec99b27fe87bb12aec14162dcbf40203cdcfee7..42b4c3add5510255b9068f3043a5852bb02f9181 100644 --- a/civicrm/templates/CRM/Contact/Page/View/ContactSmartGroup.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/ContactSmartGroup.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/CustomData.tpl b/civicrm/templates/CRM/Contact/Page/View/CustomData.tpl index cb0df26cc7bc6f0b0ef08032d5e65eb1e5b99c85..3fc2f1c8477c89a6db7fd505e385865057a48a17 100644 --- a/civicrm/templates/CRM/Contact/Page/View/CustomData.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/CustomData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/CustomDataFieldView.tpl b/civicrm/templates/CRM/Contact/Page/View/CustomDataFieldView.tpl index ad3cc5637c0b52415b0354e045eafc0e3165a3aa..26f28865e2acbfe5951dd0b4fb06ea3c178922cb 100644 --- a/civicrm/templates/CRM/Contact/Page/View/CustomDataFieldView.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/CustomDataFieldView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/CustomDataView.tpl b/civicrm/templates/CRM/Contact/Page/View/CustomDataView.tpl index 1b90c5113920e88605fcbbc39cad5f3a1f058d1e..22a9dd43c5a94c630c274aeec7cb6d5bbc24a235 100644 --- a/civicrm/templates/CRM/Contact/Page/View/CustomDataView.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/CustomDataView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Delete.tpl b/civicrm/templates/CRM/Contact/Page/View/Delete.tpl index c90959814c9b14d1a1a5907a0e07fc9f8bc9e9de..7bc43b4fd88111bf796db75209ad6cc2159cf2e9 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Delete.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Email.tpl b/civicrm/templates/CRM/Contact/Page/View/Email.tpl index 91bff98741514bbd62fa701c2816c2779451654f..7fb9fb0c217b854e6c3ce2c80592e3628a5e7af7 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Email.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Group.tpl b/civicrm/templates/CRM/Contact/Page/View/Group.tpl index 1656e815e84d7ea18e1e8f33ad621ffd0d50dd71..e9552edf91c198350609768dd36c7c2f5978ec07 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Group.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Group.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/GroupContact.tpl b/civicrm/templates/CRM/Contact/Page/View/GroupContact.tpl index 8e6b39ca8caa9c0541a0b42136acf83b06f18b8d..a674411f9cdcd633470596521e266338a8766e53 100644 --- a/civicrm/templates/CRM/Contact/Page/View/GroupContact.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/GroupContact.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Log.tpl b/civicrm/templates/CRM/Contact/Page/View/Log.tpl index 5f81d002f22f8d33eed0c36c2eb84f8103aaa2e4..fbe116c23eaded221046bdbc3a326c2bde230f98 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Log.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Log.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Note.tpl b/civicrm/templates/CRM/Contact/Page/View/Note.tpl index 14b779b575b0ce99081e763673e0db0239491eeb..b568da406e2ef6b02433fb0f6f1b7dceeb17c72c 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Note.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Note.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Print.tpl b/civicrm/templates/CRM/Contact/Page/View/Print.tpl index f57029b6d513d8b7e7f8f85fbd2b93fdb62e4c89..52e23f36727226d2f56bf59513ff7039f5e8cee1 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Print.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Relationship.tpl b/civicrm/templates/CRM/Contact/Page/View/Relationship.tpl index 7eb8d8351dc1125dc4e3b891cf552121a517a740..b59356d63b8cf1212cefa3d90fa41dacf3532ddd 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Relationship.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Relationship.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/RelationshipSelector.tpl b/civicrm/templates/CRM/Contact/Page/View/RelationshipSelector.tpl index a4dea029777a36986b059b067c73714e7dccf346..6bd2fc793e1fac7f05484eb54f6aa88de0395a06 100644 --- a/civicrm/templates/CRM/Contact/Page/View/RelationshipSelector.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/RelationshipSelector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/SMS.tpl b/civicrm/templates/CRM/Contact/Page/View/SMS.tpl index a2644a6cba5ed47550a86c63b94db04d92abcfee..0b041e49da11779153b63b3613815e1c6e0ec641 100644 --- a/civicrm/templates/CRM/Contact/Page/View/SMS.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/SMS.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Summary.hlp b/civicrm/templates/CRM/Contact/Page/View/Summary.hlp index f1cbcbbd5bfb979e38393d329bc8cdd766d87a74..c1487ec4cac931ea8dcd8023c07978be0b8bf6d4 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Summary.hlp +++ b/civicrm/templates/CRM/Contact/Page/View/Summary.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl index 2058cc512c95e0cd195d55505a864fe7078eec55..b5f953c8e38608694add44c6881a165935b0d7b2 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Summary.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/SummaryHook.tpl b/civicrm/templates/CRM/Contact/Page/View/SummaryHook.tpl index 4b22d38dd70c489240cb1c984d0852b03598706a..dd4a7f7eb9e61241ad34fa4710fd47ab5bd24379 100644 --- a/civicrm/templates/CRM/Contact/Page/View/SummaryHook.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/SummaryHook.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Tag.tpl b/civicrm/templates/CRM/Contact/Page/View/Tag.tpl index d90e8e0f54a9661dccaef8d8133e72e2bd79b477..ddff9679dd22d7fb3b2bd86f8bee74b0745af1e7 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Tag.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Tag.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/UserDashBoard.tpl b/civicrm/templates/CRM/Contact/Page/View/UserDashBoard.tpl index 25604343500554e2fe3b5e1196e817bf6614e1f7..c10a9f832cde65e11f09bbf41a07772400289deb 100644 --- a/civicrm/templates/CRM/Contact/Page/View/UserDashBoard.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/UserDashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/UserDashBoard/GroupContact.tpl b/civicrm/templates/CRM/Contact/Page/View/UserDashBoard/GroupContact.tpl index 142b3f8bb0f6f2f204d16c43e4f22118ffcb7e4d..11ebb6f8121c95b51071373f4a5e34ae01b803c7 100644 --- a/civicrm/templates/CRM/Contact/Page/View/UserDashBoard/GroupContact.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/UserDashBoard/GroupContact.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Page/View/Useradd.tpl b/civicrm/templates/CRM/Contact/Page/View/Useradd.tpl index d40ccbca08824aa8326e636ef5ef70c468024e61..daf305c586d793830a3b4b0d7b4318a3b8a76b01 100644 --- a/civicrm/templates/CRM/Contact/Page/View/Useradd.tpl +++ b/civicrm/templates/CRM/Contact/Page/View/Useradd.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contact/Selector.tpl b/civicrm/templates/CRM/Contact/Selector.tpl index 150b0cac9c17e2c4fa6918def1d0dead6e5ceecb..c59077b3757315b35166ab7a2bd71c74fb22861d 100644 --- a/civicrm/templates/CRM/Contact/Selector.tpl +++ b/civicrm/templates/CRM/Contact/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/AcceptCreditCard.tpl b/civicrm/templates/CRM/Contribute/Form/AcceptCreditCard.tpl index f36c270e639840d082d16c6472c9d0c589e2b012..99e241fda9f14b74c57094c7bc7fe259e7349329 100644 --- a/civicrm/templates/CRM/Contribute/Form/AcceptCreditCard.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AcceptCreditCard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/AdditionalDetail.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/AdditionalDetail.tpl index 22739276db97c842fb577a928b60bc80441ba793..394ebeae08d777a009b20fa346085d6aedd9458b 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/AdditionalDetail.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/AdditionalDetail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/CreditCard.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/CreditCard.tpl index a03244076c0a1a43e2d000f5086e3114fb3e7bac..d3b103ef8f8087c32e02fba814cb5ddc84092530 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/CreditCard.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/CreditCard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/DirectDebit.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/DirectDebit.tpl index aa8390a73f1ba4c47e2099fdcc06c63c256cb5d1..848661c874867e3a37b31aa1d3818a284436ca45 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/DirectDebit.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/DirectDebit.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/PaymentReminders.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/PaymentReminders.tpl index 639bad971e756c287c1d0c55548de89852658c68..ba95ee588a73e3d24d3e2f08b3b23ac02f87b3f4 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/PaymentReminders.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/PaymentReminders.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/Premium.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/Premium.tpl index 00aeba8f8d235fc60b9af21f3c3a1f0ed30b7fbc..7cb5d1f39054fd04924b6e9bbbcdd821af317374 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/Premium.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalInfo/Premium.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.hlp b/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.hlp index 4e9eb99574042a1957cd25c083641d22c86eb6d2..a4b8306c045021d233ae557dc82da976274e69bf 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.hlp +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl b/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl index baff6385f79ef40cc704b71ea6018465cfd7132f..754c786f614cdd8a28e72462dbbcd5ab2bd4cb2a 100644 --- a/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl +++ b/civicrm/templates/CRM/Contribute/Form/AdditionalPayment.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/CancelSubscription.tpl b/civicrm/templates/CRM/Contribute/Form/CancelSubscription.tpl index 7ce5ff415b5b94e2c08c8cadc96f8cb322f2cccf..9b08f22d1c73408903fb34a116e8aceae1d3e5c4 100644 --- a/civicrm/templates/CRM/Contribute/Form/CancelSubscription.tpl +++ b/civicrm/templates/CRM/Contribute/Form/CancelSubscription.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution.tpl index 48366d857bd3f0e39fe55a591fef5a9d3e899f84..da7bb1bb8f985fbd72bd20891e929af017ea9eec 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -97,6 +97,9 @@ <td class="label">{$form.total_amount.label}</td> <td {$valueStyle}> <span id='totalAmount'>{$form.currency.html|crmAddClass:eight} {$form.total_amount.html|crmAddClass:eight}</span> + {if $freezeFinancialType} + {help id="id-total_amount"} + {/if} {if !$payNow} {if $hasPriceSets} <span id='totalAmountORPriceSet'> {ts}OR{/ts}</span> @@ -161,7 +164,7 @@ {if $contribution_status_id eq 2}{if $is_pay_later }: {ts}Pay Later{/ts} {else}: {ts}Incomplete Transaction{/ts}{/if}{/if} </td> <td> - {if $contactId && $contribID && $contributionMode EQ null && $contribution_status_id eq 2} + {if !$isUsePaymentBlock && $contactId && $contribID && $contributionMode EQ null && $contribution_status_id eq 2} {capture assign=payNowLink}{crmURL p='civicrm/contact/view/contribution' q="reset=1&action=update&id=`$contribID`&cid=`$contactId`&context=`$context`&mode=live"}{/capture} <a class="open-inline action-item crm-hover-button" href="{$payNowLink}">» {ts}Pay with Credit Card{/ts}</a> {/if} @@ -249,6 +252,9 @@ <legend> {ts}Payment Details{/ts} </legend> + {if $isUsePaymentBlock} + {include file="CRM/Contribute/Form/PaymentInfoBlock.tpl"} + {else} <table class="form-layout-compressed" > <tr class="crm-contribution-form-block-payment_instrument_id"> <td class="label">{$form.payment_instrument_id.label}</td> @@ -260,10 +266,13 @@ <td {$valueStyle}>{$form.trxn_id.html} {help id="id-trans_id"}</td> </tr> </table> + {/if} </fieldset> {/if} - {include file='CRM/Core/BillingBlockWrapper.tpl'} + {if !$isUsePaymentBlock} + {include file='CRM/Core/BillingBlockWrapper.tpl'} + {/if} <!-- start of soft credit --> {if !$payNow} diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl index 1751ccf259cb3854107565b77686193dd4fbf333..f367fd30ca896f793ed072ed3eeb47ea11b4c266 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/AuthorizeNetARB.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl index 30ec86d4f56caa0fdfd2de0d5097f5962a424d48..9fed548865d4a12541d524735a4183f9f112028e 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/Confirm.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl index 235bd9334fd152c84ac2220f667ccdf791528e35..4a270e537b656a7d9ea01724e2e155745d81c0c2 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/Main.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -68,7 +68,7 @@ {include file="CRM/common/TrackingFields.tpl"} - <div class="crm-contribution-page-id-{$contributionPageID} crm-block crm-form-block crm-contribution-main-form-block"> + <div class="crm-contribution-page-id-{$contributionPageID} crm-block crm-contribution-main-form-block"> {if $contact_id && !$ccid} <div class="messages status no-popup crm-not-you-message"> @@ -91,7 +91,7 @@ {elseif !empty($ccid)} {if $lineItem && $priceSetID && !$is_quick_config} <div class="header-dark"> - {ts}Contribution Information{/ts} + {ts}Contribution Information{/ts}{if $display_name} – {$display_name}{/if} </div> {assign var="totalAmount" value=$pendingAmount} {include file="CRM/Price/Page/LineItem.tpl" context="Contribution"} diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/MembershipBlock.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/MembershipBlock.tpl index a2c40a1696edc1a0645277fd7b1d821e1d7bfe4c..641d8132e9eb324bfaafc671be0b4ec6567b29df 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/MembershipBlock.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/MembershipBlock.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl index 3b902015a345380ae7dbb78fece3f76ed3a9f07b..0cfc9a5bc3f3bc42bd004d9f135d8d0b31b3a68a 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/OnBehalfOf.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/PremiumBlock.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/PremiumBlock.tpl index 2c91853c39135929f44b6e9efe3ca2efe2068f56..e482bf0ab2c2e5e1a2202c9adee7e0e9446cbf65 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/PremiumBlock.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/PremiumBlock.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/PreviewHeader.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/PreviewHeader.tpl index 8eb3fcf11b030f5628ed05f52b7d58c319f69e51..76988f10e203f77ed4cb7df532ddda50828ac66f 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/PreviewHeader.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/PreviewHeader.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Contribution/ThankYou.tpl b/civicrm/templates/CRM/Contribute/Form/Contribution/ThankYou.tpl index ff72021a81ee31c336344592711acb7854d9f482..da1b3385214de5069fc7873943acc037f9b391d2 100644 --- a/civicrm/templates/CRM/Contribute/Form/Contribution/ThankYou.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Contribution/ThankYou.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionCharts.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionCharts.tpl index 0e4d3e4e8a17091fc4fc0c98d640bc40d8d8eece..d35e5093103db7cb88b87fa21673fa85893c9df7 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionCharts.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionCharts.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/AddProduct.hlp b/civicrm/templates/CRM/Contribute/Form/ContributionPage/AddProduct.hlp index 4255ea5aefeeec67c05a97f2199d5f8e65d6194d..5df4783565c1f677b012b40fbd38543b7216f492 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/AddProduct.hlp +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/AddProduct.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/AddProduct.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/AddProduct.tpl index 4eba4c5d7f7582e71167c50d2c90cd02b7a3ef64..d05b937d9f65429af81aaedd2c6d7ad1fd5c444d 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/AddProduct.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/AddProduct.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl index 43de518f8d5049cf6fac4cba982f1c63a45c8efa..78eb734c504027f6fc5477c05857b2e8833621a0 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Amount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Custom.hlp b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Custom.hlp index 698aab108fb3485c736a7d1bc9ab794cdc484eb7..07bff15b3038e352624febd0943d8fe9f1b3397b 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Custom.hlp +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Custom.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Custom.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Custom.tpl index 56b7935bb8b2c14092a905c0dfc0375213ac57b1..d25dc7e62cb298ed05d9f5c981b8bdc9499d67c0 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Custom.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Custom.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Delete.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Delete.tpl index a3d2894ca98f4c6c309dafff85d190745383d842..eb00cfb265ec3b540f047fe347fb0d38d1b877a3 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Delete.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/PCP.hlp b/civicrm/templates/CRM/Contribute/Form/ContributionPage/PCP.hlp index c98363e1889cf402d5e4f2bc74ab661239108a78..2732ec772df8d44b7c8e275f47a360b1b55bebb3 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/PCP.hlp +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/PCP.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Premium.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Premium.tpl index f52afdcfef15cdad9b698da9748e36eee40b8172..6892b00ea9ecac069cb40a8d54344daf0a83ef0a 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Premium.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Premium.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Settings.hlp b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Settings.hlp index 4045fff7a219b286f6438529b4dac2dcdc8eaa8b..36dafc03c47fa2dd878575076a91f26b9f86e82d 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Settings.hlp +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Settings.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Settings.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Settings.tpl index 9a41c142711f9ba646cd68f99c1460e9ed112e9f..c046f6293154502e5a8109dd8bbefe0aaa62383a 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Settings.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Settings.tpl @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Tab.hlp b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Tab.hlp index d7d4b268c47b06ee2f26685292dd23aa4b9153ed..d9b4ab8fabb107e193e868c43c090e618d61dc65 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Tab.hlp +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Tab.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Tab.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Tab.tpl index 47f2628004d3d4928614d976af32b51fe0ac88b5..82e897b44d1e417dc77fe9901837592d02bfd10e 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Tab.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/ThankYou.hlp b/civicrm/templates/CRM/Contribute/Form/ContributionPage/ThankYou.hlp index b895be5805073af8e922f3de6d84c7ccac8a4308..35ba31b686af6fee10f18d89b2b734f9bc5c7afc 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/ThankYou.hlp +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/ThankYou.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/ThankYou.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/ThankYou.tpl index f79ab784958d85a80549d80e9d2d1b770c2c9922..b1a25f34b8aebd4ae120e606762ed212a36ff316 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/ThankYou.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/ThankYou.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Widget.hlp b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Widget.hlp index 7ade4e5179f4de0e0c4fb81e414d7baddd89effd..25a831a5cfb5c374757bf446aa2a81363fed108a 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Widget.hlp +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Widget.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Widget.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Widget.tpl index 5265a842074208fd03d832bda22b73d706ef0f49..c7b1819b12eaea4314a53d5665c5f97b60f179f4 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionPage/Widget.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionPage/Widget.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ContributionView.tpl b/civicrm/templates/CRM/Contribute/Form/ContributionView.tpl index e3edf85b3f4e8ae926b855c0ce53fed953ef0872..305cbeaff8ee962a18cd93cb53203e709311a5fd 100644 --- a/civicrm/templates/CRM/Contribute/Form/ContributionView.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ContributionView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/ManagePremiums.tpl b/civicrm/templates/CRM/Contribute/Form/ManagePremiums.tpl index 954b548cbbb880ec75e019c7102cf68e51c1dad7..062cfd8c6cefe1d93db9bb251e0f4c6cf1a41c69 100644 --- a/civicrm/templates/CRM/Contribute/Form/ManagePremiums.tpl +++ b/civicrm/templates/CRM/Contribute/Form/ManagePremiums.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/PCP.js.tpl b/civicrm/templates/CRM/Contribute/Form/PCP.js.tpl index 1b137b5441aa81f1e97e413e2b8f5e53161c34cc..12ba501a7cc6cae6e92e4f4cfe588e7282dfddde 100644 --- a/civicrm/templates/CRM/Contribute/Form/PCP.js.tpl +++ b/civicrm/templates/CRM/Contribute/Form/PCP.js.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/PCP/Campaign.tpl b/civicrm/templates/CRM/Contribute/Form/PCP/Campaign.tpl index 18bf62fe575cfb3d74273de03cae2ca4bc1f7669..0bf01f12a5c3bc39877fc8d4bfde3c73da42c049 100644 --- a/civicrm/templates/CRM/Contribute/Form/PCP/Campaign.tpl +++ b/civicrm/templates/CRM/Contribute/Form/PCP/Campaign.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/PCP/Delete.tpl b/civicrm/templates/CRM/Contribute/Form/PCP/Delete.tpl index 67c7ea8e4495ef90608fa1ff0923c70f01220d34..38541162b758829f13797d289ebe0c02ab712d76 100644 --- a/civicrm/templates/CRM/Contribute/Form/PCP/Delete.tpl +++ b/civicrm/templates/CRM/Contribute/Form/PCP/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/PCP/PCP.tpl b/civicrm/templates/CRM/Contribute/Form/PCP/PCP.tpl index fc2ebc3b9a64f8e22c1cf767bd5252ae35584df9..ed9a751285b9682fc8df888b11606bfe10394ae3 100644 --- a/civicrm/templates/CRM/Contribute/Form/PCP/PCP.tpl +++ b/civicrm/templates/CRM/Contribute/Form/PCP/PCP.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/PCP/PCPAccount.tpl b/civicrm/templates/CRM/Contribute/Form/PCP/PCPAccount.tpl index e4b0d54d8314956057d3e7ee782acf1357bbd3fb..4c4930e86f352a065cfb8cdbfe09dde9be202f55 100644 --- a/civicrm/templates/CRM/Contribute/Form/PCP/PCPAccount.tpl +++ b/civicrm/templates/CRM/Contribute/Form/PCP/PCPAccount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/PaymentInfoBlock.tpl b/civicrm/templates/CRM/Contribute/Form/PaymentInfoBlock.tpl index 2d6e7d8a566ba9df90f368ab699bc13dc8379e9f..0b9cf79c39dcbabc51262efd2c7256cdf4942e8f 100644 --- a/civicrm/templates/CRM/Contribute/Form/PaymentInfoBlock.tpl +++ b/civicrm/templates/CRM/Contribute/Form/PaymentInfoBlock.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/PaymentInstrument.tpl b/civicrm/templates/CRM/Contribute/Form/PaymentInstrument.tpl index 1717c38406b242ae17d70d90ce7d804deb8d3a70..e56c7409d92becf47a245e5a5e0c2808931eab66 100644 --- a/civicrm/templates/CRM/Contribute/Form/PaymentInstrument.tpl +++ b/civicrm/templates/CRM/Contribute/Form/PaymentInstrument.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Preview.tpl b/civicrm/templates/CRM/Contribute/Form/Preview.tpl index a40cd38ff8f6eed94cb817010ffd58237cb2f9a4..effab15708787504fca536ad2c5f190608a2e38a 100644 --- a/civicrm/templates/CRM/Contribute/Form/Preview.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Search.tpl b/civicrm/templates/CRM/Contribute/Form/Search.tpl index aa54b7f8a06eeae94e8c6386fa09b41e23a7711b..7cc4c89bb44f5ca73967a80bca19cfa63c102302 100644 --- a/civicrm/templates/CRM/Contribute/Form/Search.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Search/AdvancedSearchPane.tpl b/civicrm/templates/CRM/Contribute/Form/Search/AdvancedSearchPane.tpl index 2a56e334354571f9124d5630c15dab0ba63a34be..0c3bf9554584fd7c4183ce574bdc31b577b32914 100644 --- a/civicrm/templates/CRM/Contribute/Form/Search/AdvancedSearchPane.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Search/AdvancedSearchPane.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl b/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl index 2abec7d4d73ec9032665b4d978f31488869a1a17..01295160d5dd181e0d4e0d16efdc561a4cdb2c53 100644 --- a/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Search/Common.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Search/ContributionRecur.tpl b/civicrm/templates/CRM/Contribute/Form/Search/ContributionRecur.tpl index 0da3209080602cc358854e9e5ae9b743afe572b0..831c8c5fb7f825606d1d5653d4c6aac752ec0323 100644 --- a/civicrm/templates/CRM/Contribute/Form/Search/ContributionRecur.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Search/ContributionRecur.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Contribute/Form/Search/EmptyResults.tpl index af2bd959ebf9fa72f3a0c6405ab53c1f114cea88..12dfc8e790d689694db87eeb6b17ce2707796806 100644 --- a/civicrm/templates/CRM/Contribute/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/SearchContribution.tpl b/civicrm/templates/CRM/Contribute/Form/SearchContribution.tpl index 05e7392589844179b268dc0ab68d4710ed21bd5b..bdc4f25ea68840e2d2d0a5d8aa90160a4d0a216b 100644 --- a/civicrm/templates/CRM/Contribute/Form/SearchContribution.tpl +++ b/civicrm/templates/CRM/Contribute/Form/SearchContribution.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Selector.tpl b/civicrm/templates/CRM/Contribute/Form/Selector.tpl index e4565b1b252834cd074c28aa95aaaff0305d2b55..57b961e702cee1b62920f43c82b64de0407a5f5f 100644 --- a/civicrm/templates/CRM/Contribute/Form/Selector.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/SoftCredit.tpl b/civicrm/templates/CRM/Contribute/Form/SoftCredit.tpl index eb9ea2b1da6ac663bbec57d25b78d9c4afa272f3..69fad09a61b8548bda0f37b2a6e835947c72a90b 100644 --- a/civicrm/templates/CRM/Contribute/Form/SoftCredit.tpl +++ b/civicrm/templates/CRM/Contribute/Form/SoftCredit.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task.tpl b/civicrm/templates/CRM/Contribute/Form/Task.tpl index 387d73200331cc8f51ad073b5c98ba2785ed4749..71851c3d913c031a95618ceed2c52bbd487105a7 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/Batch.tpl b/civicrm/templates/CRM/Contribute/Form/Task/Batch.tpl index b351c52c5fca51a8de53df97673c0cb606c90b77..d32045069bb8d67da4c05e640629f3aeccb1391b 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/Batch.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/Batch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/Delete.tpl b/civicrm/templates/CRM/Contribute/Form/Task/Delete.tpl index d9c0a6349a32df360afc46b7ddb6e1bfca3c8e90..cbd820a813dd4668788fb84c54c8acbdb8dc789c 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/Delete.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/Email.tpl b/civicrm/templates/CRM/Contribute/Form/Task/Email.tpl index aaed296b1be2bafb31bc83cd0e73e9e8f03f5b38..9b7a13ada8bd503c9f100352fed2af347406aecd 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/Email.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/Invoice.hlp b/civicrm/templates/CRM/Contribute/Form/Task/Invoice.hlp index 8e9fb84ec58b8c84597472538a37a161b6daef1e..243d06e4ebea590b54732fd3f38c77b86c075a33 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/Invoice.hlp +++ b/civicrm/templates/CRM/Contribute/Form/Task/Invoice.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/Invoice.tpl b/civicrm/templates/CRM/Contribute/Form/Task/Invoice.tpl index fd2a6cb9184d0421648f0a52ce21c8cdc09c3bb0..9ef3b0cc8c22ae3822cffaf798c69343068d7773 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/Invoice.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/Invoice.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/PDF.tpl b/civicrm/templates/CRM/Contribute/Form/Task/PDF.tpl index a198d00a5882b030bf832b83c7203cc0287575d5..897d88a2847d0ee691801486933fd3fbd846d55d 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/PDF.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/PDF.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/PDFLetter.hlp b/civicrm/templates/CRM/Contribute/Form/Task/PDFLetter.hlp index 187b5565aefcd482709e05f3b98f5d1d4a00c002..aafc8bb6a005779daa8ea5f89f841dc6c9a43ce1 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/PDFLetter.hlp +++ b/civicrm/templates/CRM/Contribute/Form/Task/PDFLetter.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/PDFLetter.tpl b/civicrm/templates/CRM/Contribute/Form/Task/PDFLetter.tpl index e7428768258bcd821594ba8967a02cc06ed01d9c..d3ea86506c4e76fccbff16a80a07e75dea3947da 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/PDFLetter.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/PDFLetter.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/PickProfile.tpl b/civicrm/templates/CRM/Contribute/Form/Task/PickProfile.tpl index fcaf5ad1bbdb313d0dcf7664bd68345f0cb59ecb..6a78ba526f8c0e31a5d7ba82269382683efae710 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/PickProfile.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/PickProfile.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/Print.tpl b/civicrm/templates/CRM/Contribute/Form/Task/Print.tpl index aa4db527c0dd7554781621de2ca911a1c0b5cb2d..c33fde8f94f45628b0f8b3e566246e90e23dd427 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/Result.tpl b/civicrm/templates/CRM/Contribute/Form/Task/Result.tpl index 7957fae6f7c6ea1ce4b47d7672c0fecd317a5f89..87c0cca0e2335e299097609f569f3a866b732156 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/Result.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/Result.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/Task/Status.tpl b/civicrm/templates/CRM/Contribute/Form/Task/Status.tpl index b151869b319cdf89d92773eaa71497b5e4c13b0d..3e15ecf1df0212e646f59302f56e81c919f8b9a1 100644 --- a/civicrm/templates/CRM/Contribute/Form/Task/Status.tpl +++ b/civicrm/templates/CRM/Contribute/Form/Task/Status.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/UpdateBilling.tpl b/civicrm/templates/CRM/Contribute/Form/UpdateBilling.tpl index c4ddd70878f06f5b729f86d268c21b61e7b1bf36..88b4a40f8af5f5804d430999d4920448d9a4b191 100644 --- a/civicrm/templates/CRM/Contribute/Form/UpdateBilling.tpl +++ b/civicrm/templates/CRM/Contribute/Form/UpdateBilling.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Form/UpdateSubscription.tpl b/civicrm/templates/CRM/Contribute/Form/UpdateSubscription.tpl index dc9c72f1461b286a761e6d81eccabeb97c2eb11c..a06f23cae1d5fcd4260756df6b380c2f1c9746a9 100644 --- a/civicrm/templates/CRM/Contribute/Form/UpdateSubscription.tpl +++ b/civicrm/templates/CRM/Contribute/Form/UpdateSubscription.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Import/Form/DataSource.hlp b/civicrm/templates/CRM/Contribute/Import/Form/DataSource.hlp index 8559bcdba39f385a7aad47da2cfbebbcbfa82e9e..c4963e8089ae19173582a0997f00826591dc51aa 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/DataSource.hlp +++ b/civicrm/templates/CRM/Contribute/Import/Form/DataSource.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Contribute/Import/Form/DataSource.tpl index 9306ad4e2600b6339da1f64f7413e5e82d53f510..ec80b0e014ab6ba52b8c3571f020abb98d020f4f 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Contribute/Import/Form/DataSource.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Import/Form/MapField.tpl b/civicrm/templates/CRM/Contribute/Import/Form/MapField.tpl index 8d7b66cf8482179b931760bed277837a778a46cd..4fa94d704f86bf3b5735bfe5802245ce5c2bbb9f 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/MapField.tpl +++ b/civicrm/templates/CRM/Contribute/Import/Form/MapField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Import/Form/MapTable.tpl b/civicrm/templates/CRM/Contribute/Import/Form/MapTable.tpl index 586fa32a5977db45cb2b147d267bf13173994889..4648d6a8d87efcc5780e34106ed91df33b8f5b0e 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/MapTable.tpl +++ b/civicrm/templates/CRM/Contribute/Import/Form/MapTable.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Import/Form/Preview.tpl b/civicrm/templates/CRM/Contribute/Import/Form/Preview.tpl index 9031b3d72fb535ce6b0deba3cd81ec8bc730ccb5..f69fc1f9ecb853cc472305af5215c70147fc07af 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Contribute/Import/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Import/Form/Summary.tpl b/civicrm/templates/CRM/Contribute/Import/Form/Summary.tpl index 4e53ab30f76366fa4cabe1e1b7e9e67b50467941..eb39d80748773a775134a027882369ee1a32768b 100644 --- a/civicrm/templates/CRM/Contribute/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Contribute/Import/Form/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionPage.hlp b/civicrm/templates/CRM/Contribute/Page/ContributionPage.hlp index e52c16e6b8ca5f4e2f56c9ac44a351929837162f..b349636cc7393445021305d21dc420953c20988c 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionPage.hlp +++ b/civicrm/templates/CRM/Contribute/Page/ContributionPage.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionPage.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionPage.tpl index 93154a1847bea93b19daf13ca1f82ef165846b17..02506aef6e76bf895550da3dd6d0b0d01883b1f2 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionPage.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionPage.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl index 6ab8e225947e08c003205997ebab06b1a8962f37..d825557da9dee8aaaf342eb8eb922785c9dc38a5 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionRecur.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionSoft.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionSoft.tpl index 62ca07c907944b44c8c1ced4e0a82b28ec069516..714195c1cd4edcf22d2a147dc5f02bc17f2b6457 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionSoft.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionSoft.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl index bc63153a0382504a83a89c837292ec17f88a1f46..20936373eceee5d80e5905c8e004dcd8fd748e80 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionTotals.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/ContributionType.tpl b/civicrm/templates/CRM/Contribute/Page/ContributionType.tpl index fc8c8d58456f420adab09796cf169706e0bffc6c..0e101fb2ed74e30445594c2704d967c766a59c6d 100644 --- a/civicrm/templates/CRM/Contribute/Page/ContributionType.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ContributionType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/DashBoard.hlp b/civicrm/templates/CRM/Contribute/Page/DashBoard.hlp index 1e2edb384f73c0a915df0950ddfc1d1d3b9cf8a6..d034589210a28002d35e954544909de4f1fa9e6c 100644 --- a/civicrm/templates/CRM/Contribute/Page/DashBoard.hlp +++ b/civicrm/templates/CRM/Contribute/Page/DashBoard.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl b/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl index c1edbd405e18cbe3aaea416a1b6e873556e5e752..0062ea8308efaac771a7d070f2dc7780df9cf684 100644 --- a/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Contribute/Page/DashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/ManagePremiums.tpl b/civicrm/templates/CRM/Contribute/Page/ManagePremiums.tpl index eb2eb717d1c22667560b902fcee86c1cd623bf6d..9c5a68f81c57434bdc8dffb5e26b3cd191e2d90a 100644 --- a/civicrm/templates/CRM/Contribute/Page/ManagePremiums.tpl +++ b/civicrm/templates/CRM/Contribute/Page/ManagePremiums.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/PaymentInfo.tpl b/civicrm/templates/CRM/Contribute/Page/PaymentInfo.tpl index 065b16eb7958afaad84274767dab47002b90023d..b27cad046c8f99c45cf18ff961206c93fec3d20a 100644 --- a/civicrm/templates/CRM/Contribute/Page/PaymentInfo.tpl +++ b/civicrm/templates/CRM/Contribute/Page/PaymentInfo.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/PcpUserDashboard.tpl b/civicrm/templates/CRM/Contribute/Page/PcpUserDashboard.tpl index 1ac7cc2f6426693f064c839d7a844fca8cff5505..6a519d0228904bcf1160e12b9ca2dcd6434ee3aa 100644 --- a/civicrm/templates/CRM/Contribute/Page/PcpUserDashboard.tpl +++ b/civicrm/templates/CRM/Contribute/Page/PcpUserDashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/Premium.tpl b/civicrm/templates/CRM/Contribute/Page/Premium.tpl index 2e1b9ff50f49d7f3089d67beca85795632335c4a..ac2ddb78efc4a61807bf525f0e312444ff2cba4f 100644 --- a/civicrm/templates/CRM/Contribute/Page/Premium.tpl +++ b/civicrm/templates/CRM/Contribute/Page/Premium.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/SubscriptionStatus.tpl b/civicrm/templates/CRM/Contribute/Page/SubscriptionStatus.tpl index 631592b7e51ddac0ea5fa9687962ba476dac45f7..19bfa2cef2fff205ae5994bf938e31d8ba017dff 100644 --- a/civicrm/templates/CRM/Contribute/Page/SubscriptionStatus.tpl +++ b/civicrm/templates/CRM/Contribute/Page/SubscriptionStatus.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/Tab.hlp b/civicrm/templates/CRM/Contribute/Page/Tab.hlp index 96ce0302074a2238c3955658c002ee3ea685ce5d..630a0fb4c753d1c96316c3e30d91d8a6945138c6 100644 --- a/civicrm/templates/CRM/Contribute/Page/Tab.hlp +++ b/civicrm/templates/CRM/Contribute/Page/Tab.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,6 +30,13 @@ {ts}Optional identifier for the contribution source (campaign name, event, mailer, etc.).{/ts} {/htxt} +{htxt id="id-total_amount-title"} + {ts}Total Amount{/ts} +{/htxt} +{htxt id="id-total_amount"} +{ts 1='target="_blank" href="https://civicrm.org/extensions/line-item-editor"'}You are not allowed to change the total amount as it will lead to incorrect line item entries. You can either delete or recreate or install <a %1>Line Item Editor</a>.{/ts} +{/htxt} + {htxt id="id-financial_type-title"} {ts}Financial Type{/ts} {/htxt} @@ -78,7 +85,7 @@ <p> {ts}When contributions are made via a Personal Campaign Page a soft credit (of type 'Personal Campaign Page') is automatically created and assigned to the 'owner' of the the Personal Campaign Page.{/ts} </p> -{/htxt} +{/htxt} {htxt id="adjust-payment-amount-title"} {ts}Payment Amount{/ts} diff --git a/civicrm/templates/CRM/Contribute/Page/Tab.tpl b/civicrm/templates/CRM/Contribute/Page/Tab.tpl index ce182cb383268fb2657e0e509cfbfe59fa0ff6dd..68690af559cbef8b20b89e5cdcb9e7f0511fb081 100644 --- a/civicrm/templates/CRM/Contribute/Page/Tab.tpl +++ b/civicrm/templates/CRM/Contribute/Page/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl b/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl index aca4d26a45a2af8842004ec735df2d03fc43c09b..9012101ebfb189f1a704f6b3734dec7ed55d66ef 100644 --- a/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl +++ b/civicrm/templates/CRM/Contribute/Page/UserDashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/AgeRange.tpl b/civicrm/templates/CRM/Core/AgeRange.tpl index ab6164c19d294c9a86ffe075e73bfedc64f0500a..b7ac7496a3bcd6a5c5fac63a3dba777e843fa41d 100644 --- a/civicrm/templates/CRM/Core/AgeRange.tpl +++ b/civicrm/templates/CRM/Core/AgeRange.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/BillingBlock.tpl b/civicrm/templates/CRM/Core/BillingBlock.tpl index 1f4d394a89afb3e6dbc198677d15235c3cac5493..57a0bf8fda9e942d23aa69d9f4d5741eff67790b 100644 --- a/civicrm/templates/CRM/Core/BillingBlock.tpl +++ b/civicrm/templates/CRM/Core/BillingBlock.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/BillingBlockWrapper.tpl b/civicrm/templates/CRM/Core/BillingBlockWrapper.tpl index 37a7d31acd3eede1c954300d5ed2302800a68ee8..318de176cf16c1cab6c264104785d855b9e775a3 100644 --- a/civicrm/templates/CRM/Core/BillingBlockWrapper.tpl +++ b/civicrm/templates/CRM/Core/BillingBlockWrapper.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Calendar/GData.tpl b/civicrm/templates/CRM/Core/Calendar/GData.tpl index 549cd8330400adc815b765e3b790a2de1f270a02..c519c7778e7e22ee4876dde0fc5081f2d482d4ad 100644 --- a/civicrm/templates/CRM/Core/Calendar/GData.tpl +++ b/civicrm/templates/CRM/Core/Calendar/GData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Calendar/ICal.tpl b/civicrm/templates/CRM/Core/Calendar/ICal.tpl index 5d47eec4b3fa5c8d8ef8ac06941d7c604b93a8f2..b576a317d9e63535b877150351b6d447baf36ed5 100644 --- a/civicrm/templates/CRM/Core/Calendar/ICal.tpl +++ b/civicrm/templates/CRM/Core/Calendar/ICal.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Calendar/Rss.tpl b/civicrm/templates/CRM/Core/Calendar/Rss.tpl index 0fd60f0de313b1defbabd232fb3aa57921c67fbe..7f0a1bc82f85bae3433e4a787a12bba53d6dbaec 100644 --- a/civicrm/templates/CRM/Core/Calendar/Rss.tpl +++ b/civicrm/templates/CRM/Core/Calendar/Rss.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Date.tpl b/civicrm/templates/CRM/Core/Date.tpl index 72e017406bac30aad988a1f1fe7bdcd016e12007..df0afc92cfe9715652ada5f22fc92399a7d8ef36 100644 --- a/civicrm/templates/CRM/Core/Date.tpl +++ b/civicrm/templates/CRM/Core/Date.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/DateRange.tpl b/civicrm/templates/CRM/Core/DateRange.tpl index 723f3286fc7fa73d0d1ac32165dc72236ddedc24..60b6419f165c66295615292d3ec8e67757769c7c 100644 --- a/civicrm/templates/CRM/Core/DateRange.tpl +++ b/civicrm/templates/CRM/Core/DateRange.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Form/RecurringEntity.hlp b/civicrm/templates/CRM/Core/Form/RecurringEntity.hlp index ab164488cda7bbebca0885dff01b7a2b439fa0d4..e25bd79a14a3ee232c71246081238bb8b1e29682 100644 --- a/civicrm/templates/CRM/Core/Form/RecurringEntity.hlp +++ b/civicrm/templates/CRM/Core/Form/RecurringEntity.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Form/RecurringEntity.tpl b/civicrm/templates/CRM/Core/Form/RecurringEntity.tpl index ab83fcd8449d4dbc3dba31198d65b98135593597..d697566ad84fdd48b5458a432c7bf6b5930627e0 100644 --- a/civicrm/templates/CRM/Core/Form/RecurringEntity.tpl +++ b/civicrm/templates/CRM/Core/Form/RecurringEntity.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Form/ShortCode.tpl b/civicrm/templates/CRM/Core/Form/ShortCode.tpl index 4458d53ddfd8cd4db2d49923567e1e515e43a58d..741c04f62d3ff7b386232f4f8c7ba5554b921c67 100644 --- a/civicrm/templates/CRM/Core/Form/ShortCode.tpl +++ b/civicrm/templates/CRM/Core/Form/ShortCode.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Form/Task/Batch.tpl b/civicrm/templates/CRM/Core/Form/Task/Batch.tpl new file mode 100644 index 0000000000000000000000000000000000000000..ecb06368601f9309003b6d5c4b3714800669933a --- /dev/null +++ b/civicrm/templates/CRM/Core/Form/Task/Batch.tpl @@ -0,0 +1,66 @@ +{* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ +*} +<div class="crm-block crm-form-block crm-{$taskComponent.lc}-task-batch-form-block"> +<div class="help"> + {ts 1=$taskComponent.lc 2=$taskComponent.ucfirst}Update field values for each %1 as needed. Click <strong>Update %2s</strong> below to save all your changes. To set a field to the same value for ALL rows, enter that value for the first %1 and then click the <strong>Copy icon</strong> (next to the column title).{/ts} +</div> + <div class="crm-submit-buttons"> + {if $fields}{$form._qf_Batch_refresh.html}{/if} {include file="CRM/common/formButtons.tpl" location="top"} + </div> + <table class="crm-copy-fields"> + <thead class="sticky"> + <tr class="columnheader"> + {foreach from=$readOnlyFields item=fTitle key=fName} + <th>{$fTitle}</th> + {/foreach} + + {foreach from=$fields item=field key=fieldName} + <td><img src="{$config->resourceBase}i/copy.png" alt="{ts 1=$field.title}Click to copy %1 from row one to all rows.{/ts}" fname="{$field.name}" class="action-icon" title="{ts}Click here to copy the value in row one to ALL rows.{/ts}" />{$field.title}</td> + {/foreach} + </tr> + </thead> + {foreach from=$componentIds item=mid} + <tr class="{cycle values="odd-row,even-row"}" entity_id="{$mid}"> + + {foreach from=$readOnlyFields item=fTitle key=fName} + <td>{$contactDetails.$mid.$fName}</td> + {/foreach} + + {foreach from=$fields item=field key=fieldName} + {assign var=n value=$field.name} + <td class="compressed">{$form.field.$mid.$n.html}</td> + {/foreach} + </tr> + {/foreach} + </tr> + </table> + <div class="crm-submit-buttons"> + {if $fields}{$form._qf_Batch_refresh.html}{/if} {include file="CRM/common/formButtons.tpl" location="bottom"} + </div> +</div> + +{*include batch copy js js file*} +{include file="CRM/common/batchCopy.tpl"} diff --git a/civicrm/templates/CRM/Core/Form/Task/PickProfile.tpl b/civicrm/templates/CRM/Core/Form/Task/PickProfile.tpl new file mode 100644 index 0000000000000000000000000000000000000000..e1c021788eb870e2ce13a0973b37cbc7e9846d22 --- /dev/null +++ b/civicrm/templates/CRM/Core/Form/Task/PickProfile.tpl @@ -0,0 +1,40 @@ +{* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ +*} +<div class="crm-form crm-form-block crm-{$taskComponent.lc}-task-pickprofile-form-block"> +<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> + <table class="form-layout-compressed"> + <tr class="crm-{$taskComponent.lc}-task-pickprofile-form-block-uf_group_id"> + <td class="label">{$form.uf_group_id.label}</td><td>{$form.uf_group_id.html}</td> + </tr> + <tr> + <td></td> + <td> + {assign var="ucfirst" value=$taskComponent.ucfirst} + {include file="CRM/$ucfirst/Form/Task.tpl"}</td> + </tr> + </table> + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div> +</div> diff --git a/civicrm/templates/CRM/Core/I18n/Dialog.tpl b/civicrm/templates/CRM/Core/I18n/Dialog.tpl index 335bd4d14cb00668b88cbab166407f74ce8ae497..0108e8b12380f6b8b031db6ee7b7d0a8f3823b89 100644 --- a/civicrm/templates/CRM/Core/I18n/Dialog.tpl +++ b/civicrm/templates/CRM/Core/I18n/Dialog.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/I18n/Form.tpl b/civicrm/templates/CRM/Core/I18n/Form.tpl index ec9a83016be9cb256d3ae9d3c95cf0ef87b7446a..3553ec99091f64f264085e6bfd2dfdaaaa8f73e0 100644 --- a/civicrm/templates/CRM/Core/I18n/Form.tpl +++ b/civicrm/templates/CRM/Core/I18n/Form.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Core/Page/RecurringEntityPreview.tpl b/civicrm/templates/CRM/Core/Page/RecurringEntityPreview.tpl index ca656fbc5dafa8b3c8de8fce273eb4ff9a790775..ccbf5dc3cec14e4cb25fe3f85033e1c4e6a9bfbd 100644 --- a/civicrm/templates/CRM/Core/Page/RecurringEntityPreview.tpl +++ b/civicrm/templates/CRM/Core/Page/RecurringEntityPreview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/ChangeFieldType.tpl b/civicrm/templates/CRM/Custom/Form/ChangeFieldType.tpl index 975d183345983977c48a0652dcf4a9b7d4b7e250..da356565608f88abaf19dbec7f1f37f4b73ea4e7 100644 --- a/civicrm/templates/CRM/Custom/Form/ChangeFieldType.tpl +++ b/civicrm/templates/CRM/Custom/Form/ChangeFieldType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/ContactReference.tpl b/civicrm/templates/CRM/Custom/Form/ContactReference.tpl index 26a5f3847879d7e515caf616581b82835dd9e5de..c92b1967ba9f74521590f1badedf8fe3efe95b2e 100644 --- a/civicrm/templates/CRM/Custom/Form/ContactReference.tpl +++ b/civicrm/templates/CRM/Custom/Form/ContactReference.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/CustomData.tpl b/civicrm/templates/CRM/Custom/Form/CustomData.tpl index c8f7982a5e4741403a9741633e726445aca868f6..d06e35c438eeade225a1567b04b26bfea8ea9eca 100644 --- a/civicrm/templates/CRM/Custom/Form/CustomData.tpl +++ b/civicrm/templates/CRM/Custom/Form/CustomData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/CustomField.hlp b/civicrm/templates/CRM/Custom/Form/CustomField.hlp index 599c9ad4da16c407187b7175962c851e08cd93f2..7f1e3bde972a756ad2345c63011b536092013c6c 100644 --- a/civicrm/templates/CRM/Custom/Form/CustomField.hlp +++ b/civicrm/templates/CRM/Custom/Form/CustomField.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/CustomField.tpl b/civicrm/templates/CRM/Custom/Form/CustomField.tpl index 2bb5ac0744af8689cd48c8a847bd72962d8320a6..7dc3cd29381c8117d478390305fb96fe54126390 100644 --- a/civicrm/templates/CRM/Custom/Form/CustomField.tpl +++ b/civicrm/templates/CRM/Custom/Form/CustomField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/DeleteField.tpl b/civicrm/templates/CRM/Custom/Form/DeleteField.tpl index 47dbd8c1cef876b709e832c7632b83f0368467cb..f37ff90c6c36c5688cce9f3ddc8920e6cfe0efcf 100644 --- a/civicrm/templates/CRM/Custom/Form/DeleteField.tpl +++ b/civicrm/templates/CRM/Custom/Form/DeleteField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/DeleteFile.tpl b/civicrm/templates/CRM/Custom/Form/DeleteFile.tpl index f93257017bfc823198951c3fa8e9e0f4d74c83e7..1fdbb440c8080dd45e0350150b9bc1463c9a80df 100644 --- a/civicrm/templates/CRM/Custom/Form/DeleteFile.tpl +++ b/civicrm/templates/CRM/Custom/Form/DeleteFile.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/DeleteGroup.tpl b/civicrm/templates/CRM/Custom/Form/DeleteGroup.tpl index bf8714b605dd3e4ab2a7231703b71f883572f917..a66b17c7ac4ea507b0dc3aae58a90a70d2684ddf 100644 --- a/civicrm/templates/CRM/Custom/Form/DeleteGroup.tpl +++ b/civicrm/templates/CRM/Custom/Form/DeleteGroup.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/Field.hlp b/civicrm/templates/CRM/Custom/Form/Field.hlp index 91e75dcfb839410eccb7a305a807ba8e672572b4..0cb6f112eac203972bf46417f2978c37e8b6195d 100644 --- a/civicrm/templates/CRM/Custom/Form/Field.hlp +++ b/civicrm/templates/CRM/Custom/Form/Field.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/Field.tpl b/civicrm/templates/CRM/Custom/Form/Field.tpl index 9831b3023a8acb7c0e02931cbcfd3bdfbbbf0e53..040c3d786be596ae7b893bb763083bc69514ab5c 100644 --- a/civicrm/templates/CRM/Custom/Form/Field.tpl +++ b/civicrm/templates/CRM/Custom/Form/Field.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/Group.tpl b/civicrm/templates/CRM/Custom/Form/Group.tpl index a2e5f44606bd029c09dfdd23f6255bfb8de3331f..467063de5a32e59c09ecdded5bd7388c9a66edc9 100644 --- a/civicrm/templates/CRM/Custom/Form/Group.tpl +++ b/civicrm/templates/CRM/Custom/Form/Group.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/MoveField.tpl b/civicrm/templates/CRM/Custom/Form/MoveField.tpl index 11fdafc1c51b6c6cb60d40c9bd0c21a8d65cd093..40ba0c022b7646d6bedd28d1cbb9477ead19ccbc 100644 --- a/civicrm/templates/CRM/Custom/Form/MoveField.tpl +++ b/civicrm/templates/CRM/Custom/Form/MoveField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/MultiValueSearch.js.tpl b/civicrm/templates/CRM/Custom/Form/MultiValueSearch.js.tpl index c8f6d431722e27c54d7d071cd9b3d49e966a56da..dabc57c1c013a58a5c6f292d55e83392c2c6d245 100644 --- a/civicrm/templates/CRM/Custom/Form/MultiValueSearch.js.tpl +++ b/civicrm/templates/CRM/Custom/Form/MultiValueSearch.js.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/Option.tpl b/civicrm/templates/CRM/Custom/Form/Option.tpl index ac2a45ac22730965bbb897504b8c114c38888ef3..67da170999106910a38515020a854f731df3c499 100644 --- a/civicrm/templates/CRM/Custom/Form/Option.tpl +++ b/civicrm/templates/CRM/Custom/Form/Option.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/Optionfields.tpl b/civicrm/templates/CRM/Custom/Form/Optionfields.tpl index 282d4bdab4ba6265eaee88e3d888939049580bc7..076cc6175385db8a2efb9de36e32f620c85356cd 100644 --- a/civicrm/templates/CRM/Custom/Form/Optionfields.tpl +++ b/civicrm/templates/CRM/Custom/Form/Optionfields.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/Preview.tpl b/civicrm/templates/CRM/Custom/Form/Preview.tpl index 1f21fc338044d04cad758b85fece86212e2011d4..7d5d9620139d1ab0102e941c6d3ed33a269c44ab 100644 --- a/civicrm/templates/CRM/Custom/Form/Preview.tpl +++ b/civicrm/templates/CRM/Custom/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Form/Search.tpl b/civicrm/templates/CRM/Custom/Form/Search.tpl index 6a028eb26beb5aac0b12a87f57faba40774226c7..345b4019b54014d3f824c5e27c908302e072235d 100644 --- a/civicrm/templates/CRM/Custom/Form/Search.tpl +++ b/civicrm/templates/CRM/Custom/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Import/Form/DataSource.hlp b/civicrm/templates/CRM/Custom/Import/Form/DataSource.hlp index 8921d73bdf764b10b1b7c03f73ef3fbfed2570ed..98eb6f8de45f4e227de52894641369b2255eebbd 100644 --- a/civicrm/templates/CRM/Custom/Import/Form/DataSource.hlp +++ b/civicrm/templates/CRM/Custom/Import/Form/DataSource.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Custom/Import/Form/DataSource.tpl index 8fae1b4bb0d933515310a0baee902b181b91da32..2c4a750b5f0a5904e4f6f0a45e5163df9f5a2885 100644 --- a/civicrm/templates/CRM/Custom/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Custom/Import/Form/DataSource.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Import/Form/MapField.tpl b/civicrm/templates/CRM/Custom/Import/Form/MapField.tpl index 0ffcb951dab120cedd93eda094c10ebf81da096f..ba9c298cd57b734bc29af220a8bf3923ccdbdee1 100644 --- a/civicrm/templates/CRM/Custom/Import/Form/MapField.tpl +++ b/civicrm/templates/CRM/Custom/Import/Form/MapField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Import/Form/Preview.tpl b/civicrm/templates/CRM/Custom/Import/Form/Preview.tpl index 2224ab0d82766ef5b3a331ea7955927183d874b4..6b1b6c02e0967d2a625163614740e61bd9f1cbc3 100644 --- a/civicrm/templates/CRM/Custom/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Custom/Import/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Import/Form/Summary.tpl b/civicrm/templates/CRM/Custom/Import/Form/Summary.tpl index 5b145255dd263ca4ef05261bd247158f6eb067d8..76b0a81ceb355eb1aad02f512d223eb6f40107fc 100644 --- a/civicrm/templates/CRM/Custom/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Custom/Import/Form/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Page/CustomDataView.tpl b/civicrm/templates/CRM/Custom/Page/CustomDataView.tpl index 7ca5676697f0c76d25dc46b0aa9a5c57cb36706d..021c3ae5d2eade495d0e44e1058e0b409f92e254 100644 --- a/civicrm/templates/CRM/Custom/Page/CustomDataView.tpl +++ b/civicrm/templates/CRM/Custom/Page/CustomDataView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Page/Field.tpl b/civicrm/templates/CRM/Custom/Page/Field.tpl index d838dfeece04c100bb3a8c67e6103d003be4525f..2bb4e2fddadd51f3178786e87cce7ad533888a3e 100644 --- a/civicrm/templates/CRM/Custom/Page/Field.tpl +++ b/civicrm/templates/CRM/Custom/Page/Field.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Page/Group.hlp b/civicrm/templates/CRM/Custom/Page/Group.hlp index 93dd782327039614e9f382f2c2a42cc9e1e9c14f..fd54d36ce30f6c5f3c2a9753f0686d79e1ac5d18 100644 --- a/civicrm/templates/CRM/Custom/Page/Group.hlp +++ b/civicrm/templates/CRM/Custom/Page/Group.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Page/Group.tpl b/civicrm/templates/CRM/Custom/Page/Group.tpl index d0dd3091ba40a258e5f5f32365b8ec8faca8bb95..b5710cd13b450bd18593c31f857602969e8913ba 100644 --- a/civicrm/templates/CRM/Custom/Page/Group.tpl +++ b/civicrm/templates/CRM/Custom/Page/Group.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Custom/Page/Option.tpl b/civicrm/templates/CRM/Custom/Page/Option.tpl index 6ccc8a6206018c6e28f374f7e39fba336215ed8a..f388d80ff5d2c06099b879875aac089d3fb16cf1 100644 --- a/civicrm/templates/CRM/Custom/Page/Option.tpl +++ b/civicrm/templates/CRM/Custom/Page/Option.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Dashlet/Page/Activity.tpl b/civicrm/templates/CRM/Dashlet/Page/Activity.tpl index dcecb83055b12e9aa1fecee8ed490877b89dd436..458d17488ab809de4d4e4cfb793c33c4743cc339 100644 --- a/civicrm/templates/CRM/Dashlet/Page/Activity.tpl +++ b/civicrm/templates/CRM/Dashlet/Page/Activity.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Dashlet/Page/AllCases.tpl b/civicrm/templates/CRM/Dashlet/Page/AllCases.tpl index 0431db42fad821b58cee76e7b049baa0c682944a..ba881f178f124ffe42f295db803900d30baa870d 100644 --- a/civicrm/templates/CRM/Dashlet/Page/AllCases.tpl +++ b/civicrm/templates/CRM/Dashlet/Page/AllCases.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Dashlet/Page/Blog.tpl b/civicrm/templates/CRM/Dashlet/Page/Blog.tpl index e95fc2941dd182208e520cfadcdcba7e147dcbcf..6eeab135bcdf71117db22dd1b5d627b96ba8b191 100644 --- a/civicrm/templates/CRM/Dashlet/Page/Blog.tpl +++ b/civicrm/templates/CRM/Dashlet/Page/Blog.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Dashlet/Page/CaseDashboard.tpl b/civicrm/templates/CRM/Dashlet/Page/CaseDashboard.tpl index d7198e883ce4d2c610f323031707f727c8b746c1..2795b321d84dbf4b5a4fa01e77cfcaf3f9920554 100644 --- a/civicrm/templates/CRM/Dashlet/Page/CaseDashboard.tpl +++ b/civicrm/templates/CRM/Dashlet/Page/CaseDashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Dashlet/Page/GettingStarted.tpl b/civicrm/templates/CRM/Dashlet/Page/GettingStarted.tpl index 32b76adc7ea11b424744bdcc72952135f56d9b48..9892b72214e5c8604086e12d8da0d1e45b6e3223 100644 --- a/civicrm/templates/CRM/Dashlet/Page/GettingStarted.tpl +++ b/civicrm/templates/CRM/Dashlet/Page/GettingStarted.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Dashlet/Page/MyCases.tpl b/civicrm/templates/CRM/Dashlet/Page/MyCases.tpl index 83809103998f7cb9964531cbb4d1d7e1c0c7f1ca..5636bc47b0307d413cdd777d1592ebdcdfdc1b6a 100644 --- a/civicrm/templates/CRM/Dashlet/Page/MyCases.tpl +++ b/civicrm/templates/CRM/Dashlet/Page/MyCases.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/EventFees.tpl b/civicrm/templates/CRM/Event/Form/EventFees.tpl index 41a1e385ea3c41c0df0c0a188ab8427db025c6fd..3a8a6ccccfbc7852e090cc8c1b7d4a876eac1763 100644 --- a/civicrm/templates/CRM/Event/Form/EventFees.tpl +++ b/civicrm/templates/CRM/Event/Form/EventFees.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Conference.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Conference.tpl index 434848bf504cb2edb915f24c93174809bce7068b..581009d461a1ab3a891a9f852d660d9b5f15dcfd 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Conference.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Conference.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl index 5c028b79016db00260b48df52a27b6894574849d..791a8b1167f59a0c74f8ea8fdf455d4ec7b272fe 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/ConfirmRepeatMode.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Delete.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Delete.tpl index 3fe1a574e69c9ae674621b16f5fb4c898a177cf2..82cd829aafe4e55331b356b08a8eaca853e4a783 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Delete.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.hlp b/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.hlp index 51def725cfa6c7639910e93c7afb4f429b179a4c..1f97ec54fc28a42a6bc148a4370ba9c22d6a3f1a 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.hlp +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.tpl index 72403c31a411e8cc77dcdfa1fb8d7bdffd96295c..aa3ee18c39452cb1e603c9c603775f6bb040941d 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/EventInfo.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Fee.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Fee.tpl index 6ba2f04cf601ad8e15ffa00a5cf1f44e371e223d..b3dcbce4f7f091224ed2ad1d46c29d8ec29bfa42 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Fee.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Fee.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -152,8 +152,12 @@ <div id="map-field" > <fieldset id="map-field"><legend>{ts}Regular Fees{/ts}</legend> - {ts}Use the table below to enter descriptive labels and amounts for up to ten event fee levels. These will be presented as a list of radio button options. Both the label and dollar amount will be displayed. You can also configure one or more sets of discounted fees by checking "Discounts by Signup Date" below.{/ts}<br /> - {if $isQuick}{ts}Click <a id='quickconfig' href='#'>here</a> if you want to configure the Regular Fees below as part of a Price Set, with the added flexibility and complexity that entails.{/ts}{/if} + <span class="description">{ts}Use the table below to enter descriptive labels and amounts for up to ten event fee levels. These will be presented as a list of radio button options. Both the label and dollar amount will be displayed. You can also configure one or more sets of discounted fees by checking "Discounts by Signup Date" below.{/ts} + <br /> + {if $isQuick} + {ts}Click <a id='quickconfig' href='#'>here</a> if you want to configure the Regular Fees below as part of a Price Set, with the added flexibility and complexity that entails.{/ts} + {/if} + </span> <table id="map-field-table"> <tr class="columnheader"><td scope="column">{ts}Fee Label{/ts}</td><td scope="column">{ts}Amount{/ts}</td><td scope="column">{ts}Default?{/ts}<br />{$form.default.0.html}</td></tr> {section name=loop start=1 loop=11} @@ -201,7 +205,7 @@ {if $discountSection} <fieldset id="map-field"><legend>{ts}Discounted Fees{/ts}</legend> - <p>{ts}Use the table below to enter descriptive labels and amounts for up to ten discounted event fees for each discount set. <strong>Don't forget to click 'Save' when you are finished.</strong>{/ts}</p> + <span class="description">{ts}Use the table below to enter descriptive labels and amounts for up to ten discounted event fees for each discount set. <strong>Don't forget to click 'Save' when you are finished.</strong>{/ts}</span> <table id="map-field-table"> <tr class="columnheader"> <td scope="column">{ts}Fee Label{/ts}</td> @@ -363,4 +367,4 @@ }); </script> {/literal} -{/if} \ No newline at end of file +{/if} diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Location.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Location.tpl index f2d512138f065dee5d48f8458b6081ab0bf51844..23833b625aab2f40d8a684c3698cf6601b27a235 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Location.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Location.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -71,11 +71,11 @@ </tr> <tr> <td><label>{ts}Phone 1:{/ts}</label></td> - <td>{$form.phone.1.phone.html|crmAddClass:phone} x{$form.phone.1.phone_ext.html|crmAddClass:four} {$form.phone.1.phone_type_id.html}</td> + <td>{$form.phone.1.phone.html|crmAddClass:phone} x {$form.phone.1.phone_ext.html|crmAddClass:four} {$form.phone.1.phone_type_id.html}</td> </tr> <tr> <td><label>{ts}Phone 2:{/ts}</label></td> - <td>{$form.phone.2.phone.html|crmAddClass:phone} x{$form.phone.2.phone_ext.html|crmAddClass:four} {$form.phone.2.phone_type_id.html}</td> + <td>{$form.phone.2.phone.html|crmAddClass:phone} x {$form.phone.2.phone_ext.html|crmAddClass:four} {$form.phone.2.phone_type_id.html}</td> </tr> </table> diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.hlp b/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.hlp index cd7ba714d8a1007eeee211ece62a384d69281cd0..edd0d4484788917e7a8df60fce5929b0fa72e6a3 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.hlp +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.tpl index 28604411071579d93f9816ae98b37cc8be24f96d..3d4471891feb17d7fd6e57d0aa7572d2175d773f 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Registration.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Repeat.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Repeat.tpl index 2fba70833300b8caa2ae086c73710969b35d946c..3b43da41a6cc28c58d17522bdf17c5aafd0ed36b 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Repeat.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Repeat.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.hlp b/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.hlp index 7ff1f077d68732e214408829da71c5f25786e483..d011a91297b3396c3c568a2e5f956ca4564de47c 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.hlp +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.tpl b/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.tpl index e19415cc5a5df6e79a35640c7a97c967064e384a..a29fba4f98f61c3f8af021043e0d1dcf777befe9 100644 --- a/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.tpl +++ b/civicrm/templates/CRM/Event/Form/ManageEvent/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Participant.tpl b/civicrm/templates/CRM/Event/Form/Participant.tpl index 59694d4adf693cb346678148dbdb0bdd710fc349..eef62491ecc04d1746c490c5149bce7f109fc1db 100644 --- a/civicrm/templates/CRM/Event/Form/Participant.tpl +++ b/civicrm/templates/CRM/Event/Form/Participant.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ParticipantFeeSelection.tpl b/civicrm/templates/CRM/Event/Form/ParticipantFeeSelection.tpl index 3fa67abf7684a8b5b20e6caad543bfb07110818a..8cb1428c5405109e2e323fb66fab1c777bfc2cc7 100644 --- a/civicrm/templates/CRM/Event/Form/ParticipantFeeSelection.tpl +++ b/civicrm/templates/CRM/Event/Form/ParticipantFeeSelection.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/ParticipantView.tpl b/civicrm/templates/CRM/Event/Form/ParticipantView.tpl index ddd25477acda27959c65e92c198fedc2cb31d692..4fcada8dafe34183516cc85c623e85ca3dc11d0e 100644 --- a/civicrm/templates/CRM/Event/Form/ParticipantView.tpl +++ b/civicrm/templates/CRM/Event/Form/ParticipantView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Registration/AdditionalParticipant.tpl b/civicrm/templates/CRM/Event/Form/Registration/AdditionalParticipant.tpl index be71a995546952dc3ad675fdd0b7ab25b8df5233..be11d597954e9ca362f9092385795e47ec8b4798 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/AdditionalParticipant.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/AdditionalParticipant.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -70,7 +70,7 @@ {include file="CRM/UF/Form/Block.tpl" fields=$additionalCustomPost} </div> -<div id="crm-submit-buttons"> +<div id="crm-submit-buttons" class="crm-submit-buttons"> {include file="CRM/common/formButtons.tpl"} </div> </div> diff --git a/civicrm/templates/CRM/Event/Form/Registration/Confirm.tpl b/civicrm/templates/CRM/Event/Form/Registration/Confirm.tpl index bbb719f49d5d4cfae7600227e4a35baafbc3392a..df82d7e575807817333c4bbe3261c0e81c3fd231 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/Confirm.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/Confirm.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Registration/DisplayProfile.tpl b/civicrm/templates/CRM/Event/Form/Registration/DisplayProfile.tpl index 7f31e6781b66ee2c2a22ffbeed80ffdf4d415775..8f58cdbd8d651c2e971bfde0bde4c548b9dd0231 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/DisplayProfile.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/DisplayProfile.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Registration/EventInfoBlock.tpl b/civicrm/templates/CRM/Event/Form/Registration/EventInfoBlock.tpl index 486d237f2110e524767e8f52022a4db4043cdadb..d675f8a1f7c412a974f54f6d3046bae5afccf7db 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/EventInfoBlock.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/EventInfoBlock.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Registration/ParticipantConfirm.tpl b/civicrm/templates/CRM/Event/Form/Registration/ParticipantConfirm.tpl index fedf18ce9b8608c255efe0aa554485dcb8fe5c0f..15a4df44a7b44ee71f7ab6b66f7074e5670f9d33 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/ParticipantConfirm.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/ParticipantConfirm.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ {$statusMsg} </div> - <div id="crm-submit-buttons"> + <div id="crm-submit-buttons" class="crm-submit-buttons"> {include file="CRM/common/formButtons.tpl" location="bottom"} </div> </div> diff --git a/civicrm/templates/CRM/Event/Form/Registration/PreviewHeader.tpl b/civicrm/templates/CRM/Event/Form/Registration/PreviewHeader.tpl index f9be9abeb6a209b444e313484b940e2ed28f1815..cf426ce7a149de7f729de8b4b19452075294b825 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/PreviewHeader.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/PreviewHeader.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Registration/Register.tpl b/civicrm/templates/CRM/Event/Form/Registration/Register.tpl index f2c93048147f68de2fdc984f9db24992b3ae1d48..24d684b1bdc120ec22a0071f4cd2d8b4681d4885 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/Register.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/Register.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Registration/ThankYou.tpl b/civicrm/templates/CRM/Event/Form/Registration/ThankYou.tpl index 9d0d70fa72d43c4550d3ca462101e02c8de1c406..a5f659f0600571c1ca892d1c0b029bbbf3b9a058 100644 --- a/civicrm/templates/CRM/Event/Form/Registration/ThankYou.tpl +++ b/civicrm/templates/CRM/Event/Form/Registration/ThankYou.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Search.tpl b/civicrm/templates/CRM/Event/Form/Search.tpl index 624702e39ddf534df0580615fd2a416f5a12bd60..5ab1d084dc1ce6c7cc50bcf7d389054fee6a24cc 100644 --- a/civicrm/templates/CRM/Event/Form/Search.tpl +++ b/civicrm/templates/CRM/Event/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Search/AdvancedSearchPane.tpl b/civicrm/templates/CRM/Event/Form/Search/AdvancedSearchPane.tpl index 986a84ac6b6f3abdc0f1846fa950e6b9b437381a..b58d7a836f809d68339f4ad3675bee51cd4bfebe 100644 --- a/civicrm/templates/CRM/Event/Form/Search/AdvancedSearchPane.tpl +++ b/civicrm/templates/CRM/Event/Form/Search/AdvancedSearchPane.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Search/Common.tpl b/civicrm/templates/CRM/Event/Form/Search/Common.tpl index 53439c3c8e4e043b02c85191636b4602781f0803..db08ceaee88d31f66007356c9896f2ab5e9c51cb 100644 --- a/civicrm/templates/CRM/Event/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Event/Form/Search/Common.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -33,16 +33,10 @@ <td class="crm-event-form-block-event_type_id"> {$form.event_type_id.label}<br />{$form.event_type_id.html} </td> </tr> <tr> - <td colspan="2"><label>{ts}Event Dates{/ts}</label></td> + {include file="CRM/Core/DateRange.tpl" fieldName="event" from='_start_date_low' to='_end_date_high' label="<label>Event Dates</label>"} </tr> <tr> -{include file="CRM/Core/DateRange.tpl" fieldName="event" from='_start_date_low' to='_end_date_high'} -</tr> -<tr> - <td><label>{ts}Registration Date{/ts}</label></td> -</tr> -<tr> -{include file="CRM/Core/DateRange.tpl" fieldName="participant" from='_register_date_low' to='_register_date_high'} + {include file="CRM/Core/DateRange.tpl" fieldName="participant" from='_register_date_low' to='_register_date_high' label="<label>Registration Date</label>"} </tr> <tr> <td class="crm-event-form-block-participant_status"><label>{$form.participant_status_id.label}</label> diff --git a/civicrm/templates/CRM/Event/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Event/Form/Search/EmptyResults.tpl index 151ed8434fe96be842534662bb1852970d6f489d..d020050c7716ad8d153452f322752da3d5c6f0bc 100644 --- a/civicrm/templates/CRM/Event/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Event/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Search/Results.hlp b/civicrm/templates/CRM/Event/Form/Search/Results.hlp index 5f36a890fa58765a2bec87f4b133cc2933afcc7c..26ef592a86ca62f321b70068419dd2bba1f0af74 100644 --- a/civicrm/templates/CRM/Event/Form/Search/Results.hlp +++ b/civicrm/templates/CRM/Event/Form/Search/Results.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/SearchEvent.tpl b/civicrm/templates/CRM/Event/Form/SearchEvent.tpl index afc6b080f01da7f175133bd73865edfc70bac917..b7b103a9e42f5ef5d6444a20c6aade6c32bd052c 100644 --- a/civicrm/templates/CRM/Event/Form/SearchEvent.tpl +++ b/civicrm/templates/CRM/Event/Form/SearchEvent.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Selector.tpl b/civicrm/templates/CRM/Event/Form/Selector.tpl index d359fcf3a9f38cbff7161bc55e0378e926e46066..3c89dbee760e1ec7c4136e3a6a1249f8f781c8c3 100644 --- a/civicrm/templates/CRM/Event/Form/Selector.tpl +++ b/civicrm/templates/CRM/Event/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/SelfSvcTransfer.tpl b/civicrm/templates/CRM/Event/Form/SelfSvcTransfer.tpl index bf56366f1405583476124a2c52e6fd8b756b025a..0481a84b5521244c4f0b1e209645a8b33a069cc4 100644 --- a/civicrm/templates/CRM/Event/Form/SelfSvcTransfer.tpl +++ b/civicrm/templates/CRM/Event/Form/SelfSvcTransfer.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/SelfSvcUpdate.tpl b/civicrm/templates/CRM/Event/Form/SelfSvcUpdate.tpl index 6792392148a3c153c0328f5965096a770386f721..d1937b59c75436a17ba1d6309d246586f2844c8c 100644 --- a/civicrm/templates/CRM/Event/Form/SelfSvcUpdate.tpl +++ b/civicrm/templates/CRM/Event/Form/SelfSvcUpdate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task.tpl b/civicrm/templates/CRM/Event/Form/Task.tpl index 8cad7a34c2a2f123a1f137aba51763b67049ef60..bdc8970337513bf00d8914761a06074db7146ad4 100644 --- a/civicrm/templates/CRM/Event/Form/Task.tpl +++ b/civicrm/templates/CRM/Event/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/AddToGroup.tpl b/civicrm/templates/CRM/Event/Form/Task/AddToGroup.tpl index ffb49d95089c8543a58866630975833189feaf20..02361f80a738cbabf72387f91bec1f61b9f8eab7 100644 --- a/civicrm/templates/CRM/Event/Form/Task/AddToGroup.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/AddToGroup.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/Badge.tpl b/civicrm/templates/CRM/Event/Form/Task/Badge.tpl index 122e4b61f21f3e7db1bdd67c12cc9d7840e09182..b319bbd3bdbf09a86b113d35a2ac30f094674d62 100644 --- a/civicrm/templates/CRM/Event/Form/Task/Badge.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/Badge.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/Batch.tpl b/civicrm/templates/CRM/Event/Form/Task/Batch.tpl index d5f5f04255c5771ee1ecb93cd7089c5e1f1d9989..8821f9342c2a03cfe6beb42bd9d2bed93dcaefc6 100644 --- a/civicrm/templates/CRM/Event/Form/Task/Batch.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/Batch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/Cancel.tpl b/civicrm/templates/CRM/Event/Form/Task/Cancel.tpl index f4f98ae326637b81dee605d1eb96001ab5d5f32c..33949de20adada00228e86506a5280c512918ac1 100644 --- a/civicrm/templates/CRM/Event/Form/Task/Cancel.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/Cancel.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/Delete.tpl b/civicrm/templates/CRM/Event/Form/Task/Delete.tpl index 9871e267e6f907a60aef6d7c1595298372a90803..dba6b54405c3d384ff6a860164167ace60a20e2d 100644 --- a/civicrm/templates/CRM/Event/Form/Task/Delete.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/Email.tpl b/civicrm/templates/CRM/Event/Form/Task/Email.tpl index aaed296b1be2bafb31bc83cd0e73e9e8f03f5b38..9b7a13ada8bd503c9f100352fed2af347406aecd 100644 --- a/civicrm/templates/CRM/Event/Form/Task/Email.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/PDF.tpl b/civicrm/templates/CRM/Event/Form/Task/PDF.tpl index f82ba1c772ef8728248ab49adad0f27237c1af8e..536d3e01ab459007e8d7008fe3901e246895f105 100644 --- a/civicrm/templates/CRM/Event/Form/Task/PDF.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/PDF.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/ParticipantStatus.hlp b/civicrm/templates/CRM/Event/Form/Task/ParticipantStatus.hlp index dbb6240332e2b8457fbb5a6e9de7abc7df4f13bc..0a97e667e173e16707d6a1e1c9b2d1c469e5eb9f 100644 --- a/civicrm/templates/CRM/Event/Form/Task/ParticipantStatus.hlp +++ b/civicrm/templates/CRM/Event/Form/Task/ParticipantStatus.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/ParticipantStatus.tpl b/civicrm/templates/CRM/Event/Form/Task/ParticipantStatus.tpl index 84a087ac73b73d58d02f0d4f434661d2760765ef..36011596a393134da7555e8fa95242c29cd84ba3 100644 --- a/civicrm/templates/CRM/Event/Form/Task/ParticipantStatus.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/ParticipantStatus.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/PickProfile.tpl b/civicrm/templates/CRM/Event/Form/Task/PickProfile.tpl index 46677e769f4cd1384bd39810b6683a44127862c1..c7d221f9739dd3f8c0b841d54d9e1961a1efbac3 100644 --- a/civicrm/templates/CRM/Event/Form/Task/PickProfile.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/PickProfile.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/Print.tpl b/civicrm/templates/CRM/Event/Form/Task/Print.tpl index 5e6f3e8d2b531ee93bd96778d44fa4247062a563..ede308a548955b07d4c6a6d2994e5644ca877bb7 100644 --- a/civicrm/templates/CRM/Event/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/Result.tpl b/civicrm/templates/CRM/Event/Form/Task/Result.tpl index 330a8114a6f1fef0e4a0d4dd69ddaa423c39c14f..9c7830d7938841682df8eeda7e6e4d9712300025 100644 --- a/civicrm/templates/CRM/Event/Form/Task/Result.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/Result.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/SaveSearch.tpl b/civicrm/templates/CRM/Event/Form/Task/SaveSearch.tpl index 0a1da31376a48babb14e5ff366f9482c46fdc067..81887a6bbd3ddbe8bc2cbc65b776e521fd3eb765 100644 --- a/civicrm/templates/CRM/Event/Form/Task/SaveSearch.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/SaveSearch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Form/Task/SaveSearch/Update.tpl b/civicrm/templates/CRM/Event/Form/Task/SaveSearch/Update.tpl index d4a50d8dd38b83f6e5e8c11cbf0152aa0303d08e..ce1d6fb33294d755bf648f4763de3b5dead7e73b 100644 --- a/civicrm/templates/CRM/Event/Form/Task/SaveSearch/Update.tpl +++ b/civicrm/templates/CRM/Event/Form/Task/SaveSearch/Update.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Import/Form/DataSource.hlp b/civicrm/templates/CRM/Event/Import/Form/DataSource.hlp index b9cc3db414576fe0029126a4893f43a94b3f4023..206e5b062c4452fbc18d111d42b2a40ba586e68e 100644 --- a/civicrm/templates/CRM/Event/Import/Form/DataSource.hlp +++ b/civicrm/templates/CRM/Event/Import/Form/DataSource.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Event/Import/Form/DataSource.tpl index 89c025414e5abb8ea059233158b4c82ec9a43f9c..7b75ae8002fef0a8fd3241ffc0d2c90f8e13b4d1 100644 --- a/civicrm/templates/CRM/Event/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Event/Import/Form/DataSource.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Import/Form/MapField.tpl b/civicrm/templates/CRM/Event/Import/Form/MapField.tpl index 3af808265d83d7b25d91294430b4f797376a0fa1..2056e8171e8ee11c1eb89374ec66c82086f1b260 100644 --- a/civicrm/templates/CRM/Event/Import/Form/MapField.tpl +++ b/civicrm/templates/CRM/Event/Import/Form/MapField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -39,7 +39,7 @@ <table class="form-layout"> <tr> <td> - <div id="crm-submit-buttons"> + <div class="crm-submit-buttons"> {include file="CRM/common/formButtons.tpl" location="top"} </div> </td> @@ -51,7 +51,7 @@ </tr> <tr> <td> - <div id="crm-submit-buttons"> + <div class="crm-submit-buttons"> {include file="CRM/common/formButtons.tpl" location="bottom"} </div> </td> diff --git a/civicrm/templates/CRM/Event/Import/Form/MapTable.tpl b/civicrm/templates/CRM/Event/Import/Form/MapTable.tpl index 5543b320dc1be7579b73eb2bdcca8669e439f2df..4c5857170a901b2d4e57ea36e8b32f980f38eec6 100644 --- a/civicrm/templates/CRM/Event/Import/Form/MapTable.tpl +++ b/civicrm/templates/CRM/Event/Import/Form/MapTable.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Import/Form/Preview.tpl b/civicrm/templates/CRM/Event/Import/Form/Preview.tpl index d669db53faf9ccb3cf3775e5cd7ad247ed5d1c8c..f9a6ff245bd0bba5929047622f23c4cf0e26f399 100644 --- a/civicrm/templates/CRM/Event/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Event/Import/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Import/Form/Summary.tpl b/civicrm/templates/CRM/Event/Import/Form/Summary.tpl index 4c5a7dc1fea4ad837e466a3a7ec5e69888088d98..875de68cc28bb2ce643d480617ee146907bc8b2a 100644 --- a/civicrm/templates/CRM/Event/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Event/Import/Form/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/DashBoard.hlp b/civicrm/templates/CRM/Event/Page/DashBoard.hlp index 86fb4d73e6a4dea9017e6304d2539702d187ecca..4f8af44d5e872d26a1d1b637794a64fb8d5a21d0 100644 --- a/civicrm/templates/CRM/Event/Page/DashBoard.hlp +++ b/civicrm/templates/CRM/Event/Page/DashBoard.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/DashBoard.tpl b/civicrm/templates/CRM/Event/Page/DashBoard.tpl index fd97cba3a88b053e855d68a552a1c8ebdb7a88d3..edd1cbee822e599466a6b540a4de6ff869e29e0a 100644 --- a/civicrm/templates/CRM/Event/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Event/Page/DashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/EventInfo.tpl b/civicrm/templates/CRM/Event/Page/EventInfo.tpl index d19625cb92caac245b537e85f4bec13e8a223a6e..0e7d677b211e21b87f8a559c3dc76c4c5457abdf 100644 --- a/civicrm/templates/CRM/Event/Page/EventInfo.tpl +++ b/civicrm/templates/CRM/Event/Page/EventInfo.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/ICalendar.tpl b/civicrm/templates/CRM/Event/Page/ICalendar.tpl index 91c2ec3bb2b44a85cc99e33507a6dbcacf0f7207..ae44eaa9a408c65e8e175cadc253efc92060ee26 100644 --- a/civicrm/templates/CRM/Event/Page/ICalendar.tpl +++ b/civicrm/templates/CRM/Event/Page/ICalendar.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/ManageEvent.hlp b/civicrm/templates/CRM/Event/Page/ManageEvent.hlp index 2e56f1e966492afe3cb8912ff3b86484f46f8564..ea344c2b48e6da5b68699ed5f273b33367303fc9 100644 --- a/civicrm/templates/CRM/Event/Page/ManageEvent.hlp +++ b/civicrm/templates/CRM/Event/Page/ManageEvent.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/ManageEvent.tpl b/civicrm/templates/CRM/Event/Page/ManageEvent.tpl index eb1295786cfe6f6c433eb034722083916f5ed3c6..cd65971797288acb0952929d68cf2d46ec3c4119 100644 --- a/civicrm/templates/CRM/Event/Page/ManageEvent.tpl +++ b/civicrm/templates/CRM/Event/Page/ManageEvent.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/ParticipantListing/Name.tpl b/civicrm/templates/CRM/Event/Page/ParticipantListing/Name.tpl index 49c02ead1a2943b94a94a9fa0b618e5b9f68d5e4..23f0036d84434ee52a5665496a39b93ec89957c9 100644 --- a/civicrm/templates/CRM/Event/Page/ParticipantListing/Name.tpl +++ b/civicrm/templates/CRM/Event/Page/ParticipantListing/Name.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/ParticipantListing/NameAndEmail.tpl b/civicrm/templates/CRM/Event/Page/ParticipantListing/NameAndEmail.tpl index 36b2b526f1699eb5cbb35aeacd7fb4bc1e0e7053..d4d6ad0459e3098585a7a65480c6c8e6c8c69643 100644 --- a/civicrm/templates/CRM/Event/Page/ParticipantListing/NameAndEmail.tpl +++ b/civicrm/templates/CRM/Event/Page/ParticipantListing/NameAndEmail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/ParticipantListing/NameStatusAndDate.tpl b/civicrm/templates/CRM/Event/Page/ParticipantListing/NameStatusAndDate.tpl index 6440bf725d332782ff7b1e17367e744958f8fafc..23f0b19091e6faf45922aec475ac30dd00f33b56 100644 --- a/civicrm/templates/CRM/Event/Page/ParticipantListing/NameStatusAndDate.tpl +++ b/civicrm/templates/CRM/Event/Page/ParticipantListing/NameStatusAndDate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/Tab.tpl b/civicrm/templates/CRM/Event/Page/Tab.tpl index 61f464f1fdd9026d42f69c489cd60d1c65fde68f..df3edc32b06143d2b04c52b86fa6d3bf465ba5ad 100644 --- a/civicrm/templates/CRM/Event/Page/Tab.tpl +++ b/civicrm/templates/CRM/Event/Page/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/UserDashboard.tpl b/civicrm/templates/CRM/Event/Page/UserDashboard.tpl index 48cb6da689457d21c933ec11ec67e8f6b671dd3c..a120d51e1c349c9e03237f0b0656ec2b64223748 100644 --- a/civicrm/templates/CRM/Event/Page/UserDashboard.tpl +++ b/civicrm/templates/CRM/Event/Page/UserDashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Event/Page/iCalLinks.tpl b/civicrm/templates/CRM/Event/Page/iCalLinks.tpl index 8f5a1306135f6943176ae79070acd2984b3131ba..fe602ccbba5deb1afa05fdedf123109a99824c59 100644 --- a/civicrm/templates/CRM/Event/Page/iCalLinks.tpl +++ b/civicrm/templates/CRM/Event/Page/iCalLinks.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Export/Form/Map.tpl b/civicrm/templates/CRM/Export/Form/Map.tpl index f288d2ddf8510aefdc06644b9c13d1f9b0a44576..2a65eddd8822c545b5d1ac7a9ebbe3d451f62c77 100644 --- a/civicrm/templates/CRM/Export/Form/Map.tpl +++ b/civicrm/templates/CRM/Export/Form/Map.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -23,7 +23,6 @@ | see the CiviCRM license FAQ at http://civicrm.org/licensing | +--------------------------------------------------------------------+ *} -<div class="crm-block crm-form-block crm-export-map-form-block"> <div class="help"> <p>{ts}Select the fields to be exported using the table below. For each field, first select the contact type that the field belongs to (e.g. select <strong>Individuals</strong> if you are exporting <strong>Last Name</strong>). Then select the actual field to be exported from the drop-down menu which will appear next to the contact type. Your export can include multiple types of contact records, and non-applicable fields will be empty (e.g. <strong>Last Name</strong> will not be populated for an Organization record).{/ts}</p> <p>{ts}Click <strong>Select more fields...</strong> if you want to export more fields than are initially displayed in the table.{/ts}</p> @@ -34,6 +33,8 @@ <p>{ts}If you want to use the same export setup in the future, check 'Save this field mapping' at the bottom of the page before continuing. You will then be able to reload this setup with a single click.{/ts}</p> </div> + +<div class="crm-block crm-form-block crm-export-map-form-block"> {* Export Wizard - Step 3 (map export data fields) *} {* WizardHeader.tpl provides visual display of steps thru the wizard as well as title for current step *} diff --git a/civicrm/templates/CRM/Export/Form/Select.tpl b/civicrm/templates/CRM/Export/Form/Select.tpl index 751e4926a7fc253180de3238a25b9d6f97f3c4c9..c84d30be7638cf8c95e2b37735a7f39bdd92b075 100644 --- a/civicrm/templates/CRM/Export/Form/Select.tpl +++ b/civicrm/templates/CRM/Export/Form/Select.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ <div class="crm-block crm-form-block crm-export-form-block"> <div class="help"> - <p>{ts}<strong>Export {if $exportCustomSearchField}custom search{else}PRIMARY{/if} fields</strong> provides the most commonly used data values. This includes primary address information, preferred phone and email.{/ts}</p> + <p>{ts}<strong>Export PRIMARY fields</strong> provides the most commonly used data values. This includes primary address information, preferred phone and email.{/ts}</p> <p>{ts}Click <strong>Select fields for export</strong> and then <strong>Continue</strong> to choose a subset of fields for export. This option allows you to export multiple specific locations (Home, Work, etc.) as well as custom data. You can also save your selections as a 'field mapping' so you can use it again later.{/ts}</p> </div> @@ -60,7 +60,7 @@ <div class="crm-section crm-export-mergeOptions-section"> <div class="label crm-label-mergeOptions">{ts}Merge Options{/ts} {help id="id-export_merge_options"}</div> <div class="content crm-content-mergeOptions"> - {$form.mergeOption.html} + {$form.mergeOption.html} </div> <div id='greetings' class="content crm-content-greetings class='hiddenElement'"> <table class="form-layout-compressed"> diff --git a/civicrm/templates/CRM/Export/Form/table.tpl b/civicrm/templates/CRM/Export/Form/table.tpl index c7dc7286bad56a4a5f830c5be5ad10748155e132..768cc884e1323d36909fa06b55bff4f8754a30fb 100644 --- a/civicrm/templates/CRM/Export/Form/table.tpl +++ b/civicrm/templates/CRM/Export/Form/table.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/ExportFormat/IIF.tpl b/civicrm/templates/CRM/Financial/ExportFormat/IIF.tpl index 9179a626df940ad5f768b29e02c608932f320e08..148eac9c875f10d8887a47f4a1d909f2001edc6f 100644 --- a/civicrm/templates/CRM/Financial/ExportFormat/IIF.tpl +++ b/civicrm/templates/CRM/Financial/ExportFormat/IIF.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/BatchTransaction.tpl b/civicrm/templates/CRM/Financial/Form/BatchTransaction.tpl index 95fd984f0761c6af54db9ddb2e8e8e9a7d1bb1c9..3e62c4453017f57f1d35b1c741d9c57de3cdff5a 100644 --- a/civicrm/templates/CRM/Financial/Form/BatchTransaction.tpl +++ b/civicrm/templates/CRM/Financial/Form/BatchTransaction.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -35,18 +35,22 @@ <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout-compressed"> <tr> - <td class="font-size12pt" colspan="2">{$form.sort_name.label} {$form.sort_name.html|crmAddClass:'twenty'}</td> + <td class="font-size12pt" colspan="2"> + {$form.sort_name.label}<br> + {$form.sort_name.html|crmAddClass:'twenty'} + </td> </tr> <tr> {if $form.contact_tags} - <td><label>{ts}Contributor Tag(s){/ts}</label> + <td> + <label>{ts}Contributor Tag(s){/ts}</label><br> {$form.contact_tags.html} </td> {else} <td> </td> {/if} {if $form.group} - <td><label>{ts}Contributor Group(s){/ts}</label> + <td><label>{ts}Contributor Group(s){/ts}</label><br> {$form.group.html} </td> {else} diff --git a/civicrm/templates/CRM/Financial/Form/Export.tpl b/civicrm/templates/CRM/Financial/Form/Export.tpl index cd2b2fd14b3ce2b507908bf02b07456580c1a96f..0d811cd84dfea91ef7ab1589eaccaa15e2ab9419 100644 --- a/civicrm/templates/CRM/Financial/Form/Export.tpl +++ b/civicrm/templates/CRM/Financial/Form/Export.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/FinancialAccount.hlp b/civicrm/templates/CRM/Financial/Form/FinancialAccount.hlp index 549ef0c2b3a1beff1e6683356d1667c35bb94a5b..ba5f2963fdbd2af79b7dadc169dbd375c2886eaa 100644 --- a/civicrm/templates/CRM/Financial/Form/FinancialAccount.hlp +++ b/civicrm/templates/CRM/Financial/Form/FinancialAccount.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/FinancialAccount.tpl b/civicrm/templates/CRM/Financial/Form/FinancialAccount.tpl index e47c2c693de48b575c1bf5ae6b44f080b01bd433..b07e5ee5680eec10b39ad3747eb839b3f51ef9c8 100644 --- a/civicrm/templates/CRM/Financial/Form/FinancialAccount.tpl +++ b/civicrm/templates/CRM/Financial/Form/FinancialAccount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/FinancialBatch.tpl b/civicrm/templates/CRM/Financial/Form/FinancialBatch.tpl index fab605303292d73f5dec2a9eb12f7a0df90b2fa5..4905cfa49e663e92582c04588d919e6b814f79c4 100644 --- a/civicrm/templates/CRM/Financial/Form/FinancialBatch.tpl +++ b/civicrm/templates/CRM/Financial/Form/FinancialBatch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/FinancialType.tpl b/civicrm/templates/CRM/Financial/Form/FinancialType.tpl index 90952e1da4e5c0a2adf66e6d509350f3fe903bc7..cf15ba115c325df7164dfca1ede3f94555fa285a 100644 --- a/civicrm/templates/CRM/Financial/Form/FinancialType.tpl +++ b/civicrm/templates/CRM/Financial/Form/FinancialType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -32,7 +32,7 @@ </div> {else} <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> - <table class="form-layout"> + <table class="form-layout-compressed"> <tr class="crm-contribution-form-block-name"> <td class="label">{$form.name.label}</td> <td class="html-adjust">{$form.name.html}</td> diff --git a/civicrm/templates/CRM/Financial/Form/FinancialTypeAccount.tpl b/civicrm/templates/CRM/Financial/Form/FinancialTypeAccount.tpl index 2d2b319d4664d8edb73ee0570d76e24968b23726..eda15edb1b9abdf0ead013599a02c00c0a89ad6f 100644 --- a/civicrm/templates/CRM/Financial/Form/FinancialTypeAccount.tpl +++ b/civicrm/templates/CRM/Financial/Form/FinancialTypeAccount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/Payment.tpl b/civicrm/templates/CRM/Financial/Form/Payment.tpl index 3248b7132f0857e227fc98f0ca5d545169091f87..0c7ca06dff3bbf5a1e133f285ea898031130fdad 100644 --- a/civicrm/templates/CRM/Financial/Form/Payment.tpl +++ b/civicrm/templates/CRM/Financial/Form/Payment.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/PaymentEdit.tpl b/civicrm/templates/CRM/Financial/Form/PaymentEdit.tpl index 9dfc15936577a0ad5858e2498c3a61fdd192077c..0c538c83b84349822658b2cea45cb22cc60aec70 100644 --- a/civicrm/templates/CRM/Financial/Form/PaymentEdit.tpl +++ b/civicrm/templates/CRM/Financial/Form/PaymentEdit.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/PaypalExpress.tpl b/civicrm/templates/CRM/Financial/Form/PaypalExpress.tpl index cb9a3895691871cc19f153731152940995a467bc..7761bbc36f542e2690b7c6c1a2a90f1498c2c762 100644 --- a/civicrm/templates/CRM/Financial/Form/PaypalExpress.tpl +++ b/civicrm/templates/CRM/Financial/Form/PaypalExpress.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/PaypalPro.tpl b/civicrm/templates/CRM/Financial/Form/PaypalPro.tpl index ff9ed37fca31946668999fb5c3716b3242033105..52588128a8dbe844948b249eb29bf45e6abc027c 100644 --- a/civicrm/templates/CRM/Financial/Form/PaypalPro.tpl +++ b/civicrm/templates/CRM/Financial/Form/PaypalPro.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Form/Search.tpl b/civicrm/templates/CRM/Financial/Form/Search.tpl index 5df3040f490a8d0643a7969bfe8b89bf3d7399c5..da001b961c5f45bad8e525f8312be6e18ed6e5b7 100644 --- a/civicrm/templates/CRM/Financial/Form/Search.tpl +++ b/civicrm/templates/CRM/Financial/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -26,7 +26,7 @@ {* Financial search component. *} <div id="enableDisableStatusMsg" class="crm-container" style="display:none"></div> -<div class="crm-submit-buttons"> +<div class="action-link"> <a accesskey="N" href="{crmURL p='civicrm/financial/batch' q="reset=1&action=add&context=$batchStatus"}" id="newBatch" class="button"><span><i class="crm-i fa-plus-circle"></i> {ts}New Accounting Batch{/ts}</span></a> </div> <div class="crm-form-block crm-search-form-block"> diff --git a/civicrm/templates/CRM/Financial/Page/Batch.tpl b/civicrm/templates/CRM/Financial/Page/Batch.tpl index 6185b1a3212f845134de9ff38e4bb708fef5236a..971ac2e6496e048a4de956758e41c1c3c285bb5e 100644 --- a/civicrm/templates/CRM/Financial/Page/Batch.tpl +++ b/civicrm/templates/CRM/Financial/Page/Batch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Page/BatchTransaction.tpl b/civicrm/templates/CRM/Financial/Page/BatchTransaction.tpl index 43098c7e47d9cf27cbd22b1ee609d4721af811b8..4fbc45c99e27a38b2954ff40d422e1079bd4b89b 100644 --- a/civicrm/templates/CRM/Financial/Page/BatchTransaction.tpl +++ b/civicrm/templates/CRM/Financial/Page/BatchTransaction.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Page/FinancialAccount.tpl b/civicrm/templates/CRM/Financial/Page/FinancialAccount.tpl index 7934c28e6953d17db13cb2dfbfc5f346715481da..126b2b259552df9fd70093646d2800472bb038eb 100644 --- a/civicrm/templates/CRM/Financial/Page/FinancialAccount.tpl +++ b/civicrm/templates/CRM/Financial/Page/FinancialAccount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Page/FinancialBatch.hlp b/civicrm/templates/CRM/Financial/Page/FinancialBatch.hlp index 3176c352615da3d3df967ad1928d586853183f9a..0126d2299b4498b1997e31cbdf24d28d8584a850 100644 --- a/civicrm/templates/CRM/Financial/Page/FinancialBatch.hlp +++ b/civicrm/templates/CRM/Financial/Page/FinancialBatch.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Page/FinancialBatch.tpl b/civicrm/templates/CRM/Financial/Page/FinancialBatch.tpl index 010533c949d5a968f318ee5a8bbf8cac305911c0..d15b3f05c0083cb22ed727292487050c36294546 100644 --- a/civicrm/templates/CRM/Financial/Page/FinancialBatch.tpl +++ b/civicrm/templates/CRM/Financial/Page/FinancialBatch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Page/FinancialType.tpl b/civicrm/templates/CRM/Financial/Page/FinancialType.tpl index a41e5d261a577de5cb1fb499cfc6a7ec8bb6485a..be80f92cfce350c65c41d53de42391a688f61c18 100644 --- a/civicrm/templates/CRM/Financial/Page/FinancialType.tpl +++ b/civicrm/templates/CRM/Financial/Page/FinancialType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Financial/Page/FinancialTypeAccount.tpl b/civicrm/templates/CRM/Financial/Page/FinancialTypeAccount.tpl index d9d29896fe828675fae21ae44e0c2511fb06ea2d..4e793fd392a7c087341b595c41aebeffabe677c0 100644 --- a/civicrm/templates/CRM/Financial/Page/FinancialTypeAccount.tpl +++ b/civicrm/templates/CRM/Financial/Page/FinancialTypeAccount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Form/attachment.tpl b/civicrm/templates/CRM/Form/attachment.tpl index 988796e5360f60c484e8fe510dd775ce86278ee6..dd838295893e4bff372b1201632ea4472ed27157 100644 --- a/civicrm/templates/CRM/Form/attachment.tpl +++ b/civicrm/templates/CRM/Form/attachment.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Form/basicForm.tpl b/civicrm/templates/CRM/Form/basicForm.tpl index 2b15663b414b75246e6277dbe4d082a4fd4d41c0..ab7d258cf3b34113ff25a4c9b8fbaea41194c07c 100644 --- a/civicrm/templates/CRM/Form/basicForm.tpl +++ b/civicrm/templates/CRM/Form/basicForm.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Form/body.tpl b/civicrm/templates/CRM/Form/body.tpl index bd3ee37294b0a1d4f8b1953b1546ef5bd16d42e7..2afde37e22e64b7a2b7fa71ab9bd7f6b1a12a75b 100644 --- a/civicrm/templates/CRM/Form/body.tpl +++ b/civicrm/templates/CRM/Form/body.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Form/default.tpl b/civicrm/templates/CRM/Form/default.tpl index 47e5a463763f1663c2397fe431ac3bbd9dc8873c..097a6fad20d1eda0b1685585365980e5d1c05dd7 100644 --- a/civicrm/templates/CRM/Form/default.tpl +++ b/civicrm/templates/CRM/Form/default.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Form/element.tpl b/civicrm/templates/CRM/Form/element.tpl index 81bf4696a175c5e758bc69e8cd01192657b0f60b..977a04cd3ee31aefad71cf4587cb2fe2eb02155d 100644 --- a/civicrm/templates/CRM/Form/element.tpl +++ b/civicrm/templates/CRM/Form/element.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Form/error.tpl b/civicrm/templates/CRM/Form/error.tpl index 960d15c4675202623d091f64964c777de883a761..a1554710695660337375c3211f0637d311404911 100644 --- a/civicrm/templates/CRM/Form/error.tpl +++ b/civicrm/templates/CRM/Form/error.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Form/label.tpl b/civicrm/templates/CRM/Form/label.tpl index 8e32bc46cc391e267909017af0ed2e75edddc915..13ec4d673761076503baf7307d30d1f7352a3d5d 100644 --- a/civicrm/templates/CRM/Form/label.tpl +++ b/civicrm/templates/CRM/Form/label.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Form/validate.tpl b/civicrm/templates/CRM/Form/validate.tpl index c71da55cf63c446d8fd95289e9a7e56a5ff8fdcf..2aa73d83e3a4d54346a0d6aaf215642fa3ef8167 100644 --- a/civicrm/templates/CRM/Form/validate.tpl +++ b/civicrm/templates/CRM/Form/validate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Friend/Form.tpl b/civicrm/templates/CRM/Friend/Form.tpl index f3bbceb723517058501cc625f2dfbf385ce80b7c..1397896d583365c8933121c20b859a275568f4c9 100644 --- a/civicrm/templates/CRM/Friend/Form.tpl +++ b/civicrm/templates/CRM/Friend/Form.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Friend/Form/Contribute.tpl b/civicrm/templates/CRM/Friend/Form/Contribute.tpl index 69bae15c91816efb8042137daa7c742f6099c13a..7df3a3725742c607626614cc048e987333e65eeb 100644 --- a/civicrm/templates/CRM/Friend/Form/Contribute.tpl +++ b/civicrm/templates/CRM/Friend/Form/Contribute.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Friend/Form/Event.tpl b/civicrm/templates/CRM/Friend/Form/Event.tpl index 4097e876ff757db209919ba3809f3cddab96592a..f031f19663df60041758a79d085337e3e23d39f4 100644 --- a/civicrm/templates/CRM/Friend/Form/Event.tpl +++ b/civicrm/templates/CRM/Friend/Form/Event.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Friend/Form/Friend.tpl b/civicrm/templates/CRM/Friend/Form/Friend.tpl index 0e3d512f8579021ed3677d4effa11b158707dd1a..20c836386210453cb0b754e8e2096aa1b19d1617 100644 --- a/civicrm/templates/CRM/Friend/Form/Friend.tpl +++ b/civicrm/templates/CRM/Friend/Form/Friend.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Friend/Form/Pledge.tpl b/civicrm/templates/CRM/Friend/Form/Pledge.tpl index f969dd3d7375d74dbe6f22a50966dcc1cc58375f..63310eb07fce20b7b3f023d6dd720b067d7d23a0 100644 --- a/civicrm/templates/CRM/Friend/Form/Pledge.tpl +++ b/civicrm/templates/CRM/Friend/Form/Pledge.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Grant/Form/Grant.tpl b/civicrm/templates/CRM/Grant/Form/Grant.tpl index 74d09b7c367cfa5f8af92184b7728f5f973fd98a..80c69246ca31e9c4b3b53454301b315d9277050c 100644 --- a/civicrm/templates/CRM/Grant/Form/Grant.tpl +++ b/civicrm/templates/CRM/Grant/Form/Grant.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -34,7 +34,7 @@ </div> {else} <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> - <table class="form-layout-compressed"> + <table class="form-layout-compressed"> {if $context eq 'standalone'} <tr class="crm-grant-form-block-contact_id"> <td class="label">{$form.contact_id.label}</td> diff --git a/civicrm/templates/CRM/Grant/Form/GrantView.tpl b/civicrm/templates/CRM/Grant/Form/GrantView.tpl index dbb55aa6bbffc9c494385b7b1de45a2d459ac3f6..e9fef1fbaf5ddb7e8926c831c9cb3649fadd6b11 100644 --- a/civicrm/templates/CRM/Grant/Form/GrantView.tpl +++ b/civicrm/templates/CRM/Grant/Form/GrantView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Grant/Form/Search.tpl b/civicrm/templates/CRM/Grant/Form/Search.tpl index 31f69926ffe4a2fd984d227f4e57ba632cd87af9..f4a2b785501161cc8d3bf39b0c400e5008fe0149 100644 --- a/civicrm/templates/CRM/Grant/Form/Search.tpl +++ b/civicrm/templates/CRM/Grant/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Grant/Form/Search/AdvancedSearchPane.tpl b/civicrm/templates/CRM/Grant/Form/Search/AdvancedSearchPane.tpl index 908b78b8447e75480411c1a22fcc1efb2bef392c..909ca0b77387973a19671645c0518f4f2206208d 100644 --- a/civicrm/templates/CRM/Grant/Form/Search/AdvancedSearchPane.tpl +++ b/civicrm/templates/CRM/Grant/Form/Search/AdvancedSearchPane.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Grant/Form/Search/Common.tpl b/civicrm/templates/CRM/Grant/Form/Search/Common.tpl index 56f54184b461b48569c7f0ba0ac6182ba1f7cfa0..710be206acaf7adb1cc711441aa7debf7c000e6d 100644 --- a/civicrm/templates/CRM/Grant/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Grant/Form/Search/Common.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -55,7 +55,7 @@ <td colspan="2"> {$form.grant_application_received_date_high.label}<br /> {include file="CRM/common/jcalendar.tpl" elementName=grant_application_received_date_high} - {$form.grant_application_received_notset.html} {ts}Date is not set{/ts} + {$form.grant_application_received_notset.html} {$form.grant_application_received_notset.label} </td> </tr> <tr> @@ -66,7 +66,7 @@ <td colspan="2"> {$form.grant_decision_date_high.label}<br /> {include file="CRM/common/jcalendar.tpl" elementName=grant_decision_date_high} - {$form.grant_decision_date_notset.html} {ts}Date is not set{/ts} + {$form.grant_decision_date_notset.html} {$form.grant_decision_date_notset.label} </td> </tr> <tr> @@ -77,7 +77,7 @@ <td colspan="2"> {$form.grant_money_transfer_date_high.label}<br /> {include file="CRM/common/jcalendar.tpl" elementName=grant_money_transfer_date_high} - {$form.grant_money_transfer_date_notset.html} {ts}Date is not set{/ts} + {$form.grant_money_transfer_date_notset.html} {$form.grant_money_transfer_date_notset.label} </td> </tr> <tr> @@ -88,7 +88,7 @@ <td colspan="2"> {$form.grant_due_date_high.label}<br /> {include file="CRM/common/jcalendar.tpl" elementName=grant_due_date_high} - {$form.grant_due_date_notset.html} {ts}Date is not set{/ts} + {$form.grant_due_date_notset.html} {$form.grant_due_date_notset.label} </td> </tr> {if $grantGroupTree} diff --git a/civicrm/templates/CRM/Grant/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Grant/Form/Search/EmptyResults.tpl index 82fc3c676fa7f782d31d33b802c452f81d1aeb7c..f5320ad5f3d046fa9ce2c4de97f1c5a13712670a 100644 --- a/civicrm/templates/CRM/Grant/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Grant/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Grant/Form/Selector.tpl b/civicrm/templates/CRM/Grant/Form/Selector.tpl index 664a0cf2a7f6661099cebc0add3e8df1745aa793..84f12e5ade4619c7823f64d26e3865db38387a98 100644 --- a/civicrm/templates/CRM/Grant/Form/Selector.tpl +++ b/civicrm/templates/CRM/Grant/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ {strip} <table class="selector row-highlight"> <thead class="sticky"> - <tr class="columnheader"> + <tr> {if ! $single and $context eq 'Search' } <th scope="col" title="Select Rows">{$form.toggleSelect.html}</th> {/if} diff --git a/civicrm/templates/CRM/Grant/Form/Task.tpl b/civicrm/templates/CRM/Grant/Form/Task.tpl index cb948210d204c4649c69798241692b9f422fb111..e29721ef6fc15f9798b1999d5ba43100f6ea4eea 100644 --- a/civicrm/templates/CRM/Grant/Form/Task.tpl +++ b/civicrm/templates/CRM/Grant/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Grant/Form/Task/Delete.tpl b/civicrm/templates/CRM/Grant/Form/Task/Delete.tpl index afdb3aec5900fe0cbaef95d68c07028f74d172da..aeba8ee708bc61eeaca7703fd8846a92a1044d10 100644 --- a/civicrm/templates/CRM/Grant/Form/Task/Delete.tpl +++ b/civicrm/templates/CRM/Grant/Form/Task/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -24,9 +24,11 @@ +--------------------------------------------------------------------+ *} {* Confirmation of Grant delete *} -<div class="messages status no-popup"> - <p><div class="icon inform-icon"></div> - {ts}Are you sure you want to delete the selected Grants? This delete operation cannot be undone and will delete all transactions associated with these grants.{/ts}</p> - <p>{include file="CRM/Grant/Form/Task.tpl"}</p> +<div class="crm-block crm-form-block crm-grant-task-delete-form-block"> + <div class="messages status no-popup"> + <div class="icon inform-icon"></div> + {ts}Are you sure you want to delete the selected Grants? This delete operation cannot be undone and will delete all transactions associated with these grants.{/ts} + <p>{include file="CRM/Grant/Form/Task.tpl"}</p> + </div> + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl"}</div> </div> -<div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl"}</div> diff --git a/civicrm/templates/CRM/Grant/Form/Task/Print.tpl b/civicrm/templates/CRM/Grant/Form/Task/Print.tpl index 838b10815b5db54ce69c1a5f5a4d30bd9f3864b7..9a68a5c69a35403acf920acc30c4c6bbe2daeb34 100644 --- a/civicrm/templates/CRM/Grant/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Grant/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Grant/Form/Task/Update.tpl b/civicrm/templates/CRM/Grant/Form/Task/Update.tpl index c4f6f6855223c32e7ccaecac124a90ae67f2a255..ca837169fce33afa35a2fda61e24ae146c4d3e16 100644 --- a/civicrm/templates/CRM/Grant/Form/Task/Update.tpl +++ b/civicrm/templates/CRM/Grant/Form/Task/Update.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Grant/Page/DashBoard.tpl b/civicrm/templates/CRM/Grant/Page/DashBoard.tpl index 33f11c175e3cd08e4b21c86aa24a67fdab5d0cf5..29146a5a7ce5797f2e74b9694247aa372d0ce1fd 100644 --- a/civicrm/templates/CRM/Grant/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Grant/Page/DashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -24,7 +24,7 @@ +--------------------------------------------------------------------+ *} {* CiviGrant DashBoard (launch page) *} -<div id="help" class="solid-border-bottom"> +<div class="help"> {capture assign=findContactURL}{crmURL p="civicrm/contact/search/basic" q="reset=1"}{/capture} <p>{ts 1=$findContactURL }CiviGrant allows you to input and track grants to Organizations, Individuals or Households. The grantee must first be entered as a contact in CiviCRM. Use <a href='%1'>Find Contacts</a> to see if there's already a record for the grantee. Once you've located or created the contact record, click <strong>View</strong> to go to their summary page, select the <strong>Grants</strong> tab and click <strong>New Grant</strong>.{/ts} </p> diff --git a/civicrm/templates/CRM/Grant/Page/Tab.tpl b/civicrm/templates/CRM/Grant/Page/Tab.tpl index dc2d9a58aaa1b22522dc3e5b6c6917eec5c037bb..6fef82a654244f9074e6c3bc28871b56615cfa8e 100644 --- a/civicrm/templates/CRM/Grant/Page/Tab.tpl +++ b/civicrm/templates/CRM/Grant/Page/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Group/Form/Delete.tpl b/civicrm/templates/CRM/Group/Form/Delete.tpl index 99ae83830dac00e39bac3d31f53b3ba5ce329e1e..d867c80e5cd2f0d4f420e1b25e6e8ae8f55e2fdd 100644 --- a/civicrm/templates/CRM/Group/Form/Delete.tpl +++ b/civicrm/templates/CRM/Group/Form/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Group/Form/Edit.tpl b/civicrm/templates/CRM/Group/Form/Edit.tpl index 5abce7d2193a1f571ee3808579be2d197ef6eb1c..e515ef3f0f025285d39d5c94320d1003cbbe15db 100644 --- a/civicrm/templates/CRM/Group/Form/Edit.tpl +++ b/civicrm/templates/CRM/Group/Form/Edit.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Group/Form/GroupsCommon.tpl b/civicrm/templates/CRM/Group/Form/GroupsCommon.tpl index 934a8070b79f69249bab8d1d7f261b9e12c5dce3..655c13f136064cfb02fad9e35dc844261c47af8f 100644 --- a/civicrm/templates/CRM/Group/Form/GroupsCommon.tpl +++ b/civicrm/templates/CRM/Group/Form/GroupsCommon.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Group/Form/Search.tpl b/civicrm/templates/CRM/Group/Form/Search.tpl index 5a59dd1a9083420b8b450776779a0ede4ea2079d..5034d45474002ff1c86cb0102d51fc47364a09f6 100644 --- a/civicrm/templates/CRM/Group/Form/Search.tpl +++ b/civicrm/templates/CRM/Group/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Group/Page/Group.hlp b/civicrm/templates/CRM/Group/Page/Group.hlp index d354852951b55636b5223186a9feeab44fbbd167..5a52d3494e9d91db119709b4c76d4a17a9fbb1d9 100644 --- a/civicrm/templates/CRM/Group/Page/Group.hlp +++ b/civicrm/templates/CRM/Group/Page/Group.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Group/Page/Group.tpl b/civicrm/templates/CRM/Group/Page/Group.tpl index 00dbdade339e62f2b74e850563ccdb71852cf468..1df7d291a0b81bddd521a9f6b567baf0098ca33b 100644 --- a/civicrm/templates/CRM/Group/Page/Group.tpl +++ b/civicrm/templates/CRM/Group/Page/Group.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Group/Page/GroupRows.tpl b/civicrm/templates/CRM/Group/Page/GroupRows.tpl index 62f4888e932af544caffcb6e9597996a2730eaaa..96bdf81af879056cf9cd1cb1b7d1abee52570306 100644 --- a/civicrm/templates/CRM/Group/Page/GroupRows.tpl +++ b/civicrm/templates/CRM/Group/Page/GroupRows.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Logging/ReportDetail.tpl b/civicrm/templates/CRM/Logging/ReportDetail.tpl index 6a263d112b7df0cb829dec277eead0c39ad0bae2..3ded328341601bc89ed0363c2d50aae357aa912f 100644 --- a/civicrm/templates/CRM/Logging/ReportDetail.tpl +++ b/civicrm/templates/CRM/Logging/ReportDetail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Logging/ReportSummary.tpl b/civicrm/templates/CRM/Logging/ReportSummary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Logging/ReportSummary.tpl +++ b/civicrm/templates/CRM/Logging/ReportSummary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Approve.tpl b/civicrm/templates/CRM/Mailing/Form/Approve.tpl index 07b393a04d6cce2b1e4da1ced566e64a75189fff..6bea9663135721fcb963635c29c35da663b4611d 100644 --- a/civicrm/templates/CRM/Mailing/Form/Approve.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Approve.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Component.tpl b/civicrm/templates/CRM/Mailing/Form/Component.tpl index 689a447f4879a871b34b27b32a1f7fd4f0ade515..387435bbd0f5bb5caa947451356962ec262323d0 100644 --- a/civicrm/templates/CRM/Mailing/Form/Component.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Component.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Count.tpl b/civicrm/templates/CRM/Mailing/Form/Count.tpl index 335e509fd0b7159fbdc0a7ac8f39c8d7d3dd82b3..fec5c6115e13d640a34d8ab8c4cd462a06a939cd 100644 --- a/civicrm/templates/CRM/Mailing/Form/Count.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Count.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/ForwardMailing.tpl b/civicrm/templates/CRM/Mailing/Form/ForwardMailing.tpl index a2b898dfce420b1e974542b295810f9eb0f85b5b..0a44f110b30b337f19b2a70819fcb89b450292b2 100644 --- a/civicrm/templates/CRM/Mailing/Form/ForwardMailing.tpl +++ b/civicrm/templates/CRM/Mailing/Form/ForwardMailing.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Group.hlp b/civicrm/templates/CRM/Mailing/Form/Group.hlp index 70225d42bf64565de94c7c0f230a28cfcfce1076..12b8fe6a84ec59fed4109dda061e4d94fe8bbbc6 100644 --- a/civicrm/templates/CRM/Mailing/Form/Group.hlp +++ b/civicrm/templates/CRM/Mailing/Form/Group.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Group.tpl b/civicrm/templates/CRM/Mailing/Form/Group.tpl index 721b55e0d1b8d1be16c036ed16148740f0366df5..003aafab6ba096fb4905b16fe4a10b803fe6a67e 100644 --- a/civicrm/templates/CRM/Mailing/Form/Group.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Group.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/InsertTokens.tpl b/civicrm/templates/CRM/Mailing/Form/InsertTokens.tpl index 2d848ce5750252449ae22f7bd2ca19e9efe589b8..97ab609f192d16b97f9b5de3b3f4a738a420be57 100644 --- a/civicrm/templates/CRM/Mailing/Form/InsertTokens.tpl +++ b/civicrm/templates/CRM/Mailing/Form/InsertTokens.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Optout.tpl b/civicrm/templates/CRM/Mailing/Form/Optout.tpl index 055c56a137c70f863f77ae6435a3abdd8452b617..4ad45a76b17be54fe6079893b7db4574f30ef777 100644 --- a/civicrm/templates/CRM/Mailing/Form/Optout.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Optout.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Schedule.hlp b/civicrm/templates/CRM/Mailing/Form/Schedule.hlp index 8630ca1033e84151b6eda44d7588e0743a5972d5..b25b50cb11066630913d23cc78f04acc6b4ddd3c 100644 --- a/civicrm/templates/CRM/Mailing/Form/Schedule.hlp +++ b/civicrm/templates/CRM/Mailing/Form/Schedule.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Schedule.tpl b/civicrm/templates/CRM/Mailing/Form/Schedule.tpl index 6eb937c09b953dc159afd29680faa20feddbe80c..6d0861a3e3307b1389281938f7da3db3a62ab7e9 100644 --- a/civicrm/templates/CRM/Mailing/Form/Schedule.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Schedule.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Search.tpl b/civicrm/templates/CRM/Mailing/Form/Search.tpl index 88582d3d2514276df45ef515c4ca69e748d3a688..dc9c90505bfb2d957ccd728624e7a6a1d506d11f 100644 --- a/civicrm/templates/CRM/Mailing/Form/Search.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Selector.tpl b/civicrm/templates/CRM/Mailing/Form/Selector.tpl index 56b4455477f5f4cc8b5caabb0f61937016ddb527..2804e4bf7b1e2586976962d248c7f149ac65a083 100644 --- a/civicrm/templates/CRM/Mailing/Form/Selector.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Settings.hlp b/civicrm/templates/CRM/Mailing/Form/Settings.hlp index 2c559fc8b8f65c2c45b75112e9f2cfd4f9b1f77a..7a0882878d5ec96c7678c3a261f09464755c56cd 100644 --- a/civicrm/templates/CRM/Mailing/Form/Settings.hlp +++ b/civicrm/templates/CRM/Mailing/Form/Settings.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Settings.tpl b/civicrm/templates/CRM/Mailing/Form/Settings.tpl index 7a254eaa990235e1ef2873577e99360f6b564024..c0189d4b85884a36c8c255bfbe656d7f3cbbbd79 100644 --- a/civicrm/templates/CRM/Mailing/Form/Settings.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Settings.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Subscribe.tpl b/civicrm/templates/CRM/Mailing/Form/Subscribe.tpl index f07437ef2ccb5cf7c0a79a8d9c8f230167a9b988..4ca3be00d18a4abe080d473aab6b2a30f30a96be 100644 --- a/civicrm/templates/CRM/Mailing/Form/Subscribe.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Subscribe.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Task.tpl b/civicrm/templates/CRM/Mailing/Form/Task.tpl index 5a6ab94b31e187b3841c3fa9c323e965358fd184..fab4ce7501d99a08ec1604594b9259438cad63c5 100644 --- a/civicrm/templates/CRM/Mailing/Form/Task.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Task/Print.tpl b/civicrm/templates/CRM/Mailing/Form/Task/Print.tpl index 5abbd178f1e055d7b1392a4a67ede4b9b51fc39a..9f72fdeb340f8d9c6ec259ca0b98a3c69f7b33d6 100644 --- a/civicrm/templates/CRM/Mailing/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Test.hlp b/civicrm/templates/CRM/Mailing/Form/Test.hlp index 9500d9e9182f78a0a5f6f89de10540e2621e7d10..6847719cf3c6cb392361358befac8faf5ec045ab 100644 --- a/civicrm/templates/CRM/Mailing/Form/Test.hlp +++ b/civicrm/templates/CRM/Mailing/Form/Test.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Test.tpl b/civicrm/templates/CRM/Mailing/Form/Test.tpl index 9072ee39fefbffd0470636831e9b39566da1b330..2a92d6100ac2b559cbff779fdd45733eabe70dbb 100644 --- a/civicrm/templates/CRM/Mailing/Form/Test.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Test.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Unsubscribe.tpl b/civicrm/templates/CRM/Mailing/Form/Unsubscribe.tpl index 1ee085c09b6f1c8adaaec93d5d755aac8773912d..8a9eed15f5fa418c4bd1c181835527b9f4b67521 100644 --- a/civicrm/templates/CRM/Mailing/Form/Unsubscribe.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Unsubscribe.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Upload.hlp b/civicrm/templates/CRM/Mailing/Form/Upload.hlp index 0e1c52f89ec9faff0fbe0b1e5c00f96629f1ff65..2aa1fa73efeff1d63d39827753c70fadaa8eb326 100644 --- a/civicrm/templates/CRM/Mailing/Form/Upload.hlp +++ b/civicrm/templates/CRM/Mailing/Form/Upload.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Form/Upload.tpl b/civicrm/templates/CRM/Mailing/Form/Upload.tpl index 838d37ca6cf6dab0b81c3b799312fc80ecf28aea..be9055dc419687516e0f682dd9eb7c764cb56d56 100644 --- a/civicrm/templates/CRM/Mailing/Form/Upload.tpl +++ b/civicrm/templates/CRM/Mailing/Form/Upload.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/MailingUI.hlp b/civicrm/templates/CRM/Mailing/MailingUI.hlp index 9d1f30d6770524fe5ca1edce6aa73499cc0d9871..de3903d789076d1db4fd8e7ffd1ba714b1bc366e 100644 --- a/civicrm/templates/CRM/Mailing/MailingUI.hlp +++ b/civicrm/templates/CRM/Mailing/MailingUI.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Page/Browse.hlp b/civicrm/templates/CRM/Mailing/Page/Browse.hlp index 010c104da803bdc7a84250822acf3901ee746da1..7993bb00f79233d20f28b9d95ddd7ad4dc63eed6 100644 --- a/civicrm/templates/CRM/Mailing/Page/Browse.hlp +++ b/civicrm/templates/CRM/Mailing/Page/Browse.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Page/Browse.tpl b/civicrm/templates/CRM/Mailing/Page/Browse.tpl index d50af58bb5928fd8eca340512a3f1af35797f5f6..4a3d13c47db54256f58c9df2ac32a608d8ecfb37 100644 --- a/civicrm/templates/CRM/Mailing/Page/Browse.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Browse.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Page/Component.tpl b/civicrm/templates/CRM/Mailing/Page/Component.tpl index 71f759bb5885d283c42f24eb5acb0912b1e6173e..5cf4294d6bb329b7d1546b1c8f7bb84f34fbe608 100644 --- a/civicrm/templates/CRM/Mailing/Page/Component.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Component.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Page/Confirm.tpl b/civicrm/templates/CRM/Mailing/Page/Confirm.tpl index 4289682819168c127254f9f635ea243f0ef35d40..d0489f6b96e2ed4501f9b0bb9551fbbf32f65a0b 100644 --- a/civicrm/templates/CRM/Mailing/Page/Confirm.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Confirm.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Page/Event.tpl b/civicrm/templates/CRM/Mailing/Page/Event.tpl index d144ccae24956ec0a1aab8fd97839281e7c2657d..a70e0e91d19749106d24ac63cbed15abe41a7e2c 100644 --- a/civicrm/templates/CRM/Mailing/Page/Event.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Event.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Page/Report.tpl b/civicrm/templates/CRM/Mailing/Page/Report.tpl index ef5c2a00e1aabc0d08f87ff3c552f775e6931f6a..3a31c03792e5d322f05362d5c1a1d17db64ef936 100644 --- a/civicrm/templates/CRM/Mailing/Page/Report.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Report.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Page/Resubscribe.tpl b/civicrm/templates/CRM/Mailing/Page/Resubscribe.tpl index b75cc380bdc8b56fc5682536bda032de585ed401..45181ecd2f358189b3e540480768a55749b0b22a 100644 --- a/civicrm/templates/CRM/Mailing/Page/Resubscribe.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Resubscribe.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Mailing/Page/Tab.tpl b/civicrm/templates/CRM/Mailing/Page/Tab.tpl index d0d588110784631e8bedd289318c02f1a29fe942..3473440ef44fe12b251d3156b24ef5e524c9e9ab 100644 --- a/civicrm/templates/CRM/Mailing/Page/Tab.tpl +++ b/civicrm/templates/CRM/Mailing/Page/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Membership.hlp b/civicrm/templates/CRM/Member/Form/Membership.hlp index e3d5297a2deb7b10cdd47a92c529276e0beb6246..b6fd9eb7bf8f49ceda1c985e7cbeea74ce707eef 100644 --- a/civicrm/templates/CRM/Member/Form/Membership.hlp +++ b/civicrm/templates/CRM/Member/Form/Membership.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Membership.tpl b/civicrm/templates/CRM/Member/Form/Membership.tpl index 460d3b712d8d5c834d1901722ffbc832bde9619e..b09a75b69c81e733eba5534ae242863112445a92 100644 --- a/civicrm/templates/CRM/Member/Form/Membership.tpl +++ b/civicrm/templates/CRM/Member/Form/Membership.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -154,7 +154,13 @@ </td> </tr> {if !$membershipMode} - <tr><td class="label">{$form.is_override.label} {help id="id-status-override"}</td><td>{$form.is_override.html}</td></tr> + <tr> + <td class="label">{$form.is_override.label} {help id="id-status-override"}</td> + <td> + <span id="is-override">{$form.is_override.html}</span> + <span id="status-override-end-date">{$form.status_override_end_date.html}</span> + </td> + </tr> {* Show read-only Status block - when action is UPDATE and is_override is FALSE *} <tr id="memberStatus_show"> {if $action eq 2} @@ -164,7 +170,7 @@ {* Show editable status field when is_override is TRUE *} <tr id="memberStatus"><td class="label">{$form.status_id.label}</td><td>{$form.status_id.html}<br /> - <span class="description">{ts}If <strong>Status Override</strong> is checked, the selected status will remain in force (it will NOT be modified by the automated status update script).{/ts}</span></td></tr> + <span class="description">{ts}When <strong>Status Override</strong> is active, the selected status will remain in force (it will NOT be subject to membership status rules) until it is cancelled or become inactive.{/ts}</span></td></tr> {/if} {if $accessContribution and !$membershipMode AND ($action neq 2 or (!$rows.0.contribution_id AND !$softCredit) or $onlinePendingContributionId)} @@ -401,15 +407,34 @@ <script type="text/javascript"> {/literal}{if !$membershipMode}{literal} + cj( "#is_override" ).change(function() { + showHideMemberStatus(); + }); + showHideMemberStatus(); function showHideMemberStatus() { - if ( cj( "#is_override" ).prop('checked') ) { - cj('#memberStatus').show( ); - cj('#memberStatus_show').hide( ); - } - else { - cj('#memberStatus').hide( ); - cj('#memberStatus_show').show( ); + var isOverride = cj( "#is_override" ).val(); + switch (isOverride) { + case '0': + cj('#memberStatus').hide(); + cj('#memberStatus_show').show(); + cj('#status-override-end-date').hide(); + break; + case '1': + cj('#memberStatus').show(); + cj('#memberStatus_show').hide(); + cj('#status-override-end-date').hide(); + break; + case '2': + cj('#memberStatus').show(); + cj('#memberStatus_show').hide(); + cj('#status-override-end-date').show(); + break; + default : + cj('#memberStatus').hide( ); + cj('#memberStatus_show').show( ); + cj('#status-override-end-date').hide(); + break; } } {/literal}{/if} diff --git a/civicrm/templates/CRM/Member/Form/MembershipBlock.hlp b/civicrm/templates/CRM/Member/Form/MembershipBlock.hlp index 392f175a8cc58a36b85362c26ab221e1cf4d7523..7476022cc1e481e3372178e26b6895290cc4d080 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipBlock.hlp +++ b/civicrm/templates/CRM/Member/Form/MembershipBlock.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/MembershipBlock.tpl b/civicrm/templates/CRM/Member/Form/MembershipBlock.tpl index 4886e788ab1166e6257dd1c03c7a66fd9de0fc04..7f7a4c5bd36d71adbd2a3fe573d1e7d55accd89a 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipBlock.tpl +++ b/civicrm/templates/CRM/Member/Form/MembershipBlock.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/MembershipRelated.tpl b/civicrm/templates/CRM/Member/Form/MembershipRelated.tpl index 0e45bac75f03559bbaa332c72b6dd1c667f59f65..3b7ec032a2c8e7d5a16249346b70d8363110ce30 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipRelated.tpl +++ b/civicrm/templates/CRM/Member/Form/MembershipRelated.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/MembershipRenewal.tpl b/civicrm/templates/CRM/Member/Form/MembershipRenewal.tpl index d82d42477de0aa403125966054006d29743c77f2..c9e69e4b070a5949edf7b8cf7347358e816e50a2 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipRenewal.tpl +++ b/civicrm/templates/CRM/Member/Form/MembershipRenewal.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/MembershipStatus.tpl b/civicrm/templates/CRM/Member/Form/MembershipStatus.tpl index 15a2e6b0dac16da4d6d3bc1517cf80989494de9d..bff7a6a79735a7a27713424d5c1c48f1450f81cb 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipStatus.tpl +++ b/civicrm/templates/CRM/Member/Form/MembershipStatus.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/MembershipType.tpl b/civicrm/templates/CRM/Member/Form/MembershipType.tpl index a01c6107595134df2091a7c763d2deca66f3c9af..e33b6c8757cd8ba75a0ee102ff8da2746e68f5f8 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipType.tpl +++ b/civicrm/templates/CRM/Member/Form/MembershipType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -31,7 +31,7 @@ <div class="messages status no-popup"> {ts}WARNING: Deleting this option will result in the loss of all membership records of this type.{/ts} {ts}This may mean the loss of a substantial amount of data, and the action cannot be undone.{/ts} {ts}Do you want to continue?{/ts} </div> - <div> {include file="CRM/common/formButtons.tpl"}</div> + <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl"}</div> {else} <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> <table class="form-layout-compressed"> diff --git a/civicrm/templates/CRM/Member/Form/MembershipView.tpl b/civicrm/templates/CRM/Member/Form/MembershipView.tpl index bb1ee2ff3a3558bc52f92bba3d872cd402311e6b..2503a60f60ae0581a77b0086394b03764ac2f625 100644 --- a/civicrm/templates/CRM/Member/Form/MembershipView.tpl +++ b/civicrm/templates/CRM/Member/Form/MembershipView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Search.hlp b/civicrm/templates/CRM/Member/Form/Search.hlp index eca6f27a25f263cec7282af2895cd195a13ab6e2..ccbfaa0d910fb5771964b55470601da723417eef 100644 --- a/civicrm/templates/CRM/Member/Form/Search.hlp +++ b/civicrm/templates/CRM/Member/Form/Search.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Search.tpl b/civicrm/templates/CRM/Member/Form/Search.tpl index 705df016aa81024dc67482781679f54c710d8850..5446a9906936460c2b5f63f63c8456fea1821f4d 100644 --- a/civicrm/templates/CRM/Member/Form/Search.tpl +++ b/civicrm/templates/CRM/Member/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Search/AdvancedSearchPane.tpl b/civicrm/templates/CRM/Member/Form/Search/AdvancedSearchPane.tpl index 2e7ba5aff6eb14012b6d37a446a03c034816e040..02497f821f86ea459869eb0e72bda14e818dd622 100644 --- a/civicrm/templates/CRM/Member/Form/Search/AdvancedSearchPane.tpl +++ b/civicrm/templates/CRM/Member/Form/Search/AdvancedSearchPane.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Search/Common.tpl b/civicrm/templates/CRM/Member/Form/Search/Common.tpl index d2c58fbdab2aa5d9a5c0acc32378d4430818095c..90e3a1e82b8e782d906eb336ef80b8b13847bc99 100644 --- a/civicrm/templates/CRM/Member/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Member/Form/Search/Common.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Member/Form/Search/EmptyResults.tpl index e2c14f58f2b0915dc022c4ddc06a044fc69c417d..68fdb60ff7106eda6a719988c2fdd00afe8355ef 100644 --- a/civicrm/templates/CRM/Member/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Member/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Selector.tpl b/civicrm/templates/CRM/Member/Form/Selector.tpl index b5ab5f59d664807bf94c1128a29772cf8886d4d4..53d0de976f9ec52a314c4521670ecbf4a91514d9 100644 --- a/civicrm/templates/CRM/Member/Form/Selector.tpl +++ b/civicrm/templates/CRM/Member/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -69,9 +69,9 @@ <td class="crm-membership-status crm-membership-status_{$row.membership_status}">{$row.membership_status}</td> <td class="crm-membership-auto_renew"> {if $row.auto_renew eq 1} - <i class="fa fa-check" aria-hidden="true" title="{ts}Auto-renew active{/ts}"></i> + <i class="crm-i fa-check" aria-hidden="true" title="{ts}Auto-renew active{/ts}"></i> {elseif $row.auto_renew eq 2} - <i class="fa fa-exclamation" aria-hidden="true" title="{ts}Auto-renew error{/ts}"></i> + <i class="crm-i fa-ban" aria-hidden="true" title="{ts}Auto-renew error{/ts}"></i> {/if} </td> <td> diff --git a/civicrm/templates/CRM/Member/Form/Task.tpl b/civicrm/templates/CRM/Member/Form/Task.tpl index ad9cfff7c8af8b7437ddaa5002521b34089def45..dcccebb6aa42d7135d3ce87bbe0188f52111235c 100644 --- a/civicrm/templates/CRM/Member/Form/Task.tpl +++ b/civicrm/templates/CRM/Member/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Task/Batch.tpl b/civicrm/templates/CRM/Member/Form/Task/Batch.tpl index 9a7aaad8e1fed85d05332b58bf604e5c198fba02..6814f18431d32401a6c4f635c4574eb18c0a2d06 100644 --- a/civicrm/templates/CRM/Member/Form/Task/Batch.tpl +++ b/civicrm/templates/CRM/Member/Form/Task/Batch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Task/Delete.tpl b/civicrm/templates/CRM/Member/Form/Task/Delete.tpl index ff52e1e2a2c1eb1a0dc7a3d45bb3ca92311f4576..c000a94dc549c80c245326f0ead2312c57ca396f 100644 --- a/civicrm/templates/CRM/Member/Form/Task/Delete.tpl +++ b/civicrm/templates/CRM/Member/Form/Task/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Task/Email.tpl b/civicrm/templates/CRM/Member/Form/Task/Email.tpl index aaed296b1be2bafb31bc83cd0e73e9e8f03f5b38..9b7a13ada8bd503c9f100352fed2af347406aecd 100644 --- a/civicrm/templates/CRM/Member/Form/Task/Email.tpl +++ b/civicrm/templates/CRM/Member/Form/Task/Email.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Task/Label.tpl b/civicrm/templates/CRM/Member/Form/Task/Label.tpl index 2540cc27c5b0194256c04b19c87d7b7b35a66e93..18f3004ad2c99b95e38dcedceb3856d38b236c5b 100644 --- a/civicrm/templates/CRM/Member/Form/Task/Label.tpl +++ b/civicrm/templates/CRM/Member/Form/Task/Label.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Task/PDFLetter.tpl b/civicrm/templates/CRM/Member/Form/Task/PDFLetter.tpl index 4010eed4b5a09ba5e322c1aa1e883a8c6fb96558..8355ff207f783997b1c13279c7ed1ba65e5da385 100644 --- a/civicrm/templates/CRM/Member/Form/Task/PDFLetter.tpl +++ b/civicrm/templates/CRM/Member/Form/Task/PDFLetter.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Task/PickProfile.tpl b/civicrm/templates/CRM/Member/Form/Task/PickProfile.tpl index b2ed265751f10512b5c90d13fe2966af3fd98357..faf45d870549cd3f93f290f59ddc857f4a618225 100644 --- a/civicrm/templates/CRM/Member/Form/Task/PickProfile.tpl +++ b/civicrm/templates/CRM/Member/Form/Task/PickProfile.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Task/Print.tpl b/civicrm/templates/CRM/Member/Form/Task/Print.tpl index fd1501f7a0cd468d8c0ccb03ab8bc00bfd8c4e04..b1cf554e5216e4c653661433b2a9b355615c9d1e 100644 --- a/civicrm/templates/CRM/Member/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Member/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Form/Task/Result.tpl b/civicrm/templates/CRM/Member/Form/Task/Result.tpl index c29b65a2e50151d8c6a846b29583f0e55e3cfce5..12a8d7ce50c9f9469a1c91971390c4daa17fe384 100644 --- a/civicrm/templates/CRM/Member/Form/Task/Result.tpl +++ b/civicrm/templates/CRM/Member/Form/Task/Result.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Import/Form/DataSource.hlp b/civicrm/templates/CRM/Member/Import/Form/DataSource.hlp index 8fe39a0d07f074f7bc3202ecaec0dfb01b43ab5b..7198fa3e797d934178b379ae240dddf2b61c5449 100644 --- a/civicrm/templates/CRM/Member/Import/Form/DataSource.hlp +++ b/civicrm/templates/CRM/Member/Import/Form/DataSource.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Import/Form/DataSource.tpl b/civicrm/templates/CRM/Member/Import/Form/DataSource.tpl index 0b62ae8c3d04c9686c607c012343799028484e27..b5e3536c0326981dd6d2c5bc4226bc715d2a8d1b 100644 --- a/civicrm/templates/CRM/Member/Import/Form/DataSource.tpl +++ b/civicrm/templates/CRM/Member/Import/Form/DataSource.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Import/Form/MapField.tpl b/civicrm/templates/CRM/Member/Import/Form/MapField.tpl index 0600210c7a9e8ce71aac41225799ae9beda097e7..83921e5a9b2a53e3fe14ec1506116262622921d5 100644 --- a/civicrm/templates/CRM/Member/Import/Form/MapField.tpl +++ b/civicrm/templates/CRM/Member/Import/Form/MapField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Import/Form/MapTable.tpl b/civicrm/templates/CRM/Member/Import/Form/MapTable.tpl index 629996cedeab71799ae70c5269cd554a48d502c2..75e441fd7ff375a9840ac5911c13210dcceafb6e 100644 --- a/civicrm/templates/CRM/Member/Import/Form/MapTable.tpl +++ b/civicrm/templates/CRM/Member/Import/Form/MapTable.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Import/Form/Preview.tpl b/civicrm/templates/CRM/Member/Import/Form/Preview.tpl index 22178c0fad5eb4cc9c5454788a461ae29b21cb7a..7485b15b5974859bdb704e689122904a222a08c1 100644 --- a/civicrm/templates/CRM/Member/Import/Form/Preview.tpl +++ b/civicrm/templates/CRM/Member/Import/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Import/Form/Summary.tpl b/civicrm/templates/CRM/Member/Import/Form/Summary.tpl index a450af73dcc2964d03acbda3aad3de73a52134cd..a5b18ea7172ebd85d600ca20a5ffad66c51d8d82 100644 --- a/civicrm/templates/CRM/Member/Import/Form/Summary.tpl +++ b/civicrm/templates/CRM/Member/Import/Form/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Page/DashBoard.hlp b/civicrm/templates/CRM/Member/Page/DashBoard.hlp index 1cf37780d8c82dbec4f23cdaef072d0598e24557..93f81e85f0c2d1561cfbdc8d2a6455c584e2d9e9 100644 --- a/civicrm/templates/CRM/Member/Page/DashBoard.hlp +++ b/civicrm/templates/CRM/Member/Page/DashBoard.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Page/DashBoard.tpl b/civicrm/templates/CRM/Member/Page/DashBoard.tpl index 3bea0f1ce63701763c80ec03ed02984d90cd8660..58a61163944bcfdfa5226fede596a035a1dd5cca 100644 --- a/civicrm/templates/CRM/Member/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Member/Page/DashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl b/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl index fd63d4ea20b9e239bf88172da81597a4344be9b6..bdfc5c2e4367fd560a079ef74621f699977f5655 100644 --- a/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl +++ b/civicrm/templates/CRM/Member/Page/MembershipStatus.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Page/MembershipType.hlp b/civicrm/templates/CRM/Member/Page/MembershipType.hlp index 315c445e2ff5b00f651fefeb079cbe67e8f86691..f18985f4efc38264eb95b454c92073d61b43ee2b 100644 --- a/civicrm/templates/CRM/Member/Page/MembershipType.hlp +++ b/civicrm/templates/CRM/Member/Page/MembershipType.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Page/MembershipType.tpl b/civicrm/templates/CRM/Member/Page/MembershipType.tpl index 55e0c74d4a4eb3fba301688be33114278033c474..245643ca090c3012b9de1186875e543067fc32ff 100644 --- a/civicrm/templates/CRM/Member/Page/MembershipType.tpl +++ b/civicrm/templates/CRM/Member/Page/MembershipType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Member/Page/Tab.hlp b/civicrm/templates/CRM/Member/Page/Tab.hlp index 0be22e287f86ac4bdca99f99500d35d2fde16531..4302d77dd5f55493f7e934cfd35b719bea4ea0a2 100644 --- a/civicrm/templates/CRM/Member/Page/Tab.hlp +++ b/civicrm/templates/CRM/Member/Page/Tab.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -27,8 +27,8 @@ {ts}Override Status{/ts} {/htxt} {htxt id="id-status-override"} - <p>{ts}Membership status is normally assigned and updated automatically based on your configured membership status rules. However, if you want to assign a status manually and bypass automated status setting, check this box. Then you can select from the available status options.{/ts}</p> - <p>{ts}The status you assign will remain in force, unless it is again modified on this screen. As long as the Status Override flag is checked, the automated membership status update script will NOT update this membership record.{/ts}</p> + <p>{ts}Membership status is normally assigned and updated automatically based on your configured membership status rules. However, if you want to assign a status manually and bypass automated status setting, choose either "Override Permanently" or "Override Until Selected Date", Then you can select from the available status options.{/ts}</p> + <p>{ts}If you select "Override Permanently", The status you assign will remain in force, unless it is again modified on this screen. If you select "Override Until Selected Date", it will behave same as "Override Permanently" but will revert to "No" once the selected date is reached. As long as the Membership Override is active, the automated membership status update script will NOT update this membership record.{/ts}</p> {/htxt} {htxt id="id-contribution_contact-title"} diff --git a/civicrm/templates/CRM/Member/Page/Tab.tpl b/civicrm/templates/CRM/Member/Page/Tab.tpl index 05391e53b22df26587449f9c5d22e68cf6ec8a34..f746790870add6d7c150c385f4e0d3cc8118ae94 100644 --- a/civicrm/templates/CRM/Member/Page/Tab.tpl +++ b/civicrm/templates/CRM/Member/Page/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -96,9 +96,9 @@ <td class="crm-membership-source">{$activeMember.source}</td> <td class="crm-membership-auto_renew"> {if $activeMember.auto_renew eq 1} - <i class="fa fa-check" aria-hidden="true" title="{ts}Auto-renew active{/ts}"></i> + <i class="crm-i fa-check" aria-hidden="true" title="{ts}Auto-renew active{/ts}"></i> {elseif $activeMember.auto_renew eq 2} - <i class="fa fa-exclamation" aria-hidden="true" title="{ts}Auto-renew error{/ts}"></i> + <i class="crm-i fa-ban" aria-hidden="true" title="{ts}Auto-renew error{/ts}"></i> {/if} </td> <td class="crm-membership-related_count">{$activeMember.related_count}</td> @@ -145,9 +145,9 @@ <td class="crm-membership-source">{$inActiveMember.source}</td> <td class="crm-membership-auto_renew"> {if $inActiveMember.auto_renew eq 1} - <i class="fa fa-check" aria-hidden="true" title="{ts}Auto-renew active{/ts}"></i> + <i class="crm-i fa-check" aria-hidden="true" title="{ts}Auto-renew active{/ts}"></i> {elseif $inActiveMember.auto_renew eq 2} - <i class="fa fa-exclamation" aria-hidden="true" title="{ts}Auto-renew error{/ts}"></i> + <i class="crm-i fa-ban" aria-hidden="true" title="{ts}Auto-renew error{/ts}"></i> {/if} </td> <td>{$inActiveMember.action|replace:'xx':$inActiveMember.id} diff --git a/civicrm/templates/CRM/Member/Page/UserDashboard.tpl b/civicrm/templates/CRM/Member/Page/UserDashboard.tpl index 208d37e323a1c32cdcb1ebddddd5545e8ec14c80..a1a28ef3c693575f2d6362a29c48d4d633c67718 100644 --- a/civicrm/templates/CRM/Member/Page/UserDashboard.tpl +++ b/civicrm/templates/CRM/Member/Page/UserDashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Note/Form/Note.tpl b/civicrm/templates/CRM/Note/Form/Note.tpl index 2bb031cf83d3677b3193ea5d7687ed9ffd1dfd20..79494a86c8f38ecaadcd918e7917070ce2d6fde2 100644 --- a/civicrm/templates/CRM/Note/Form/Note.tpl +++ b/civicrm/templates/CRM/Note/Form/Note.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/Campaign.tpl b/civicrm/templates/CRM/PCP/Form/Campaign.tpl index 474c8dbe0cebda0ab20f2462cd842707a1d33739..8bd17e3382ea236a846e58099e7c0e012fbe6a06 100644 --- a/civicrm/templates/CRM/PCP/Form/Campaign.tpl +++ b/civicrm/templates/CRM/PCP/Form/Campaign.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/Contribute.hlp b/civicrm/templates/CRM/PCP/Form/Contribute.hlp index 57d1ba98763ac6af75c81cb25c3346420f970eaa..9f1d7fd4e1acd9fde12b68ac34107833ab376924 100644 --- a/civicrm/templates/CRM/PCP/Form/Contribute.hlp +++ b/civicrm/templates/CRM/PCP/Form/Contribute.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/Contribute.tpl b/civicrm/templates/CRM/PCP/Form/Contribute.tpl index b6121e7f8028cd3ffb8f60c6f1f44be14485efe6..5f89729bf53307f896ad9618ec307fb92ecc7275 100644 --- a/civicrm/templates/CRM/PCP/Form/Contribute.tpl +++ b/civicrm/templates/CRM/PCP/Form/Contribute.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/Event.hlp b/civicrm/templates/CRM/PCP/Form/Event.hlp index 5c336bfecf330851973b21e4e77c1749017a18d6..a51275cf0cf0ba0a63629bb2f1aa1e72d2217419 100644 --- a/civicrm/templates/CRM/PCP/Form/Event.hlp +++ b/civicrm/templates/CRM/PCP/Form/Event.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/Event.tpl b/civicrm/templates/CRM/PCP/Form/Event.tpl index 1aba7cdad9c22bca201571470359fa04c8ed1848..3d51ffca46a0b27ba80fb436457ee897e5a2533d 100644 --- a/civicrm/templates/CRM/PCP/Form/Event.tpl +++ b/civicrm/templates/CRM/PCP/Form/Event.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/PCP.tpl b/civicrm/templates/CRM/PCP/Form/PCP.tpl index b6b05a345aad29cf73db295da4fb157a77c577fd..258d6f91cafd6ca8a9c9d7a5cde93c551cfe55f6 100644 --- a/civicrm/templates/CRM/PCP/Form/PCP.tpl +++ b/civicrm/templates/CRM/PCP/Form/PCP.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/PCP/Delete.tpl b/civicrm/templates/CRM/PCP/Form/PCP/Delete.tpl index 67c7ea8e4495ef90608fa1ff0923c70f01220d34..38541162b758829f13797d289ebe0c02ab712d76 100644 --- a/civicrm/templates/CRM/PCP/Form/PCP/Delete.tpl +++ b/civicrm/templates/CRM/PCP/Form/PCP/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/PCP/PCP.tpl b/civicrm/templates/CRM/PCP/Form/PCP/PCP.tpl index c8303c1fef140bc25ee7eb9fb7b433d5c6a2bd19..64989485c49c8e8fd4ef35c5a555717e74a2e534 100644 --- a/civicrm/templates/CRM/PCP/Form/PCP/PCP.tpl +++ b/civicrm/templates/CRM/PCP/Form/PCP/PCP.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Form/PCPAccount.tpl b/civicrm/templates/CRM/PCP/Form/PCPAccount.tpl index 2dc28c4c785a55edd0b7eed6cd170f7d8c551158..099689f09a8ac00b0625918cf9032e6690ac3fcd 100644 --- a/civicrm/templates/CRM/PCP/Form/PCPAccount.tpl +++ b/civicrm/templates/CRM/PCP/Form/PCPAccount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Page/Contribute.tpl b/civicrm/templates/CRM/PCP/Page/Contribute.tpl index a68314c9d79b455ad5cc707552f8bc7a9858b010..75f0eaa5fa8696cee4abd76864a6f907e48f3235 100644 --- a/civicrm/templates/CRM/PCP/Page/Contribute.tpl +++ b/civicrm/templates/CRM/PCP/Page/Contribute.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Page/Event.tpl b/civicrm/templates/CRM/PCP/Page/Event.tpl index f183768fd2ecbbd24f84e489a85ec521d9482ffe..21bbf926213fd1b68584482e20cbc6a4f0c2ffb9 100644 --- a/civicrm/templates/CRM/PCP/Page/Event.tpl +++ b/civicrm/templates/CRM/PCP/Page/Event.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Page/PCP.hlp b/civicrm/templates/CRM/PCP/Page/PCP.hlp index 7a10a6180c9c9a214e66da65c2e9f52cecd42c5f..00196a83a43569523691d4aa005f5906d21f5b92 100644 --- a/civicrm/templates/CRM/PCP/Page/PCP.hlp +++ b/civicrm/templates/CRM/PCP/Page/PCP.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Page/PCP.tpl b/civicrm/templates/CRM/PCP/Page/PCP.tpl index ea1cdf307e776e8e2623364bf63a527fa165af6b..91ae960b9d913058ba95d3a37bd20b44d15187da 100644 --- a/civicrm/templates/CRM/PCP/Page/PCP.tpl +++ b/civicrm/templates/CRM/PCP/Page/PCP.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/PCP/Page/PCPInfo.tpl b/civicrm/templates/CRM/PCP/Page/PCPInfo.tpl index bb82ef1b160ca7d8db03b91046e26080e2a32912..75e408669ed5a5ab441715cd7446e7ae20d5ad03 100644 --- a/civicrm/templates/CRM/PCP/Page/PCPInfo.tpl +++ b/civicrm/templates/CRM/PCP/Page/PCPInfo.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Payment.tpl b/civicrm/templates/CRM/Pledge/Form/Payment.tpl index 8ec836cee79fbb0ace923667550bdba64c79cb86..c770a61d7c9818cb0450df1fc2ee870395abf242 100644 --- a/civicrm/templates/CRM/Pledge/Form/Payment.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Payment.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Pledge.tpl b/civicrm/templates/CRM/Pledge/Form/Pledge.tpl index 60ce62cbc1c3b4c3e93bb113d24cccdd4631c99a..f9c7b4e78129b8c46a15fa0bb708589fcc97b16b 100644 --- a/civicrm/templates/CRM/Pledge/Form/Pledge.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Pledge.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,7 +30,7 @@ {if !$email and $action neq 8 and $context neq 'standalone'} <div class="messages status no-popup"> <div class="icon inform-icon"></div> - <p>{ts}You will not be able to send an acknowledgment for this pledge because there is no email address recorded for this contact. If you want a acknowledgment to be sent when this pledge is recorded, click Cancel and then click Edit from the Summary tab to add an email address before recording the pledge.{/ts}</p> + <p>{ts}You will not be able to send an acknowledgment for this pledge because there is no email address recorded for this contact. If you want a acknowledgment to be sent when this pledge is recorded, click Cancel and then click Edit from the Summary tab to add an email address before recording the pledge.{/ts}</p> </div> {/if} {if $action EQ 2} @@ -45,9 +45,9 @@ <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="top"}</div> {if $action eq 8} <div class="messages status no-popup"> - <div class="icon inform-icon"></div> - <span class="font-red bold">{ts}WARNING: Deleting this pledge will also delete any related pledge payments.{/ts} {ts}This action cannot be undone.{/ts}</span> - <p>{ts}Consider cancelling the pledge instead if you want to maintain an audit trail and avoid losing payment data. To set the pledge status to Cancelled and cancel any not-yet-paid pledge payments, first click Cancel on this form. Then click the more > link from the pledge listing, and select the Cancel action.{/ts}</p> + <div class="icon inform-icon"></div> + <span class="font-red bold">{ts}WARNING: Deleting this pledge will also delete any related pledge payments.{/ts} {ts}This action cannot be undone.{/ts}</span> + <p>{ts}Consider cancelling the pledge instead if you want to maintain an audit trail and avoid losing payment data. To set the pledge status to Cancelled and cancel any not-yet-paid pledge payments, first click Cancel on this form. Then click the more > link from the pledge listing, and select the Cancel action.{/ts}</p> </div> {else} <table class="form-layout-compressed"> @@ -58,93 +58,118 @@ </tr> {else} <tr class="crm-pledge-form-block-displayName"> - <td class="font-size12pt right"><strong>{ts}Pledge by{/ts}</strong></td> - <td class="font-size12pt"><strong>{$displayName}</strong></td> + <td class="font-size12pt right"><strong>{ts}Pledge by{/ts}</strong></td> + <td class="font-size12pt"><strong>{$displayName}</strong></td> </tr> {/if} - <tr class="crm-pledge-form-block-amount"> - <td class="label">{$form.amount.label}</td> - <td><span>{$form.currency.html|crmAddClass:eight} {$form.amount.html|crmAddClass:eight}</span> - {if $originalPledgeAmount}<div class="messages status no-popup"><div class="icon inform-icon"></div> {ts 1=$originalPledgeAmount|crmMoney:$currency} Pledge total has changed due to payment adjustments. Original pledge amount was %1.{/ts}</div>{/if} - </td> - </tr> - <tr class="crm-pledge-form-block-installments"> - <td class="label">{$form.installments.label}</td> - <td>{$form.installments.html} {ts}installments of{/ts} - <span class='currency-symbol'> - {if $action eq 1 or $isPending} - {$form.eachPaymentAmount.html|crmMoney:$currency} - {elseif $action eq 2 and !$isPending} - {$eachPaymentAmount|crmMoney:$currency} - {/if} - </span> {ts}every{/ts} {$form.frequency_interval.html} {$form.frequency_unit.html}</td></tr> - <tr class="crm-pledge-form-block-frequency_day"> - <td class="label nowrap">{$form.frequency_day.label}</td> - <td>{$form.frequency_day.html} {ts}day of the period{/ts}<br /> - <span class="description">{ts}This applies to weekly, monthly and yearly payments.{/ts}</td></tr> + <tr class="crm-pledge-form-block-amount"> + <td class="label">{$form.amount.label}</td> + <td> + <span>{$form.currency.html|crmAddClass:eight} {$form.amount.html|crmAddClass:eight}</span> + {if $originalPledgeAmount}<div class="messages status no-popup"><div class="icon inform-icon"></div> {ts 1=$originalPledgeAmount|crmMoney:$currency} Pledge total has changed due to payment adjustments. Original pledge amount was %1.{/ts}</div>{/if} + </td> + </tr> + <tr class="crm-pledge-form-block-installments"> + <td class="label">{$form.installments.label}</td> + <td>{$form.installments.html} {ts}installments of{/ts} + <span class='currency-symbol'> + {if $action eq 1 or $isPending} + {$form.eachPaymentAmount.html|crmMoney:$currency} + {elseif $action eq 2 and !$isPending} + {$eachPaymentAmount|crmMoney:$currency} + {/if} + </span> {ts}every{/ts} {$form.frequency_interval.html} {$form.frequency_unit.html} + </td> + </tr> + <tr class="crm-pledge-form-block-frequency_day"> + <td class="label nowrap">{$form.frequency_day.label}</td> + <td>{$form.frequency_day.html} {ts}day of the period{/ts}<br /> + <span class="description">{ts}This applies to weekly, monthly and yearly payments.{/ts}</span> + </td> + </tr> {if $form.create_date} - <tr class="crm-pledge-form-block-create_date"> + <tr class="crm-pledge-form-block-create_date"> <td class="label">{$form.create_date.label}</td> <td>{include file="CRM/common/jcalendar.tpl" elementName=create_date}<br /> {/if} {if $create_date} - <tr class="crm-pledge-form-block-create_date"> - <td class="label">{ts}Pledge Made{/ts}</td> - <td class="view-value">{$create_date|truncate:10:''|crmDate} + <tr class="crm-pledge-form-block-create_date"> + <td class="label"><label>{ts}Pledge Made{/ts}</label></td> + <td class="view-value">{$create_date|truncate:10:''|crmDate} {/if}<br /> - <span class="description">{ts}Date when pledge was made by the contributor.{/ts}</span></td></tr> + <span class="description">{ts}Date when pledge was made by the contributor.{/ts}</span> + </td> + </tr> {if $form.start_date} - <tr class="crm-pledge-form-block-start_date"> - <td class="label">{$form.start_date.label}</td> - <td>{include file="CRM/common/jcalendar.tpl" elementName=start_date}<br /> + <tr class="crm-pledge-form-block-start_date"> + <td class="label">{$form.start_date.label}</td> + <td>{include file="CRM/common/jcalendar.tpl" elementName=start_date}<br /> {/if} {if $start_date} - <tr class="crm-pledge-form-block-start_date"> - <td class="label">{ts}Payments Start{/ts}</td> - <td class="view-value">{$start_date|truncate:10:''|crmDate} - {/if}<br /> - <span class="description">{ts}Date of first pledge payment.{/ts}</span></td></tr> + <tr class="crm-pledge-form-block-start_date"> + <td class="label"><label>{ts}Payments Start{/ts}</label></td> + <td class="view-value">{$start_date|truncate:10:''|crmDate} + {/if} + <br /> + <span class="description">{ts}Date of first pledge payment.{/ts}</span> + </td> + </tr> {if $email and $outBound_option != 2} {if $form.is_acknowledge } - <tr class="crm-pledge-form-block-is_acknowledge"> - <td class="label">{$form.is_acknowledge.label}</td> - <td>{$form.is_acknowledge.html}<br /> - <span class="description">{ts 1=$email}Automatically email an acknowledgment of this pledge to %1?{/ts}</span></td></tr> + <tr class="crm-pledge-form-block-is_acknowledge"> + <td class="label">{$form.is_acknowledge.label}</td> + <td>{$form.is_acknowledge.html}<br /> + <span class="description">{ts 1=$email}Automatically email an acknowledgment of this pledge to %1?{/ts}</span> + </td> + </tr> {/if} - {elseif $context eq 'standalone' and $outBound_option != 2 } - <tr id="acknowledgment-receipt" style="display:none;"><td class="label">{$form.is_acknowledge.label}</td><td>{$form.is_acknowledge.html} <span class="description">{ts 1='<span id="email-address"></span>'}Automatically email an acknowledgment of this pledge to %1?{/ts}</span></td></tr> + {elseif $context eq 'standalone' and $outBound_option != 2 } + <tr id="acknowledgment-receipt" style="display:none;"> + <td class="label">{$form.is_acknowledge.label}</td> + <td> + {$form.is_acknowledge.html} <span class="description">{ts 1='<span id="email-address"></span>'}Automatically email an acknowledgment of this pledge to %1?{/ts}</span> + </td> + </tr> {/if} - <tr id="fromEmail" style="display:none;"> + <tr id="fromEmail" style="display:none;"> <td class="label">{$form.from_email_address.label}</td> <td>{$form.from_email_address.html} {help id="id-from_email" file="CRM/Contact/Form/Task/Email.hlp" isAdmin=$isAdmin}</td> - </tr> - <tr id="acknowledgeDate"> - <td class="label" class="crm-pledge-form-block-acknowledge_date">{$form.acknowledge_date.label}</td> + </tr> + <tr id="acknowledgeDate"> + <td class="label" class="crm-pledge-form-block-acknowledge_date">{$form.acknowledge_date.label}</td> <td>{include file="CRM/common/jcalendar.tpl" elementName=acknowledge_date}<br /> - <span class="description">{ts}Date when an acknowledgment of the pledge was sent.{/ts}</span></td> - </tr> - <tr class="crm-pledge-form-block-financial_type_id"> - <td class="label">{$form.financial_type_id.label}</td> - <td>{$form.financial_type_id.html}<br /> - <span class="description">{ts}Sets the default financial type for payments against this pledge.{/ts}</span></td></tr> + <span class="description">{ts}Date when an acknowledgment of the pledge was sent.{/ts}</span> + </td> + </tr> + <tr class="crm-pledge-form-block-financial_type_id"> + <td class="label">{$form.financial_type_id.label}</td> + <td>{$form.financial_type_id.html}<br /> + <span class="description">{ts}Sets the default financial type for payments against this pledge.{/ts}</span> + </td> + </tr> {* CRM-7362 --add campaign *} {include file="CRM/Campaign/Form/addCampaignToComponent.tpl" campaignTrClass="crm-pledge-form-block-campaign_id"} - <tr class="crm-pledge-form-block-contribution_page_id"> - <td class="label">{$form.contribution_page_id.label}</td> - <td>{$form.contribution_page_id.html}<br /> - <span class="description">{ts}Select an Online Contribution page that the user can access to make self-service pledge payments. (Only Online Contribution pages configured to include the Pledge option are listed.){/ts}</span></td> - </tr> + <tr class="crm-pledge-form-block-contribution_page_id"> + <td class="label">{$form.contribution_page_id.label}</td> + <td>{$form.contribution_page_id.html}<br /> + <span class="description">{ts}Select an Online Contribution page that the user can access to make self-service pledge payments. (Only Online Contribution pages configured to include the Pledge option are listed.){/ts}</span> + </td> + </tr> - <tr class="crm-pledge-form-block-status"> - <td class="label">{ts}Pledge Status{/ts}</td> - <td class="view-value">{$status}<br /> - <span class="description">{ts}Pledges are "Pending" until the first payment is received. Once a payment is received, status is "In Progress" until all scheduled payments are completed. Overdue pledges are ones with payment(s) past due.{/ts}</span></td></tr> - <tr><td colspan=2>{include file="CRM/Custom/Form/CustomData.tpl"}</td></tr> + <tr class="crm-pledge-form-block-status"> + <td class="label"><label>{ts}Pledge Status{/ts}</label></td> + <td class="view-value">{$status}<br /> + <span class="description">{ts}Pledges are "Pending" until the first payment is received. Once a payment is received, status is "In Progress" until all scheduled payments are completed. Overdue pledges are ones with payment(s) past due.{/ts}</span> + </td> + </tr> + <tr> + <td colspan=2>{include file="CRM/Custom/Form/CustomData.tpl"}</td> + </tr> </table> {literal} <script type="text/javascript"> diff --git a/civicrm/templates/CRM/Pledge/Form/PledgeView.tpl b/civicrm/templates/CRM/Pledge/Form/PledgeView.tpl index 588a35a77a6bab89e05449987e8fec5ace0e0937..aa8c74ff80fa7b3286fe5df9bd079ff3ec092b24 100644 --- a/civicrm/templates/CRM/Pledge/Form/PledgeView.tpl +++ b/civicrm/templates/CRM/Pledge/Form/PledgeView.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Search.tpl b/civicrm/templates/CRM/Pledge/Form/Search.tpl index d5f205f1ce12b733f83ac867015ccc3b63719b0f..2bc1436803866e6abfbbe5b24a69d606932c4584 100644 --- a/civicrm/templates/CRM/Pledge/Form/Search.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Search/AdvancedSearchPane.tpl b/civicrm/templates/CRM/Pledge/Form/Search/AdvancedSearchPane.tpl index 0bc7290ee5e55226a1de711e45dc9813d6ae30c5..1596dde6366b78e1fc9a3433b820524a3476b438 100644 --- a/civicrm/templates/CRM/Pledge/Form/Search/AdvancedSearchPane.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Search/AdvancedSearchPane.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Search/Common.tpl b/civicrm/templates/CRM/Pledge/Form/Search/Common.tpl index 1e14016fd91141c62c8ec15eac2ff16ab8f7a26d..18c5e04a71d378accba32c14439616a1cd2f70e3 100644 --- a/civicrm/templates/CRM/Pledge/Form/Search/Common.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Search/Common.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -25,10 +25,7 @@ *} <tr> - <td><label>{ts}Payment Scheduled{/ts}</label></td> -</tr> -<tr> -{include file="CRM/Core/DateRange.tpl" fieldName="pledge_payment_date" from='_low' to='_high'} +{include file="CRM/Core/DateRange.tpl" fieldName="pledge_payment_date" from='_low' to='_high' label="<label>Payment Scheduled</label>"} </tr> <tr> <td colspan="2"> @@ -48,22 +45,13 @@ </td> </tr> <tr> - <td><label>{ts}Pledge Made{/ts}</label></td> -</tr> -<tr> -{include file="CRM/Core/DateRange.tpl" fieldName="pledge_create_date" from='_low' to='_high'} -</tr> -<tr> - <td><label>{ts}Payments Start Date{/ts}</label></td> -</tr> -<tr> -{include file="CRM/Core/DateRange.tpl" fieldName="pledge_start_date" from='_low' to='_high'} +{include file="CRM/Core/DateRange.tpl" fieldName="pledge_create_date" from='_low' to='_high' label="<label>Pledge Made</label>"} </tr> <tr> - <td><label>{ts}Payments Ended Date{/ts}</label></td> +{include file="CRM/Core/DateRange.tpl" fieldName="pledge_start_date" from='_low' to='_high' label="<label>Payments Start Date</label>"} </tr> <tr> -{include file="CRM/Core/DateRange.tpl" fieldName="pledge_end_date" from='_low' to='_high'} +{include file="CRM/Core/DateRange.tpl" fieldName="pledge_end_date" from='_low' to='_high' label="<label>Payments Ended Date</label>"} </tr> <tr> <td> @@ -90,7 +78,8 @@ </tr> <tr> <td colspan="2"> - {ts}Number of Installments{/ts} + <label>{ts}Number of Installments{/ts}</label> + <br /> {$form.pledge_installments_low.label} {$form.pledge_installments_low.html} {$form.pledge_installments_high.label} {$form.pledge_installments_high.html} </td> @@ -98,7 +87,7 @@ <tr> <td colspan="2"> - <br /> {$form.pledge_acknowledge_date_is_not_null.label} {$form.pledge_acknowledge_date_is_not_null.html} + {$form.pledge_acknowledge_date_is_not_null.label} {$form.pledge_acknowledge_date_is_not_null.html} </td> </tr> diff --git a/civicrm/templates/CRM/Pledge/Form/Search/EmptyResults.tpl b/civicrm/templates/CRM/Pledge/Form/Search/EmptyResults.tpl index 4cd6a139c26575e56a32bdf1459d647ac84a40fb..d861f01d6ec90d396970d6cd6bc94ddc6fba7416 100644 --- a/civicrm/templates/CRM/Pledge/Form/Search/EmptyResults.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Search/EmptyResults.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Selector.tpl b/civicrm/templates/CRM/Pledge/Form/Selector.tpl index 31f8c81cd4b3e3d9c291ac3abbbb8a71c437505f..4099d60729940e58234251a5ed7ae26f55f0f212 100644 --- a/civicrm/templates/CRM/Pledge/Form/Selector.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Selector.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Task.tpl b/civicrm/templates/CRM/Pledge/Form/Task.tpl index 210a7230204f5ae4a1258c6471b105919a24fccd..b61fefe3cefbfb94f0ff20d6747d021c05a2e7b9 100644 --- a/civicrm/templates/CRM/Pledge/Form/Task.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Task.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Task/Delete.tpl b/civicrm/templates/CRM/Pledge/Form/Task/Delete.tpl index e77ec11ef9cc58ddc2a2707e445ddba7be3b83af..fbc9453e40d5e27c555b4c270089a50bd48627e4 100644 --- a/civicrm/templates/CRM/Pledge/Form/Task/Delete.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Task/Delete.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Task/Print.tpl b/civicrm/templates/CRM/Pledge/Form/Task/Print.tpl index 8c2d24bd3ef6fe6f1d110e097fb331546db4cacc..2b38e19538290813887146530d4513699671cccb 100644 --- a/civicrm/templates/CRM/Pledge/Form/Task/Print.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Task/Print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Task/Result.tpl b/civicrm/templates/CRM/Pledge/Form/Task/Result.tpl index ec1f567497b119d9e93abdca570da78f8e4af414..58b48aff86857ef715d069b6291641d3307a9ee2 100644 --- a/civicrm/templates/CRM/Pledge/Form/Task/Result.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Task/Result.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Task/SaveSearch.tpl b/civicrm/templates/CRM/Pledge/Form/Task/SaveSearch.tpl index 61519168bbbcf64b344bc99c33b418a6da361948..76706a15cbdd71ee0bd8456fd2393df746ea4a54 100644 --- a/civicrm/templates/CRM/Pledge/Form/Task/SaveSearch.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Task/SaveSearch.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Form/Task/SaveSearch/Update.tpl b/civicrm/templates/CRM/Pledge/Form/Task/SaveSearch/Update.tpl index d4a50d8dd38b83f6e5e8c11cbf0152aa0303d08e..ce1d6fb33294d755bf648f4763de3b5dead7e73b 100644 --- a/civicrm/templates/CRM/Pledge/Form/Task/SaveSearch/Update.tpl +++ b/civicrm/templates/CRM/Pledge/Form/Task/SaveSearch/Update.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Page/DashBoard.tpl b/civicrm/templates/CRM/Pledge/Page/DashBoard.tpl index 86f41c7b3eb113fc67bc177263d2f80d7bbc23fb..83316c7cc5ab2608544e63cc4e14e267d3028408 100644 --- a/civicrm/templates/CRM/Pledge/Page/DashBoard.tpl +++ b/civicrm/templates/CRM/Pledge/Page/DashBoard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Page/Payment.hlp b/civicrm/templates/CRM/Pledge/Page/Payment.hlp index f2bce0106cd56c4bf6e83c03fc5913a40844703e..b6edafa3d3acb4b3716b4c47c09b265c8efa61c6 100644 --- a/civicrm/templates/CRM/Pledge/Page/Payment.hlp +++ b/civicrm/templates/CRM/Pledge/Page/Payment.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Page/Payment.tpl b/civicrm/templates/CRM/Pledge/Page/Payment.tpl index 488ca33f780f30c68b3f75d921d39343d80ce31d..c5ea31873740026bd304c4d88f3644055abd70c4 100644 --- a/civicrm/templates/CRM/Pledge/Page/Payment.tpl +++ b/civicrm/templates/CRM/Pledge/Page/Payment.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Page/Tab.hlp b/civicrm/templates/CRM/Pledge/Page/Tab.hlp index 9ee89d7396e3f2be46e76ac972d712d53c96124e..e2188a576524ad7dc37858c8fe59b44798a18adf 100644 --- a/civicrm/templates/CRM/Pledge/Page/Tab.hlp +++ b/civicrm/templates/CRM/Pledge/Page/Tab.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Page/Tab.tpl b/civicrm/templates/CRM/Pledge/Page/Tab.tpl index d047ca81bcb166089944315ba6b0d58897863e2e..52d847f9f46b54c539c8d05c05eb3bd445ec2ba0 100644 --- a/civicrm/templates/CRM/Pledge/Page/Tab.tpl +++ b/civicrm/templates/CRM/Pledge/Page/Tab.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Pledge/Page/UserDashboard.tpl b/civicrm/templates/CRM/Pledge/Page/UserDashboard.tpl index d1f5f94dbe88b086fb07c422b1f812209e76b0f0..3c945cd6ce23642ad0be2807a41ca1faf7bc2995 100644 --- a/civicrm/templates/CRM/Pledge/Page/UserDashboard.tpl +++ b/civicrm/templates/CRM/Pledge/Page/UserDashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/Calculate.tpl b/civicrm/templates/CRM/Price/Form/Calculate.tpl index 5408df48c6525571a2d3da2fe679fd245ffd6177..6e3f807c953f31231f94c82b97776ec40d6dbfe5 100644 --- a/civicrm/templates/CRM/Price/Form/Calculate.tpl +++ b/civicrm/templates/CRM/Price/Form/Calculate.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/DeleteField.tpl b/civicrm/templates/CRM/Price/Form/DeleteField.tpl index 78e770c5feade582f0d4abe49f19ffab92b886f9..77f684b45df58b053b75bc1b1ddf42487974c2e2 100644 --- a/civicrm/templates/CRM/Price/Form/DeleteField.tpl +++ b/civicrm/templates/CRM/Price/Form/DeleteField.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/DeleteSet.tpl b/civicrm/templates/CRM/Price/Form/DeleteSet.tpl index f512408adc57310708d207ae84c25a46e15caebf..7ec9b46838e7ba3a7e6602c1a672cd8a27d4af4b 100644 --- a/civicrm/templates/CRM/Price/Form/DeleteSet.tpl +++ b/civicrm/templates/CRM/Price/Form/DeleteSet.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/Field.tpl b/civicrm/templates/CRM/Price/Form/Field.tpl index 8e18ab3e557024f4f7aa201c88913a62a9b0b08c..8ee57cec2fb408725afb32b3f0a20b9b36628d55 100644 --- a/civicrm/templates/CRM/Price/Form/Field.tpl +++ b/civicrm/templates/CRM/Price/Form/Field.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/LineItem.tpl b/civicrm/templates/CRM/Price/Form/LineItem.tpl index 4731a0de2b41ffb347776381a12da3eddca8ef8f..a6bec8ecae9597947e33e54e4bac6bc9719280aa 100644 --- a/civicrm/templates/CRM/Price/Form/LineItem.tpl +++ b/civicrm/templates/CRM/Price/Form/LineItem.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/Option.tpl b/civicrm/templates/CRM/Price/Form/Option.tpl index 767c02c6dda330c779a201be2bb8d940833405ab..f590adc5026d5ffdc42e9bede9793c0970f19931 100644 --- a/civicrm/templates/CRM/Price/Form/Option.tpl +++ b/civicrm/templates/CRM/Price/Form/Option.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/OptionFields.tpl b/civicrm/templates/CRM/Price/Form/OptionFields.tpl index 2cc2b7e0068fb1a9979be54523676b2d1d0799c6..b5802d62ac9dddbe3b7a3b04c022bf136790922a 100644 --- a/civicrm/templates/CRM/Price/Form/OptionFields.tpl +++ b/civicrm/templates/CRM/Price/Form/OptionFields.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/ParticipantCount.tpl b/civicrm/templates/CRM/Price/Form/ParticipantCount.tpl index 3aa175ec2fb0da564123274ae79563e4dd0ecf9f..b2addfb6410ce9e8d9dd1f9c64b2a40bb08be3c1 100644 --- a/civicrm/templates/CRM/Price/Form/ParticipantCount.tpl +++ b/civicrm/templates/CRM/Price/Form/ParticipantCount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/Preview.tpl b/civicrm/templates/CRM/Price/Form/Preview.tpl index b60b9aeaa91f4a7dfd39079686bc0321298b1e0b..5042c3998cc788e9a15fc05312d78bf61e2d20b6 100644 --- a/civicrm/templates/CRM/Price/Form/Preview.tpl +++ b/civicrm/templates/CRM/Price/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/PriceSet.tpl b/civicrm/templates/CRM/Price/Form/PriceSet.tpl index 4979744ab1d0695971b0a0b6b5a21e56a96a8eea..eacf241ae77b0e1e023f669da572540ebfec0cc1 100644 --- a/civicrm/templates/CRM/Price/Form/PriceSet.tpl +++ b/civicrm/templates/CRM/Price/Form/PriceSet.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Form/Set.tpl b/civicrm/templates/CRM/Price/Form/Set.tpl index 6dc52777fbdb9ae222971c469e063ef979f58f32..427533e89df9cfcc5bf3eb182279d58a501807f4 100644 --- a/civicrm/templates/CRM/Price/Form/Set.tpl +++ b/civicrm/templates/CRM/Price/Form/Set.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Page/Field.hlp b/civicrm/templates/CRM/Price/Page/Field.hlp index ec2097e4c27f0f702fe13add18ba785dec427ce7..255140490532efdfa01210dbfe553dfb5db97365 100644 --- a/civicrm/templates/CRM/Price/Page/Field.hlp +++ b/civicrm/templates/CRM/Price/Page/Field.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Page/Field.tpl b/civicrm/templates/CRM/Price/Page/Field.tpl index d917521c80218788b1e197620beea5f8bf47d7c4..8f9166a33cc827e10cbf8b3dd57d7897327b5709 100644 --- a/civicrm/templates/CRM/Price/Page/Field.tpl +++ b/civicrm/templates/CRM/Price/Page/Field.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Page/LineItem.tpl b/civicrm/templates/CRM/Price/Page/LineItem.tpl index 6309cab0a16797214af5dbd430fcbba89b446469..23d6ff24ec5505a0cec0c107ffa751e265c17f33 100644 --- a/civicrm/templates/CRM/Price/Page/LineItem.tpl +++ b/civicrm/templates/CRM/Price/Page/LineItem.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Page/Option.tpl b/civicrm/templates/CRM/Price/Page/Option.tpl index 1e337c2c6d02887137b8d017254c8857ce8ae49c..4f52d233fa4fcd773088e2bbdcd0ae42f0c38b98 100644 --- a/civicrm/templates/CRM/Price/Page/Option.tpl +++ b/civicrm/templates/CRM/Price/Page/Option.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Page/Set.tpl b/civicrm/templates/CRM/Price/Page/Set.tpl index f9eb0b300b7ade94049d92c5d6bd857ea1557832..9a8d1b8ae04ba3b759240018dc89809f0779884b 100644 --- a/civicrm/templates/CRM/Price/Page/Set.tpl +++ b/civicrm/templates/CRM/Price/Page/Set.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Price/Page/table.tpl b/civicrm/templates/CRM/Price/Page/table.tpl index d1f9427b174b2b4451d8afff4a2d17cd1cef4710..e17300052f85b8922ece7e0560c2afe9548796c2 100644 --- a/civicrm/templates/CRM/Price/Page/table.tpl +++ b/civicrm/templates/CRM/Price/Page/table.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Profile/Form/Dynamic.tpl b/civicrm/templates/CRM/Profile/Form/Dynamic.tpl index 01ec3831333ba8706452ecb2ee079c1fe8678f29..d773d925d57cf9bbf7f58c871cc05ab76e29d41a 100644 --- a/civicrm/templates/CRM/Profile/Form/Dynamic.tpl +++ b/civicrm/templates/CRM/Profile/Form/Dynamic.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Profile/Form/Edit.tpl b/civicrm/templates/CRM/Profile/Form/Edit.tpl index 26ce3092c1c13d23df9be0e1466f4e97292b27a3..f4fda46f7b1ff108a7aa4e4a55215a3f7b71ecee 100644 --- a/civicrm/templates/CRM/Profile/Form/Edit.tpl +++ b/civicrm/templates/CRM/Profile/Form/Edit.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Profile/Form/GreetingType.tpl b/civicrm/templates/CRM/Profile/Form/GreetingType.tpl index 7ea9d842fd13ad13accfb1aeac724712ca363423..e89758156a8baf8e662425f41f99e8ffe443769d 100644 --- a/civicrm/templates/CRM/Profile/Form/GreetingType.tpl +++ b/civicrm/templates/CRM/Profile/Form/GreetingType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Profile/Form/Search.tpl b/civicrm/templates/CRM/Profile/Form/Search.tpl index 02ad086f04c38a3a3f2500eabf383d0713098123..64352f647a693e9952391a8068416114da37d8e4 100644 --- a/civicrm/templates/CRM/Profile/Form/Search.tpl +++ b/civicrm/templates/CRM/Profile/Form/Search.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Profile/Page/Dynamic.tpl b/civicrm/templates/CRM/Profile/Page/Dynamic.tpl index 19c23bd968e08450c088cfd900ab4fb79f82ce31..1d89dbdd616d22057587b9977e70d70ba31e0716 100644 --- a/civicrm/templates/CRM/Profile/Page/Dynamic.tpl +++ b/civicrm/templates/CRM/Profile/Page/Dynamic.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Profile/Page/Listings.tpl b/civicrm/templates/CRM/Profile/Page/Listings.tpl index af37cf2936380f84f9e4854f62aa06c93a1621c7..8eb2c90de318d18fb0596ca1ac959e95faf83231 100644 --- a/civicrm/templates/CRM/Profile/Page/Listings.tpl +++ b/civicrm/templates/CRM/Profile/Page/Listings.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Profile/Page/MultipleRecordFieldsListing.tpl b/civicrm/templates/CRM/Profile/Page/MultipleRecordFieldsListing.tpl index 06a10603bac897e6f5544ff5cf6fbe856bc6234e..fa46b57d3fb28087ae17b8a71ae8c74fd0674d02 100644 --- a/civicrm/templates/CRM/Profile/Page/MultipleRecordFieldsListing.tpl +++ b/civicrm/templates/CRM/Profile/Page/MultipleRecordFieldsListing.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Profile/Page/Overlay.tpl b/civicrm/templates/CRM/Profile/Page/Overlay.tpl index 88af52e99cd8c34f69224122c17e7899eb8de392..ab5718ff07a4e9ba9aead20bfcf70e8dcdb4b656 100644 --- a/civicrm/templates/CRM/Profile/Page/Overlay.tpl +++ b/civicrm/templates/CRM/Profile/Page/Overlay.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -25,31 +25,36 @@ *} {if $overlayProfile } <table class="crm-table-group-summary"> -<tr><td>{$displayName}</td></tr> -<tr><td> -{assign var="count" value="0"} -{assign var="totalRows" value=$row|@count} -<div class="crm-summary-col-0"> -{foreach from=$profileFields item=field key=rowName} - {if $count gt $totalRows/2} - </div> - </td><td> - <div class="crm-summary-col-1"> - {assign var="count" value="1"} - {/if} - <div class="crm-section {$rowName}-section"> - <div class="label"> - {$field.label} - </div> - <div class="content"> - {$field.value} - </div> - <div class="clear"></div> - </div> - {assign var="count" value=`$count+1`} -{/foreach} -</div> -</td></tr> + <tr> + <td colspan="2">{$displayName}</td> + </tr> + <tr> + <td> + {assign var="count" value="0"} + {assign var="totalRows" value=$row|@count} + <div class="crm-summary-col-0"> + {foreach from=$profileFields item=field key=rowName} + {if $count gt $totalRows/2} + </div> + </td> + <td> + <div class="crm-summary-col-1"> + {assign var="count" value="1"} + {/if} + <div class="crm-section {$rowName}-section"> + <div class="label"> + {$field.label} + </div> + <div class="content"> + {$field.value} + </div> + <div class="clear"></div> + </div> + {assign var="count" value=`$count+1`} + {/foreach} + </div> + </td> + </tr> </table> {* fields array is not empty *} {/if} diff --git a/civicrm/templates/CRM/Profile/Page/View.tpl b/civicrm/templates/CRM/Profile/Page/View.tpl index cd969003749c02afb7c0aba41121c385ab46df54..e48b0c7802581853c75e501d287e8465ca204e0e 100644 --- a/civicrm/templates/CRM/Profile/Page/View.tpl +++ b/civicrm/templates/CRM/Profile/Page/View.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form.tpl b/civicrm/templates/CRM/Report/Form.tpl index 8fd71c5f1e6aef8e7617032f341b9f5d1a41507a..5900c3923c5f309b406fc4a88afccebd67709015 100644 --- a/civicrm/templates/CRM/Report/Form.tpl +++ b/civicrm/templates/CRM/Report/Form.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Actions.tpl b/civicrm/templates/CRM/Report/Form/Actions.tpl index a26ba82b0ece4c39fecdf51fcebff29fc486f5f1..92120287b9aed9380211a94c38ff1a389b4bfb30 100644 --- a/civicrm/templates/CRM/Report/Form/Actions.tpl +++ b/civicrm/templates/CRM/Report/Form/Actions.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Activity.tpl b/civicrm/templates/CRM/Report/Form/Activity.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Activity.tpl +++ b/civicrm/templates/CRM/Report/Form/Activity.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/ActivitySummary.tpl b/civicrm/templates/CRM/Report/Form/ActivitySummary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/ActivitySummary.tpl +++ b/civicrm/templates/CRM/Report/Form/ActivitySummary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Campaign/SurveyCoverSheet.tpl b/civicrm/templates/CRM/Report/Form/Campaign/SurveyCoverSheet.tpl index cd29e5a768f32cb482aa65fd5cca8f3982fab26f..468ee2beba55a7d8a93ffc885aa36bac1c2f2a9f 100644 --- a/civicrm/templates/CRM/Report/Form/Campaign/SurveyCoverSheet.tpl +++ b/civicrm/templates/CRM/Report/Form/Campaign/SurveyCoverSheet.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Campaign/SurveyDetails.tpl b/civicrm/templates/CRM/Report/Form/Campaign/SurveyDetails.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Campaign/SurveyDetails.tpl +++ b/civicrm/templates/CRM/Report/Form/Campaign/SurveyDetails.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Case/Demographics.tpl b/civicrm/templates/CRM/Report/Form/Case/Demographics.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Case/Demographics.tpl +++ b/civicrm/templates/CRM/Report/Form/Case/Demographics.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Case/Detail.tpl b/civicrm/templates/CRM/Report/Form/Case/Detail.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Case/Detail.tpl +++ b/civicrm/templates/CRM/Report/Form/Case/Detail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Case/Summary.tpl b/civicrm/templates/CRM/Report/Form/Case/Summary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Case/Summary.tpl +++ b/civicrm/templates/CRM/Report/Form/Case/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Case/TimeSpent.tpl b/civicrm/templates/CRM/Report/Form/Case/TimeSpent.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Case/TimeSpent.tpl +++ b/civicrm/templates/CRM/Report/Form/Case/TimeSpent.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contact/CurrentEmployer.tpl b/civicrm/templates/CRM/Report/Form/Contact/CurrentEmployer.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contact/CurrentEmployer.tpl +++ b/civicrm/templates/CRM/Report/Form/Contact/CurrentEmployer.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contact/Detail.tpl b/civicrm/templates/CRM/Report/Form/Contact/Detail.tpl index 093c0964d98dff36fffc7116afb03635e76136b0..779726ce4338d376635dc758f3534b88c29f0916 100644 --- a/civicrm/templates/CRM/Report/Form/Contact/Detail.tpl +++ b/civicrm/templates/CRM/Report/Form/Contact/Detail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contact/Log.tpl b/civicrm/templates/CRM/Report/Form/Contact/Log.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contact/Log.tpl +++ b/civicrm/templates/CRM/Report/Form/Contact/Log.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contact/LoggingDetail.tpl b/civicrm/templates/CRM/Report/Form/Contact/LoggingDetail.tpl index 095423b1974b31350c21a986d37400e88a855c1d..de408e8070201716435944a2286f2258f94b006f 100644 --- a/civicrm/templates/CRM/Report/Form/Contact/LoggingDetail.tpl +++ b/civicrm/templates/CRM/Report/Form/Contact/LoggingDetail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contact/LoggingSummary.tpl b/civicrm/templates/CRM/Report/Form/Contact/LoggingSummary.tpl index 008d89c732e694848c88599a1a49a16147d0c330..de2530b428e9aa2f2d4f06e7ce666e7b289287e5 100644 --- a/civicrm/templates/CRM/Report/Form/Contact/LoggingSummary.tpl +++ b/civicrm/templates/CRM/Report/Form/Contact/LoggingSummary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contact/Relationship.tpl b/civicrm/templates/CRM/Report/Form/Contact/Relationship.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contact/Relationship.tpl +++ b/civicrm/templates/CRM/Report/Form/Contact/Relationship.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contact/Summary.tpl b/civicrm/templates/CRM/Report/Form/Contact/Summary.tpl index aa0aa60c73f31ca9ed40913917e27b82c8615321..063fa31e41a7822cb9174db961f2765b88c4f8c4 100644 --- a/civicrm/templates/CRM/Report/Form/Contact/Summary.tpl +++ b/civicrm/templates/CRM/Report/Form/Contact/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/Bookkeeping.tpl b/civicrm/templates/CRM/Report/Form/Contribute/Bookkeeping.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/Bookkeeping.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/Bookkeeping.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/DeferredRevenue.tpl b/civicrm/templates/CRM/Report/Form/Contribute/DeferredRevenue.tpl index e949d4ddf28df31097136721bcda8c5b46eb58bb..5d870a48dacf571aa5ab3c4a4b03de0cf210d37f 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/DeferredRevenue.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/DeferredRevenue.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/Detail.tpl b/civicrm/templates/CRM/Report/Form/Contribute/Detail.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/Detail.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/Detail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/History.tpl b/civicrm/templates/CRM/Report/Form/Contribute/History.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/History.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/History.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/HouseholdSummary.tpl b/civicrm/templates/CRM/Report/Form/Contribute/HouseholdSummary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/HouseholdSummary.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/HouseholdSummary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/LoggingDetail.tpl b/civicrm/templates/CRM/Report/Form/Contribute/LoggingDetail.tpl index 095423b1974b31350c21a986d37400e88a855c1d..de408e8070201716435944a2286f2258f94b006f 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/LoggingDetail.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/LoggingDetail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/LoggingSummary.tpl b/civicrm/templates/CRM/Report/Form/Contribute/LoggingSummary.tpl index 008d89c732e694848c88599a1a49a16147d0c330..de2530b428e9aa2f2d4f06e7ce666e7b289287e5 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/LoggingSummary.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/LoggingSummary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/Lybunt.tpl b/civicrm/templates/CRM/Report/Form/Contribute/Lybunt.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/Lybunt.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/Lybunt.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/OrganizationSummary.tpl b/civicrm/templates/CRM/Report/Form/Contribute/OrganizationSummary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/OrganizationSummary.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/OrganizationSummary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/PCP.tpl b/civicrm/templates/CRM/Report/Form/Contribute/PCP.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/PCP.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/PCP.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/RecurSummary.tpl b/civicrm/templates/CRM/Report/Form/Contribute/RecurSummary.tpl index c3f3c7e4f0bcebd44da579152c73622c7e960b1b..5ad91b1ff3c0a57364885ba1dcbe68e8bb89dcb3 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/RecurSummary.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/RecurSummary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/Repeat.tpl b/civicrm/templates/CRM/Report/Form/Contribute/Repeat.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/Repeat.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/Repeat.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/SoftCredit.tpl b/civicrm/templates/CRM/Report/Form/Contribute/SoftCredit.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/SoftCredit.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/SoftCredit.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/Summary.tpl b/civicrm/templates/CRM/Report/Form/Contribute/Summary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/Summary.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/Sybunt.tpl b/civicrm/templates/CRM/Report/Form/Contribute/Sybunt.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/Sybunt.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/Sybunt.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Contribute/TopDonor.tpl b/civicrm/templates/CRM/Report/Form/Contribute/TopDonor.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Contribute/TopDonor.tpl +++ b/civicrm/templates/CRM/Report/Form/Contribute/TopDonor.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Criteria.tpl b/civicrm/templates/CRM/Report/Form/Criteria.tpl index adf9794581cae7d3e8a041c47a925d9fd214d5b3..62b52d20a03793b3b33edaed7e8ca575f5b1eab4 100644 --- a/civicrm/templates/CRM/Report/Form/Criteria.tpl +++ b/civicrm/templates/CRM/Report/Form/Criteria.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/ErrorMessage.tpl b/civicrm/templates/CRM/Report/Form/ErrorMessage.tpl index 4dfe5ab07f2ec78d35768b12b39b13589f092432..e38b674358a35d14e1d6d7678c72b5783ff278ae 100644 --- a/civicrm/templates/CRM/Report/Form/ErrorMessage.tpl +++ b/civicrm/templates/CRM/Report/Form/ErrorMessage.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Event/Income.tpl b/civicrm/templates/CRM/Report/Form/Event/Income.tpl index 76bcff1c5f9e64b62a1dac1b7bbd8225fcfb1b71..c8a15b53dd9606c68a2c583d019b6921e4f4f936 100644 --- a/civicrm/templates/CRM/Report/Form/Event/Income.tpl +++ b/civicrm/templates/CRM/Report/Form/Event/Income.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Event/IncomeCountSummary.tpl b/civicrm/templates/CRM/Report/Form/Event/IncomeCountSummary.tpl index bf773d1129b00ea841694221d53a722b4064ba67..262ab5f6ea107d40c2fd8c58c94ecfdbf2817c89 100644 --- a/civicrm/templates/CRM/Report/Form/Event/IncomeCountSummary.tpl +++ b/civicrm/templates/CRM/Report/Form/Event/IncomeCountSummary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Event/ParticipantListCount.tpl b/civicrm/templates/CRM/Report/Form/Event/ParticipantListCount.tpl index bf773d1129b00ea841694221d53a722b4064ba67..262ab5f6ea107d40c2fd8c58c94ecfdbf2817c89 100644 --- a/civicrm/templates/CRM/Report/Form/Event/ParticipantListCount.tpl +++ b/civicrm/templates/CRM/Report/Form/Event/ParticipantListCount.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Event/ParticipantListing.tpl b/civicrm/templates/CRM/Report/Form/Event/ParticipantListing.tpl index aa0aa60c73f31ca9ed40913917e27b82c8615321..063fa31e41a7822cb9174db961f2765b88c4f8c4 100644 --- a/civicrm/templates/CRM/Report/Form/Event/ParticipantListing.tpl +++ b/civicrm/templates/CRM/Report/Form/Event/ParticipantListing.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Event/Summary.tpl b/civicrm/templates/CRM/Report/Form/Event/Summary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Event/Summary.tpl +++ b/civicrm/templates/CRM/Report/Form/Event/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Fields.tpl b/civicrm/templates/CRM/Report/Form/Fields.tpl index 7b8619b8726c62d8017abe22b5a5ab0b500b9d32..8528d6ff97268fa9036ecfbe151cc603de92d17b 100644 --- a/civicrm/templates/CRM/Report/Form/Fields.tpl +++ b/civicrm/templates/CRM/Report/Form/Fields.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Grant/Detail.tpl b/civicrm/templates/CRM/Report/Form/Grant/Detail.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Grant/Detail.tpl +++ b/civicrm/templates/CRM/Report/Form/Grant/Detail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Grant/Statistics.tpl b/civicrm/templates/CRM/Report/Form/Grant/Statistics.tpl index 4a042bc11efd15a716b951192872e9a68e330079..d6d5bf0c58d8d668f3b3cdd5ac44e76334cfa1c7 100644 --- a/civicrm/templates/CRM/Report/Form/Grant/Statistics.tpl +++ b/civicrm/templates/CRM/Report/Form/Grant/Statistics.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl b/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl index 9a805cf8500bec37ac63fb2122b166ed54d5356d..ec59ff507aee6af66d13ed22a83f92557f100730 100644 --- a/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl +++ b/civicrm/templates/CRM/Report/Form/Layout/Graph.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Layout/Overlay.tpl b/civicrm/templates/CRM/Report/Form/Layout/Overlay.tpl index 5e06606d7fa3f086ecc6f47565965f350d7f034a..19ab0189b485a332c6afbc64ca3f403521006239 100644 --- a/civicrm/templates/CRM/Report/Form/Layout/Overlay.tpl +++ b/civicrm/templates/CRM/Report/Form/Layout/Overlay.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Layout/Table.tpl b/civicrm/templates/CRM/Report/Form/Layout/Table.tpl index 7897172f2ae4665b80b55a0694c9d69928cc3a7a..52a2ae5cf77a0d4779d201f029e18c5d3e2518d0 100644 --- a/civicrm/templates/CRM/Report/Form/Layout/Table.tpl +++ b/civicrm/templates/CRM/Report/Form/Layout/Table.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Mailing/Bounce.tpl b/civicrm/templates/CRM/Report/Form/Mailing/Bounce.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Mailing/Bounce.tpl +++ b/civicrm/templates/CRM/Report/Form/Mailing/Bounce.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Mailing/Clicks.tpl b/civicrm/templates/CRM/Report/Form/Mailing/Clicks.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Mailing/Clicks.tpl +++ b/civicrm/templates/CRM/Report/Form/Mailing/Clicks.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Mailing/Detail.tpl b/civicrm/templates/CRM/Report/Form/Mailing/Detail.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Mailing/Detail.tpl +++ b/civicrm/templates/CRM/Report/Form/Mailing/Detail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Mailing/Opened.tpl b/civicrm/templates/CRM/Report/Form/Mailing/Opened.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Mailing/Opened.tpl +++ b/civicrm/templates/CRM/Report/Form/Mailing/Opened.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Mailing/Summary.tpl b/civicrm/templates/CRM/Report/Form/Mailing/Summary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Mailing/Summary.tpl +++ b/civicrm/templates/CRM/Report/Form/Mailing/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Member/ContributionDetail.tpl b/civicrm/templates/CRM/Report/Form/Member/ContributionDetail.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Member/ContributionDetail.tpl +++ b/civicrm/templates/CRM/Report/Form/Member/ContributionDetail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Member/Detail.tpl b/civicrm/templates/CRM/Report/Form/Member/Detail.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Member/Detail.tpl +++ b/civicrm/templates/CRM/Report/Form/Member/Detail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Member/Lapse.tpl b/civicrm/templates/CRM/Report/Form/Member/Lapse.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Member/Lapse.tpl +++ b/civicrm/templates/CRM/Report/Form/Member/Lapse.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Member/Summary.tpl b/civicrm/templates/CRM/Report/Form/Member/Summary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Member/Summary.tpl +++ b/civicrm/templates/CRM/Report/Form/Member/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Membership/Summary.tpl b/civicrm/templates/CRM/Report/Form/Membership/Summary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Membership/Summary.tpl +++ b/civicrm/templates/CRM/Report/Form/Membership/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Pledge/Detail.tpl b/civicrm/templates/CRM/Report/Form/Pledge/Detail.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Pledge/Detail.tpl +++ b/civicrm/templates/CRM/Report/Form/Pledge/Detail.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Pledge/Pbnp.tpl b/civicrm/templates/CRM/Report/Form/Pledge/Pbnp.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Pledge/Pbnp.tpl +++ b/civicrm/templates/CRM/Report/Form/Pledge/Pbnp.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Pledge/Summary.tpl b/civicrm/templates/CRM/Report/Form/Pledge/Summary.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Pledge/Summary.tpl +++ b/civicrm/templates/CRM/Report/Form/Pledge/Summary.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Register.tpl b/civicrm/templates/CRM/Report/Form/Register.tpl index 7d9472ab29ed35192943995b3fd260c03ea0b9db..59d503416ab3584f54fca112de112cb1e85fea96 100644 --- a/civicrm/templates/CRM/Report/Form/Register.tpl +++ b/civicrm/templates/CRM/Report/Form/Register.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Statistics.tpl b/civicrm/templates/CRM/Report/Form/Statistics.tpl index c91dac3e6a73a3900c9e48aecca4522fc7b5db26..5dc7ee43d50e658e4bf4a45089da901b6cc39f5a 100644 --- a/civicrm/templates/CRM/Report/Form/Statistics.tpl +++ b/civicrm/templates/CRM/Report/Form/Statistics.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Tabs/FieldSelection.tpl b/civicrm/templates/CRM/Report/Form/Tabs/FieldSelection.tpl index c3d1071bbb6a9bb3913c1e9c02fa6f7ca9936a02..e0819a79a0e38bb5afbc39f864093e17fce25dbe 100644 --- a/civicrm/templates/CRM/Report/Form/Tabs/FieldSelection.tpl +++ b/civicrm/templates/CRM/Report/Form/Tabs/FieldSelection.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Tabs/Filters.tpl b/civicrm/templates/CRM/Report/Form/Tabs/Filters.tpl index aee577ea4001a5e1c7104a0658d0bb55fda88d05..4177f06764470d86ab0a8f3c1a23ffbd857257d7 100644 --- a/civicrm/templates/CRM/Report/Form/Tabs/Filters.tpl +++ b/civicrm/templates/CRM/Report/Form/Tabs/Filters.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Tabs/GroupBy.tpl b/civicrm/templates/CRM/Report/Form/Tabs/GroupBy.tpl index 800a080b53105c04b152db0b1db18e7b21167908..9d7c6aa1de855f0e795a37f40dd5edc78aa84b99 100644 --- a/civicrm/templates/CRM/Report/Form/Tabs/GroupBy.tpl +++ b/civicrm/templates/CRM/Report/Form/Tabs/GroupBy.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Tabs/Instance.tpl b/civicrm/templates/CRM/Report/Form/Tabs/Instance.tpl index 79f45713d373b54a722f18c20c702e4523ca684b..02dcae650a51b62289cca56791cd490094101db7 100644 --- a/civicrm/templates/CRM/Report/Form/Tabs/Instance.tpl +++ b/civicrm/templates/CRM/Report/Form/Tabs/Instance.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Tabs/OrderBy.tpl b/civicrm/templates/CRM/Report/Form/Tabs/OrderBy.tpl index 81b931e3827cd576c41d8ad8df46e0baa0b6ee62..fef2834d432d3cd233694b028ccbebf202f0114a 100644 --- a/civicrm/templates/CRM/Report/Form/Tabs/OrderBy.tpl +++ b/civicrm/templates/CRM/Report/Form/Tabs/OrderBy.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Tabs/ReportOptions.tpl b/civicrm/templates/CRM/Report/Form/Tabs/ReportOptions.tpl index 80aed3d83bc59a8ee14812ce4cb377052e19b794..0c76f5acffcc8ac4459b444532a394dd68045cc2 100644 --- a/civicrm/templates/CRM/Report/Form/Tabs/ReportOptions.tpl +++ b/civicrm/templates/CRM/Report/Form/Tabs/ReportOptions.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ -| Copyright CiviCRM LLC (c) 2004-2017 | +| Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Tabs/Settings.hlp b/civicrm/templates/CRM/Report/Form/Tabs/Settings.hlp index 32f2d65e8e10305933b5968aac4f241fa6d32dc9..21d57913c834c3ccc7dfc438fc40f12e33f34af0 100644 --- a/civicrm/templates/CRM/Report/Form/Tabs/Settings.hlp +++ b/civicrm/templates/CRM/Report/Form/Tabs/Settings.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Form/Walklist/Walklist.tpl b/civicrm/templates/CRM/Report/Form/Walklist/Walklist.tpl index f83b753789632948cc7f3b1ccea2bf78521a24aa..21b6461e95f5827297fe76c5b376b5ded2eabff2 100644 --- a/civicrm/templates/CRM/Report/Form/Walklist/Walklist.tpl +++ b/civicrm/templates/CRM/Report/Form/Walklist/Walklist.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Page/InstanceList.tpl b/civicrm/templates/CRM/Report/Page/InstanceList.tpl index b0d470e3426b72f064b8c1ad9f34cc2a974eb9c7..19e6919f9f11cd4cd3d81c287deafe55fb89c299 100644 --- a/civicrm/templates/CRM/Report/Page/InstanceList.tpl +++ b/civicrm/templates/CRM/Report/Page/InstanceList.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Page/Options.tpl b/civicrm/templates/CRM/Report/Page/Options.tpl index 4d433a0bd2e538c58d551286e049e772bb0502f6..b7035f21daf52db2b9e6dcb02a6bf6fae8f028af 100644 --- a/civicrm/templates/CRM/Report/Page/Options.tpl +++ b/civicrm/templates/CRM/Report/Page/Options.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Report/Page/TemplateList.tpl b/civicrm/templates/CRM/Report/Page/TemplateList.tpl index ffe2d50db654f33665dcc7ed27995ea52a71dcdd..93c4e857d2495f05366ce464996d99eebcecec0e 100644 --- a/civicrm/templates/CRM/Report/Page/TemplateList.tpl +++ b/civicrm/templates/CRM/Report/Page/TemplateList.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Form/Group.hlp b/civicrm/templates/CRM/SMS/Form/Group.hlp index 9cd389c83788d24042bfe963504a915f1015a69b..cbbf5eee1d5c7f17e2b7cbe4c682794299b3632d 100644 --- a/civicrm/templates/CRM/SMS/Form/Group.hlp +++ b/civicrm/templates/CRM/SMS/Form/Group.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Form/Group.tpl b/civicrm/templates/CRM/SMS/Form/Group.tpl index 378dddf5a4423aa61fa97513f76b44de006c76cf..0635001612fa2da633c653e033301f99d354eaf9 100644 --- a/civicrm/templates/CRM/SMS/Form/Group.tpl +++ b/civicrm/templates/CRM/SMS/Form/Group.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Form/Provider.tpl b/civicrm/templates/CRM/SMS/Form/Provider.tpl index e13551186ff6a50f6569f79ee5c9c9de9b3e4827..899cccbc295ceb01fa05c12ff0e9dfbb02f4235e 100644 --- a/civicrm/templates/CRM/SMS/Form/Provider.tpl +++ b/civicrm/templates/CRM/SMS/Form/Provider.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Form/Schedule.hlp b/civicrm/templates/CRM/SMS/Form/Schedule.hlp index ccbf2c36908427ff060ba7760a9e4b6b447ac98e..0a8aacbe32e4301c9e7754d893acfc2600e00ec3 100644 --- a/civicrm/templates/CRM/SMS/Form/Schedule.hlp +++ b/civicrm/templates/CRM/SMS/Form/Schedule.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Form/Schedule.tpl b/civicrm/templates/CRM/SMS/Form/Schedule.tpl index 2754e31bb3d19ce53be41472e80e9881e41a5f65..c96bad1edf4290f8b5ed19e4943914062a55077e 100644 --- a/civicrm/templates/CRM/SMS/Form/Schedule.tpl +++ b/civicrm/templates/CRM/SMS/Form/Schedule.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Form/Task/SMS.tpl b/civicrm/templates/CRM/SMS/Form/Task/SMS.tpl index ae4edcd7f9aa5dac41ab92bbe6a30162178b0239..a6311fa92c81a6d10edc60d90b426e79c48d6e38 100644 --- a/civicrm/templates/CRM/SMS/Form/Task/SMS.tpl +++ b/civicrm/templates/CRM/SMS/Form/Task/SMS.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Form/Upload.hlp b/civicrm/templates/CRM/SMS/Form/Upload.hlp index 33cfb42b8c325919e1cc32c8a74bc0737ffbaba1..d31aa8ac909418e722bcea2086639a763d77d77a 100644 --- a/civicrm/templates/CRM/SMS/Form/Upload.hlp +++ b/civicrm/templates/CRM/SMS/Form/Upload.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Form/Upload.tpl b/civicrm/templates/CRM/SMS/Form/Upload.tpl index e998e2024d9d12e0dae4220be2328e978347f36b..9c7d256fb644899f69c8628a5738c97531c37db1 100644 --- a/civicrm/templates/CRM/SMS/Form/Upload.tpl +++ b/civicrm/templates/CRM/SMS/Form/Upload.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/SMS/Page/Provider.tpl b/civicrm/templates/CRM/SMS/Page/Provider.tpl index 526971f69a2a4da9dd253419dc951d57f89cad0a..d5e21bbfe4c736cda9b23cb6be632e6db939768c 100644 --- a/civicrm/templates/CRM/SMS/Page/Provider.tpl +++ b/civicrm/templates/CRM/SMS/Page/Provider.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Tag/Form/Edit.tpl b/civicrm/templates/CRM/Tag/Form/Edit.tpl index 0f78e0f83936a206f5d9abed54bbd664ec8ff788..ebc709d783411fa9fc0a15b2de1e3dd71842ca6f 100644 --- a/civicrm/templates/CRM/Tag/Form/Edit.tpl +++ b/civicrm/templates/CRM/Tag/Form/Edit.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Tag/Form/Merge.tpl b/civicrm/templates/CRM/Tag/Form/Merge.tpl index a62e200a16d6cd6582dcd646cf523ddebf56af77..63946037cb55c07ddb1d4c9cc6720d61884b640d 100644 --- a/civicrm/templates/CRM/Tag/Form/Merge.tpl +++ b/civicrm/templates/CRM/Tag/Form/Merge.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Tag/Form/Tag.tpl b/civicrm/templates/CRM/Tag/Form/Tag.tpl index bad26d491b3b73d9d58cdc3cd97e7cdfed44c7b2..64f59eec704fad174c485b7706f2e75ed7e4e2f1 100644 --- a/civicrm/templates/CRM/Tag/Form/Tag.tpl +++ b/civicrm/templates/CRM/Tag/Form/Tag.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Tag/Form/Tagtree.tpl b/civicrm/templates/CRM/Tag/Form/Tagtree.tpl index ff60e77953464815235dc519ab7ac0452634a7c9..59dbe96d5976bcc50f57ab2c45ca1f3db22eac35 100644 --- a/civicrm/templates/CRM/Tag/Form/Tagtree.tpl +++ b/civicrm/templates/CRM/Tag/Form/Tagtree.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Tag/Page/Tag.tpl b/civicrm/templates/CRM/Tag/Page/Tag.tpl index 1651ad7f0b81c1468a7ed4f04151d236e91a88b3..9905b2326f48521490089a13f37329ecbb23f94f 100644 --- a/civicrm/templates/CRM/Tag/Page/Tag.tpl +++ b/civicrm/templates/CRM/Tag/Page/Tag.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Form/AdvanceSetting.tpl b/civicrm/templates/CRM/UF/Form/AdvanceSetting.tpl index ff852d85ba8aae3a5d07c06f26b53e6f0ce41b13..9188400c520a1c5c80809ffb7047ea58f0b3b7fd 100644 --- a/civicrm/templates/CRM/UF/Form/AdvanceSetting.tpl +++ b/civicrm/templates/CRM/UF/Form/AdvanceSetting.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Form/Block.tpl b/civicrm/templates/CRM/UF/Form/Block.tpl index da77dda5d11cfcbe248b8eea381c080d1aa83ced..c91b60391651a30cc22a4e98a3ecb46a829fc595 100644 --- a/civicrm/templates/CRM/UF/Form/Block.tpl +++ b/civicrm/templates/CRM/UF/Form/Block.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Form/Field.tpl b/civicrm/templates/CRM/UF/Form/Field.tpl index ce6bf9aff2e486c638a8924c40aed42aa67943a4..53466462f50dafcfd9b2900b828a1a0c66dac473 100644 --- a/civicrm/templates/CRM/UF/Form/Field.tpl +++ b/civicrm/templates/CRM/UF/Form/Field.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Form/Group.hlp b/civicrm/templates/CRM/UF/Form/Group.hlp index 523a073e771c0c6852e4419a977a8f8499ec4863..c2049c444a38990fdfc830c7216c0a05c23e598c 100644 --- a/civicrm/templates/CRM/UF/Form/Group.hlp +++ b/civicrm/templates/CRM/UF/Form/Group.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Form/Group.tpl b/civicrm/templates/CRM/UF/Form/Group.tpl index 68d82fcb118cc7bc0f7407467d904bbefe4fe9b8..36078989c29ae90d34b3566819fa771bddb46f09 100644 --- a/civicrm/templates/CRM/UF/Form/Group.tpl +++ b/civicrm/templates/CRM/UF/Form/Group.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Form/Preview.tpl b/civicrm/templates/CRM/UF/Form/Preview.tpl index cc4b5cf7d9403bba3ed11d59fd846beb292a81ba..7c7b1af18c140afcb1e108b11f0a7e5bb98d70f3 100644 --- a/civicrm/templates/CRM/UF/Form/Preview.tpl +++ b/civicrm/templates/CRM/UF/Form/Preview.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Page/Field.tpl b/civicrm/templates/CRM/UF/Page/Field.tpl index 07b2ac83f7a4540ccd7580bcff36493be33a8704..d513f4744dbf8a487aa97260f9de6c2affe9b836 100644 --- a/civicrm/templates/CRM/UF/Page/Field.tpl +++ b/civicrm/templates/CRM/UF/Page/Field.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Page/Group.hlp b/civicrm/templates/CRM/UF/Page/Group.hlp index acb280e81bfc4cbe7b6c35a29b5058545332b18d..24fb560d00830d3f97adaeb696cdd321e31a4853 100644 --- a/civicrm/templates/CRM/UF/Page/Group.hlp +++ b/civicrm/templates/CRM/UF/Page/Group.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/UF/Page/Group.tpl b/civicrm/templates/CRM/UF/Page/Group.tpl index 557d07e5d35d38477b2c8db9792369d950e1767f..9186f52164d686c3f2b41fd3f86be0f602a41195 100644 --- a/civicrm/templates/CRM/UF/Page/Group.tpl +++ b/civicrm/templates/CRM/UF/Page/Group.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Upgrade/Base.tpl b/civicrm/templates/CRM/Upgrade/Base.tpl index bcb8719dcb0d81e70a838f78f086c8e40c26837a..f8ec3ed12b6491c6f8fba422592305e48b3e9495 100644 --- a/civicrm/templates/CRM/Upgrade/Base.tpl +++ b/civicrm/templates/CRM/Upgrade/Base.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/Widget/widget.tpl b/civicrm/templates/CRM/Widget/widget.tpl index 67719e307688abb177eed55945a06ace4eb4ee55..52fc5c6e61f67afd1d23b8dae3f1cf64ccc1af14 100644 --- a/civicrm/templates/CRM/Widget/widget.tpl +++ b/civicrm/templates/CRM/Widget/widget.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/CMSUser.tpl b/civicrm/templates/CRM/common/CMSUser.tpl index dbe138ef5d7c8908ecb8eabe3e558c56c48fe796..387db9c772d926fbeca9bd2aee37496b6d6da74d 100644 --- a/civicrm/templates/CRM/common/CMSUser.tpl +++ b/civicrm/templates/CRM/common/CMSUser.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/ReCAPTCHA.tpl b/civicrm/templates/CRM/common/ReCAPTCHA.tpl index d580fb82bb49a512f16eae870225d67b6f0cf305..06200209e1fbf2ac42800c9cfe019f8d427a9482 100644 --- a/civicrm/templates/CRM/common/ReCAPTCHA.tpl +++ b/civicrm/templates/CRM/common/ReCAPTCHA.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/SectionNav.tpl b/civicrm/templates/CRM/common/SectionNav.tpl index 983ae5b4f7a0e48fec044df402a6118170eddbdb..ec567e0e64fd3ee33b222ed3bb1523464bae890b 100644 --- a/civicrm/templates/CRM/common/SectionNav.tpl +++ b/civicrm/templates/CRM/common/SectionNav.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/SocialNetwork.tpl b/civicrm/templates/CRM/common/SocialNetwork.tpl index 0cb8771e1d5009d4dbdbf6a3d4818cd2d5a15a49..9242953f0d6684c6bebbedf20f5eb39146b7639a 100644 --- a/civicrm/templates/CRM/common/SocialNetwork.tpl +++ b/civicrm/templates/CRM/common/SocialNetwork.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/TabHeader.tpl b/civicrm/templates/CRM/common/TabHeader.tpl index f786ea142b5af74ae93e9290cb90925a50e733b6..feb19cd60acdb4c9bd091e22a700e7fcac1bf591 100644 --- a/civicrm/templates/CRM/common/TabHeader.tpl +++ b/civicrm/templates/CRM/common/TabHeader.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/Tagset.tpl b/civicrm/templates/CRM/common/Tagset.tpl index 930ed4433768e47d8900459b4cdb4e1f1988e352..acda27307c56cd584d2811a5e67d320a6ab03687 100644 --- a/civicrm/templates/CRM/common/Tagset.tpl +++ b/civicrm/templates/CRM/common/Tagset.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/TrackingFields.tpl b/civicrm/templates/CRM/common/TrackingFields.tpl index c7fef8b1e4fc571f6b66ad616198069efec70d86..1e7d86283c6da346030f7125774047434f0fe6dc 100644 --- a/civicrm/templates/CRM/common/TrackingFields.tpl +++ b/civicrm/templates/CRM/common/TrackingFields.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/WizardHeader.tpl b/civicrm/templates/CRM/common/WizardHeader.tpl index 65c1cc1044366f9841d28efd9876fcfa9f9c8ae3..3220b2edf4420c8bbc7627f8c47da67ee915f823 100644 --- a/civicrm/templates/CRM/common/WizardHeader.tpl +++ b/civicrm/templates/CRM/common/WizardHeader.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/accesskeys.hlp b/civicrm/templates/CRM/common/accesskeys.hlp index b086d17ca16bb180e1240018ccd8d9b6049a4458..ffcde05a31cf0f9c5d67baafa9e013cdc8739613 100644 --- a/civicrm/templates/CRM/common/accesskeys.hlp +++ b/civicrm/templates/CRM/common/accesskeys.hlp @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/accesskeys.tpl b/civicrm/templates/CRM/common/accesskeys.tpl index 52e804f52e7f5028c8414ae1d24a931871b46d64..db6d61cf0e5a0a06b9844cf9f0f373e961abaa38 100644 --- a/civicrm/templates/CRM/common/accesskeys.tpl +++ b/civicrm/templates/CRM/common/accesskeys.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/additionalBlocks.tpl b/civicrm/templates/CRM/common/additionalBlocks.tpl index 2de945079be08a547be2064392ff4b452e387b3d..8e3a1faba59173d1e5c9cf36796948a3ea68f6b6 100644 --- a/civicrm/templates/CRM/common/additionalBlocks.tpl +++ b/civicrm/templates/CRM/common/additionalBlocks.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/backdrop.tpl b/civicrm/templates/CRM/common/backdrop.tpl index b7bd61cfe6af7a91f4ed415bb9cb4b51335d4e6e..d078faa0e39cc5948c6b7afa6972f94a992007ed 100644 --- a/civicrm/templates/CRM/common/backdrop.tpl +++ b/civicrm/templates/CRM/common/backdrop.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/batchCopy.tpl b/civicrm/templates/CRM/common/batchCopy.tpl index 251574d1561788e937c648a90cb6f01a58c5e196..b4476dd8a3428109b7409042fd4776d9fea0386a 100644 --- a/civicrm/templates/CRM/common/batchCopy.tpl +++ b/civicrm/templates/CRM/common/batchCopy.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/checkUsernameAvailable.tpl b/civicrm/templates/CRM/common/checkUsernameAvailable.tpl index a2905af22736c91a4ebf6cb661f14665bda0f041..8da8ecdf1cc068b87d9278fd8c966f537c627db2 100644 --- a/civicrm/templates/CRM/common/checkUsernameAvailable.tpl +++ b/civicrm/templates/CRM/common/checkUsernameAvailable.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/civicrm.settings.php.template b/civicrm/templates/CRM/common/civicrm.settings.php.template index e7b88fb624bcfb706ce01d7f92b8cbd890b0f972..e2993b81bd591050389b208d6081e211153d3887 100644 --- a/civicrm/templates/CRM/common/civicrm.settings.php.template +++ b/civicrm/templates/CRM/common/civicrm.settings.php.template @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/contactFooter.tpl b/civicrm/templates/CRM/common/contactFooter.tpl index 54ef00e50232ece4642178aff3a5d60c78325dc0..c8f5d9560c63724167a28818377d42af8585aa83 100644 --- a/civicrm/templates/CRM/common/contactFooter.tpl +++ b/civicrm/templates/CRM/common/contactFooter.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/customData.tpl b/civicrm/templates/CRM/common/customData.tpl index 278e7f8c33235e1ae37fbc93ae0b60d36d7f6073..81be93229d976bf3087299ae434899217cf958f3 100644 --- a/civicrm/templates/CRM/common/customData.tpl +++ b/civicrm/templates/CRM/common/customData.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/dashboard.tpl b/civicrm/templates/CRM/common/dashboard.tpl index 92ed4837e97361ff6d763d2ed0fd23365b459d05..b1d91532c1e1431318657211e580f774c67b3a34 100644 --- a/civicrm/templates/CRM/common/dashboard.tpl +++ b/civicrm/templates/CRM/common/dashboard.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/debug.tpl b/civicrm/templates/CRM/common/debug.tpl index c2cee3b9e03e3381c36f8cf05890679184b396c3..0af73fe70959085922ed92b676428b01e0325402 100644 --- a/civicrm/templates/CRM/common/debug.tpl +++ b/civicrm/templates/CRM/common/debug.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/deferredFinancialType.tpl b/civicrm/templates/CRM/common/deferredFinancialType.tpl index 3185321d6d8cd3b4c18fd6ce27b5544b746c07ee..53836eb1018bc99bfef4db5f4728633f3c3dd55b 100644 --- a/civicrm/templates/CRM/common/deferredFinancialType.tpl +++ b/civicrm/templates/CRM/common/deferredFinancialType.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/displaySearchCriteria.tpl b/civicrm/templates/CRM/common/displaySearchCriteria.tpl index 2258bfd53b70a24f82803ce8b3a89a2e900415b2..0e4daabd86af3fb160def9247e220713d6aaeddc 100644 --- a/civicrm/templates/CRM/common/displaySearchCriteria.tpl +++ b/civicrm/templates/CRM/common/displaySearchCriteria.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/drupal.tpl b/civicrm/templates/CRM/common/drupal.tpl index b7bd61cfe6af7a91f4ed415bb9cb4b51335d4e6e..d078faa0e39cc5948c6b7afa6972f94a992007ed 100644 --- a/civicrm/templates/CRM/common/drupal.tpl +++ b/civicrm/templates/CRM/common/drupal.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/drupal6.tpl b/civicrm/templates/CRM/common/drupal6.tpl index bf3cecaea21f721316627431b499b45f49afc2f4..ba75cd3ddc6f62cae16dc2de0e3b2bfb642b03ab 100644 --- a/civicrm/templates/CRM/common/drupal6.tpl +++ b/civicrm/templates/CRM/common/drupal6.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/drupal8.tpl b/civicrm/templates/CRM/common/drupal8.tpl index b7bd61cfe6af7a91f4ed415bb9cb4b51335d4e6e..d078faa0e39cc5948c6b7afa6972f94a992007ed 100644 --- a/civicrm/templates/CRM/common/drupal8.tpl +++ b/civicrm/templates/CRM/common/drupal8.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/enableDisableApi.tpl b/civicrm/templates/CRM/common/enableDisableApi.tpl index cb359af23c72feb949f1c9cf46d2c1fe5da374df..ed9f284247a5b5984fc30f11d60e774779be6473 100644 --- a/civicrm/templates/CRM/common/enableDisableApi.tpl +++ b/civicrm/templates/CRM/common/enableDisableApi.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/fatal.tpl b/civicrm/templates/CRM/common/fatal.tpl index 9b9a5071f49f5d89bf93e0f23148ede2b8674638..7a801cbcfb2dd3be5a4efc26ee8a4fb0b4d6c10e 100644 --- a/civicrm/templates/CRM/common/fatal.tpl +++ b/civicrm/templates/CRM/common/fatal.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/footer.tpl b/civicrm/templates/CRM/common/footer.tpl index ce72a7ca9345ec1042200859a5936bea01b7739b..62ae51abf5f84279b4e7713da7e80bc94f8bd63a 100644 --- a/civicrm/templates/CRM/common/footer.tpl +++ b/civicrm/templates/CRM/common/footer.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/formButtons.tpl b/civicrm/templates/CRM/common/formButtons.tpl index 1ecc3cbc1b6d2f7f9c0fd8e2e3f63a8408deacc7..54291e541c8572249379af82817af4291351a957 100644 --- a/civicrm/templates/CRM/common/formButtons.tpl +++ b/civicrm/templates/CRM/common/formButtons.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/highLightImport.tpl b/civicrm/templates/CRM/common/highLightImport.tpl index c09aa7e9bb8322f70230731b535cdfb0e96e7275..6856e8f3e1700bce4ad042af5cb4e7e52f48e3bf 100644 --- a/civicrm/templates/CRM/common/highLightImport.tpl +++ b/civicrm/templates/CRM/common/highLightImport.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/importProgress.tpl b/civicrm/templates/CRM/common/importProgress.tpl index b5600befd6fd4297edc7b17669ef9b34d33e8a41..c3ab07ad9e1ad6568bc557853dd7b40b01dc86bb 100644 --- a/civicrm/templates/CRM/common/importProgress.tpl +++ b/civicrm/templates/CRM/common/importProgress.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/info.tpl b/civicrm/templates/CRM/common/info.tpl index ae94d7b0d27b8494f59e23aeae7110384bf60d61..92e3bd1e60f3d315f8748c6847bd47acb30ce332 100644 --- a/civicrm/templates/CRM/common/info.tpl +++ b/civicrm/templates/CRM/common/info.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/jcalendar.tpl b/civicrm/templates/CRM/common/jcalendar.tpl index 4365b5a3b2ad10bd690309c1df3e4fca5cbd5352..60ed995491a61de2e4b5c818749033e13a5e04a6 100644 --- a/civicrm/templates/CRM/common/jcalendar.tpl +++ b/civicrm/templates/CRM/common/jcalendar.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/joomla.tpl b/civicrm/templates/CRM/common/joomla.tpl index 88ddb96f06d1be28575eec80108212c176b19e6c..41fb3d9151552f08787e54ad05a380d0ebfa160e 100644 --- a/civicrm/templates/CRM/common/joomla.tpl +++ b/civicrm/templates/CRM/common/joomla.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/jsortable.tpl b/civicrm/templates/CRM/common/jsortable.tpl index d06321798ff748c93c73780c54bae8d2b3abc409..f885333f939902da630a48d036cf155e23b9594e 100644 --- a/civicrm/templates/CRM/common/jsortable.tpl +++ b/civicrm/templates/CRM/common/jsortable.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/l10n.js.tpl b/civicrm/templates/CRM/common/l10n.js.tpl index 6f2e7194fee64a289b0d97db48ceffba2315c57d..9663e33f61a942c0fd57c17baf35ac6d1d8357a1 100644 --- a/civicrm/templates/CRM/common/l10n.js.tpl +++ b/civicrm/templates/CRM/common/l10n.js.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/localNav.tpl b/civicrm/templates/CRM/common/localNav.tpl index 47231df87ab8e8fdf47f39f0c70b06979c92de1a..11f082cd0b448956f561a59f2880ee0f23a42b4b 100644 --- a/civicrm/templates/CRM/common/localNav.tpl +++ b/civicrm/templates/CRM/common/localNav.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/logButton.tpl b/civicrm/templates/CRM/common/logButton.tpl index c4646325d1ee934fe44430f56da705b58582dd4e..518910147845d594d5fd07f0a356d05d29dd8659 100644 --- a/civicrm/templates/CRM/common/logButton.tpl +++ b/civicrm/templates/CRM/common/logButton.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/navigation.js.tpl b/civicrm/templates/CRM/common/navigation.js.tpl index f1d73bc933f8a1d6fcb55eff4b666977bf6e6aa8..ba634bd8c5870fb194f4e12dd837a55f63dbbe25 100644 --- a/civicrm/templates/CRM/common/navigation.js.tpl +++ b/civicrm/templates/CRM/common/navigation.js.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/openFlashChart.tpl b/civicrm/templates/CRM/common/openFlashChart.tpl index 0d80295e03b7bfada777d64eddd1e96c2b350bdb..5661bcbb8f80796448d3c444d1c9e7e8d1c51c74 100644 --- a/civicrm/templates/CRM/common/openFlashChart.tpl +++ b/civicrm/templates/CRM/common/openFlashChart.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/pager.tpl b/civicrm/templates/CRM/common/pager.tpl index 90f980761c380741db3281de58bf28065864044b..63a63b19bc286f29cbd666ea6644f49eac433a71 100644 --- a/civicrm/templates/CRM/common/pager.tpl +++ b/civicrm/templates/CRM/common/pager.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/pagerAToZ.tpl b/civicrm/templates/CRM/common/pagerAToZ.tpl index 5852bdc528c0e0a20f30956b1c01cf81a5adfdc4..d725ccc261c8714eb817b1528ad8b9652f385183 100644 --- a/civicrm/templates/CRM/common/pagerAToZ.tpl +++ b/civicrm/templates/CRM/common/pagerAToZ.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/paymentBlock.tpl b/civicrm/templates/CRM/common/paymentBlock.tpl index 8436164bff90ee830c417cd5abbcc44460cdc263..53765c02af73017e0b762fdb796575ff44c541d7 100644 --- a/civicrm/templates/CRM/common/paymentBlock.tpl +++ b/civicrm/templates/CRM/common/paymentBlock.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/print.tpl b/civicrm/templates/CRM/common/print.tpl index 722fe5314deb2f38cd25a9a867701765f1cc3622..8d63a94ad068c762acd2c49dfc4d239cf5aa71a1 100644 --- a/civicrm/templates/CRM/common/print.tpl +++ b/civicrm/templates/CRM/common/print.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -30,6 +30,7 @@ <head> <title>{if $pageTitle}{$pageTitle|strip_tags}{else}{ts}Printer-Friendly View{/ts} | {ts}CiviCRM{/ts}{/if}</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="ROBOTS" content="NOINDEX, NOFOLLOW"> {crmRegion name='html-header' allowCmsOverride=0}{/crmRegion} <style type="text/css" media="print">@import url({$config->resourceBase}css/print.css);</style> </head> diff --git a/civicrm/templates/CRM/common/printBody.tpl b/civicrm/templates/CRM/common/printBody.tpl index 3f441feb2b966a2706e1718d563e10aae956b85d..c406a9ec0e99f7f3e011617ad4cd4a2af8318c76 100644 --- a/civicrm/templates/CRM/common/printBody.tpl +++ b/civicrm/templates/CRM/common/printBody.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/publicFooter.tpl b/civicrm/templates/CRM/common/publicFooter.tpl index 9d54a71093029ad86e440676382310ce5594aaa7..43b771e62e2721758ce5b1d05bd591e8b3f3adc2 100644 --- a/civicrm/templates/CRM/common/publicFooter.tpl +++ b/civicrm/templates/CRM/common/publicFooter.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/recentlyViewed.tpl b/civicrm/templates/CRM/common/recentlyViewed.tpl index 54648bcbeab793e58458dfc4c2ddbb6ee85880f5..30eba6ca2cc4ec66765467a017552fecdf6d3259 100644 --- a/civicrm/templates/CRM/common/recentlyViewed.tpl +++ b/civicrm/templates/CRM/common/recentlyViewed.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/searchResultTasks.tpl b/civicrm/templates/CRM/common/searchResultTasks.tpl index 3a820f594b22421fa00ea6f6d5cde7b8075aa4c2..09bbde49435dc173d7585b09505bbb5890755f83 100644 --- a/civicrm/templates/CRM/common/searchResultTasks.tpl +++ b/civicrm/templates/CRM/common/searchResultTasks.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/showHide.tpl b/civicrm/templates/CRM/common/showHide.tpl index b104d46c70b7b4d2d62c0e48196bedef74b75628..df878e3ce3d35132488031d0d633b6a6f678b150 100644 --- a/civicrm/templates/CRM/common/showHide.tpl +++ b/civicrm/templates/CRM/common/showHide.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/showHideByFieldValue.tpl b/civicrm/templates/CRM/common/showHideByFieldValue.tpl index 5f342d649b46dfb0a496b7085c6af73fb1f67648..62dd871d815e29527424d6043108ea7e5b97aad3 100644 --- a/civicrm/templates/CRM/common/showHideByFieldValue.tpl +++ b/civicrm/templates/CRM/common/showHideByFieldValue.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/snippet.tpl b/civicrm/templates/CRM/common/snippet.tpl index 5e9206a5b81197fd8491b48e135ad4836d8955de..f3581801cc0a5167dd02d0b5c506d5a89c8a82a8 100644 --- a/civicrm/templates/CRM/common/snippet.tpl +++ b/civicrm/templates/CRM/common/snippet.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/status.tpl b/civicrm/templates/CRM/common/status.tpl index 31103b90ec634f32af754a11b1721212f2cf5e6a..43ea47210bc1b7851ce431bf06f52a832c026dc2 100644 --- a/civicrm/templates/CRM/common/status.tpl +++ b/civicrm/templates/CRM/common/status.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/success.tpl b/civicrm/templates/CRM/common/success.tpl index 81c8d895dcda82bc7ecc3474649f71acb61df8b2..697d022af786d67c43bb909fa41074d7e5faebf2 100644 --- a/civicrm/templates/CRM/common/success.tpl +++ b/civicrm/templates/CRM/common/success.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -61,7 +61,7 @@ <div class="bold" style="padding: 1em; background-color: rgba(255, 255, 255, 0.76);"> <p> <img style="display:block; float:left; width:40px; margin-right:10px;" src="{$config->resourceBase}i/logo_lg.png"> - {ts 1="https://civicrm.org/core-team" 2="https://civicrm.org/providers/contributors" 3="https://civicrm.org/become-a-member?src=ug&sid=$sid"}Thank you for upgrading to 4.7, the latest version of CiviCRM. Packed with new features and improvements, this release was made possible by both the <a href="%1">CiviCRM Core Team</a> and an incredible group of <a href="%2">contributors</a>, combined with the financial support of CiviCRM Members and Partners, without whom the project could not exist. We invite you to join their ranks by <a href="%3">becoming a member of CiviCRM today</a>. There is no better way to say thanks than to support those that have made CiviCRM 4.7 possible. <a href="%3">Join today</a>.{/ts} + {ts 1="https://civicrm.org/core-team" 2="https://civicrm.org/providers/contributors" 3="https://civicrm.org/become-a-member?src=ug&sid=$sid" 4=$newVersion}Thank you for upgrading to %4, the latest version of CiviCRM. Packed with new features and improvements, this release was made possible by both the <a href="%1">CiviCRM Core Team</a> and an incredible group of <a href="%2">contributors</a>, combined with the financial support of CiviCRM Members and Partners, without whom the project could not exist. We invite you to join their ranks by <a href="%3">becoming a member of CiviCRM today</a>. There is no better way to say thanks than to support those that have made CiviCRM %4 possible. <a href="%3">Join today</a>.{/ts} </p> </div> <p><span class="crm-status-icon success"> </span>{$message}</p> diff --git a/civicrm/templates/CRM/common/unittests.tpl b/civicrm/templates/CRM/common/unittests.tpl index b7bd61cfe6af7a91f4ed415bb9cb4b51335d4e6e..d078faa0e39cc5948c6b7afa6972f94a992007ed 100644 --- a/civicrm/templates/CRM/common/unittests.tpl +++ b/civicrm/templates/CRM/common/unittests.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/upgradeCleanup.tpl b/civicrm/templates/CRM/common/upgradeCleanup.tpl index b4855b4a38af321c5fae80804221ee1a6866bd76..c47599fe50641a51aac0af3352861eb856ed02e2 100644 --- a/civicrm/templates/CRM/common/upgradeCleanup.tpl +++ b/civicrm/templates/CRM/common/upgradeCleanup.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/templates/CRM/common/version.tpl b/civicrm/templates/CRM/common/version.tpl deleted file mode 100644 index 7568d21055a281b55db9d31892cda82b28d8fd37..0000000000000000000000000000000000000000 --- a/civicrm/templates/CRM/common/version.tpl +++ /dev/null @@ -1 +0,0 @@ -4.7.31 \ No newline at end of file diff --git a/civicrm/templates/CRM/common/wordpress.tpl b/civicrm/templates/CRM/common/wordpress.tpl index bbb3476353f7b173ae8045d6aa46361b83910ea5..aa80596bb93eb8847396c17cb31658e974e0519c 100644 --- a/civicrm/templates/CRM/common/wordpress.tpl +++ b/civicrm/templates/CRM/common/wordpress.tpl @@ -2,7 +2,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php index 9bc7f42f2c574d5dce1551dfb88fda495b71f1a8..7e8097a9a588dd3bca3879318afbbe4c84792163 100644 --- a/civicrm/vendor/autoload.php +++ b/civicrm/vendor/autoload.php @@ -2,6 +2,6 @@ // autoload.php @generated by Composer -require_once __DIR__ . '/composer' . '/autoload_real.php'; +require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInitf316b582a351da126714ec1e8a967afa::getLoader(); +return ComposerAutoloaderInita318b0fcaa4c20a44a963b523c288fe0::getLoader(); diff --git a/civicrm/vendor/composer/ClassLoader.php b/civicrm/vendor/composer/ClassLoader.php index ac67d302a1866f83aab0c3bff265cfbfe9318f51..dc02dfb114fb6af2eacf89407a529c37ab8e7eb8 100644 --- a/civicrm/vendor/composer/ClassLoader.php +++ b/civicrm/vendor/composer/ClassLoader.php @@ -55,6 +55,7 @@ class ClassLoader private $classMap = array(); private $classMapAuthoritative = false; private $missingClasses = array(); + private $apcuPrefix; public function getPrefixes() { @@ -271,6 +272,26 @@ class ClassLoader return $this->classMapAuthoritative; } + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + /** * Registers this instance as an autoloader. * @@ -313,11 +334,6 @@ class ClassLoader */ public function findFile($class) { - // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 - if ('\\' == $class[0]) { - $class = substr($class, 1); - } - // class map lookup if (isset($this->classMap[$class])) { return $this->classMap[$class]; @@ -325,6 +341,12 @@ class ClassLoader if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { return false; } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } $file = $this->findFileWithExtension($class, '.php'); @@ -333,6 +355,10 @@ class ClassLoader $file = $this->findFileWithExtension($class, '.hh'); } + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + if (false === $file) { // Remember that this class does not exist. $this->missingClasses[$class] = true; @@ -348,10 +374,14 @@ class ClassLoader $first = $class[0]; if (isset($this->prefixLengthsPsr4[$first])) { - foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { - if (0 === strpos($class, $prefix)) { - foreach ($this->prefixDirsPsr4[$prefix] as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath.'\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { return $file; } } diff --git a/civicrm/vendor/composer/LICENSE b/civicrm/vendor/composer/LICENSE index 1a28124886db89f1ca3e4fa674cb69a9a17585b3..f27399a042d95c4708af3a8c74d35d338763cf8f 100644 --- a/civicrm/vendor/composer/LICENSE +++ b/civicrm/vendor/composer/LICENSE @@ -1,5 +1,5 @@ -Copyright (c) 2016 Nils Adermann, Jordi Boggiano +Copyright (c) Nils Adermann, Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/civicrm/vendor/composer/autoload_files.php b/civicrm/vendor/composer/autoload_files.php index af13a03ad6ed55f92c35863a4fa7260bf7600e7a..03f050c0be90cc925af8db25d16b3d67758116b9 100644 --- a/civicrm/vendor/composer/autoload_files.php +++ b/civicrm/vendor/composer/autoload_files.php @@ -8,5 +8,8 @@ $baseDir = dirname($vendorDir); return array( 'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php', '3919eeb97e98d4648304477f8ef734ba' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Random.php', + 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', + 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', '5636a0a89fc28f9cfa8624493b142015' => $vendorDir . '/civicrm/civicrm-setup/civicrm-setup-autoload.php', + '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', ); diff --git a/civicrm/vendor/composer/autoload_psr4.php b/civicrm/vendor/composer/autoload_psr4.php index 5616bfd3f42329853fe6cb89b48bb03d6deb4926..51d1856808e80f85f1a4f8803935458cf97e7706 100644 --- a/civicrm/vendor/composer/autoload_psr4.php +++ b/civicrm/vendor/composer/autoload_psr4.php @@ -9,10 +9,14 @@ return array( 'Zend\\Validator\\' => array($vendorDir . '/zendframework/zend-validator/src'), 'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib/src'), 'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper/src'), + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), 'PhpOffice\\PhpWord\\' => array($vendorDir . '/phpoffice/phpword/src/PhpWord'), 'PhpOffice\\Common\\' => array($vendorDir . '/phpoffice/common/src/Common'), 'MJS\\TopSort\\Tests\\' => array($vendorDir . '/marcj/topsort/tests/Tests'), 'MJS\\TopSort\\' => array($vendorDir . '/marcj/topsort/src'), + 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), + 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), + 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), 'FontLib\\' => array($vendorDir . '/phenx/php-font-lib/src/FontLib'), 'Dompdf\\' => array($vendorDir . '/dompdf/dompdf/src'), 'Civi\\Cxn\\Rpc\\' => array($vendorDir . '/civicrm/civicrm-cxn-rpc/src'), diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php index 2f109becf73073fb92b58359c2dde14f2b8eadde..f76ba7ac7d056b4e6e36ee3228fb3246ecad6260 100644 --- a/civicrm/vendor/composer/autoload_real.php +++ b/civicrm/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInitf316b582a351da126714ec1e8a967afa +class ComposerAutoloaderInita318b0fcaa4c20a44a963b523c288fe0 { private static $loader; @@ -19,19 +19,19 @@ class ComposerAutoloaderInitf316b582a351da126714ec1e8a967afa return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInitf316b582a351da126714ec1e8a967afa', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInita318b0fcaa4c20a44a963b523c288fe0', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInitf316b582a351da126714ec1e8a967afa', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInita318b0fcaa4c20a44a963b523c288fe0', 'loadClassLoader')); $includePaths = require __DIR__ . '/include_paths.php'; - array_push($includePaths, get_include_path()); - set_include_path(join(PATH_SEPARATOR, $includePaths)); + $includePaths[] = get_include_path(); + set_include_path(implode(PATH_SEPARATOR, $includePaths)); - $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION'); + $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInitf316b582a351da126714ec1e8a967afa::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInita318b0fcaa4c20a44a963b523c288fe0::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -52,19 +52,19 @@ class ComposerAutoloaderInitf316b582a351da126714ec1e8a967afa $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInitf316b582a351da126714ec1e8a967afa::$files; + $includeFiles = Composer\Autoload\ComposerStaticInita318b0fcaa4c20a44a963b523c288fe0::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequiref316b582a351da126714ec1e8a967afa($fileIdentifier, $file); + composerRequirea318b0fcaa4c20a44a963b523c288fe0($fileIdentifier, $file); } return $loader; } } -function composerRequiref316b582a351da126714ec1e8a967afa($fileIdentifier, $file) +function composerRequirea318b0fcaa4c20a44a963b523c288fe0($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/civicrm/vendor/composer/autoload_static.php b/civicrm/vendor/composer/autoload_static.php index 67afe7a058be1564adb0268bab4197acf033c5cb..47c9be8dadf6e16044c7b11584f5b862b9754118 100644 --- a/civicrm/vendor/composer/autoload_static.php +++ b/civicrm/vendor/composer/autoload_static.php @@ -4,12 +4,15 @@ namespace Composer\Autoload; -class ComposerStaticInitf316b582a351da126714ec1e8a967afa +class ComposerStaticInita318b0fcaa4c20a44a963b523c288fe0 { public static $files = array ( 'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php', '3919eeb97e98d4648304477f8ef734ba' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Random.php', + 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', + 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', '5636a0a89fc28f9cfa8624493b142015' => __DIR__ . '/..' . '/civicrm/civicrm-setup/civicrm-setup-autoload.php', + '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', ); public static $prefixLengthsPsr4 = array ( @@ -21,6 +24,7 @@ class ComposerStaticInitf316b582a351da126714ec1e8a967afa ), 'P' => array ( + 'Psr\\Http\\Message\\' => 17, 'PhpOffice\\PhpWord\\' => 18, 'PhpOffice\\Common\\' => 17, ), @@ -29,6 +33,12 @@ class ComposerStaticInitf316b582a351da126714ec1e8a967afa 'MJS\\TopSort\\Tests\\' => 18, 'MJS\\TopSort\\' => 12, ), + 'G' => + array ( + 'GuzzleHttp\\Psr7\\' => 16, + 'GuzzleHttp\\Promise\\' => 19, + 'GuzzleHttp\\' => 11, + ), 'F' => array ( 'FontLib\\' => 8, @@ -56,6 +66,10 @@ class ComposerStaticInitf316b582a351da126714ec1e8a967afa array ( 0 => __DIR__ . '/..' . '/zendframework/zend-escaper/src', ), + 'Psr\\Http\\Message\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/http-message/src', + ), 'PhpOffice\\PhpWord\\' => array ( 0 => __DIR__ . '/..' . '/phpoffice/phpword/src/PhpWord', @@ -72,6 +86,18 @@ class ComposerStaticInitf316b582a351da126714ec1e8a967afa array ( 0 => __DIR__ . '/..' . '/marcj/topsort/src', ), + 'GuzzleHttp\\Psr7\\' => + array ( + 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src', + ), + 'GuzzleHttp\\Promise\\' => + array ( + 0 => __DIR__ . '/..' . '/guzzlehttp/promises/src', + ), + 'GuzzleHttp\\' => + array ( + 0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src', + ), 'FontLib\\' => array ( 0 => __DIR__ . '/..' . '/phenx/php-font-lib/src/FontLib', @@ -345,10 +371,10 @@ class ComposerStaticInitf316b582a351da126714ec1e8a967afa public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInitf316b582a351da126714ec1e8a967afa::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInitf316b582a351da126714ec1e8a967afa::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInitf316b582a351da126714ec1e8a967afa::$prefixesPsr0; - $loader->classMap = ComposerStaticInitf316b582a351da126714ec1e8a967afa::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInita318b0fcaa4c20a44a963b523c288fe0::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInita318b0fcaa4c20a44a963b523c288fe0::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInita318b0fcaa4c20a44a963b523c288fe0::$prefixesPsr0; + $loader->classMap = ComposerStaticInita318b0fcaa4c20a44a963b523c288fe0::$classMap; }, null, ClassLoader::class); } diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json index cf3834ce38d2834c5c75f07ee5b097c9e662e133..b7c16788d432272bc134b6e4dec8435e31c2d868 100644 --- a/civicrm/vendor/composer/installed.json +++ b/civicrm/vendor/composer/installed.json @@ -1,25 +1,29 @@ [ { - "name": "psr/log", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "name": "civicrm/civicrm-cxn-rpc", + "version": "v0.17.07.01", + "version_normalized": "0.17.07.01", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "url": "https://github.com/civicrm/civicrm-cxn-rpc.git", + "reference": "2d934d45e65e907f4b0cabc67979b5f3f2b27135" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/civicrm/civicrm-cxn-rpc/zipball/2d934d45e65e907f4b0cabc67979b5f3f2b27135", + "reference": "2d934d45e65e907f4b0cabc67979b5f3f2b27135", "shasum": "" }, - "time": "2012-12-21 11:40:51", + "require": { + "phpseclib/phpseclib": "1.0.*", + "psr/log": "~1.0.0" + }, + "time": "2017-07-18T04:02:44+00:00", "type": "library", "installation-source": "dist", "autoload": { - "psr-0": { - "Psr\\Log\\": "" + "psr-4": { + "Civi\\Cxn\\Rpc\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -28,144 +32,137 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Tim Otten", + "email": "totten@civicrm.org" } ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ] + "description": "RPC library for CiviConnect" }, { - "name": "phpseclib/phpseclib", - "version": "1.0.7", - "version_normalized": "1.0.7.0", + "name": "civicrm/civicrm-setup", + "version": "v0.2.0", + "version_normalized": "0.2.0.0", "source": { "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "0bb6c9b974cada100cad40f72ef186a199274f9b" + "url": "https://github.com/civicrm/civicrm-setup.git", + "reference": "e7991aff516c3fff952bed8f90832804a134358a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/0bb6c9b974cada100cad40f72ef186a199274f9b", - "reference": "0bb6c9b974cada100cad40f72ef186a199274f9b", + "url": "https://api.github.com/repos/civicrm/civicrm-setup/zipball/e7991aff516c3fff952bed8f90832804a134358a", + "reference": "e7991aff516c3fff952bed8f90832804a134358a", "shasum": "" }, "require": { - "php": ">=5.0.0" - }, - "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "~4.0", - "sami/sami": "~2.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.", - "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 5.0.0." + "psr/log": "~1.0", + "symfony/event-dispatcher": "^2.6.13 || ~3.0" }, - "time": "2017-06-05 06:30:30", + "time": "2018-01-23T06:26:55+00:00", "type": "library", "installation-source": "dist", "autoload": { - "psr-0": { - "Crypt": "phpseclib/", - "File": "phpseclib/", - "Math": "phpseclib/", - "Net": "phpseclib/", - "System": "phpseclib/" - }, "files": [ - "phpseclib/bootstrap.php", - "phpseclib/Crypt/Random.php" + "civicrm-setup-autoload.php" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "phpseclib/" - ], "license": [ "MIT" ], "authors": [ { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" + "name": "CiviCRM LLC", + "email": "info@civicrm.org" + } + ], + "description": "CiviCRM installation library" + }, + { + "name": "dompdf/dompdf", + "version": "v0.8.0", + "version_normalized": "0.8.0.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "0f418c6b58fdeafc2a0e80eb1fa5e644e185089c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/0f418c6b58fdeafc2a0e80eb1fa5e644e185089c", + "reference": "0f418c6b58fdeafc2a0e80eb1fa5e644e185089c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-gd": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "0.5.*", + "phenx/php-svg-lib": "0.2.*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.8.*", + "squizlabs/php_codesniffer": "2.*" + }, + "time": "2017-02-16T02:40:40+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" }, { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" }, { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" } ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ] + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf" }, { - "name": "civicrm/civicrm-cxn-rpc", - "version": "v0.17.07.01", - "version_normalized": "0.17.07.01", + "name": "electrolinux/phpquery", + "version": "0.9.6", + "version_normalized": "0.9.6.0", "source": { "type": "git", - "url": "https://github.com/civicrm/civicrm-cxn-rpc.git", - "reference": "2d934d45e65e907f4b0cabc67979b5f3f2b27135" + "url": "https://github.com/electrolinux/phpquery.git", + "reference": "6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/civicrm/civicrm-cxn-rpc/zipball/2d934d45e65e907f4b0cabc67979b5f3f2b27135", - "reference": "2d934d45e65e907f4b0cabc67979b5f3f2b27135", + "url": "https://api.github.com/repos/electrolinux/phpquery/zipball/6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a", + "reference": "6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a", "shasum": "" }, - "require": { - "phpseclib/phpseclib": "1.0.*", - "psr/log": "~1.0.0" - }, - "time": "2017-07-18 04:02:44", + "time": "2013-03-21T12:39:33+00:00", "type": "library", "installation-source": "dist", "autoload": { - "psr-4": { - "Civi\\Cxn\\Rpc\\": "src/" - } + "classmap": [ + "phpQuery/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -173,54 +170,61 @@ ], "authors": [ { - "name": "Tim Otten", - "email": "totten@civicrm.org" + "name": "Tobiasz Cudnik", + "email": "tobiasz.cudnik@gmail.com", + "homepage": "https://github.com/TobiaszCudnik", + "role": "Developer" + }, + { + "name": "didier Belot", + "role": "Packager" } ], - "description": "RPC library for CiviConnect" + "description": "phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library", + "homepage": "http://code.google.com/p/phpquery/" }, { - "name": "symfony/event-dispatcher", - "version": "v2.6.13", - "version_normalized": "2.6.13.0", - "target-dir": "Symfony/Component/EventDispatcher", + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/672593bc4b0043a0acf91903bb75a1c82d8f2e02", - "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "shasum": "" }, "require": { - "php": ">=5.3.3" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.0,>=2.0.5", - "symfony/dependency-injection": "~2.6", - "symfony/expression-language": "~2.6", - "symfony/phpunit-bridge": "~2.7", - "symfony/stopwatch": "~2.3" + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "psr/log": "Required for using the Log middleware" }, - "time": "2015-05-02 15:18:45", + "time": "2017-06-22T18:50:49+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "6.2-dev" } }, "installation-source": "dist", "autoload": { - "psr-0": { - "Symfony\\Component\\EventDispatcher\\": "" + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -229,42 +233,58 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com" + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ] }, { - "name": "civicrm/civicrm-setup", - "version": "v0.2.0", - "version_normalized": "0.2.0.0", + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "version_normalized": "1.3.1.0", "source": { "type": "git", - "url": "https://github.com/civicrm/civicrm-setup.git", - "reference": "e7991aff516c3fff952bed8f90832804a134358a" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/civicrm/civicrm-setup/zipball/e7991aff516c3fff952bed8f90832804a134358a", - "reference": "e7991aff516c3fff952bed8f90832804a134358a", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "^2.6.13 || ~3.0" + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" }, - "time": "2018-01-23 06:26:55", + "time": "2016-12-20T10:07:11+00:00", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, "installation-source": "dist", "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, "files": [ - "civicrm-setup-autoload.php" + "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -273,265 +293,116 @@ ], "authors": [ { - "name": "CiviCRM LLC", - "email": "info@civicrm.org" - } - ], - "description": "CiviCRM installation library" - }, - { - "name": "sabberworm/php-css-parser", - "version": "6.0.1", - "version_normalized": "6.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", - "reference": "9ea4b00c569b19f731d0c2e0e802055877ff40c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/9ea4b00c569b19f731d0c2e0e802055877ff40c2", - "reference": "9ea4b00c569b19f731d0c2e0e802055877ff40c2", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "time": "2015-08-24 08:48:52", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Sabberworm\\CSS": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Raphael Schweikert" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Parser for CSS Files written in PHP", - "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "description": "Guzzle promises library", "keywords": [ - "css", - "parser", - "stylesheet" + "promise" ] }, { - "name": "phenx/php-svg-lib", - "version": "v0.2", - "version_normalized": "0.2.0.0", + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "version_normalized": "1.4.2.0", "source": { "type": "git", - "url": "https://github.com/PhenX/php-svg-lib.git", - "reference": "de291bec8449b89acfe85691b5c71434797959dc" + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/de291bec8449b89acfe85691b5c71434797959dc", - "reference": "de291bec8449b89acfe85691b5c71434797959dc", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { - "sabberworm/php-css-parser": "6.0.*" - }, - "time": "2016-12-13 20:25:45", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Svg\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - } - ], - "description": "A library to read, parse and export to PDF SVG files.", - "homepage": "https://github.com/PhenX/php-svg-lib" - }, - { - "name": "phenx/php-font-lib", - "version": "0.5", - "version_normalized": "0.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/PhenX/php-font-lib.git", - "reference": "19ad2bebc35be028fcc0221025fcbf3d436a3962" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/19ad2bebc35be028fcc0221025fcbf3d436a3962", - "reference": "19ad2bebc35be028fcc0221025fcbf3d436a3962", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "^4.8" - }, - "time": "2017-02-11 10:58:43", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "FontLib\\": "src/FontLib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0" - ], - "authors": [ - { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - } - ], - "description": "A library to read, parse, export and make subsets of different types of font files.", - "homepage": "https://github.com/PhenX/php-font-lib" - }, - { - "name": "dompdf/dompdf", - "version": "v0.8.0", - "version_normalized": "0.8.0.0", - "source": { - "type": "git", - "url": "https://github.com/dompdf/dompdf.git", - "reference": "0f418c6b58fdeafc2a0e80eb1fa5e644e185089c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/0f418c6b58fdeafc2a0e80eb1fa5e644e185089c", - "reference": "0f418c6b58fdeafc2a0e80eb1fa5e644e185089c", - "shasum": "" + "php": ">=5.4.0", + "psr/http-message": "~1.0" }, - "require": { - "ext-dom": "*", - "ext-gd": "*", - "ext-mbstring": "*", - "phenx/php-font-lib": "0.5.*", - "phenx/php-svg-lib": "0.2.*", - "php": ">=5.3.0" + "provide": { + "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "4.8.*", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "~4.0" }, - "time": "2017-02-16 02:40:40", + "time": "2017-03-20T17:10:46+00:00", "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.7-dev" + "dev-master": "1.4-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Dompdf\\": "src/" + "GuzzleHttp\\Psr7\\": "src/" }, - "classmap": [ - "lib/" + "files": [ + "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1" + "MIT" ], "authors": [ { - "name": "Fabien Ménager", - "email": "fabien.menager@gmail.com" - }, - { - "name": "Brian Sweeney", - "email": "eclecticgeek@gmail.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Gabriel Bull", - "email": "me@gabrielbull.com" + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", - "homepage": "https://github.com/dompdf/dompdf" + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ] }, { - "name": "electrolinux/phpquery", - "version": "0.9.6", - "version_normalized": "0.9.6.0", + "name": "marcj/topsort", + "version": "1.1.0", + "version_normalized": "1.1.0.0", "source": { "type": "git", - "url": "https://github.com/electrolinux/phpquery.git", - "reference": "6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a" + "url": "https://github.com/marcj/topsort.php.git", + "reference": "387086c2db60ee0a27ac5df588c0f0b30c6bdc4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/electrolinux/phpquery/zipball/6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a", - "reference": "6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a", + "url": "https://api.github.com/repos/marcj/topsort.php/zipball/387086c2db60ee0a27ac5df588c0f0b30c6bdc4b", + "reference": "387086c2db60ee0a27ac5df588c0f0b30c6bdc4b", "shasum": "" }, - "time": "2013-03-21 12:39:33", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "phpQuery/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobiasz Cudnik", - "email": "tobiasz.cudnik@gmail.com", - "homepage": "https://github.com/TobiaszCudnik", - "role": "Developer" - }, - { - "name": "didier Belot", - "role": "Packager" - } - ], - "description": "phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library", - "homepage": "http://code.google.com/p/phpquery/" - }, - { - "name": "marcj/topsort", - "version": "dev-1.0-php53", - "version_normalized": "dev-1.0-php53", - "source": { - "type": "git", - "url": "https://github.com/totten/topsort.php.git", - "reference": "2765723d36f0e536d987e42cbc60de52209212bd" - }, "require": { - "php": ">=5.3" + "php": ">=5.4" }, "require-dev": { "codeclimate/php-test-reporter": "dev-master", "phpunit/phpunit": "~4.0", "symfony/console": "~2.5" }, - "time": "2016-03-25 21:38:05", + "time": "2016-11-19T14:58:11+00:00", "type": "library", - "installation-source": "source", + "installation-source": "dist", "autoload": { "psr-4": { "MJS\\TopSort\\": "src/", "MJS\\TopSort\\Tests\\": "tests/Tests/" } }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -563,7 +434,7 @@ "reference": "19dd1de9d3f5fc4d7d70175b4c344dee329f45fd", "shasum": "" }, - "time": "2014-06-05 11:42:24", + "time": "2014-06-05T11:42:24+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -587,63 +458,6 @@ "zip" ] }, - { - "name": "pear/pear_exception", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/pear/PEAR_Exception.git", - "reference": "8c18719fdae000b690e3912be401c76e406dd13b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", - "reference": "8c18719fdae000b690e3912be401c76e406dd13b", - "shasum": "" - }, - "require": { - "php": ">=4.4.0" - }, - "require-dev": { - "phpunit/phpunit": "*" - }, - "time": "2015-02-10 20:07:52", - "type": "class", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "PEAR": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "." - ], - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Helgi Thormar", - "email": "dufuz@php.net" - }, - { - "name": "Greg Beaver", - "email": "cellog@php.net" - } - ], - "description": "The PEAR Exception base class.", - "homepage": "https://github.com/pear/PEAR_Exception", - "keywords": [ - "exception" - ] - }, { "name": "pear/auth_sasl", "version": "v1.1.0", @@ -665,7 +479,7 @@ "require-dev": { "phpunit/phpunit": "@stable" }, - "time": "2017-03-07 14:37:05", + "time": "2017-03-07T14:37:05+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -700,8 +514,70 @@ "description": "Abstraction of various SASL mechanism responses" }, { - "name": "pear/net_socket", - "version": "1.0.14", + "name": "pear/net_smtp", + "version": "1.6.3", + "version_normalized": "1.6.3.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Net_SMTP.git", + "reference": "7b6240761adf6ee245098e238a25d5c35650d82c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/7b6240761adf6ee245098e238a25d5c35650d82c", + "reference": "7b6240761adf6ee245098e238a25d5c35650d82c", + "shasum": "" + }, + "require": { + "pear/net_socket": "*", + "pear/pear_exception": "*", + "php": ">=4.0.5" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "pear/auth_sasl": "Install optionally via your project's composer.json" + }, + "time": "2015-08-02T17:20:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "PHP License" + ], + "authors": [ + { + "name": "Jon Parise", + "email": "jon@php.net", + "homepage": "http://www.indelible.org", + "role": "Lead" + }, + { + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + } + ], + "description": "An implementation of the SMTP protocol", + "homepage": "http://pear.github.io/Net_SMTP/", + "keywords": [ + "email", + "mail", + "smtp" + ] + }, + { + "name": "pear/net_socket", + "version": "1.0.14", "version_normalized": "1.0.14.0", "source": { "type": "git", @@ -720,7 +596,7 @@ "require-dev": { "phpunit/phpunit": "*" }, - "time": "2014-02-20 19:27:06", + "time": "2014-02-20T19:27:06+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -755,65 +631,60 @@ "description": "More info available on: http://pear.php.net/package/Net_Socket" }, { - "name": "pear/net_smtp", - "version": "1.6.3", - "version_normalized": "1.6.3.0", + "name": "pear/pear_exception", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "https://github.com/pear/Net_SMTP.git", - "reference": "7b6240761adf6ee245098e238a25d5c35650d82c" + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/7b6240761adf6ee245098e238a25d5c35650d82c", - "reference": "7b6240761adf6ee245098e238a25d5c35650d82c", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", "shasum": "" }, "require": { - "pear/net_socket": "*", - "pear/pear_exception": "*", - "php": ">=4.0.5" + "php": ">=4.4.0" }, "require-dev": { "phpunit/phpunit": "*" }, - "suggest": { - "pear/auth_sasl": "Install optionally via your project's composer.json" + "time": "2015-02-10T20:07:52+00:00", + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } }, - "time": "2015-08-02 17:20:17", - "type": "library", "installation-source": "dist", "autoload": { "psr-0": { - "Net": "./" + "PEAR": "" } }, "notification-url": "https://packagist.org/downloads/", "include-path": [ - "./" + "." ], "license": [ - "PHP License" + "BSD-2-Clause" ], "authors": [ { - "name": "Jon Parise", - "email": "jon@php.net", - "homepage": "http://www.indelible.org", - "role": "Lead" + "name": "Helgi Thormar", + "email": "dufuz@php.net" }, { - "name": "Chuck Hagenbuch", - "email": "chuck@horde.org", - "role": "Lead" + "name": "Greg Beaver", + "email": "cellog@php.net" } ], - "description": "An implementation of the SMTP protocol", - "homepage": "http://pear.github.io/Net_SMTP/", + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", "keywords": [ - "email", - "mail", - "smtp" + "exception" ] }, { @@ -838,7 +709,7 @@ "require-dev": { "phpunit/phpunit": "*" }, - "time": "2016-09-12 08:01:21", + "time": "2016-09-12T08:01:21+00:00", "type": "library", "installation-source": "source", "autoload": { @@ -863,194 +734,101 @@ "description": "Validation class for credit cards." }, { - "name": "zendframework/zend-stdlib", - "version": "2.4.13", - "version_normalized": "2.4.13.0", + "name": "phenx/php-font-lib", + "version": "0.5", + "version_normalized": "0.5.0.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-stdlib.git", - "reference": "d8ecb629a72da9f91bd95c5af006384823560b42" + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "19ad2bebc35be028fcc0221025fcbf3d436a3962" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/d8ecb629a72da9f91bd95c5af006384823560b42", - "reference": "d8ecb629a72da9f91bd95c5af006384823560b42", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/19ad2bebc35be028fcc0221025fcbf3d436a3962", + "reference": "19ad2bebc35be028fcc0221025fcbf3d436a3962", "shasum": "" }, - "require": { - "php": ">=5.3.23" - }, "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-eventmanager": "self.version", - "zendframework/zend-filter": "self.version", - "zendframework/zend-serializer": "self.version", - "zendframework/zend-servicemanager": "self.version" - }, - "suggest": { - "zendframework/zend-eventmanager": "To support aggregate hydrator usage", - "zendframework/zend-filter": "To support naming strategy hydrator usage", - "zendframework/zend-serializer": "Zend\\Serializer component", - "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + "phpunit/phpunit": "^4.8" }, - "time": "2015-07-21 13:55:46", + "time": "2017-02-11T10:58:43+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { - "Zend\\Stdlib\\": "src/" + "FontLib\\": "src/FontLib" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "LGPL-3.0" ], - "homepage": "https://github.com/zendframework/zend-stdlib", - "keywords": [ - "stdlib", - "zf2" - ] + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib" }, { - "name": "zendframework/zend-validator", - "version": "2.4.13", - "version_normalized": "2.4.13.0", + "name": "phenx/php-svg-lib", + "version": "v0.2", + "version_normalized": "0.2.0.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-validator.git", - "reference": "81415511fe729e6de19a61936313cef43c80d337" + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "de291bec8449b89acfe85691b5c71434797959dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/81415511fe729e6de19a61936313cef43c80d337", - "reference": "81415511fe729e6de19a61936313cef43c80d337", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/de291bec8449b89acfe85691b5c71434797959dc", + "reference": "de291bec8449b89acfe85691b5c71434797959dc", "shasum": "" }, "require": { - "php": ">=5.3.23", - "zendframework/zend-stdlib": "~2.4.0" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master", - "zendframework/zend-config": "~2.4.0", - "zendframework/zend-db": "~2.4.0", - "zendframework/zend-filter": "~2.4.0", - "zendframework/zend-i18n": "~2.4.0", - "zendframework/zend-math": "~2.4.0", - "zendframework/zend-servicemanager": "~2.4.0", - "zendframework/zend-session": "~2.4.0", - "zendframework/zend-uri": "~2.4.0" - }, - "suggest": { - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", - "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", - "zendframework/zend-math": "Zend\\Math component", - "zendframework/zend-resources": "Translations of validator messages", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", - "zendframework/zend-session": "Zend\\Session component", - "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + "sabberworm/php-css-parser": "6.0.*" }, - "time": "2015-09-08 21:04:17", + "time": "2016-12-13T20:25:45+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, "installation-source": "dist", "autoload": { - "psr-4": { - "Zend\\Validator\\": "src/" + "psr-0": { + "Svg\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "LGPL-3.0" ], - "description": "provides a set of commonly needed validators", - "homepage": "https://github.com/zendframework/zend-validator", - "keywords": [ - "validator", - "zf2" - ] + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib" }, { - "name": "zendframework/zend-escaper", - "version": "2.4.13", - "version_normalized": "2.4.13.0", + "name": "phpoffice/common", + "version": "v0.2.6", + "version_normalized": "0.2.6.0", "source": { "type": "git", - "url": "https://github.com/zendframework/zend-escaper.git", - "reference": "13f468ff824f3c83018b90aff892a1b3201383a9" + "url": "https://github.com/PHPOffice/Common.git", + "reference": "c9be70c80637c28c728be78e66aad4878a34f8dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/13f468ff824f3c83018b90aff892a1b3201383a9", - "reference": "13f468ff824f3c83018b90aff892a1b3201383a9", + "url": "https://api.github.com/repos/PHPOffice/Common/zipball/c9be70c80637c28c728be78e66aad4878a34f8dd", + "reference": "c9be70c80637c28c728be78e66aad4878a34f8dd", "shasum": "" }, "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "dev-master" - }, - "time": "2015-05-07 14:55:31", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev", - "dev-develop": "2.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Zend\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zend-escaper", - "keywords": [ - "escaper", - "zf2" - ] - }, - { - "name": "phpoffice/common", - "version": "v0.2.6", - "version_normalized": "0.2.6.0", - "source": { - "type": "git", - "url": "https://github.com/PHPOffice/Common.git", - "reference": "c9be70c80637c28c728be78e66aad4878a34f8dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/Common/zipball/c9be70c80637c28c728be78e66aad4878a34f8dd", - "reference": "c9be70c80637c28c728be78e66aad4878a34f8dd", - "shasum": "" - }, - "require": { - "pclzip/pclzip": "^2.8", - "php": ">=5.3.0" + "pclzip/pclzip": "^2.8", + "php": ">=5.3.0" }, "require-dev": { "phpdocumentor/phpdocumentor": "2.*", @@ -1060,7 +838,7 @@ "sebastian/phpcpd": "2.*", "squizlabs/php_codesniffer": "2.*" }, - "time": "2016-07-07 17:26:55", + "time": "2016-07-07T17:26:55+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1092,35 +870,35 @@ }, { "name": "phpoffice/phpword", - "version": "v0.13.0", - "version_normalized": "0.13.0.0", + "version": "v0.14.0", + "version_normalized": "0.14.0.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PHPWord.git", - "reference": "0a3f873972defb304de4fa2f5f53156558c11a7a" + "reference": "b614497ae6dd44280be1c2dda56772198bcd25ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/0a3f873972defb304de4fa2f5f53156558c11a7a", - "reference": "0a3f873972defb304de4fa2f5f53156558c11a7a", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/b614497ae6dd44280be1c2dda56772198bcd25ae", + "reference": "b614497ae6dd44280be1c2dda56772198bcd25ae", "shasum": "" }, "require": { "ext-xml": "*", - "php": ">=5.3.3", - "phpoffice/common": "0.2.*", - "zendframework/zend-escaper": "2.4.*", - "zendframework/zend-stdlib": "2.4.*", - "zendframework/zend-validator": "2.4.*" + "php": "^5.3.3 || ^7.0", + "phpoffice/common": "^0.2", + "zendframework/zend-escaper": "^2.2", + "zendframework/zend-stdlib": "^2.2 || ^3.0" }, "require-dev": { - "dompdf/dompdf": "0.6.*", - "mpdf/mpdf": "5.*", + "dompdf/dompdf": "0.8.*", + "friendsofphp/php-cs-fixer": "^2.0", + "mpdf/mpdf": "5.* || 6.* || 7.*", "phpdocumentor/phpdocumentor": "2.*", - "phploc/phploc": "2.*", + "phploc/phploc": "2.* || 3.* || 4.*", "phpmd/phpmd": "2.*", - "phpunit/phpunit": "3.7.*", - "squizlabs/php_codesniffer": "1.*", + "phpunit/phpunit": "^4.8.36 || ^5.0", + "squizlabs/php_codesniffer": "^2.7", "tecnickcom/tcpdf": "6.*" }, "suggest": { @@ -1130,7 +908,7 @@ "ext-xsl": "Allows applying XSL style sheet to headers, to main document part, and to footers of an OOXML template", "ext-zip": "Allows writing OOXML and ODF" }, - "time": "2016-07-31 08:53:39", + "time": "2017-12-29T01:30:53+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1146,10 +924,6 @@ { "name": "Mark Baker" }, - { - "name": "Franck Lefevre", - "homepage": "http://blog.rootslabs.net" - }, { "name": "Gabriel Bull", "email": "me@gabrielbull.com", @@ -1162,6 +936,13 @@ { "name": "Roman Syroeshko", "homepage": "http://ru.linkedin.com/pub/roman-syroeshko/34/a53/994/" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net/blog/" + }, + { + "name": "Antoine de Troostembergh" } ], "description": "PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)", @@ -1193,28 +974,328 @@ ] }, { - "name": "symfony/filesystem", + "name": "phpseclib/phpseclib", + "version": "1.0.7", + "version_normalized": "1.0.7.0", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "0bb6c9b974cada100cad40f72ef186a199274f9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/0bb6c9b974cada100cad40f72ef186a199274f9b", + "reference": "0bb6c9b974cada100cad40f72ef186a199274f9b", + "shasum": "" + }, + "require": { + "php": ">=5.0.0" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "~4.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.", + "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 5.0.0." + }, + "time": "2017-06-05T06:30:30+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Crypt": "phpseclib/", + "File": "phpseclib/", + "Math": "phpseclib/", + "Net": "phpseclib/", + "System": "phpseclib/" + }, + "files": [ + "phpseclib/bootstrap.php", + "phpseclib/Crypt/Random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "phpseclib/" + ], + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ] + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T14:39:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ] + }, + { + "name": "psr/log", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "shasum": "" + }, + "time": "2012-12-21T11:40:51+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Psr\\Log\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "keywords": [ + "log", + "psr", + "psr-3" + ] + }, + { + "name": "sabberworm/php-css-parser", + "version": "6.0.1", + "version_normalized": "6.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "9ea4b00c569b19f731d0c2e0e802055877ff40c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/9ea4b00c569b19f731d0c2e0e802055877ff40c2", + "reference": "9ea4b00c569b19f731d0c2e0e802055877ff40c2", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "time": "2015-08-24T08:48:52+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ] + }, + { + "name": "symfony/config", + "version": "v2.6.13", + "version_normalized": "2.6.13.0", + "target-dir": "Symfony/Component/Config", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "0ca496cbe208fc37c4cf3415ebb3056e0963115b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/0ca496cbe208fc37c4cf3415ebb3056e0963115b", + "reference": "0ca496cbe208fc37c4cf3415ebb3056e0963115b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/filesystem": "~2.3" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "time": "2015-07-08T05:59:48+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Symfony\\Component\\Config\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com" + }, + { + "name": "symfony/dependency-injection", "version": "v2.6.13", "version_normalized": "2.6.13.0", - "target-dir": "Symfony/Component/Filesystem", + "target-dir": "Symfony/Component/DependencyInjection", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "823c035b1a5c13a4924e324d016eb07e70f94735" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "d9fe6837d74aed11e5ee741cd6b6dfe45e0af78e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/823c035b1a5c13a4924e324d016eb07e70f94735", - "reference": "823c035b1a5c13a4924e324d016eb07e70f94735", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d9fe6837d74aed11e5ee741cd6b6dfe45e0af78e", + "reference": "d9fe6837d74aed11e5ee741cd6b6dfe45e0af78e", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "conflict": { + "symfony/expression-language": "<2.6" + }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "symfony/config": "~2.2", + "symfony/expression-language": "~2.6", + "symfony/phpunit-bridge": "~2.7", + "symfony/yaml": "~2.1" + }, + "suggest": { + "symfony/config": "", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" }, - "time": "2015-07-08 05:59:48", + "time": "2015-07-22T10:08:40+00:00", "type": "library", "extra": { "branch-alias": { @@ -1224,7 +1305,7 @@ "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\Filesystem\\": "" + "Symfony\\Component\\DependencyInjection\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1241,33 +1322,41 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Filesystem Component", + "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com" }, { - "name": "symfony/config", + "name": "symfony/event-dispatcher", "version": "v2.6.13", "version_normalized": "2.6.13.0", - "target-dir": "Symfony/Component/Config", + "target-dir": "Symfony/Component/EventDispatcher", "source": { "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "0ca496cbe208fc37c4cf3415ebb3056e0963115b" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/0ca496cbe208fc37c4cf3415ebb3056e0963115b", - "reference": "0ca496cbe208fc37c4cf3415ebb3056e0963115b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/672593bc4b0043a0acf91903bb75a1c82d8f2e02", + "reference": "672593bc4b0043a0acf91903bb75a1c82d8f2e02", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/filesystem": "~2.3" + "php": ">=5.3.3" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7" + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5", + "symfony/dependency-injection": "~2.6", + "symfony/expression-language": "~2.6", + "symfony/phpunit-bridge": "~2.7", + "symfony/stopwatch": "~2.3" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, - "time": "2015-07-08 05:59:48", + "time": "2015-05-02T15:18:45+00:00", "type": "library", "extra": { "branch-alias": { @@ -1277,7 +1366,7 @@ "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\Config\\": "" + "Symfony\\Component\\EventDispatcher\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1294,43 +1383,32 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Config Component", + "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com" }, { - "name": "symfony/dependency-injection", + "name": "symfony/filesystem", "version": "v2.6.13", "version_normalized": "2.6.13.0", - "target-dir": "Symfony/Component/DependencyInjection", + "target-dir": "Symfony/Component/Filesystem", "source": { "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "d9fe6837d74aed11e5ee741cd6b6dfe45e0af78e" + "url": "https://github.com/symfony/filesystem.git", + "reference": "823c035b1a5c13a4924e324d016eb07e70f94735" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d9fe6837d74aed11e5ee741cd6b6dfe45e0af78e", - "reference": "d9fe6837d74aed11e5ee741cd6b6dfe45e0af78e", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/823c035b1a5c13a4924e324d016eb07e70f94735", + "reference": "823c035b1a5c13a4924e324d016eb07e70f94735", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "conflict": { - "symfony/expression-language": "<2.6" - }, "require-dev": { - "symfony/config": "~2.2", - "symfony/expression-language": "~2.6", - "symfony/phpunit-bridge": "~2.7", - "symfony/yaml": "~2.1" - }, - "suggest": { - "symfony/config": "", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" + "symfony/phpunit-bridge": "~2.7" }, - "time": "2015-07-22 10:08:40", + "time": "2015-07-08T05:59:48+00:00", "type": "library", "extra": { "branch-alias": { @@ -1340,7 +1418,7 @@ "installation-source": "dist", "autoload": { "psr-0": { - "Symfony\\Component\\DependencyInjection\\": "" + "Symfony\\Component\\Filesystem\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1357,7 +1435,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony DependencyInjection Component", + "description": "Symfony Filesystem Component", "homepage": "https://symfony.com" }, { @@ -1382,7 +1460,7 @@ "require-dev": { "symfony/phpunit-bridge": "~2.7" }, - "time": "2015-07-09 16:02:48", + "time": "2015-07-09T16:02:48+00:00", "type": "library", "extra": { "branch-alias": { @@ -1434,7 +1512,7 @@ "require-dev": { "symfony/phpunit-bridge": "~2.7" }, - "time": "2015-06-30 16:10:16", + "time": "2015-06-30T16:10:16+00:00", "type": "library", "extra": { "branch-alias": { @@ -1482,7 +1560,7 @@ "require": { "php": ">=5.3.0" }, - "time": "2017-04-26 08:14:48", + "time": "2017-04-26T08:14:48+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1546,7 +1624,7 @@ "require": { "php": ">=5.2" }, - "time": "2017-05-10 20:08:17", + "time": "2017-05-10T20:08:17+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1567,6 +1645,177 @@ "description": "Default configuration for certificate authorities", "homepage": "https://github.com/totten/ca_config" }, + { + "name": "zendframework/zend-escaper", + "version": "2.4.13", + "version_normalized": "2.4.13.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-escaper.git", + "reference": "13f468ff824f3c83018b90aff892a1b3201383a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/13f468ff824f3c83018b90aff892a1b3201383a9", + "reference": "13f468ff824f3c83018b90aff892a1b3201383a9", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "dev-master" + }, + "time": "2015-05-07T14:55:31+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev", + "dev-develop": "2.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-escaper", + "keywords": [ + "escaper", + "zf2" + ] + }, + { + "name": "zendframework/zend-stdlib", + "version": "2.4.13", + "version_normalized": "2.4.13.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "d8ecb629a72da9f91bd95c5af006384823560b42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/d8ecb629a72da9f91bd95c5af006384823560b42", + "reference": "d8ecb629a72da9f91bd95c5af006384823560b42", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "dev-master", + "zendframework/zend-eventmanager": "self.version", + "zendframework/zend-filter": "self.version", + "zendframework/zend-serializer": "self.version", + "zendframework/zend-servicemanager": "self.version" + }, + "suggest": { + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-filter": "To support naming strategy hydrator usage", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + }, + "time": "2015-07-21T13:55:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev", + "dev-develop": "2.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ] + }, + { + "name": "zendframework/zend-validator", + "version": "2.4.13", + "version_normalized": "2.4.13.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-validator.git", + "reference": "81415511fe729e6de19a61936313cef43c80d337" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/81415511fe729e6de19a61936313cef43c80d337", + "reference": "81415511fe729e6de19a61936313cef43c80d337", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.4.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "dev-master", + "zendframework/zend-config": "~2.4.0", + "zendframework/zend-db": "~2.4.0", + "zendframework/zend-filter": "~2.4.0", + "zendframework/zend-i18n": "~2.4.0", + "zendframework/zend-math": "~2.4.0", + "zendframework/zend-servicemanager": "~2.4.0", + "zendframework/zend-session": "~2.4.0", + "zendframework/zend-uri": "~2.4.0" + }, + "suggest": { + "zendframework/zend-db": "Zend\\Db component", + "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", + "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", + "zendframework/zend-math": "Zend\\Math component", + "zendframework/zend-resources": "Translations of validator messages", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "zendframework/zend-session": "Zend\\Session component", + "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + }, + "time": "2015-09-08T21:04:17+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev", + "dev-develop": "2.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Zend\\Validator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed validators", + "homepage": "https://github.com/zendframework/zend-validator", + "keywords": [ + "validator", + "zf2" + ] + }, { "name": "zetacomponents/base", "version": "1.7", @@ -1582,7 +1831,7 @@ "reference": "2612ee3ce88902632d45b93e379277e9d46b70a7", "shasum": "" }, - "time": "2009-06-29 10:47:39", + "time": "2009-06-29T10:47:39+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1638,7 +1887,7 @@ "url": "https://github.com/civicrm/zetacomponents-mail.git", "reference": "e0feff0e1860f16fa2b3c42795c0351db58120a0" }, - "time": "2017-03-14 06:51:24", + "time": "2017-03-14T06:51:24+00:00", "type": "library", "installation-source": "source", "autoload": { diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/.name b/civicrm/vendor/electrolinux/phpquery/.idea/.name deleted file mode 100644 index 65a17accbc5bedf7cc6bfa159e28f362e58f6acd..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -phpquery-git \ No newline at end of file diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/compiler.xml b/civicrm/vendor/electrolinux/phpquery/.idea/compiler.xml deleted file mode 100644 index a1b41c52c7248fec729e916183103b8c463fe835..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/compiler.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CompilerConfiguration"> - <option name="DEFAULT_COMPILER" value="Javac" /> - <resourceExtensions /> - <wildcardResourcePatterns> - <entry name="?*.properties" /> - <entry name="?*.xml" /> - <entry name="?*.gif" /> - <entry name="?*.png" /> - <entry name="?*.jpeg" /> - <entry name="?*.jpg" /> - <entry name="?*.html" /> - <entry name="?*.dtd" /> - <entry name="?*.tld" /> - <entry name="?*.ftl" /> - </wildcardResourcePatterns> - <annotationProcessing enabled="false" useClasspath="true" /> - </component> -</project> - diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/copyright/profiles_settings.xml b/civicrm/vendor/electrolinux/phpquery/.idea/copyright/profiles_settings.xml deleted file mode 100644 index 3572571ad83c314471fcf2beec12ffe6c323fdf6..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,5 +0,0 @@ -<component name="CopyrightManager"> - <settings default=""> - <module2copyright /> - </settings> -</component> \ No newline at end of file diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/encodings.xml b/civicrm/vendor/electrolinux/phpquery/.idea/encodings.xml deleted file mode 100644 index e206d70d8595e2a50675ba11de48efcfa012497d..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/encodings.xml +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" /> -</project> - diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/inspectionProfiles/Project_Default.xml b/civicrm/vendor/electrolinux/phpquery/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 4a98b0f813a09187be55719d75ad14c1fa0a732d..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,7 +0,0 @@ -<component name="InspectionProjectProfileManager"> - <profile version="1.0" is_locked="false"> - <option name="myName" value="Project Default" /> - <option name="myLocal" value="false" /> - <inspection_tool class="CssUnusedSymbolInspection" enabled="false" level="WARNING" enabled_by_default="false" /> - </profile> -</component> \ No newline at end of file diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/inspectionProfiles/profiles_settings.xml b/civicrm/vendor/electrolinux/phpquery/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 3b312839bf2e939fea3ebdef15630a4b33e57caf..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ -<component name="InspectionProjectProfileManager"> - <settings> - <option name="PROJECT_PROFILE" value="Project Default" /> - <option name="USE_PROJECT_PROFILE" value="true" /> - <version value="1.0" /> - </settings> -</component> \ No newline at end of file diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/misc.xml b/civicrm/vendor/electrolinux/phpquery/.idea/misc.xml deleted file mode 100644 index baa89dc6a78ca9ef8e758ccf3973027f23b78744..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/misc.xml +++ /dev/null @@ -1,339 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="DBNavigator.Project.ConnectionManager"> - <connections /> - </component> - <component name="DBNavigator.Project.DataEditorManager"> - <record-editor-column-sorting value="INDEXED" /> - </component> - <component name="DBNavigator.Project.DataExportManager"> - <export-instructions> - <create-header value="true" /> - <quote-values-containing-separator value="true" /> - <quote-all-values value="false" /> - <value-separator value="" /> - <file-name value="" /> - <file-location value="" /> - <scope value="GLOBAL" /> - <destination value="FILE" /> - <processor value="EXCEL" /> - </export-instructions> - </component> - <component name="DBNavigator.Project.DatabaseBrowserManager"> - <autoscroll-to-editor value="false" /> - <autoscroll-from-editor value="true" /> - <show-object-properties value="true" /> - </component> - <component name="DBNavigator.Project.MethodExecutionManager"> - <group-history-entries value="false" /> - <method-browser /> - <execution-inputs /> - </component> - <component name="DBNavigator.Project.Settings"> - <browser-settings> - <general> - <display-mode value="SIMPLE" /> - <navigation-history-size value="100" /> - <show-object-details value="false" /> - </general> - <filters> - <visible-objects> - <object-type name="SCHEMA" enabled="true" /> - <object-type name="USER" enabled="true" /> - <object-type name="ROLE" enabled="true" /> - <object-type name="PRIVILEGE" enabled="true" /> - <object-type name="CHARSET" enabled="true" /> - <object-type name="TABLE" enabled="true" /> - <object-type name="VIEW" enabled="true" /> - <object-type name="MATERIALIZED VIEW" enabled="true" /> - <object-type name="NESTED TABLE" enabled="true" /> - <object-type name="COLUMN" enabled="true" /> - <object-type name="INDEX" enabled="true" /> - <object-type name="CONSTRAINT" enabled="true" /> - <object-type name="TRIGGER" enabled="true" /> - <object-type name="SYNONYM" enabled="true" /> - <object-type name="SEQUENCE" enabled="true" /> - <object-type name="PROCEDURE" enabled="true" /> - <object-type name="FUNCTION" enabled="true" /> - <object-type name="PACKAGE" enabled="true" /> - <object-type name="TYPE" enabled="true" /> - <object-type name="TYPE ATTRIBUTE" enabled="true" /> - <object-type name="ARGUMENT" enabled="true" /> - <object-type name="DIMENSION" enabled="true" /> - <object-type name="CLUSTER" enabled="true" /> - <object-type name="DBLINK" enabled="true" /> - </visible-objects> - </filters> - </browser-settings> - <navigation-settings> - <lookup-filters> - <lookup-objects> - <object-type name="SCHEMA" enabled="true" /> - <object-type name="USER" enabled="false" /> - <object-type name="ROLE" enabled="false" /> - <object-type name="PRIVILEGE" enabled="false" /> - <object-type name="CHARSET" enabled="false" /> - <object-type name="TABLE" enabled="true" /> - <object-type name="VIEW" enabled="true" /> - <object-type name="MATERIALIZED VIEW" enabled="true" /> - <object-type name="NESTED TABLE" enabled="false" /> - <object-type name="COLUMN" enabled="false" /> - <object-type name="INDEX" enabled="true" /> - <object-type name="CONSTRAINT" enabled="true" /> - <object-type name="TRIGGER" enabled="true" /> - <object-type name="SYNONYM" enabled="false" /> - <object-type name="SEQUENCE" enabled="true" /> - <object-type name="PROCEDURE" enabled="true" /> - <object-type name="FUNCTION" enabled="true" /> - <object-type name="PACKAGE" enabled="true" /> - <object-type name="TYPE" enabled="true" /> - <object-type name="TYPE ATTRIBUTE" enabled="false" /> - <object-type name="ARGUMENT" enabled="false" /> - <object-type name="DIMENSION" enabled="false" /> - <object-type name="CLUSTER" enabled="false" /> - <object-type name="DBLINK" enabled="true" /> - </lookup-objects> - <force-database-load value="false" /> - <prompt-connection-selection value="true" /> - </lookup-filters> - </navigation-settings> - <dataset-editor-settings> - <autopopup-text-editor active="true" active-if-empty="false" data-length-threshold="100" delay="1000" /> - <values-list-popup> - <active-for-primary-keys value="false" /> - <threshold-upper-limit value="1000" /> - </values-list-popup> - <general> - <fetch-block-size value="100" /> - <fetch-timeout value="20" /> - <trim-whitespaces value="true" /> - <convert-empty-strings-to-null value="true" /> - <select-content-on-cell-edit value="true" /> - </general> - <filters> - <prompt-filter-dialog value="true" /> - <default-filter-type value="BASIC" /> - </filters> - <lob-content-types text-length-threshold="300"> - <content-type name="Text" enabled="true" /> - <content-type name="XML" enabled="true" /> - <content-type name="DTD" enabled="true" /> - <content-type name="HTML" enabled="true" /> - <content-type name="XHTML" enabled="true" /> - <content-type name="CSS" enabled="true" /> - <content-type name="SQL" enabled="true" /> - <content-type name="PL/SQL" enabled="true" /> - <content-type name="JavaScript" enabled="true" /> - <content-type name="PHP" enabled="true" /> - <content-type name="ASP" enabled="true" /> - <content-type name="YAML" enabled="true" /> - </lob-content-types> - </dataset-editor-settings> - <code-completion-settings> - <filters> - <basic-filter> - <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> - <filter-element type="RESERVED_WORD" id="function" selected="false" /> - <filter-element type="RESERVED_WORD" id="parameter" selected="false" /> - <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> - <filter-element type="OBJECT" id="schema" selected="true" /> - <filter-element type="OBJECT" id="user" selected="true" /> - <user-schema> - <filter-element type="OBJECT" id="table" selected="true" /> - <filter-element type="OBJECT" id="view" selected="true" /> - <filter-element type="OBJECT" id="materialized view" selected="true" /> - <filter-element type="OBJECT" id="index" selected="true" /> - <filter-element type="OBJECT" id="constraint" selected="true" /> - <filter-element type="OBJECT" id="trigger" selected="true" /> - <filter-element type="OBJECT" id="synonym" selected="false" /> - <filter-element type="OBJECT" id="sequence" selected="true" /> - <filter-element type="OBJECT" id="procedure" selected="true" /> - <filter-element type="OBJECT" id="function" selected="true" /> - <filter-element type="OBJECT" id="package" selected="true" /> - <filter-element type="OBJECT" id="type" selected="true" /> - <filter-element type="OBJECT" id="dimension" selected="true" /> - <filter-element type="OBJECT" id="cluster" selected="true" /> - <filter-element type="OBJECT" id="dblink" selected="true" /> - </user-schema> - <public-schema> - <filter-element type="OBJECT" id="table" selected="false" /> - <filter-element type="OBJECT" id="view" selected="false" /> - <filter-element type="OBJECT" id="materialized view" selected="false" /> - <filter-element type="OBJECT" id="index" selected="false" /> - <filter-element type="OBJECT" id="constraint" selected="false" /> - <filter-element type="OBJECT" id="trigger" selected="false" /> - <filter-element type="OBJECT" id="synonym" selected="false" /> - <filter-element type="OBJECT" id="sequence" selected="false" /> - <filter-element type="OBJECT" id="procedure" selected="false" /> - <filter-element type="OBJECT" id="function" selected="false" /> - <filter-element type="OBJECT" id="package" selected="false" /> - <filter-element type="OBJECT" id="type" selected="false" /> - <filter-element type="OBJECT" id="dimension" selected="false" /> - <filter-element type="OBJECT" id="cluster" selected="false" /> - <filter-element type="OBJECT" id="dblink" selected="false" /> - </public-schema> - <any-schema> - <filter-element type="OBJECT" id="table" selected="true" /> - <filter-element type="OBJECT" id="view" selected="true" /> - <filter-element type="OBJECT" id="materialized view" selected="true" /> - <filter-element type="OBJECT" id="index" selected="true" /> - <filter-element type="OBJECT" id="constraint" selected="true" /> - <filter-element type="OBJECT" id="trigger" selected="true" /> - <filter-element type="OBJECT" id="synonym" selected="true" /> - <filter-element type="OBJECT" id="sequence" selected="true" /> - <filter-element type="OBJECT" id="procedure" selected="true" /> - <filter-element type="OBJECT" id="function" selected="true" /> - <filter-element type="OBJECT" id="package" selected="true" /> - <filter-element type="OBJECT" id="type" selected="true" /> - <filter-element type="OBJECT" id="dimension" selected="true" /> - <filter-element type="OBJECT" id="cluster" selected="true" /> - <filter-element type="OBJECT" id="dblink" selected="true" /> - </any-schema> - </basic-filter> - <smart-filter> - <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> - <filter-element type="RESERVED_WORD" id="function" selected="true" /> - <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> - <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> - <filter-element type="OBJECT" id="schema" selected="true" /> - <filter-element type="OBJECT" id="user" selected="true" /> - <user-schema> - <filter-element type="OBJECT" id="table" selected="true" /> - <filter-element type="OBJECT" id="view" selected="true" /> - <filter-element type="OBJECT" id="materialized view" selected="true" /> - <filter-element type="OBJECT" id="index" selected="true" /> - <filter-element type="OBJECT" id="constraint" selected="true" /> - <filter-element type="OBJECT" id="trigger" selected="true" /> - <filter-element type="OBJECT" id="synonym" selected="true" /> - <filter-element type="OBJECT" id="sequence" selected="true" /> - <filter-element type="OBJECT" id="procedure" selected="true" /> - <filter-element type="OBJECT" id="function" selected="true" /> - <filter-element type="OBJECT" id="package" selected="true" /> - <filter-element type="OBJECT" id="type" selected="true" /> - <filter-element type="OBJECT" id="dimension" selected="true" /> - <filter-element type="OBJECT" id="cluster" selected="true" /> - <filter-element type="OBJECT" id="dblink" selected="true" /> - </user-schema> - <public-schema> - <filter-element type="OBJECT" id="table" selected="true" /> - <filter-element type="OBJECT" id="view" selected="true" /> - <filter-element type="OBJECT" id="materialized view" selected="true" /> - <filter-element type="OBJECT" id="index" selected="true" /> - <filter-element type="OBJECT" id="constraint" selected="true" /> - <filter-element type="OBJECT" id="trigger" selected="true" /> - <filter-element type="OBJECT" id="synonym" selected="true" /> - <filter-element type="OBJECT" id="sequence" selected="true" /> - <filter-element type="OBJECT" id="procedure" selected="true" /> - <filter-element type="OBJECT" id="function" selected="true" /> - <filter-element type="OBJECT" id="package" selected="true" /> - <filter-element type="OBJECT" id="type" selected="true" /> - <filter-element type="OBJECT" id="dimension" selected="true" /> - <filter-element type="OBJECT" id="cluster" selected="true" /> - <filter-element type="OBJECT" id="dblink" selected="true" /> - </public-schema> - <any-schema> - <filter-element type="OBJECT" id="table" selected="true" /> - <filter-element type="OBJECT" id="view" selected="true" /> - <filter-element type="OBJECT" id="materialized view" selected="true" /> - <filter-element type="OBJECT" id="index" selected="true" /> - <filter-element type="OBJECT" id="constraint" selected="true" /> - <filter-element type="OBJECT" id="trigger" selected="true" /> - <filter-element type="OBJECT" id="synonym" selected="true" /> - <filter-element type="OBJECT" id="sequence" selected="true" /> - <filter-element type="OBJECT" id="procedure" selected="true" /> - <filter-element type="OBJECT" id="function" selected="true" /> - <filter-element type="OBJECT" id="package" selected="true" /> - <filter-element type="OBJECT" id="type" selected="true" /> - <filter-element type="OBJECT" id="dimension" selected="true" /> - <filter-element type="OBJECT" id="cluster" selected="true" /> - <filter-element type="OBJECT" id="dblink" selected="true" /> - </any-schema> - </smart-filter> - </filters> - <sorting enabled="true"> - <sorting-element type="RESERVED_WORD" id="keyword" /> - <sorting-element type="RESERVED_WORD" id="datatype" /> - <sorting-element type="OBJECT" id="column" /> - <sorting-element type="OBJECT" id="table" /> - <sorting-element type="OBJECT" id="view" /> - <sorting-element type="OBJECT" id="materialized view" /> - <sorting-element type="OBJECT" id="index" /> - <sorting-element type="OBJECT" id="constraint" /> - <sorting-element type="OBJECT" id="trigger" /> - <sorting-element type="OBJECT" id="synonym" /> - <sorting-element type="OBJECT" id="sequence" /> - <sorting-element type="OBJECT" id="procedure" /> - <sorting-element type="OBJECT" id="function" /> - <sorting-element type="OBJECT" id="package" /> - <sorting-element type="OBJECT" id="type" /> - <sorting-element type="OBJECT" id="dimension" /> - <sorting-element type="OBJECT" id="cluster" /> - <sorting-element type="OBJECT" id="dblink" /> - <sorting-element type="OBJECT" id="schema" /> - <sorting-element type="RESERVED_WORD" id="function" /> - <sorting-element type="RESERVED_WORD" id="parameter" /> - </sorting> - </code-completion-settings> - <execution-engine-settings> - <statement-execution> - <fetch-block-size value="100" /> - <execution-timeout value="20" /> - </statement-execution> - <compiler> - <compile-type value="KEEP" /> - <always-show-controls value="false" /> - </compiler> - </execution-engine-settings> - <ddl-file-settings> - <extensions> - <mapping file-type-id="VIEW" extensions="vw" /> - <mapping file-type-id="TRIGGER" extensions="trg" /> - <mapping file-type-id="PROCEDURE" extensions="prc" /> - <mapping file-type-id="FUNCTION" extensions="fnc" /> - <mapping file-type-id="PACKAGE" extensions="pkg" /> - <mapping file-type-id="PACKAGE_SPEC" extensions="pks" /> - <mapping file-type-id="PACKAGE_BODY" extensions="pkb" /> - <mapping file-type-id="TYPE" extensions="tpe" /> - <mapping file-type-id="TYPE_SPEC" extensions="tps" /> - <mapping file-type-id="TYPE_BODY" extensions="tpb" /> - </extensions> - <general> - <statement-postfix value="/" /> - <lookup-ddl-files value="true" /> - <create-ddl-files value="false" /> - </general> - </ddl-file-settings> - <general-settings> - <regional-settings> - <date-format value="MEDIUM" /> - <number-format value="UNGROUPED" /> - <locale value="SYSTEM_DEFAULT" /> - </regional-settings> - </general-settings> - </component> - <component name="DependencyValidationManager"> - <option name="SKIP_IMPORT_STATEMENTS" value="false" /> - </component> - <component name="JavadocGenerationManager"> - <option name="OUTPUT_DIRECTORY" /> - <option name="OPTION_SCOPE" value="protected" /> - <option name="OPTION_HIERARCHY" value="true" /> - <option name="OPTION_NAVIGATOR" value="true" /> - <option name="OPTION_INDEX" value="true" /> - <option name="OPTION_SEPARATE_INDEX" value="true" /> - <option name="OPTION_DOCUMENT_TAG_USE" value="false" /> - <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" /> - <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" /> - <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" /> - <option name="OPTION_DEPRECATED_LIST" value="true" /> - <option name="OTHER_OPTIONS" value="" /> - <option name="HEAP_SIZE" /> - <option name="LOCALE" /> - <option name="OPEN_IN_BROWSER" value="true" /> - </component> - <component name="ProjectResources"> - <default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype> - </component> - <component name="ProjectRootManager" version="2" /> -</project> - diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/modules.xml b/civicrm/vendor/electrolinux/phpquery/.idea/modules.xml deleted file mode 100644 index 905e8f1400a8f721bca7f9c6ffadc5ff1a4a16bb..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/phpquery-git.iml" filepath="$PROJECT_DIR$/.idea/phpquery-git.iml" /> - </modules> - </component> -</project> - diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/php.xml b/civicrm/vendor/electrolinux/phpquery/.idea/php.xml deleted file mode 100644 index a65db31b37d61c7f99333dc16e547fe5d7b6344e..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/php.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="PhpProjectConfiguration"> - <sdk> - <PhpSdkConfig version="5.2.13" home="/Applications/MAMP/bin/php5/bin"> - <include_paths> - <path value="." /> - <path value="/Applications/MAMP/bin/php5.2/lib/php" /> - <path value="/Applications/MAMP/bin/php5/lib/php" /> - <path value="$USER_HOME$/Sources/php" /> - </include_paths> - </PhpSdkConfig> - </sdk> - </component> -</project> - diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/phpquery-git.iml b/civicrm/vendor/electrolinux/phpquery/.idea/phpquery-git.iml deleted file mode 100644 index 05617026f934c5c6babf7eecaf48edfbb64a76dd..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/phpquery-git.iml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="WEB_MODULE" version="4"> - <component name="DBNavigator.Module.ConnectionManager"> - <connections /> - </component> - <component name="NewModuleRootManager"> - <content url="file://$MODULE_DIR$" /> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="module-library"> - <library name="PHP 5.2.13"> - <CLASSES> - <root url="file://$USER_HOME$/Sources/php" /> - <root url="file:///Applications/MAMP/bin/php5/lib/php" /> - <root url="file:///Applications/MAMP/bin/php5.2/lib/php" /> - </CLASSES> - <SOURCES /> - </library> - </orderEntry> - </component> -</module> - diff --git a/civicrm/vendor/electrolinux/phpquery/.idea/vcs.xml b/civicrm/vendor/electrolinux/phpquery/.idea/vcs.xml deleted file mode 100644 index c80f2198b5f6863fd489ec8ac6c40a50ac1f7b30..0000000000000000000000000000000000000000 --- a/civicrm/vendor/electrolinux/phpquery/.idea/vcs.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="$PROJECT_DIR$" vcs="Git" /> - </component> -</project> - diff --git a/civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md b/civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..b265cbcd1afdd1710371ebe9f756b929b2039fdd --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -0,0 +1,1264 @@ +# CHANGELOG + +## 6.3.0 - 2017-06-22 + +* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659) +* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621) +* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580) +* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609) +* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641) +* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611) +* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811) +* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642) +* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569) +* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711) +* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745) +* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721) +* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318) +* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684) +* Improvement: Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827) + + ++ Minor code cleanups, documentation fixes and clarifications. + +## 6.2.3 - 2017-02-28 + +* Fix deprecations with guzzle/psr7 version 1.4 + +## 6.2.2 - 2016-10-08 + +* Allow to pass nullable Response to delay callable +* Only add scheme when host is present +* Fix drain case where content-length is the literal string zero +* Obfuscate in-URL credentials in exceptions + +## 6.2.1 - 2016-07-18 + +* Address HTTP_PROXY security vulnerability, CVE-2016-5385: + https://httpoxy.org/ +* Fixing timeout bug with StreamHandler: + https://github.com/guzzle/guzzle/pull/1488 +* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when + a server does not honor `Connection: close`. +* Ignore URI fragment when sending requests. + +## 6.2.0 - 2016-03-21 + +* Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`. + https://github.com/guzzle/guzzle/pull/1389 +* Bug fix: Fix sleep calculation when waiting for delayed requests. + https://github.com/guzzle/guzzle/pull/1324 +* Feature: More flexible history containers. + https://github.com/guzzle/guzzle/pull/1373 +* Bug fix: defer sink stream opening in StreamHandler. + https://github.com/guzzle/guzzle/pull/1377 +* Bug fix: do not attempt to escape cookie values. + https://github.com/guzzle/guzzle/pull/1406 +* Feature: report original content encoding and length on decoded responses. + https://github.com/guzzle/guzzle/pull/1409 +* Bug fix: rewind seekable request bodies before dispatching to cURL. + https://github.com/guzzle/guzzle/pull/1422 +* Bug fix: provide an empty string to `http_build_query` for HHVM workaround. + https://github.com/guzzle/guzzle/pull/1367 + +## 6.1.1 - 2015-11-22 + +* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler + https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4 +* Feature: HandlerStack is now more generic. + https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e +* Bug fix: setting verify to false in the StreamHandler now disables peer + verification. https://github.com/guzzle/guzzle/issues/1256 +* Feature: Middleware now uses an exception factory, including more error + context. https://github.com/guzzle/guzzle/pull/1282 +* Feature: better support for disabled functions. + https://github.com/guzzle/guzzle/pull/1287 +* Bug fix: fixed regression where MockHandler was not using `sink`. + https://github.com/guzzle/guzzle/pull/1292 + +## 6.1.0 - 2015-09-08 + +* Feature: Added the `on_stats` request option to provide access to transfer + statistics for requests. https://github.com/guzzle/guzzle/pull/1202 +* Feature: Added the ability to persist session cookies in CookieJars. + https://github.com/guzzle/guzzle/pull/1195 +* Feature: Some compatibility updates for Google APP Engine + https://github.com/guzzle/guzzle/pull/1216 +* Feature: Added support for NO_PROXY to prevent the use of a proxy based on + a simple set of rules. https://github.com/guzzle/guzzle/pull/1197 +* Feature: Cookies can now contain square brackets. + https://github.com/guzzle/guzzle/pull/1237 +* Bug fix: Now correctly parsing `=` inside of quotes in Cookies. + https://github.com/guzzle/guzzle/pull/1232 +* Bug fix: Cusotm cURL options now correctly override curl options of the + same name. https://github.com/guzzle/guzzle/pull/1221 +* Bug fix: Content-Type header is now added when using an explicitly provided + multipart body. https://github.com/guzzle/guzzle/pull/1218 +* Bug fix: Now ignoring Set-Cookie headers that have no name. +* Bug fix: Reason phrase is no longer cast to an int in some cases in the + cURL handler. https://github.com/guzzle/guzzle/pull/1187 +* Bug fix: Remove the Authorization header when redirecting if the Host + header changes. https://github.com/guzzle/guzzle/pull/1207 +* Bug fix: Cookie path matching fixes + https://github.com/guzzle/guzzle/issues/1129 +* Bug fix: Fixing the cURL `body_as_string` setting + https://github.com/guzzle/guzzle/pull/1201 +* Bug fix: quotes are no longer stripped when parsing cookies. + https://github.com/guzzle/guzzle/issues/1172 +* Bug fix: `form_params` and `query` now always uses the `&` separator. + https://github.com/guzzle/guzzle/pull/1163 +* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set. + https://github.com/guzzle/guzzle/pull/1189 + +## 6.0.2 - 2015-07-04 + +* Fixed a memory leak in the curl handlers in which references to callbacks + were not being removed by `curl_reset`. +* Cookies are now extracted properly before redirects. +* Cookies now allow more character ranges. +* Decoded Content-Encoding responses are now modified to correctly reflect + their state if the encoding was automatically removed by a handler. This + means that the `Content-Encoding` header may be removed an the + `Content-Length` modified to reflect the message size after removing the + encoding. +* Added a more explicit error message when trying to use `form_params` and + `multipart` in the same request. +* Several fixes for HHVM support. +* Functions are now conditionally required using an additional level of + indirection to help with global Composer installations. + +## 6.0.1 - 2015-05-27 + +* Fixed a bug with serializing the `query` request option where the `&` + separator was missing. +* Added a better error message for when `body` is provided as an array. Please + use `form_params` or `multipart` instead. +* Various doc fixes. + +## 6.0.0 - 2015-05-26 + +* See the UPGRADING.md document for more information. +* Added `multipart` and `form_params` request options. +* Added `synchronous` request option. +* Added the `on_headers` request option. +* Fixed `expect` handling. +* No longer adding default middlewares in the client ctor. These need to be + present on the provided handler in order to work. +* Requests are no longer initiated when sending async requests with the + CurlMultiHandler. This prevents unexpected recursion from requests completing + while ticking the cURL loop. +* Removed the semantics of setting `default` to `true`. This is no longer + required now that the cURL loop is not ticked for async requests. +* Added request and response logging middleware. +* No longer allowing self signed certificates when using the StreamHandler. +* Ensuring that `sink` is valid if saving to a file. +* Request exceptions now include a "handler context" which provides handler + specific contextual information. +* Added `GuzzleHttp\RequestOptions` to allow request options to be applied + using constants. +* `$maxHandles` has been removed from CurlMultiHandler. +* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package. + +## 5.3.0 - 2015-05-19 + +* Mock now supports `save_to` +* Marked `AbstractRequestEvent::getTransaction()` as public. +* Fixed a bug in which multiple headers using different casing would overwrite + previous headers in the associative array. +* Added `Utils::getDefaultHandler()` +* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated. +* URL scheme is now always lowercased. + +## 6.0.0-beta.1 + +* Requires PHP >= 5.5 +* Updated to use PSR-7 + * Requires immutable messages, which basically means an event based system + owned by a request instance is no longer possible. + * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7). + * Removed the dependency on `guzzlehttp/streams`. These stream abstractions + are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7` + namespace. +* Added middleware and handler system + * Replaced the Guzzle event and subscriber system with a middleware system. + * No longer depends on RingPHP, but rather places the HTTP handlers directly + in Guzzle, operating on PSR-7 messages. + * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which + means the `guzzlehttp/retry-subscriber` is now obsolete. + * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`. +* Asynchronous responses + * No longer supports the `future` request option to send an async request. + Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`, + `getAsync`, etc.). + * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid + recursion required by chaining and forwarding react promises. See + https://github.com/guzzle/promises + * Added `requestAsync` and `sendAsync` to send request asynchronously. + * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests + asynchronously. +* Request options + * POST and form updates + * Added the `form_fields` and `form_files` request options. + * Removed the `GuzzleHttp\Post` namespace. + * The `body` request option no longer accepts an array for POST requests. + * The `exceptions` request option has been deprecated in favor of the + `http_errors` request options. + * The `save_to` request option has been deprecated in favor of `sink` request + option. +* Clients no longer accept an array of URI template string and variables for + URI variables. You will need to expand URI templates before passing them + into a client constructor or request method. +* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are + now magic methods that will send synchronous requests. +* Replaced `Utils.php` with plain functions in `functions.php`. +* Removed `GuzzleHttp\Collection`. +* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as + an array. +* Removed `GuzzleHttp\Query`. Query string handling is now handled using an + associative array passed into the `query` request option. The query string + is serialized using PHP's `http_build_query`. If you need more control, you + can pass the query string in as a string. +* `GuzzleHttp\QueryParser` has been replaced with the + `GuzzleHttp\Psr7\parse_query`. + +## 5.2.0 - 2015-01-27 + +* Added `AppliesHeadersInterface` to make applying headers to a request based + on the body more generic and not specific to `PostBodyInterface`. +* Reduced the number of stack frames needed to send requests. +* Nested futures are now resolved in the client rather than the RequestFsm +* Finishing state transitions is now handled in the RequestFsm rather than the + RingBridge. +* Added a guard in the Pool class to not use recursion for request retries. + +## 5.1.0 - 2014-12-19 + +* Pool class no longer uses recursion when a request is intercepted. +* The size of a Pool can now be dynamically adjusted using a callback. + See https://github.com/guzzle/guzzle/pull/943. +* Setting a request option to `null` when creating a request with a client will + ensure that the option is not set. This allows you to overwrite default + request options on a per-request basis. + See https://github.com/guzzle/guzzle/pull/937. +* Added the ability to limit which protocols are allowed for redirects by + specifying a `protocols` array in the `allow_redirects` request option. +* Nested futures due to retries are now resolved when waiting for synchronous + responses. See https://github.com/guzzle/guzzle/pull/947. +* `"0"` is now an allowed URI path. See + https://github.com/guzzle/guzzle/pull/935. +* `Query` no longer typehints on the `$query` argument in the constructor, + allowing for strings and arrays. +* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle + specific exceptions if necessary. + +## 5.0.3 - 2014-11-03 + +This change updates query strings so that they are treated as un-encoded values +by default where the value represents an un-encoded value to send over the +wire. A Query object then encodes the value before sending over the wire. This +means that even value query string values (e.g., ":") are url encoded. This +makes the Query class match PHP's http_build_query function. However, if you +want to send requests over the wire using valid query string characters that do +not need to be encoded, then you can provide a string to Url::setQuery() and +pass true as the second argument to specify that the query string is a raw +string that should not be parsed or encoded (unless a call to getQuery() is +subsequently made, forcing the query-string to be converted into a Query +object). + +## 5.0.2 - 2014-10-30 + +* Added a trailing `\r\n` to multipart/form-data payloads. See + https://github.com/guzzle/guzzle/pull/871 +* Added a `GuzzleHttp\Pool::send()` convenience method to match the docs. +* Status codes are now returned as integers. See + https://github.com/guzzle/guzzle/issues/881 +* No longer overwriting an existing `application/x-www-form-urlencoded` header + when sending POST requests, allowing for customized headers. See + https://github.com/guzzle/guzzle/issues/877 +* Improved path URL serialization. + + * No longer double percent-encoding characters in the path or query string if + they are already encoded. + * Now properly encoding the supplied path to a URL object, instead of only + encoding ' ' and '?'. + * Note: This has been changed in 5.0.3 to now encode query string values by + default unless the `rawString` argument is provided when setting the query + string on a URL: Now allowing many more characters to be present in the + query string without being percent encoded. See http://tools.ietf.org/html/rfc3986#appendix-A + +## 5.0.1 - 2014-10-16 + +Bugfix release. + +* Fixed an issue where connection errors still returned response object in + error and end events event though the response is unusable. This has been + corrected so that a response is not returned in the `getResponse` method of + these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867 +* Fixed an issue where transfer statistics were not being populated in the + RingBridge. https://github.com/guzzle/guzzle/issues/866 + +## 5.0.0 - 2014-10-12 + +Adding support for non-blocking responses and some minor API cleanup. + +### New Features + +* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`. +* Added a public API for creating a default HTTP adapter. +* Updated the redirect plugin to be non-blocking so that redirects are sent + concurrently. Other plugins like this can now be updated to be non-blocking. +* Added a "progress" event so that you can get upload and download progress + events. +* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers + requests concurrently using a capped pool size as efficiently as possible. +* Added `hasListeners()` to EmitterInterface. +* Removed `GuzzleHttp\ClientInterface::sendAll` and marked + `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the + recommended way). + +### Breaking changes + +The breaking changes in this release are relatively minor. The biggest thing to +look out for is that request and response objects no longer implement fluent +interfaces. + +* Removed the fluent interfaces (i.e., `return $this`) from requests, + responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`, + `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and + `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of + why I did this: http://ocramius.github.io/blog/fluent-interfaces-are-evil/. + This also makes the Guzzle message interfaces compatible with the current + PSR-7 message proposal. +* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except + for the HTTP request functions from function.php, these functions are now + implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode` + moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to + `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to + `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be + `GuzzleHttp\Pool::batch`, which returns an `objectStorage`. Using functions.php + caused problems for many users: they aren't PSR-4 compliant, require an + explicit include, and needed an if-guard to ensure that the functions are not + declared multiple times. +* Rewrote adapter layer. + * Removing all classes from `GuzzleHttp\Adapter`, these are now + implemented as callables that are stored in `GuzzleHttp\Ring\Client`. + * Removed the concept of "parallel adapters". Sending requests serially or + concurrently is now handled using a single adapter. + * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The + Transaction object now exposes the request, response, and client as public + properties. The getters and setters have been removed. +* Removed the "headers" event. This event was only useful for changing the + body a response once the headers of the response were known. You can implement + a similar behavior in a number of ways. One example might be to use a + FnStream that has access to the transaction being sent. For example, when the + first byte is written, you could check if the response headers match your + expectations, and if so, change the actual stream body that is being + written to. +* Removed the `asArray` parameter from + `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header + value as an array, then use the newly added `getHeaderAsArray()` method of + `MessageInterface`. This change makes the Guzzle interfaces compatible with + the PSR-7 interfaces. +* `GuzzleHttp\Message\MessageFactory` no longer allows subclasses to add + custom request options using double-dispatch (this was an implementation + detail). Instead, you should now provide an associative array to the + constructor which is a mapping of the request option name mapping to a + function that applies the option value to a request. +* Removed the concept of "throwImmediately" from exceptions and error events. + This control mechanism was used to stop a transfer of concurrent requests + from completing. This can now be handled by throwing the exception or by + cancelling a pool of requests or each outstanding future request individually. +* Updated to "GuzzleHttp\Streams" 3.0. + * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a + `maxLen` parameter. This update makes the Guzzle streams project + compatible with the current PSR-7 proposal. + * `GuzzleHttp\Stream\Stream::__construct`, + `GuzzleHttp\Stream\Stream::factory`, and + `GuzzleHttp\Stream\Utils::create` no longer accept a size in the second + argument. They now accept an associative array of options, including the + "size" key and "metadata" key which can be used to provide custom metadata. + +## 4.2.2 - 2014-09-08 + +* Fixed a memory leak in the CurlAdapter when reusing cURL handles. +* No longer using `request_fulluri` in stream adapter proxies. +* Relative redirects are now based on the last response, not the first response. + +## 4.2.1 - 2014-08-19 + +* Ensuring that the StreamAdapter does not always add a Content-Type header +* Adding automated github releases with a phar and zip + +## 4.2.0 - 2014-08-17 + +* Now merging in default options using a case-insensitive comparison. + Closes https://github.com/guzzle/guzzle/issues/767 +* Added the ability to automatically decode `Content-Encoding` response bodies + using the `decode_content` request option. This is set to `true` by default + to decode the response body if it comes over the wire with a + `Content-Encoding`. Set this value to `false` to disable decoding the + response content, and pass a string to provide a request `Accept-Encoding` + header and turn on automatic response decoding. This feature now allows you + to pass an `Accept-Encoding` header in the headers of a request but still + disable automatic response decoding. + Closes https://github.com/guzzle/guzzle/issues/764 +* Added the ability to throw an exception immediately when transferring + requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760 +* Updating guzzlehttp/streams dependency to ~2.1 +* No longer utilizing the now deprecated namespaced methods from the stream + package. + +## 4.1.8 - 2014-08-14 + +* Fixed an issue in the CurlFactory that caused setting the `stream=false` + request option to throw an exception. + See: https://github.com/guzzle/guzzle/issues/769 +* TransactionIterator now calls rewind on the inner iterator. + See: https://github.com/guzzle/guzzle/pull/765 +* You can now set the `Content-Type` header to `multipart/form-data` + when creating POST requests to force multipart bodies. + See https://github.com/guzzle/guzzle/issues/768 + +## 4.1.7 - 2014-08-07 + +* Fixed an error in the HistoryPlugin that caused the same request and response + to be logged multiple times when an HTTP protocol error occurs. +* Ensuring that cURL does not add a default Content-Type when no Content-Type + has been supplied by the user. This prevents the adapter layer from modifying + the request that is sent over the wire after any listeners may have already + put the request in a desired state (e.g., signed the request). +* Throwing an exception when you attempt to send requests that have the + "stream" set to true in parallel using the MultiAdapter. +* Only calling curl_multi_select when there are active cURL handles. This was + previously changed and caused performance problems on some systems due to PHP + always selecting until the maximum select timeout. +* Fixed a bug where multipart/form-data POST fields were not correctly + aggregated (e.g., values with "&"). + +## 4.1.6 - 2014-08-03 + +* Added helper methods to make it easier to represent messages as strings, + including getting the start line and getting headers as a string. + +## 4.1.5 - 2014-08-02 + +* Automatically retrying cURL "Connection died, retrying a fresh connect" + errors when possible. +* cURL implementation cleanup +* Allowing multiple event subscriber listeners to be registered per event by + passing an array of arrays of listener configuration. + +## 4.1.4 - 2014-07-22 + +* Fixed a bug that caused multi-part POST requests with more than one field to + serialize incorrectly. +* Paths can now be set to "0" +* `ResponseInterface::xml` now accepts a `libxml_options` option and added a + missing default argument that was required when parsing XML response bodies. +* A `save_to` stream is now created lazily, which means that files are not + created on disk unless a request succeeds. + +## 4.1.3 - 2014-07-15 + +* Various fixes to multipart/form-data POST uploads +* Wrapping function.php in an if-statement to ensure Guzzle can be used + globally and in a Composer install +* Fixed an issue with generating and merging in events to an event array +* POST headers are only applied before sending a request to allow you to change + the query aggregator used before uploading +* Added much more robust query string parsing +* Fixed various parsing and normalization issues with URLs +* Fixing an issue where multi-valued headers were not being utilized correctly + in the StreamAdapter + +## 4.1.2 - 2014-06-18 + +* Added support for sending payloads with GET requests + +## 4.1.1 - 2014-06-08 + +* Fixed an issue related to using custom message factory options in subclasses +* Fixed an issue with nested form fields in a multi-part POST +* Fixed an issue with using the `json` request option for POST requests +* Added `ToArrayInterface` to `GuzzleHttp\Cookie\CookieJar` + +## 4.1.0 - 2014-05-27 + +* Added a `json` request option to easily serialize JSON payloads. +* Added a `GuzzleHttp\json_decode()` wrapper to safely parse JSON. +* Added `setPort()` and `getPort()` to `GuzzleHttp\Message\RequestInterface`. +* Added the ability to provide an emitter to a client in the client constructor. +* Added the ability to persist a cookie session using $_SESSION. +* Added a trait that can be used to add event listeners to an iterator. +* Removed request method constants from RequestInterface. +* Fixed warning when invalid request start-lines are received. +* Updated MessageFactory to work with custom request option methods. +* Updated cacert bundle to latest build. + +4.0.2 (2014-04-16) +------------------ + +* Proxy requests using the StreamAdapter now properly use request_fulluri (#632) +* Added the ability to set scalars as POST fields (#628) + +## 4.0.1 - 2014-04-04 + +* The HTTP status code of a response is now set as the exception code of + RequestException objects. +* 303 redirects will now correctly switch from POST to GET requests. +* The default parallel adapter of a client now correctly uses the MultiAdapter. +* HasDataTrait now initializes the internal data array as an empty array so + that the toArray() method always returns an array. + +## 4.0.0 - 2014-03-29 + +* For more information on the 4.0 transition, see: + http://mtdowling.com/blog/2014/03/15/guzzle-4-rc/ +* For information on changes and upgrading, see: + https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40 +* Added `GuzzleHttp\batch()` as a convenience function for sending requests in + parallel without needing to write asynchronous code. +* Restructured how events are added to `GuzzleHttp\ClientInterface::sendAll()`. + You can now pass a callable or an array of associative arrays where each + associative array contains the "fn", "priority", and "once" keys. + +## 4.0.0.rc-2 - 2014-03-25 + +* Removed `getConfig()` and `setConfig()` from clients to avoid confusion + around whether things like base_url, message_factory, etc. should be able to + be retrieved or modified. +* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface +* functions.php functions were renamed using snake_case to match PHP idioms +* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and + `GUZZLE_CURL_SELECT_TIMEOUT` environment variables +* Added the ability to specify custom `sendAll()` event priorities +* Added the ability to specify custom stream context options to the stream + adapter. +* Added a functions.php function for `get_path()` and `set_path()` +* CurlAdapter and MultiAdapter now use a callable to generate curl resources +* MockAdapter now properly reads a body and emits a `headers` event +* Updated Url class to check if a scheme and host are set before adding ":" + and "//". This allows empty Url (e.g., "") to be serialized as "". +* Parsing invalid XML no longer emits warnings +* Curl classes now properly throw AdapterExceptions +* Various performance optimizations +* Streams are created with the faster `Stream\create()` function +* Marked deprecation_proxy() as internal +* Test server is now a collection of static methods on a class + +## 4.0.0-rc.1 - 2014-03-15 + +* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40 + +## 3.8.1 - 2014-01-28 + +* Bug: Always using GET requests when redirecting from a 303 response +* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in + `Guzzle\Http\ClientInterface::setSslVerification()` +* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL +* Bug: The body of a request can now be set to `"0"` +* Sending PHP stream requests no longer forces `HTTP/1.0` +* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of + each sub-exception +* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than + clobbering everything). +* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators) +* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`. + For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`. +* Now properly escaping the regular expression delimiter when matching Cookie domains. +* Network access is now disabled when loading XML documents + +## 3.8.0 - 2013-12-05 + +* Added the ability to define a POST name for a file +* JSON response parsing now properly walks additionalProperties +* cURL error code 18 is now retried automatically in the BackoffPlugin +* Fixed a cURL error when URLs contain fragments +* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were + CurlExceptions +* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e) +* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS` +* Fixed a bug that was encountered when parsing empty header parameters +* UriTemplate now has a `setRegex()` method to match the docs +* The `debug` request parameter now checks if it is truthy rather than if it exists +* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin +* Added the ability to combine URLs using strict RFC 3986 compliance +* Command objects can now return the validation errors encountered by the command +* Various fixes to cache revalidation (#437 and 29797e5) +* Various fixes to the AsyncPlugin +* Cleaned up build scripts + +## 3.7.4 - 2013-10-02 + +* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430) +* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp + (see https://github.com/aws/aws-sdk-php/issues/147) +* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots +* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420) +* Updated the bundled cacert.pem (#419) +* OauthPlugin now supports adding authentication to headers or query string (#425) + +## 3.7.3 - 2013-09-08 + +* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and + `CommandTransferException`. +* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description +* Schemas are only injected into response models when explicitly configured. +* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of + an EntityBody. +* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator. +* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`. +* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody() +* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin +* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests +* Bug fix: Properly parsing headers that contain commas contained in quotes +* Bug fix: mimetype guessing based on a filename is now case-insensitive + +## 3.7.2 - 2013-08-02 + +* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander + See https://github.com/guzzle/guzzle/issues/371 +* Bug fix: Cookie domains are now matched correctly according to RFC 6265 + See https://github.com/guzzle/guzzle/issues/377 +* Bug fix: GET parameters are now used when calculating an OAuth signature +* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted +* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched +* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input. + See https://github.com/guzzle/guzzle/issues/379 +* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See + https://github.com/guzzle/guzzle/pull/380 +* cURL multi cleanup and optimizations + +## 3.7.1 - 2013-07-05 + +* Bug fix: Setting default options on a client now works +* Bug fix: Setting options on HEAD requests now works. See #352 +* Bug fix: Moving stream factory before send event to before building the stream. See #353 +* Bug fix: Cookies no longer match on IP addresses per RFC 6265 +* Bug fix: Correctly parsing header parameters that are in `<>` and quotes +* Added `cert` and `ssl_key` as request options +* `Host` header can now diverge from the host part of a URL if the header is set manually +* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter +* OAuth parameters are only added via the plugin if they aren't already set +* Exceptions are now thrown when a URL cannot be parsed +* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails +* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin + +## 3.7.0 - 2013-06-10 + +* See UPGRADING.md for more information on how to upgrade. +* Requests now support the ability to specify an array of $options when creating a request to more easily modify a + request. You can pass a 'request.options' configuration setting to a client to apply default request options to + every request created by a client (e.g. default query string variables, headers, curl options, etc.). +* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`. + See `Guzzle\Http\StaticClient::mount`. +* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests + created by a command (e.g. custom headers, query string variables, timeout settings, etc.). +* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the + headers of a response +* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key + (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`) +* ServiceBuilders now support storing and retrieving arbitrary data +* CachePlugin can now purge all resources for a given URI +* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource +* CachePlugin now uses the Vary header to determine if a resource is a cache hit +* `Guzzle\Http\Message\Response` now implements `\Serializable` +* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters +* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable +* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()` +* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size +* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message +* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older + Symfony users can still use the old version of Monolog. +* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`. + Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`. +* Several performance improvements to `Guzzle\Common\Collection` +* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`: + createRequest, head, delete, put, patch, post, options, prepareRequest +* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()` +* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface` +* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to + `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a + resource, string, or EntityBody into the $options parameter to specify the download location of the response. +* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a + default `array()` +* Added `Guzzle\Stream\StreamInterface::isRepeatable` +* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use + $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or + $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`. +* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`. +* Removed `Guzzle\Http\ClientInterface::expandTemplate()` +* Removed `Guzzle\Http\ClientInterface::setRequestFactory()` +* Removed `Guzzle\Http\ClientInterface::getCurlMulti()` +* Removed `Guzzle\Http\Message\RequestInterface::canCache` +* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect` +* Removed `Guzzle\Http\Message\RequestInterface::isRedirect` +* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods. +* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting + `Guzzle\Common\Version::$emitWarnings` to true. +* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use + `$request->getResponseBody()->isRepeatable()` instead. +* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use + `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. +* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use + `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. +* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead. +* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead. +* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated +* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. + These will work through Guzzle 4.0 +* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params]. +* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client. +* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`. +* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. +* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8. +* Marked `Guzzle\Common\Collection::inject()` as deprecated. +* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');` +* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a + CacheStorageInterface. These two objects and interface will be removed in a future version. +* Always setting X-cache headers on cached responses +* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin +* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface + $request, Response $response);` +* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);` +* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);` +* Added `CacheStorageInterface::purge($url)` +* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin + $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache, + CanCacheStrategyInterface $canCache = null)` +* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)` + +## 3.6.0 - 2013-05-29 + +* ServiceDescription now implements ToArrayInterface +* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters +* Guzzle can now correctly parse incomplete URLs +* Mixed casing of headers are now forced to be a single consistent casing across all values for that header. +* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution +* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader(). +* Specific header implementations can be created for complex headers. When a message creates a header, it uses a + HeaderFactory which can map specific headers to specific header classes. There is now a Link header and + CacheControl header implementation. +* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate +* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti() +* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in + Guzzle\Http\Curl\RequestMediator +* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string. +* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface +* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders() +* Removed Guzzle\Parser\ParserRegister::get(). Use getParser() +* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser(). +* All response header helper functions return a string rather than mixing Header objects and strings inconsistently +* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle + directly via interfaces +* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist + but are a no-op until removed. +* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a + `Guzzle\Service\Command\ArrayCommandInterface`. +* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response + on a request while the request is still being transferred +* The ability to case-insensitively search for header values +* Guzzle\Http\Message\Header::hasExactHeader +* Guzzle\Http\Message\Header::raw. Use getAll() +* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object + instead. +* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess +* Added the ability to cast Model objects to a string to view debug information. + +## 3.5.0 - 2013-05-13 + +* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times +* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove + itself from the EventDispatcher) +* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values +* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too +* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a + non-existent key +* Bug: All __call() method arguments are now required (helps with mocking frameworks) +* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference + to help with refcount based garbage collection of resources created by sending a request +* Deprecating ZF1 cache and log adapters. These will be removed in the next major version. +* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the + HistoryPlugin for a history. +* Added a `responseBody` alias for the `response_body` location +* Refactored internals to no longer rely on Response::getRequest() +* HistoryPlugin can now be cast to a string +* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests + and responses that are sent over the wire +* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects + +## 3.4.3 - 2013-04-30 + +* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response +* Added a check to re-extract the temp cacert bundle from the phar before sending each request + +## 3.4.2 - 2013-04-29 + +* Bug fix: Stream objects now work correctly with "a" and "a+" modes +* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present +* Bug fix: AsyncPlugin no longer forces HEAD requests +* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter +* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails +* Setting a response on a request will write to the custom request body from the response body if one is specified +* LogPlugin now writes to php://output when STDERR is undefined +* Added the ability to set multiple POST files for the same key in a single call +* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default +* Added the ability to queue CurlExceptions to the MockPlugin +* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send) +* Configuration loading now allows remote files + +## 3.4.1 - 2013-04-16 + +* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti + handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost. +* Exceptions are now properly grouped when sending requests in parallel +* Redirects are now properly aggregated when a multi transaction fails +* Redirects now set the response on the original object even in the event of a failure +* Bug fix: Model names are now properly set even when using $refs +* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax +* Added support for oauth_callback in OAuth signatures +* Added support for oauth_verifier in OAuth signatures +* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection + +## 3.4.0 - 2013-04-11 + +* Bug fix: URLs are now resolved correctly based on http://tools.ietf.org/html/rfc3986#section-5.2. #289 +* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289 +* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263 +* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264. +* Bug fix: Added `number` type to service descriptions. +* Bug fix: empty parameters are removed from an OAuth signature +* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header +* Bug fix: Fixed "array to string" error when validating a union of types in a service description +* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream +* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin. +* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs. +* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections. +* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if + the Content-Type can be determined based on the entity body or the path of the request. +* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder. +* Added support for a PSR-3 LogAdapter. +* Added a `command.after_prepare` event +* Added `oauth_callback` parameter to the OauthPlugin +* Added the ability to create a custom stream class when using a stream factory +* Added a CachingEntityBody decorator +* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized. +* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar. +* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies +* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This + means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use + POST fields or files (the latter is only used when emulating a form POST in the browser). +* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest + +## 3.3.1 - 2013-03-10 + +* Added the ability to create PHP streaming responses from HTTP requests +* Bug fix: Running any filters when parsing response headers with service descriptions +* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing +* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across + response location visitors. +* Bug fix: Removed the possibility of creating configuration files with circular dependencies +* RequestFactory::create() now uses the key of a POST file when setting the POST file name +* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set + +## 3.3.0 - 2013-03-03 + +* A large number of performance optimizations have been made +* Bug fix: Added 'wb' as a valid write mode for streams +* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned +* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()` +* BC: Removed `Guzzle\Http\Utils` class +* BC: Setting a service description on a client will no longer modify the client's command factories. +* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using + the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io' +* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to + lowercase +* Operation parameter objects are now lazy loaded internally +* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses +* Added support for instantiating responseType=class responseClass classes. Classes must implement + `Guzzle\Service\Command\ResponseClassInterface` +* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These + additional properties also support locations and can be used to parse JSON responses where the outermost part of the + JSON is an array +* Added support for nested renaming of JSON models (rename sentAs to name) +* CachePlugin + * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error + * Debug headers can now added to cached response in the CachePlugin + +## 3.2.0 - 2013-02-14 + +* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients. +* URLs with no path no longer contain a "/" by default +* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url. +* BadResponseException no longer includes the full request and response message +* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface +* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface +* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription +* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list +* xmlEncoding can now be customized for the XML declaration of a XML service description operation +* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value + aggregation and no longer uses callbacks +* The URL encoding implementation of Guzzle\Http\QueryString can now be customized +* Bug fix: Filters were not always invoked for array service description parameters +* Bug fix: Redirects now use a target response body rather than a temporary response body +* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded +* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives + +## 3.1.2 - 2013-01-27 + +* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the + response body. For example, the XmlVisitor now parses the XML response into an array in the before() method. +* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent +* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444) +* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse() +* Setting default headers on a client after setting the user-agent will not erase the user-agent setting + +## 3.1.1 - 2013-01-20 + +* Adding wildcard support to Guzzle\Common\Collection::getPath() +* Adding alias support to ServiceBuilder configs +* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface + +## 3.1.0 - 2013-01-12 + +* BC: CurlException now extends from RequestException rather than BadResponseException +* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse() +* Added getData to ServiceDescriptionInterface +* Added context array to RequestInterface::setState() +* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http +* Bug: Adding required content-type when JSON request visitor adds JSON to a command +* Bug: Fixing the serialization of a service description with custom data +* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing + an array of successful and failed responses +* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection +* Added Guzzle\Http\IoEmittingEntityBody +* Moved command filtration from validators to location visitors +* Added `extends` attributes to service description parameters +* Added getModels to ServiceDescriptionInterface + +## 3.0.7 - 2012-12-19 + +* Fixing phar detection when forcing a cacert to system if null or true +* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()` +* Cleaning up `Guzzle\Common\Collection::inject` method +* Adding a response_body location to service descriptions + +## 3.0.6 - 2012-12-09 + +* CurlMulti performance improvements +* Adding setErrorResponses() to Operation +* composer.json tweaks + +## 3.0.5 - 2012-11-18 + +* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin +* Bug: Response body can now be a string containing "0" +* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert +* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs +* Added support for XML attributes in service description responses +* DefaultRequestSerializer now supports array URI parameter values for URI template expansion +* Added better mimetype guessing to requests and post files + +## 3.0.4 - 2012-11-11 + +* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value +* Bug: Cookies can now be added that have a name, domain, or value set to "0" +* Bug: Using the system cacert bundle when using the Phar +* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures +* Enhanced cookie jar de-duplication +* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added +* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies +* Added the ability to create any sort of hash for a stream rather than just an MD5 hash + +## 3.0.3 - 2012-11-04 + +* Implementing redirects in PHP rather than cURL +* Added PECL URI template extension and using as default parser if available +* Bug: Fixed Content-Length parsing of Response factory +* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams. +* Adding ToArrayInterface throughout library +* Fixing OauthPlugin to create unique nonce values per request + +## 3.0.2 - 2012-10-25 + +* Magic methods are enabled by default on clients +* Magic methods return the result of a command +* Service clients no longer require a base_url option in the factory +* Bug: Fixed an issue with URI templates where null template variables were being expanded + +## 3.0.1 - 2012-10-22 + +* Models can now be used like regular collection objects by calling filter, map, etc. +* Models no longer require a Parameter structure or initial data in the constructor +* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator` + +## 3.0.0 - 2012-10-15 + +* Rewrote service description format to be based on Swagger + * Now based on JSON schema + * Added nested input structures and nested response models + * Support for JSON and XML input and output models + * Renamed `commands` to `operations` + * Removed dot class notation + * Removed custom types +* Broke the project into smaller top-level namespaces to be more component friendly +* Removed support for XML configs and descriptions. Use arrays or JSON files. +* Removed the Validation component and Inspector +* Moved all cookie code to Guzzle\Plugin\Cookie +* Magic methods on a Guzzle\Service\Client now return the command un-executed. +* Calling getResult() or getResponse() on a command will lazily execute the command if needed. +* Now shipping with cURL's CA certs and using it by default +* Added previousResponse() method to response objects +* No longer sending Accept and Accept-Encoding headers on every request +* Only sending an Expect header by default when a payload is greater than 1MB +* Added/moved client options: + * curl.blacklist to curl.option.blacklist + * Added ssl.certificate_authority +* Added a Guzzle\Iterator component +* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin +* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin) +* Added a more robust caching plugin +* Added setBody to response objects +* Updating LogPlugin to use a more flexible MessageFormatter +* Added a completely revamped build process +* Cleaning up Collection class and removing default values from the get method +* Fixed ZF2 cache adapters + +## 2.8.8 - 2012-10-15 + +* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did + +## 2.8.7 - 2012-09-30 + +* Bug: Fixed config file aliases for JSON includes +* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests +* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload +* Bug: Hardening request and response parsing to account for missing parts +* Bug: Fixed PEAR packaging +* Bug: Fixed Request::getInfo +* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail +* Adding the ability for the namespace Iterator factory to look in multiple directories +* Added more getters/setters/removers from service descriptions +* Added the ability to remove POST fields from OAuth signatures +* OAuth plugin now supports 2-legged OAuth + +## 2.8.6 - 2012-09-05 + +* Added the ability to modify and build service descriptions +* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command +* Added a `json` parameter location +* Now allowing dot notation for classes in the CacheAdapterFactory +* Using the union of two arrays rather than an array_merge when extending service builder services and service params +* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references + in service builder config files. +* Services defined in two different config files that include one another will by default replace the previously + defined service, but you can now create services that extend themselves and merge their settings over the previous +* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like + '_default' with a default JSON configuration file. + +## 2.8.5 - 2012-08-29 + +* Bug: Suppressed empty arrays from URI templates +* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching +* Added support for HTTP responses that do not contain a reason phrase in the start-line +* AbstractCommand commands are now invokable +* Added a way to get the data used when signing an Oauth request before a request is sent + +## 2.8.4 - 2012-08-15 + +* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin +* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable. +* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream +* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream +* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5()) +* Added additional response status codes +* Removed SSL information from the default User-Agent header +* DELETE requests can now send an entity body +* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries +* Added the ability of the MockPlugin to consume mocked request bodies +* LogPlugin now exposes request and response objects in the extras array + +## 2.8.3 - 2012-07-30 + +* Bug: Fixed a case where empty POST requests were sent as GET requests +* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body +* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new +* Added multiple inheritance to service description commands +* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()` +* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything +* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles + +## 2.8.2 - 2012-07-24 + +* Bug: Query string values set to 0 are no longer dropped from the query string +* Bug: A Collection object is no longer created each time a call is made to `Guzzle\Service\Command\AbstractCommand::getRequestHeaders()` +* Bug: `+` is now treated as an encoded space when parsing query strings +* QueryString and Collection performance improvements +* Allowing dot notation for class paths in filters attribute of a service descriptions + +## 2.8.1 - 2012-07-16 + +* Loosening Event Dispatcher dependency +* POST redirects can now be customized using CURLOPT_POSTREDIR + +## 2.8.0 - 2012-07-15 + +* BC: Guzzle\Http\Query + * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl) + * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding() + * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool) + * Changed the aggregation functions of QueryString to be static methods + * Can now use fromString() with querystrings that have a leading ? +* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters +* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body +* Cookies are no longer URL decoded by default +* Bug: URI template variables set to null are no longer expanded + +## 2.7.2 - 2012-07-02 + +* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser. +* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty() +* CachePlugin now allows for a custom request parameter function to check if a request can be cached +* Bug fix: CachePlugin now only caches GET and HEAD requests by default +* Bug fix: Using header glue when transferring headers over the wire +* Allowing deeply nested arrays for composite variables in URI templates +* Batch divisors can now return iterators or arrays + +## 2.7.1 - 2012-06-26 + +* Minor patch to update version number in UA string +* Updating build process + +## 2.7.0 - 2012-06-25 + +* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes. +* BC: Removed magic setX methods from commands +* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method +* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable. +* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity) +* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace +* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin +* Added the ability to set POST fields and files in a service description +* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method +* Adding a command.before_prepare event to clients +* Added BatchClosureTransfer and BatchClosureDivisor +* BatchTransferException now includes references to the batch divisor and transfer strategies +* Fixed some tests so that they pass more reliably +* Added Guzzle\Common\Log\ArrayLogAdapter + +## 2.6.6 - 2012-06-10 + +* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin +* BC: Removing Guzzle\Service\Command\CommandSet +* Adding generic batching system (replaces the batch queue plugin and command set) +* Updating ZF cache and log adapters and now using ZF's composer repository +* Bug: Setting the name of each ApiParam when creating through an ApiCommand +* Adding result_type, result_doc, deprecated, and doc_url to service descriptions +* Bug: Changed the default cookie header casing back to 'Cookie' + +## 2.6.5 - 2012-06-03 + +* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource() +* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from +* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data +* BC: Renaming methods in the CookieJarInterface +* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations +* Making the default glue for HTTP headers ';' instead of ',' +* Adding a removeValue to Guzzle\Http\Message\Header +* Adding getCookies() to request interface. +* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber() + +## 2.6.4 - 2012-05-30 + +* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class. +* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand +* Bug: Fixing magic method command calls on clients +* Bug: Email constraint only validates strings +* Bug: Aggregate POST fields when POST files are present in curl handle +* Bug: Fixing default User-Agent header +* Bug: Only appending or prepending parameters in commands if they are specified +* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes +* Allowing the use of dot notation for class namespaces when using instance_of constraint +* Added any_match validation constraint +* Added an AsyncPlugin +* Passing request object to the calculateWait method of the ExponentialBackoffPlugin +* Allowing the result of a command object to be changed +* Parsing location and type sub values when instantiating a service description rather than over and over at runtime + +## 2.6.3 - 2012-05-23 + +* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options. +* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields. +* You can now use an array of data when creating PUT request bodies in the request factory. +* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable. +* [Http] Adding support for Content-Type in multipart POST uploads per upload +* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1]) +* Adding more POST data operations for easier manipulation of POST data. +* You can now set empty POST fields. +* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files. +* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate. +* CS updates + +## 2.6.2 - 2012-05-19 + +* [Http] Better handling of nested scope requests in CurlMulti. Requests are now always prepares in the send() method rather than the addRequest() method. + +## 2.6.1 - 2012-05-19 + +* [BC] Removing 'path' support in service descriptions. Use 'uri'. +* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache. +* [BC] Removing Guzzle\Common\NullObject. Use https://github.com/mtdowling/NullObject if you need it. +* [BC] Removing Guzzle\Common\XmlElement. +* All commands, both dynamic and concrete, have ApiCommand objects. +* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits. +* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored. +* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible. + +## 2.6.0 - 2012-05-15 + +* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder +* [BC] Executing a Command returns the result of the command rather than the command +* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed. +* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args. +* [BC] Moving ResourceIterator* to Guzzle\Service\Resource +* [BC] Completely refactored ResourceIterators to iterate over a cloned command object +* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate +* [BC] Guzzle\Guzzle is now deprecated +* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject +* Adding Guzzle\Version class to give version information about Guzzle +* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate() +* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data +* ServiceDescription and ServiceBuilder are now cacheable using similar configs +* Changing the format of XML and JSON service builder configs. Backwards compatible. +* Cleaned up Cookie parsing +* Trimming the default Guzzle User-Agent header +* Adding a setOnComplete() method to Commands that is called when a command completes +* Keeping track of requests that were mocked in the MockPlugin +* Fixed a caching bug in the CacheAdapterFactory +* Inspector objects can be injected into a Command object +* Refactoring a lot of code and tests to be case insensitive when dealing with headers +* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL +* Adding the ability to set global option overrides to service builder configs +* Adding the ability to include other service builder config files from within XML and JSON files +* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method. + +## 2.5.0 - 2012-05-08 + +* Major performance improvements +* [BC] Simplifying Guzzle\Common\Collection. Please check to see if you are using features that are now deprecated. +* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component. +* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates. Use "{}" +* Added the ability to passed parameters to all requests created by a client +* Added callback functionality to the ExponentialBackoffPlugin +* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies. +* Rewinding request stream bodies when retrying requests +* Exception is thrown when JSON response body cannot be decoded +* Added configurable magic method calls to clients and commands. This is off by default. +* Fixed a defect that added a hash to every parsed URL part +* Fixed duplicate none generation for OauthPlugin. +* Emitting an event each time a client is generated by a ServiceBuilder +* Using an ApiParams object instead of a Collection for parameters of an ApiCommand +* cache.* request parameters should be renamed to params.cache.* +* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle. +* Added the ability to disable type validation of service descriptions +* ServiceDescriptions and ServiceBuilders are now Serializable diff --git a/civicrm/vendor/guzzlehttp/guzzle/LICENSE b/civicrm/vendor/guzzlehttp/guzzle/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..ea7f07c54cdd915063011b69358fac8fa7773c0e --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011-2016 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/guzzlehttp/guzzle/README.md b/civicrm/vendor/guzzlehttp/guzzle/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2f614d6f3ae3806fb9de478638f94c3910ffbd7e --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/README.md @@ -0,0 +1,89 @@ +Guzzle, PHP HTTP client +======================= + +[](https://travis-ci.org/guzzle/guzzle) + +Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and +trivial to integrate with web services. + +- Simple interface for building query strings, POST requests, streaming large + uploads, streaming large downloads, using HTTP cookies, uploading JSON data, + etc... +- Can send both synchronous and asynchronous requests using the same interface. +- Uses PSR-7 interfaces for requests, responses, and streams. This allows you + to utilize other PSR-7 compatible libraries with Guzzle. +- Abstracts away the underlying HTTP transport, allowing you to write + environment and transport agnostic code; i.e., no hard dependency on cURL, + PHP streams, sockets, or non-blocking event loops. +- Middleware system allows you to augment and compose client behavior. + +```php +$client = new \GuzzleHttp\Client(); +$res = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); +echo $res->getStatusCode(); +// 200 +echo $res->getHeaderLine('content-type'); +// 'application/json; charset=utf8' +echo $res->getBody(); +// '{"id": 1420053, "name": "guzzle", ...}' + +// Send an asynchronous request. +$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org'); +$promise = $client->sendAsync($request)->then(function ($response) { + echo 'I completed! ' . $response->getBody(); +}); +$promise->wait(); +``` + +## Help and docs + +- [Documentation](http://guzzlephp.org/) +- [Stack Overflow](http://stackoverflow.com/questions/tagged/guzzle) +- [Gitter](https://gitter.im/guzzle/guzzle) + + +## Installing Guzzle + +The recommended way to install Guzzle is through +[Composer](http://getcomposer.org). + +```bash +# Install Composer +curl -sS https://getcomposer.org/installer | php +``` + +Next, run the Composer command to install the latest stable version of Guzzle: + +```bash +php composer.phar require guzzlehttp/guzzle +``` + +After installing, you need to require Composer's autoloader: + +```php +require 'vendor/autoload.php'; +``` + +You can then later update Guzzle using composer: + + ```bash +composer.phar update + ``` + + +## Version Guidance + +| Version | Status | Packagist | Namespace | Repo | Docs | PSR-7 | PHP Version | +|---------|------------|---------------------|--------------|---------------------|---------------------|-------|-------------| +| 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >= 5.3.3 | +| 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >= 5.4 | +| 5.x | Maintained | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 | +| 6.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >= 5.5 | + +[guzzle-3-repo]: https://github.com/guzzle/guzzle3 +[guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x +[guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3 +[guzzle-6-repo]: https://github.com/guzzle/guzzle +[guzzle-3-docs]: http://guzzle3.readthedocs.org/en/latest/ +[guzzle-5-docs]: http://guzzle.readthedocs.org/en/5.3/ +[guzzle-6-docs]: http://guzzle.readthedocs.org/en/latest/ diff --git a/civicrm/vendor/guzzlehttp/guzzle/UPGRADING.md b/civicrm/vendor/guzzlehttp/guzzle/UPGRADING.md new file mode 100644 index 0000000000000000000000000000000000000000..91d1dcc99317e1dd713f18638cf97d2921d31f6a --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/UPGRADING.md @@ -0,0 +1,1203 @@ +Guzzle Upgrade Guide +==================== + +5.0 to 6.0 +---------- + +Guzzle now uses [PSR-7](http://www.php-fig.org/psr/psr-7/) for HTTP messages. +Due to the fact that these messages are immutable, this prompted a refactoring +of Guzzle to use a middleware based system rather than an event system. Any +HTTP message interaction (e.g., `GuzzleHttp\Message\Request`) need to be +updated to work with the new immutable PSR-7 request and response objects. Any +event listeners or subscribers need to be updated to become middleware +functions that wrap handlers (or are injected into a +`GuzzleHttp\HandlerStack`). + +- Removed `GuzzleHttp\BatchResults` +- Removed `GuzzleHttp\Collection` +- Removed `GuzzleHttp\HasDataTrait` +- Removed `GuzzleHttp\ToArrayInterface` +- The `guzzlehttp/streams` dependency has been removed. Stream functionality + is now present in the `GuzzleHttp\Psr7` namespace provided by the + `guzzlehttp/psr7` package. +- Guzzle no longer uses ReactPHP promises and now uses the + `guzzlehttp/promises` library. We use a custom promise library for three + significant reasons: + 1. React promises (at the time of writing this) are recursive. Promise + chaining and promise resolution will eventually blow the stack. Guzzle + promises are not recursive as they use a sort of trampolining technique. + Note: there has been movement in the React project to modify promises to + no longer utilize recursion. + 2. Guzzle needs to have the ability to synchronously block on a promise to + wait for a result. Guzzle promises allows this functionality (and does + not require the use of recursion). + 3. Because we need to be able to wait on a result, doing so using React + promises requires wrapping react promises with RingPHP futures. This + overhead is no longer needed, reducing stack sizes, reducing complexity, + and improving performance. +- `GuzzleHttp\Mimetypes` has been moved to a function in + `GuzzleHttp\Psr7\mimetype_from_extension` and + `GuzzleHttp\Psr7\mimetype_from_filename`. +- `GuzzleHttp\Query` and `GuzzleHttp\QueryParser` have been removed. Query + strings must now be passed into request objects as strings, or provided to + the `query` request option when creating requests with clients. The `query` + option uses PHP's `http_build_query` to convert an array to a string. If you + need a different serialization technique, you will need to pass the query + string in as a string. There are a couple helper functions that will make + working with query strings easier: `GuzzleHttp\Psr7\parse_query` and + `GuzzleHttp\Psr7\build_query`. +- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware + system based on PSR-7, using RingPHP and it's middleware system as well adds + more complexity than the benefits it provides. All HTTP handlers that were + present in RingPHP have been modified to work directly with PSR-7 messages + and placed in the `GuzzleHttp\Handler` namespace. This significantly reduces + complexity in Guzzle, removes a dependency, and improves performance. RingPHP + will be maintained for Guzzle 5 support, but will no longer be a part of + Guzzle 6. +- As Guzzle now uses a middleware based systems the event system and RingPHP + integration has been removed. Note: while the event system has been removed, + it is possible to add your own type of event system that is powered by the + middleware system. + - Removed the `Event` namespace. + - Removed the `Subscriber` namespace. + - Removed `Transaction` class + - Removed `RequestFsm` + - Removed `RingBridge` + - `GuzzleHttp\Subscriber\Cookie` is now provided by + `GuzzleHttp\Middleware::cookies` + - `GuzzleHttp\Subscriber\HttpError` is now provided by + `GuzzleHttp\Middleware::httpError` + - `GuzzleHttp\Subscriber\History` is now provided by + `GuzzleHttp\Middleware::history` + - `GuzzleHttp\Subscriber\Mock` is now provided by + `GuzzleHttp\Handler\MockHandler` + - `GuzzleHttp\Subscriber\Prepare` is now provided by + `GuzzleHttp\PrepareBodyMiddleware` + - `GuzzleHttp\Subscriber\Redirect` is now provided by + `GuzzleHttp\RedirectMiddleware` +- Guzzle now uses `Psr\Http\Message\UriInterface` (implements in + `GuzzleHttp\Psr7\Uri`) for URI support. `GuzzleHttp\Url` is now gone. +- Static functions in `GuzzleHttp\Utils` have been moved to namespaced + functions under the `GuzzleHttp` namespace. This requires either a Composer + based autoloader or you to include functions.php. +- `GuzzleHttp\ClientInterface::getDefaultOption` has been renamed to + `GuzzleHttp\ClientInterface::getConfig`. +- `GuzzleHttp\ClientInterface::setDefaultOption` has been removed. +- The `json` and `xml` methods of response objects has been removed. With the + migration to strictly adhering to PSR-7 as the interface for Guzzle messages, + adding methods to message interfaces would actually require Guzzle messages + to extend from PSR-7 messages rather then work with them directly. + +## Migrating to middleware + +The change to PSR-7 unfortunately required significant refactoring to Guzzle +due to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event +system from plugins. The event system relied on mutability of HTTP messages and +side effects in order to work. With immutable messages, you have to change your +workflow to become more about either returning a value (e.g., functional +middlewares) or setting a value on an object. Guzzle v6 has chosen the +functional middleware approach. + +Instead of using the event system to listen for things like the `before` event, +you now create a stack based middleware function that intercepts a request on +the way in and the promise of the response on the way out. This is a much +simpler and more predictable approach than the event system and works nicely +with PSR-7 middleware. Due to the use of promises, the middleware system is +also asynchronous. + +v5: + +```php +use GuzzleHttp\Event\BeforeEvent; +$client = new GuzzleHttp\Client(); +// Get the emitter and listen to the before event. +$client->getEmitter()->on('before', function (BeforeEvent $e) { + // Guzzle v5 events relied on mutation + $e->getRequest()->setHeader('X-Foo', 'Bar'); +}); +``` + +v6: + +In v6, you can modify the request before it is sent using the `mapRequest` +middleware. The idiomatic way in v6 to modify the request/response lifecycle is +to setup a handler middleware stack up front and inject the handler into a +client. + +```php +use GuzzleHttp\Middleware; +// Create a handler stack that has all of the default middlewares attached +$handler = GuzzleHttp\HandlerStack::create(); +// Push the handler onto the handler stack +$handler->push(Middleware::mapRequest(function (RequestInterface $request) { + // Notice that we have to return a request object + return $request->withHeader('X-Foo', 'Bar'); +})); +// Inject the handler into the client +$client = new GuzzleHttp\Client(['handler' => $handler]); +``` + +## POST Requests + +This version added the [`form_params`](http://guzzle.readthedocs.org/en/latest/request-options.html#form_params) +and `multipart` request options. `form_params` is an associative array of +strings or array of strings and is used to serialize an +`application/x-www-form-urlencoded` POST request. The +[`multipart`](http://guzzle.readthedocs.org/en/latest/request-options.html#multipart) +option is now used to send a multipart/form-data POST request. + +`GuzzleHttp\Post\PostFile` has been removed. Use the `multipart` option to add +POST files to a multipart/form-data request. + +The `body` option no longer accepts an array to send POST requests. Please use +`multipart` or `form_params` instead. + +The `base_url` option has been renamed to `base_uri`. + +4.x to 5.0 +---------- + +## Rewritten Adapter Layer + +Guzzle now uses [RingPHP](http://ringphp.readthedocs.org/en/latest) to send +HTTP requests. The `adapter` option in a `GuzzleHttp\Client` constructor +is still supported, but it has now been renamed to `handler`. Instead of +passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP +`callable` that follows the RingPHP specification. + +## Removed Fluent Interfaces + +[Fluent interfaces were removed](http://ocramius.github.io/blog/fluent-interfaces-are-evil) +from the following classes: + +- `GuzzleHttp\Collection` +- `GuzzleHttp\Url` +- `GuzzleHttp\Query` +- `GuzzleHttp\Post\PostBody` +- `GuzzleHttp\Cookie\SetCookie` + +## Removed functions.php + +Removed "functions.php", so that Guzzle is truly PSR-4 compliant. The following +functions can be used as replacements. + +- `GuzzleHttp\json_decode` -> `GuzzleHttp\Utils::jsonDecode` +- `GuzzleHttp\get_path` -> `GuzzleHttp\Utils::getPath` +- `GuzzleHttp\Utils::setPath` -> `GuzzleHttp\set_path` +- `GuzzleHttp\Pool::batch` -> `GuzzleHttp\batch`. This function is, however, + deprecated in favor of using `GuzzleHttp\Pool::batch()`. + +The "procedural" global client has been removed with no replacement (e.g., +`GuzzleHttp\get()`, `GuzzleHttp\post()`, etc.). Use a `GuzzleHttp\Client` +object as a replacement. + +## `throwImmediately` has been removed + +The concept of "throwImmediately" has been removed from exceptions and error +events. This control mechanism was used to stop a transfer of concurrent +requests from completing. This can now be handled by throwing the exception or +by cancelling a pool of requests or each outstanding future request +individually. + +## headers event has been removed + +Removed the "headers" event. This event was only useful for changing the +body a response once the headers of the response were known. You can implement +a similar behavior in a number of ways. One example might be to use a +FnStream that has access to the transaction being sent. For example, when the +first byte is written, you could check if the response headers match your +expectations, and if so, change the actual stream body that is being +written to. + +## Updates to HTTP Messages + +Removed the `asArray` parameter from +`GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header +value as an array, then use the newly added `getHeaderAsArray()` method of +`MessageInterface`. This change makes the Guzzle interfaces compatible with +the PSR-7 interfaces. + +3.x to 4.0 +---------- + +## Overarching changes: + +- Now requires PHP 5.4 or greater. +- No longer requires cURL to send requests. +- Guzzle no longer wraps every exception it throws. Only exceptions that are + recoverable are now wrapped by Guzzle. +- Various namespaces have been removed or renamed. +- No longer requiring the Symfony EventDispatcher. A custom event dispatcher + based on the Symfony EventDispatcher is + now utilized in `GuzzleHttp\Event\EmitterInterface` (resulting in significant + speed and functionality improvements). + +Changes per Guzzle 3.x namespace are described below. + +## Batch + +The `Guzzle\Batch` namespace has been removed. This is best left to +third-parties to implement on top of Guzzle's core HTTP library. + +## Cache + +The `Guzzle\Cache` namespace has been removed. (Todo: No suitable replacement +has been implemented yet, but hoping to utilize a PSR cache interface). + +## Common + +- Removed all of the wrapped exceptions. It's better to use the standard PHP + library for unrecoverable exceptions. +- `FromConfigInterface` has been removed. +- `Guzzle\Common\Version` has been removed. The VERSION constant can be found + at `GuzzleHttp\ClientInterface::VERSION`. + +### Collection + +- `getAll` has been removed. Use `toArray` to convert a collection to an array. +- `inject` has been removed. +- `keySearch` has been removed. +- `getPath` no longer supports wildcard expressions. Use something better like + JMESPath for this. +- `setPath` now supports appending to an existing array via the `[]` notation. + +### Events + +Guzzle no longer requires Symfony's EventDispatcher component. Guzzle now uses +`GuzzleHttp\Event\Emitter`. + +- `Symfony\Component\EventDispatcher\EventDispatcherInterface` is replaced by + `GuzzleHttp\Event\EmitterInterface`. +- `Symfony\Component\EventDispatcher\EventDispatcher` is replaced by + `GuzzleHttp\Event\Emitter`. +- `Symfony\Component\EventDispatcher\Event` is replaced by + `GuzzleHttp\Event\Event`, and Guzzle now has an EventInterface in + `GuzzleHttp\Event\EventInterface`. +- `AbstractHasDispatcher` has moved to a trait, `HasEmitterTrait`, and + `HasDispatcherInterface` has moved to `HasEmitterInterface`. Retrieving the + event emitter of a request, client, etc. now uses the `getEmitter` method + rather than the `getDispatcher` method. + +#### Emitter + +- Use the `once()` method to add a listener that automatically removes itself + the first time it is invoked. +- Use the `listeners()` method to retrieve a list of event listeners rather than + the `getListeners()` method. +- Use `emit()` instead of `dispatch()` to emit an event from an emitter. +- Use `attach()` instead of `addSubscriber()` and `detach()` instead of + `removeSubscriber()`. + +```php +$mock = new Mock(); +// 3.x +$request->getEventDispatcher()->addSubscriber($mock); +$request->getEventDispatcher()->removeSubscriber($mock); +// 4.x +$request->getEmitter()->attach($mock); +$request->getEmitter()->detach($mock); +``` + +Use the `on()` method to add a listener rather than the `addListener()` method. + +```php +// 3.x +$request->getEventDispatcher()->addListener('foo', function (Event $event) { /* ... */ } ); +// 4.x +$request->getEmitter()->on('foo', function (Event $event, $name) { /* ... */ } ); +``` + +## Http + +### General changes + +- The cacert.pem certificate has been moved to `src/cacert.pem`. +- Added the concept of adapters that are used to transfer requests over the + wire. +- Simplified the event system. +- Sending requests in parallel is still possible, but batching is no longer a + concept of the HTTP layer. Instead, you must use the `complete` and `error` + events to asynchronously manage parallel request transfers. +- `Guzzle\Http\Url` has moved to `GuzzleHttp\Url`. +- `Guzzle\Http\QueryString` has moved to `GuzzleHttp\Query`. +- QueryAggregators have been rewritten so that they are simply callable + functions. +- `GuzzleHttp\StaticClient` has been removed. Use the functions provided in + `functions.php` for an easy to use static client instance. +- Exceptions in `GuzzleHttp\Exception` have been updated to all extend from + `GuzzleHttp\Exception\TransferException`. + +### Client + +Calling methods like `get()`, `post()`, `head()`, etc. no longer create and +return a request, but rather creates a request, sends the request, and returns +the response. + +```php +// 3.0 +$request = $client->get('/'); +$response = $request->send(); + +// 4.0 +$response = $client->get('/'); + +// or, to mirror the previous behavior +$request = $client->createRequest('GET', '/'); +$response = $client->send($request); +``` + +`GuzzleHttp\ClientInterface` has changed. + +- The `send` method no longer accepts more than one request. Use `sendAll` to + send multiple requests in parallel. +- `setUserAgent()` has been removed. Use a default request option instead. You + could, for example, do something like: + `$client->setConfig('defaults/headers/User-Agent', 'Foo/Bar ' . $client::getDefaultUserAgent())`. +- `setSslVerification()` has been removed. Use default request options instead, + like `$client->setConfig('defaults/verify', true)`. + +`GuzzleHttp\Client` has changed. + +- The constructor now accepts only an associative array. You can include a + `base_url` string or array to use a URI template as the base URL of a client. + You can also specify a `defaults` key that is an associative array of default + request options. You can pass an `adapter` to use a custom adapter, + `batch_adapter` to use a custom adapter for sending requests in parallel, or + a `message_factory` to change the factory used to create HTTP requests and + responses. +- The client no longer emits a `client.create_request` event. +- Creating requests with a client no longer automatically utilize a URI + template. You must pass an array into a creational method (e.g., + `createRequest`, `get`, `put`, etc.) in order to expand a URI template. + +### Messages + +Messages no longer have references to their counterparts (i.e., a request no +longer has a reference to it's response, and a response no loger has a +reference to its request). This association is now managed through a +`GuzzleHttp\Adapter\TransactionInterface` object. You can get references to +these transaction objects using request events that are emitted over the +lifecycle of a request. + +#### Requests with a body + +- `GuzzleHttp\Message\EntityEnclosingRequest` and + `GuzzleHttp\Message\EntityEnclosingRequestInterface` have been removed. The + separation between requests that contain a body and requests that do not + contain a body has been removed, and now `GuzzleHttp\Message\RequestInterface` + handles both use cases. +- Any method that previously accepts a `GuzzleHttp\Response` object now accept a + `GuzzleHttp\Message\ResponseInterface`. +- `GuzzleHttp\Message\RequestFactoryInterface` has been renamed to + `GuzzleHttp\Message\MessageFactoryInterface`. This interface is used to create + both requests and responses and is implemented in + `GuzzleHttp\Message\MessageFactory`. +- POST field and file methods have been removed from the request object. You + must now use the methods made available to `GuzzleHttp\Post\PostBodyInterface` + to control the format of a POST body. Requests that are created using a + standard `GuzzleHttp\Message\MessageFactoryInterface` will automatically use + a `GuzzleHttp\Post\PostBody` body if the body was passed as an array or if + the method is POST and no body is provided. + +```php +$request = $client->createRequest('POST', '/'); +$request->getBody()->setField('foo', 'bar'); +$request->getBody()->addFile(new PostFile('file_key', fopen('/path/to/content', 'r'))); +``` + +#### Headers + +- `GuzzleHttp\Message\Header` has been removed. Header values are now simply + represented by an array of values or as a string. Header values are returned + as a string by default when retrieving a header value from a message. You can + pass an optional argument of `true` to retrieve a header value as an array + of strings instead of a single concatenated string. +- `GuzzleHttp\PostFile` and `GuzzleHttp\PostFileInterface` have been moved to + `GuzzleHttp\Post`. This interface has been simplified and now allows the + addition of arbitrary headers. +- Custom headers like `GuzzleHttp\Message\Header\Link` have been removed. Most + of the custom headers are now handled separately in specific + subscribers/plugins, and `GuzzleHttp\Message\HeaderValues::parseParams()` has + been updated to properly handle headers that contain parameters (like the + `Link` header). + +#### Responses + +- `GuzzleHttp\Message\Response::getInfo()` and + `GuzzleHttp\Message\Response::setInfo()` have been removed. Use the event + system to retrieve this type of information. +- `GuzzleHttp\Message\Response::getRawHeaders()` has been removed. +- `GuzzleHttp\Message\Response::getMessage()` has been removed. +- `GuzzleHttp\Message\Response::calculateAge()` and other cache specific + methods have moved to the CacheSubscriber. +- Header specific helper functions like `getContentMd5()` have been removed. + Just use `getHeader('Content-MD5')` instead. +- `GuzzleHttp\Message\Response::setRequest()` and + `GuzzleHttp\Message\Response::getRequest()` have been removed. Use the event + system to work with request and response objects as a transaction. +- `GuzzleHttp\Message\Response::getRedirectCount()` has been removed. Use the + Redirect subscriber instead. +- `GuzzleHttp\Message\Response::isSuccessful()` and other related methods have + been removed. Use `getStatusCode()` instead. + +#### Streaming responses + +Streaming requests can now be created by a client directly, returning a +`GuzzleHttp\Message\ResponseInterface` object that contains a body stream +referencing an open PHP HTTP stream. + +```php +// 3.0 +use Guzzle\Stream\PhpStreamRequestFactory; +$request = $client->get('/'); +$factory = new PhpStreamRequestFactory(); +$stream = $factory->fromRequest($request); +$data = $stream->read(1024); + +// 4.0 +$response = $client->get('/', ['stream' => true]); +// Read some data off of the stream in the response body +$data = $response->getBody()->read(1024); +``` + +#### Redirects + +The `configureRedirects()` method has been removed in favor of a +`allow_redirects` request option. + +```php +// Standard redirects with a default of a max of 5 redirects +$request = $client->createRequest('GET', '/', ['allow_redirects' => true]); + +// Strict redirects with a custom number of redirects +$request = $client->createRequest('GET', '/', [ + 'allow_redirects' => ['max' => 5, 'strict' => true] +]); +``` + +#### EntityBody + +EntityBody interfaces and classes have been removed or moved to +`GuzzleHttp\Stream`. All classes and interfaces that once required +`GuzzleHttp\EntityBodyInterface` now require +`GuzzleHttp\Stream\StreamInterface`. Creating a new body for a request no +longer uses `GuzzleHttp\EntityBody::factory` but now uses +`GuzzleHttp\Stream\Stream::factory` or even better: +`GuzzleHttp\Stream\create()`. + +- `Guzzle\Http\EntityBodyInterface` is now `GuzzleHttp\Stream\StreamInterface` +- `Guzzle\Http\EntityBody` is now `GuzzleHttp\Stream\Stream` +- `Guzzle\Http\CachingEntityBody` is now `GuzzleHttp\Stream\CachingStream` +- `Guzzle\Http\ReadLimitEntityBody` is now `GuzzleHttp\Stream\LimitStream` +- `Guzzle\Http\IoEmittyinEntityBody` has been removed. + +#### Request lifecycle events + +Requests previously submitted a large number of requests. The number of events +emitted over the lifecycle of a request has been significantly reduced to make +it easier to understand how to extend the behavior of a request. All events +emitted during the lifecycle of a request now emit a custom +`GuzzleHttp\Event\EventInterface` object that contains context providing +methods and a way in which to modify the transaction at that specific point in +time (e.g., intercept the request and set a response on the transaction). + +- `request.before_send` has been renamed to `before` and now emits a + `GuzzleHttp\Event\BeforeEvent` +- `request.complete` has been renamed to `complete` and now emits a + `GuzzleHttp\Event\CompleteEvent`. +- `request.sent` has been removed. Use `complete`. +- `request.success` has been removed. Use `complete`. +- `error` is now an event that emits a `GuzzleHttp\Event\ErrorEvent`. +- `request.exception` has been removed. Use `error`. +- `request.receive.status_line` has been removed. +- `curl.callback.progress` has been removed. Use a custom `StreamInterface` to + maintain a status update. +- `curl.callback.write` has been removed. Use a custom `StreamInterface` to + intercept writes. +- `curl.callback.read` has been removed. Use a custom `StreamInterface` to + intercept reads. + +`headers` is a new event that is emitted after the response headers of a +request have been received before the body of the response is downloaded. This +event emits a `GuzzleHttp\Event\HeadersEvent`. + +You can intercept a request and inject a response using the `intercept()` event +of a `GuzzleHttp\Event\BeforeEvent`, `GuzzleHttp\Event\CompleteEvent`, and +`GuzzleHttp\Event\ErrorEvent` event. + +See: http://docs.guzzlephp.org/en/latest/events.html + +## Inflection + +The `Guzzle\Inflection` namespace has been removed. This is not a core concern +of Guzzle. + +## Iterator + +The `Guzzle\Iterator` namespace has been removed. + +- `Guzzle\Iterator\AppendIterator`, `Guzzle\Iterator\ChunkedIterator`, and + `Guzzle\Iterator\MethodProxyIterator` are nice, but not a core requirement of + Guzzle itself. +- `Guzzle\Iterator\FilterIterator` is no longer needed because an equivalent + class is shipped with PHP 5.4. +- `Guzzle\Iterator\MapIterator` is not really needed when using PHP 5.5 because + it's easier to just wrap an iterator in a generator that maps values. + +For a replacement of these iterators, see https://github.com/nikic/iter + +## Log + +The LogPlugin has moved to https://github.com/guzzle/log-subscriber. The +`Guzzle\Log` namespace has been removed. Guzzle now relies on +`Psr\Log\LoggerInterface` for all logging. The MessageFormatter class has been +moved to `GuzzleHttp\Subscriber\Log\Formatter`. + +## Parser + +The `Guzzle\Parser` namespace has been removed. This was previously used to +make it possible to plug in custom parsers for cookies, messages, URI +templates, and URLs; however, this level of complexity is not needed in Guzzle +so it has been removed. + +- Cookie: Cookie parsing logic has been moved to + `GuzzleHttp\Cookie\SetCookie::fromString`. +- Message: Message parsing logic for both requests and responses has been moved + to `GuzzleHttp\Message\MessageFactory::fromMessage`. Message parsing is only + used in debugging or deserializing messages, so it doesn't make sense for + Guzzle as a library to add this level of complexity to parsing messages. +- UriTemplate: URI template parsing has been moved to + `GuzzleHttp\UriTemplate`. The Guzzle library will automatically use the PECL + URI template library if it is installed. +- Url: URL parsing is now performed in `GuzzleHttp\Url::fromString` (previously + it was `Guzzle\Http\Url::factory()`). If custom URL parsing is necessary, + then developers are free to subclass `GuzzleHttp\Url`. + +## Plugin + +The `Guzzle\Plugin` namespace has been renamed to `GuzzleHttp\Subscriber`. +Several plugins are shipping with the core Guzzle library under this namespace. + +- `GuzzleHttp\Subscriber\Cookie`: Replaces the old CookiePlugin. Cookie jar + code has moved to `GuzzleHttp\Cookie`. +- `GuzzleHttp\Subscriber\History`: Replaces the old HistoryPlugin. +- `GuzzleHttp\Subscriber\HttpError`: Throws errors when a bad HTTP response is + received. +- `GuzzleHttp\Subscriber\Mock`: Replaces the old MockPlugin. +- `GuzzleHttp\Subscriber\Prepare`: Prepares the body of a request just before + sending. This subscriber is attached to all requests by default. +- `GuzzleHttp\Subscriber\Redirect`: Replaces the RedirectPlugin. + +The following plugins have been removed (third-parties are free to re-implement +these if needed): + +- `GuzzleHttp\Plugin\Async` has been removed. +- `GuzzleHttp\Plugin\CurlAuth` has been removed. +- `GuzzleHttp\Plugin\ErrorResponse\ErrorResponsePlugin` has been removed. This + functionality should instead be implemented with event listeners that occur + after normal response parsing occurs in the guzzle/command package. + +The following plugins are not part of the core Guzzle package, but are provided +in separate repositories: + +- `Guzzle\Http\Plugin\BackoffPlugin` has been rewritten to be much simpler + to build custom retry policies using simple functions rather than various + chained classes. See: https://github.com/guzzle/retry-subscriber +- `Guzzle\Http\Plugin\Cache\CachePlugin` has moved to + https://github.com/guzzle/cache-subscriber +- `Guzzle\Http\Plugin\Log\LogPlugin` has moved to + https://github.com/guzzle/log-subscriber +- `Guzzle\Http\Plugin\Md5\Md5Plugin` has moved to + https://github.com/guzzle/message-integrity-subscriber +- `Guzzle\Http\Plugin\Mock\MockPlugin` has moved to + `GuzzleHttp\Subscriber\MockSubscriber`. +- `Guzzle\Http\Plugin\Oauth\OauthPlugin` has moved to + https://github.com/guzzle/oauth-subscriber + +## Service + +The service description layer of Guzzle has moved into two separate packages: + +- http://github.com/guzzle/command Provides a high level abstraction over web + services by representing web service operations using commands. +- http://github.com/guzzle/guzzle-services Provides an implementation of + guzzle/command that provides request serialization and response parsing using + Guzzle service descriptions. + +## Stream + +Stream have moved to a separate package available at +https://github.com/guzzle/streams. + +`Guzzle\Stream\StreamInterface` has been given a large update to cleanly take +on the responsibilities of `Guzzle\Http\EntityBody` and +`Guzzle\Http\EntityBodyInterface` now that they have been removed. The number +of methods implemented by the `StreamInterface` has been drastically reduced to +allow developers to more easily extend and decorate stream behavior. + +## Removed methods from StreamInterface + +- `getStream` and `setStream` have been removed to better encapsulate streams. +- `getMetadata` and `setMetadata` have been removed in favor of + `GuzzleHttp\Stream\MetadataStreamInterface`. +- `getWrapper`, `getWrapperData`, `getStreamType`, and `getUri` have all been + removed. This data is accessible when + using streams that implement `GuzzleHttp\Stream\MetadataStreamInterface`. +- `rewind` has been removed. Use `seek(0)` for a similar behavior. + +## Renamed methods + +- `detachStream` has been renamed to `detach`. +- `feof` has been renamed to `eof`. +- `ftell` has been renamed to `tell`. +- `readLine` has moved from an instance method to a static class method of + `GuzzleHttp\Stream\Stream`. + +## Metadata streams + +`GuzzleHttp\Stream\MetadataStreamInterface` has been added to denote streams +that contain additional metadata accessible via `getMetadata()`. +`GuzzleHttp\Stream\StreamInterface::getMetadata` and +`GuzzleHttp\Stream\StreamInterface::setMetadata` have been removed. + +## StreamRequestFactory + +The entire concept of the StreamRequestFactory has been removed. The way this +was used in Guzzle 3 broke the actual interface of sending streaming requests +(instead of getting back a Response, you got a StreamInterface). Streaming +PHP requests are now implemented through the `GuzzleHttp\Adapter\StreamAdapter`. + +3.6 to 3.7 +---------- + +### Deprecations + +- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.: + +```php +\Guzzle\Common\Version::$emitWarnings = true; +``` + +The following APIs and options have been marked as deprecated: + +- Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead. +- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. +- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. +- Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead. +- Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead. +- Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated +- Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client. +- Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8. +- Marked `Guzzle\Common\Collection::inject()` as deprecated. +- Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use + `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or + `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` + +3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational +request methods. When paired with a client's configuration settings, these options allow you to specify default settings +for various aspects of a request. Because these options make other previous configuration options redundant, several +configuration options and methods of a client and AbstractCommand have been deprecated. + +- Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`. +- Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`. +- Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')` +- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0 + + $command = $client->getCommand('foo', array( + 'command.headers' => array('Test' => '123'), + 'command.response_body' => '/path/to/file' + )); + + // Should be changed to: + + $command = $client->getCommand('foo', array( + 'command.request_options' => array( + 'headers' => array('Test' => '123'), + 'save_as' => '/path/to/file' + ) + )); + +### Interface changes + +Additions and changes (you will need to update any implementations or subclasses you may have created): + +- Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`: + createRequest, head, delete, put, patch, post, options, prepareRequest +- Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()` +- Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface` +- Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to + `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a + resource, string, or EntityBody into the $options parameter to specify the download location of the response. +- Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a + default `array()` +- Added `Guzzle\Stream\StreamInterface::isRepeatable` +- Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods. + +The following methods were removed from interfaces. All of these methods are still available in the concrete classes +that implement them, but you should update your code to use alternative methods: + +- Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use + `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or + `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or + `$client->setDefaultOption('headers/{header_name}', 'value')`. or + `$client->setDefaultOption('headers', array('header_name' => 'value'))`. +- Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`. +- Removed `Guzzle\Http\ClientInterface::expandTemplate()`. This is an implementation detail. +- Removed `Guzzle\Http\ClientInterface::setRequestFactory()`. This is an implementation detail. +- Removed `Guzzle\Http\ClientInterface::getCurlMulti()`. This is a very specific implementation detail. +- Removed `Guzzle\Http\Message\RequestInterface::canCache`. Use the CachePlugin. +- Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`. Use the HistoryPlugin. +- Removed `Guzzle\Http\Message\RequestInterface::isRedirect`. Use the HistoryPlugin. + +### Cache plugin breaking changes + +- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a + CacheStorageInterface. These two objects and interface will be removed in a future version. +- Always setting X-cache headers on cached responses +- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin +- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface + $request, Response $response);` +- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);` +- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);` +- Added `CacheStorageInterface::purge($url)` +- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin + $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache, + CanCacheStrategyInterface $canCache = null)` +- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)` + +3.5 to 3.6 +---------- + +* Mixed casing of headers are now forced to be a single consistent casing across all values for that header. +* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution +* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader(). + For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader(). + Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request. +* Specific header implementations can be created for complex headers. When a message creates a header, it uses a + HeaderFactory which can map specific headers to specific header classes. There is now a Link header and + CacheControl header implementation. +* Moved getLinks() from Response to just be used on a Link header object. + +If you previously relied on Guzzle\Http\Message\Header::raw(), then you will need to update your code to use the +HeaderInterface (e.g. toArray(), getAll(), etc.). + +### Interface changes + +* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate +* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti() +* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in + Guzzle\Http\Curl\RequestMediator +* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string. +* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface +* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders() + +### Removed deprecated functions + +* Removed Guzzle\Parser\ParserRegister::get(). Use getParser() +* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser(). + +### Deprecations + +* The ability to case-insensitively search for header values +* Guzzle\Http\Message\Header::hasExactHeader +* Guzzle\Http\Message\Header::raw. Use getAll() +* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object + instead. + +### Other changes + +* All response header helper functions return a string rather than mixing Header objects and strings inconsistently +* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle + directly via interfaces +* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist + but are a no-op until removed. +* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a + `Guzzle\Service\Command\ArrayCommandInterface`. +* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response + on a request while the request is still being transferred +* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess + +3.3 to 3.4 +---------- + +Base URLs of a client now follow the rules of http://tools.ietf.org/html/rfc3986#section-5.2.2 when merging URLs. + +3.2 to 3.3 +---------- + +### Response::getEtag() quote stripping removed + +`Guzzle\Http\Message\Response::getEtag()` no longer strips quotes around the ETag response header + +### Removed `Guzzle\Http\Utils` + +The `Guzzle\Http\Utils` class was removed. This class was only used for testing. + +### Stream wrapper and type + +`Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getStreamType()` are no longer converted to lowercase. + +### curl.emit_io became emit_io + +Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the +'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io' + +3.1 to 3.2 +---------- + +### CurlMulti is no longer reused globally + +Before 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added +to a single client can pollute requests dispatched from other clients. + +If you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the +ServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is +created. + +```php +$multi = new Guzzle\Http\Curl\CurlMulti(); +$builder = Guzzle\Service\Builder\ServiceBuilder::factory('/path/to/config.json'); +$builder->addListener('service_builder.create_client', function ($event) use ($multi) { + $event['client']->setCurlMulti($multi); +} +}); +``` + +### No default path + +URLs no longer have a default path value of '/' if no path was specified. + +Before: + +```php +$request = $client->get('http://www.foo.com'); +echo $request->getUrl(); +// >> http://www.foo.com/ +``` + +After: + +```php +$request = $client->get('http://www.foo.com'); +echo $request->getUrl(); +// >> http://www.foo.com +``` + +### Less verbose BadResponseException + +The exception message for `Guzzle\Http\Exception\BadResponseException` no longer contains the full HTTP request and +response information. You can, however, get access to the request and response object by calling `getRequest()` or +`getResponse()` on the exception object. + +### Query parameter aggregation + +Multi-valued query parameters are no longer aggregated using a callback function. `Guzzle\Http\Query` now has a +setAggregator() method that accepts a `Guzzle\Http\QueryAggregator\QueryAggregatorInterface` object. This object is +responsible for handling the aggregation of multi-valued query string variables into a flattened hash. + +2.8 to 3.x +---------- + +### Guzzle\Service\Inspector + +Change `\Guzzle\Service\Inspector::fromConfig` to `\Guzzle\Common\Collection::fromConfig` + +**Before** + +```php +use Guzzle\Service\Inspector; + +class YourClient extends \Guzzle\Service\Client +{ + public static function factory($config = array()) + { + $default = array(); + $required = array('base_url', 'username', 'api_key'); + $config = Inspector::fromConfig($config, $default, $required); + + $client = new self( + $config->get('base_url'), + $config->get('username'), + $config->get('api_key') + ); + $client->setConfig($config); + + $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json')); + + return $client; + } +``` + +**After** + +```php +use Guzzle\Common\Collection; + +class YourClient extends \Guzzle\Service\Client +{ + public static function factory($config = array()) + { + $default = array(); + $required = array('base_url', 'username', 'api_key'); + $config = Collection::fromConfig($config, $default, $required); + + $client = new self( + $config->get('base_url'), + $config->get('username'), + $config->get('api_key') + ); + $client->setConfig($config); + + $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json')); + + return $client; + } +``` + +### Convert XML Service Descriptions to JSON + +**Before** + +```xml +<?xml version="1.0" encoding="UTF-8"?> +<client> + <commands> + <!-- Groups --> + <command name="list_groups" method="GET" uri="groups.json"> + <doc>Get a list of groups</doc> + </command> + <command name="search_groups" method="GET" uri='search.json?query="{{query}} type:group"'> + <doc>Uses a search query to get a list of groups</doc> + <param name="query" type="string" required="true" /> + </command> + <command name="create_group" method="POST" uri="groups.json"> + <doc>Create a group</doc> + <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/> + <param name="Content-Type" location="header" static="application/json"/> + </command> + <command name="delete_group" method="DELETE" uri="groups/{{id}}.json"> + <doc>Delete a group by ID</doc> + <param name="id" type="integer" required="true"/> + </command> + <command name="get_group" method="GET" uri="groups/{{id}}.json"> + <param name="id" type="integer" required="true"/> + </command> + <command name="update_group" method="PUT" uri="groups/{{id}}.json"> + <doc>Update a group</doc> + <param name="id" type="integer" required="true"/> + <param name="data" type="array" location="body" filters="json_encode" doc="Group JSON"/> + <param name="Content-Type" location="header" static="application/json"/> + </command> + </commands> +</client> +``` + +**After** + +```json +{ + "name": "Zendesk REST API v2", + "apiVersion": "2012-12-31", + "description":"Provides access to Zendesk views, groups, tickets, ticket fields, and users", + "operations": { + "list_groups": { + "httpMethod":"GET", + "uri": "groups.json", + "summary": "Get a list of groups" + }, + "search_groups":{ + "httpMethod":"GET", + "uri": "search.json?query=\"{query} type:group\"", + "summary": "Uses a search query to get a list of groups", + "parameters":{ + "query":{ + "location": "uri", + "description":"Zendesk Search Query", + "type": "string", + "required": true + } + } + }, + "create_group": { + "httpMethod":"POST", + "uri": "groups.json", + "summary": "Create a group", + "parameters":{ + "data": { + "type": "array", + "location": "body", + "description":"Group JSON", + "filters": "json_encode", + "required": true + }, + "Content-Type":{ + "type": "string", + "location":"header", + "static": "application/json" + } + } + }, + "delete_group": { + "httpMethod":"DELETE", + "uri": "groups/{id}.json", + "summary": "Delete a group", + "parameters":{ + "id":{ + "location": "uri", + "description":"Group to delete by ID", + "type": "integer", + "required": true + } + } + }, + "get_group": { + "httpMethod":"GET", + "uri": "groups/{id}.json", + "summary": "Get a ticket", + "parameters":{ + "id":{ + "location": "uri", + "description":"Group to get by ID", + "type": "integer", + "required": true + } + } + }, + "update_group": { + "httpMethod":"PUT", + "uri": "groups/{id}.json", + "summary": "Update a group", + "parameters":{ + "id": { + "location": "uri", + "description":"Group to update by ID", + "type": "integer", + "required": true + }, + "data": { + "type": "array", + "location": "body", + "description":"Group JSON", + "filters": "json_encode", + "required": true + }, + "Content-Type":{ + "type": "string", + "location":"header", + "static": "application/json" + } + } + } +} +``` + +### Guzzle\Service\Description\ServiceDescription + +Commands are now called Operations + +**Before** + +```php +use Guzzle\Service\Description\ServiceDescription; + +$sd = new ServiceDescription(); +$sd->getCommands(); // @returns ApiCommandInterface[] +$sd->hasCommand($name); +$sd->getCommand($name); // @returns ApiCommandInterface|null +$sd->addCommand($command); // @param ApiCommandInterface $command +``` + +**After** + +```php +use Guzzle\Service\Description\ServiceDescription; + +$sd = new ServiceDescription(); +$sd->getOperations(); // @returns OperationInterface[] +$sd->hasOperation($name); +$sd->getOperation($name); // @returns OperationInterface|null +$sd->addOperation($operation); // @param OperationInterface $operation +``` + +### Guzzle\Common\Inflection\Inflector + +Namespace is now `Guzzle\Inflection\Inflector` + +### Guzzle\Http\Plugin + +Namespace is now `Guzzle\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below. + +### Guzzle\Http\Plugin\LogPlugin and Guzzle\Common\Log + +Now `Guzzle\Plugin\Log\LogPlugin` and `Guzzle\Log` respectively. + +**Before** + +```php +use Guzzle\Common\Log\ClosureLogAdapter; +use Guzzle\Http\Plugin\LogPlugin; + +/** @var \Guzzle\Http\Client */ +$client; + +// $verbosity is an integer indicating desired message verbosity level +$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE); +``` + +**After** + +```php +use Guzzle\Log\ClosureLogAdapter; +use Guzzle\Log\MessageFormatter; +use Guzzle\Plugin\Log\LogPlugin; + +/** @var \Guzzle\Http\Client */ +$client; + +// $format is a string indicating desired message format -- @see MessageFormatter +$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT); +``` + +### Guzzle\Http\Plugin\CurlAuthPlugin + +Now `Guzzle\Plugin\CurlAuth\CurlAuthPlugin`. + +### Guzzle\Http\Plugin\ExponentialBackoffPlugin + +Now `Guzzle\Plugin\Backoff\BackoffPlugin`, and other changes. + +**Before** + +```php +use Guzzle\Http\Plugin\ExponentialBackoffPlugin; + +$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge( + ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429) + )); + +$client->addSubscriber($backoffPlugin); +``` + +**After** + +```php +use Guzzle\Plugin\Backoff\BackoffPlugin; +use Guzzle\Plugin\Backoff\HttpBackoffStrategy; + +// Use convenient factory method instead -- see implementation for ideas of what +// you can do with chaining backoff strategies +$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge( + HttpBackoffStrategy::getDefaultFailureCodes(), array(429) + )); +$client->addSubscriber($backoffPlugin); +``` + +### Known Issues + +#### [BUG] Accept-Encoding header behavior changed unintentionally. + +(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e) + +In version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to +properly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen. +See issue #217 for a workaround, or use a version containing the fix. diff --git a/civicrm/vendor/guzzlehttp/guzzle/composer.json b/civicrm/vendor/guzzlehttp/guzzle/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..65687a58219e682d850d2c87b7127e17612ed942 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/composer.json @@ -0,0 +1,44 @@ +{ + "name": "guzzlehttp/guzzle", + "type": "library", + "description": "Guzzle is a PHP HTTP client library", + "keywords": ["framework", "http", "rest", "web service", "curl", "client", "HTTP client"], + "homepage": "http://guzzlephp.org/", + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.5", + "guzzlehttp/psr7": "^1.4", + "guzzlehttp/promises": "^1.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "autoload": { + "files": ["src/functions_include.php"], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "GuzzleHttp\\Tests\\": "tests/" + } + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Client.php b/civicrm/vendor/guzzlehttp/guzzle/src/Client.php new file mode 100644 index 0000000000000000000000000000000000000000..de4df8a5ca144db7192d89f72f7cbba742573906 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Client.php @@ -0,0 +1,414 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Cookie\CookieJar; +use GuzzleHttp\Promise; +use GuzzleHttp\Psr7; +use Psr\Http\Message\UriInterface; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * @method ResponseInterface get(string|UriInterface $uri, array $options = []) + * @method ResponseInterface head(string|UriInterface $uri, array $options = []) + * @method ResponseInterface put(string|UriInterface $uri, array $options = []) + * @method ResponseInterface post(string|UriInterface $uri, array $options = []) + * @method ResponseInterface patch(string|UriInterface $uri, array $options = []) + * @method ResponseInterface delete(string|UriInterface $uri, array $options = []) + * @method Promise\PromiseInterface getAsync(string|UriInterface $uri, array $options = []) + * @method Promise\PromiseInterface headAsync(string|UriInterface $uri, array $options = []) + * @method Promise\PromiseInterface putAsync(string|UriInterface $uri, array $options = []) + * @method Promise\PromiseInterface postAsync(string|UriInterface $uri, array $options = []) + * @method Promise\PromiseInterface patchAsync(string|UriInterface $uri, array $options = []) + * @method Promise\PromiseInterface deleteAsync(string|UriInterface $uri, array $options = []) + */ +class Client implements ClientInterface +{ + /** @var array Default request options */ + private $config; + + /** + * Clients accept an array of constructor parameters. + * + * Here's an example of creating a client using a base_uri and an array of + * default request options to apply to each request: + * + * $client = new Client([ + * 'base_uri' => 'http://www.foo.com/1.0/', + * 'timeout' => 0, + * 'allow_redirects' => false, + * 'proxy' => '192.168.16.1:10' + * ]); + * + * Client configuration settings include the following options: + * + * - handler: (callable) Function that transfers HTTP requests over the + * wire. The function is called with a Psr7\Http\Message\RequestInterface + * and array of transfer options, and must return a + * GuzzleHttp\Promise\PromiseInterface that is fulfilled with a + * Psr7\Http\Message\ResponseInterface on success. "handler" is a + * constructor only option that cannot be overridden in per/request + * options. If no handler is provided, a default handler will be created + * that enables all of the request options below by attaching all of the + * default middleware to the handler. + * - base_uri: (string|UriInterface) Base URI of the client that is merged + * into relative URIs. Can be a string or instance of UriInterface. + * - **: any request option + * + * @param array $config Client configuration settings. + * + * @see \GuzzleHttp\RequestOptions for a list of available request options. + */ + public function __construct(array $config = []) + { + if (!isset($config['handler'])) { + $config['handler'] = HandlerStack::create(); + } elseif (!is_callable($config['handler'])) { + throw new \InvalidArgumentException('handler must be a callable'); + } + + // Convert the base_uri to a UriInterface + if (isset($config['base_uri'])) { + $config['base_uri'] = Psr7\uri_for($config['base_uri']); + } + + $this->configureDefaults($config); + } + + public function __call($method, $args) + { + if (count($args) < 1) { + throw new \InvalidArgumentException('Magic request methods require a URI and optional options array'); + } + + $uri = $args[0]; + $opts = isset($args[1]) ? $args[1] : []; + + return substr($method, -5) === 'Async' + ? $this->requestAsync(substr($method, 0, -5), $uri, $opts) + : $this->request($method, $uri, $opts); + } + + public function sendAsync(RequestInterface $request, array $options = []) + { + // Merge the base URI into the request URI if needed. + $options = $this->prepareDefaults($options); + + return $this->transfer( + $request->withUri($this->buildUri($request->getUri(), $options), $request->hasHeader('Host')), + $options + ); + } + + public function send(RequestInterface $request, array $options = []) + { + $options[RequestOptions::SYNCHRONOUS] = true; + return $this->sendAsync($request, $options)->wait(); + } + + public function requestAsync($method, $uri = '', array $options = []) + { + $options = $this->prepareDefaults($options); + // Remove request modifying parameter because it can be done up-front. + $headers = isset($options['headers']) ? $options['headers'] : []; + $body = isset($options['body']) ? $options['body'] : null; + $version = isset($options['version']) ? $options['version'] : '1.1'; + // Merge the URI into the base URI. + $uri = $this->buildUri($uri, $options); + if (is_array($body)) { + $this->invalidBody(); + } + $request = new Psr7\Request($method, $uri, $headers, $body, $version); + // Remove the option so that they are not doubly-applied. + unset($options['headers'], $options['body'], $options['version']); + + return $this->transfer($request, $options); + } + + public function request($method, $uri = '', array $options = []) + { + $options[RequestOptions::SYNCHRONOUS] = true; + return $this->requestAsync($method, $uri, $options)->wait(); + } + + public function getConfig($option = null) + { + return $option === null + ? $this->config + : (isset($this->config[$option]) ? $this->config[$option] : null); + } + + private function buildUri($uri, array $config) + { + // for BC we accept null which would otherwise fail in uri_for + $uri = Psr7\uri_for($uri === null ? '' : $uri); + + if (isset($config['base_uri'])) { + $uri = Psr7\UriResolver::resolve(Psr7\uri_for($config['base_uri']), $uri); + } + + return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri; + } + + /** + * Configures the default options for a client. + * + * @param array $config + */ + private function configureDefaults(array $config) + { + $defaults = [ + 'allow_redirects' => RedirectMiddleware::$defaultSettings, + 'http_errors' => true, + 'decode_content' => true, + 'verify' => true, + 'cookies' => false + ]; + + // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. + + // We can only trust the HTTP_PROXY environment variable in a CLI + // process due to the fact that PHP has no reliable mechanism to + // get environment variables that start with "HTTP_". + if (php_sapi_name() == 'cli' && getenv('HTTP_PROXY')) { + $defaults['proxy']['http'] = getenv('HTTP_PROXY'); + } + + if ($proxy = getenv('HTTPS_PROXY')) { + $defaults['proxy']['https'] = $proxy; + } + + if ($noProxy = getenv('NO_PROXY')) { + $cleanedNoProxy = str_replace(' ', '', $noProxy); + $defaults['proxy']['no'] = explode(',', $cleanedNoProxy); + } + + $this->config = $config + $defaults; + + if (!empty($config['cookies']) && $config['cookies'] === true) { + $this->config['cookies'] = new CookieJar(); + } + + // Add the default user-agent header. + if (!isset($this->config['headers'])) { + $this->config['headers'] = ['User-Agent' => default_user_agent()]; + } else { + // Add the User-Agent header if one was not already set. + foreach (array_keys($this->config['headers']) as $name) { + if (strtolower($name) === 'user-agent') { + return; + } + } + $this->config['headers']['User-Agent'] = default_user_agent(); + } + } + + /** + * Merges default options into the array. + * + * @param array $options Options to modify by reference + * + * @return array + */ + private function prepareDefaults($options) + { + $defaults = $this->config; + + if (!empty($defaults['headers'])) { + // Default headers are only added if they are not present. + $defaults['_conditional'] = $defaults['headers']; + unset($defaults['headers']); + } + + // Special handling for headers is required as they are added as + // conditional headers and as headers passed to a request ctor. + if (array_key_exists('headers', $options)) { + // Allows default headers to be unset. + if ($options['headers'] === null) { + $defaults['_conditional'] = null; + unset($options['headers']); + } elseif (!is_array($options['headers'])) { + throw new \InvalidArgumentException('headers must be an array'); + } + } + + // Shallow merge defaults underneath options. + $result = $options + $defaults; + + // Remove null values. + foreach ($result as $k => $v) { + if ($v === null) { + unset($result[$k]); + } + } + + return $result; + } + + /** + * Transfers the given request and applies request options. + * + * The URI of the request is not modified and the request options are used + * as-is without merging in default options. + * + * @param RequestInterface $request + * @param array $options + * + * @return Promise\PromiseInterface + */ + private function transfer(RequestInterface $request, array $options) + { + // save_to -> sink + if (isset($options['save_to'])) { + $options['sink'] = $options['save_to']; + unset($options['save_to']); + } + + // exceptions -> http_errors + if (isset($options['exceptions'])) { + $options['http_errors'] = $options['exceptions']; + unset($options['exceptions']); + } + + $request = $this->applyOptions($request, $options); + $handler = $options['handler']; + + try { + return Promise\promise_for($handler($request, $options)); + } catch (\Exception $e) { + return Promise\rejection_for($e); + } + } + + /** + * Applies the array of request options to a request. + * + * @param RequestInterface $request + * @param array $options + * + * @return RequestInterface + */ + private function applyOptions(RequestInterface $request, array &$options) + { + $modify = []; + + if (isset($options['form_params'])) { + if (isset($options['multipart'])) { + throw new \InvalidArgumentException('You cannot use ' + . 'form_params and multipart at the same time. Use the ' + . 'form_params option if you want to send application/' + . 'x-www-form-urlencoded requests, and the multipart ' + . 'option to send multipart/form-data requests.'); + } + $options['body'] = http_build_query($options['form_params'], '', '&'); + unset($options['form_params']); + $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded'; + } + + if (isset($options['multipart'])) { + $options['body'] = new Psr7\MultipartStream($options['multipart']); + unset($options['multipart']); + } + + if (isset($options['json'])) { + $options['body'] = \GuzzleHttp\json_encode($options['json']); + unset($options['json']); + $options['_conditional']['Content-Type'] = 'application/json'; + } + + if (!empty($options['decode_content']) + && $options['decode_content'] !== true + ) { + $modify['set_headers']['Accept-Encoding'] = $options['decode_content']; + } + + if (isset($options['headers'])) { + if (isset($modify['set_headers'])) { + $modify['set_headers'] = $options['headers'] + $modify['set_headers']; + } else { + $modify['set_headers'] = $options['headers']; + } + unset($options['headers']); + } + + if (isset($options['body'])) { + if (is_array($options['body'])) { + $this->invalidBody(); + } + $modify['body'] = Psr7\stream_for($options['body']); + unset($options['body']); + } + + if (!empty($options['auth']) && is_array($options['auth'])) { + $value = $options['auth']; + $type = isset($value[2]) ? strtolower($value[2]) : 'basic'; + switch ($type) { + case 'basic': + $modify['set_headers']['Authorization'] = 'Basic ' + . base64_encode("$value[0]:$value[1]"); + break; + case 'digest': + // @todo: Do not rely on curl + $options['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_DIGEST; + $options['curl'][CURLOPT_USERPWD] = "$value[0]:$value[1]"; + break; + case 'ntlm': + $options['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_NTLM; + $options['curl'][CURLOPT_USERPWD] = "$value[0]:$value[1]"; + break; + } + } + + if (isset($options['query'])) { + $value = $options['query']; + if (is_array($value)) { + $value = http_build_query($value, null, '&', PHP_QUERY_RFC3986); + } + if (!is_string($value)) { + throw new \InvalidArgumentException('query must be a string or array'); + } + $modify['query'] = $value; + unset($options['query']); + } + + // Ensure that sink is not an invalid value. + if (isset($options['sink'])) { + // TODO: Add more sink validation? + if (is_bool($options['sink'])) { + throw new \InvalidArgumentException('sink must not be a boolean'); + } + } + + $request = Psr7\modify_request($request, $modify); + if ($request->getBody() instanceof Psr7\MultipartStream) { + // Use a multipart/form-data POST if a Content-Type is not set. + $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary=' + . $request->getBody()->getBoundary(); + } + + // Merge in conditional headers if they are not present. + if (isset($options['_conditional'])) { + // Build up the changes so it's in a single clone of the message. + $modify = []; + foreach ($options['_conditional'] as $k => $v) { + if (!$request->hasHeader($k)) { + $modify['set_headers'][$k] = $v; + } + } + $request = Psr7\modify_request($request, $modify); + // Don't pass this internal value along to middleware/handlers. + unset($options['_conditional']); + } + + return $request; + } + + private function invalidBody() + { + throw new \InvalidArgumentException('Passing in the "body" request ' + . 'option as an array to send a POST request has been deprecated. ' + . 'Please use the "form_params" request option to send a ' + . 'application/x-www-form-urlencoded request, or the "multipart" ' + . 'request option to send a multipart/form-data request.'); + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/civicrm/vendor/guzzlehttp/guzzle/src/ClientInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..5a67b66bf866504129f91c95d12c64e09f8bfe36 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -0,0 +1,84 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Promise\PromiseInterface; +use GuzzleHttp\Exception\GuzzleException; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\UriInterface; + +/** + * Client interface for sending HTTP requests. + */ +interface ClientInterface +{ + const VERSION = '6.2.1'; + + /** + * Send an HTTP request. + * + * @param RequestInterface $request Request to send + * @param array $options Request options to apply to the given + * request and to the transfer. + * + * @return ResponseInterface + * @throws GuzzleException + */ + public function send(RequestInterface $request, array $options = []); + + /** + * Asynchronously send an HTTP request. + * + * @param RequestInterface $request Request to send + * @param array $options Request options to apply to the given + * request and to the transfer. + * + * @return PromiseInterface + */ + public function sendAsync(RequestInterface $request, array $options = []); + + /** + * Create and send an HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string $method HTTP method. + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @return ResponseInterface + * @throws GuzzleException + */ + public function request($method, $uri, array $options = []); + + /** + * Create and send an asynchronous HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string $method HTTP method + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. + * + * @return PromiseInterface + */ + public function requestAsync($method, $uri, array $options = []); + + /** + * Get a client configuration option. + * + * These options include default request options of the client, a "handler" + * (if utilized by the concrete client), and a "base_uri" if utilized by + * the concrete client. + * + * @param string|null $option The config option to retrieve. + * + * @return mixed + */ + public function getConfig($option = null); +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php new file mode 100644 index 0000000000000000000000000000000000000000..1c17b5a436ffa190c2af26d08b7250317eedfe46 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php @@ -0,0 +1,314 @@ +<?php +namespace GuzzleHttp\Cookie; + +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Cookie jar that stores cookies as an array + */ +class CookieJar implements CookieJarInterface +{ + /** @var SetCookie[] Loaded cookie data */ + private $cookies = []; + + /** @var bool */ + private $strictMode; + + /** + * @param bool $strictMode Set to true to throw exceptions when invalid + * cookies are added to the cookie jar. + * @param array $cookieArray Array of SetCookie objects or a hash of + * arrays that can be used with the SetCookie + * constructor + */ + public function __construct($strictMode = false, $cookieArray = []) + { + $this->strictMode = $strictMode; + + foreach ($cookieArray as $cookie) { + if (!($cookie instanceof SetCookie)) { + $cookie = new SetCookie($cookie); + } + $this->setCookie($cookie); + } + } + + /** + * Create a new Cookie jar from an associative array and domain. + * + * @param array $cookies Cookies to create the jar from + * @param string $domain Domain to set the cookies to + * + * @return self + */ + public static function fromArray(array $cookies, $domain) + { + $cookieJar = new self(); + foreach ($cookies as $name => $value) { + $cookieJar->setCookie(new SetCookie([ + 'Domain' => $domain, + 'Name' => $name, + 'Value' => $value, + 'Discard' => true + ])); + } + + return $cookieJar; + } + + /** + * @deprecated + */ + public static function getCookieValue($value) + { + return $value; + } + + /** + * Evaluate if this cookie should be persisted to storage + * that survives between requests. + * + * @param SetCookie $cookie Being evaluated. + * @param bool $allowSessionCookies If we should persist session cookies + * @return bool + */ + public static function shouldPersist( + SetCookie $cookie, + $allowSessionCookies = false + ) { + if ($cookie->getExpires() || $allowSessionCookies) { + if (!$cookie->getDiscard()) { + return true; + } + } + + return false; + } + + /** + * Finds and returns the cookie based on the name + * + * @param string $name cookie name to search for + * @return SetCookie|null cookie that was found or null if not found + */ + public function getCookieByName($name) + { + // don't allow a null name + if($name === null) { + return null; + } + foreach($this->cookies as $cookie) { + if($cookie->getName() !== null && strcasecmp($cookie->getName(), $name) === 0) { + return $cookie; + } + } + } + + public function toArray() + { + return array_map(function (SetCookie $cookie) { + return $cookie->toArray(); + }, $this->getIterator()->getArrayCopy()); + } + + public function clear($domain = null, $path = null, $name = null) + { + if (!$domain) { + $this->cookies = []; + return; + } elseif (!$path) { + $this->cookies = array_filter( + $this->cookies, + function (SetCookie $cookie) use ($path, $domain) { + return !$cookie->matchesDomain($domain); + } + ); + } elseif (!$name) { + $this->cookies = array_filter( + $this->cookies, + function (SetCookie $cookie) use ($path, $domain) { + return !($cookie->matchesPath($path) && + $cookie->matchesDomain($domain)); + } + ); + } else { + $this->cookies = array_filter( + $this->cookies, + function (SetCookie $cookie) use ($path, $domain, $name) { + return !($cookie->getName() == $name && + $cookie->matchesPath($path) && + $cookie->matchesDomain($domain)); + } + ); + } + } + + public function clearSessionCookies() + { + $this->cookies = array_filter( + $this->cookies, + function (SetCookie $cookie) { + return !$cookie->getDiscard() && $cookie->getExpires(); + } + ); + } + + public function setCookie(SetCookie $cookie) + { + // If the name string is empty (but not 0), ignore the set-cookie + // string entirely. + $name = $cookie->getName(); + if (!$name && $name !== '0') { + return false; + } + + // Only allow cookies with set and valid domain, name, value + $result = $cookie->validate(); + if ($result !== true) { + if ($this->strictMode) { + throw new \RuntimeException('Invalid cookie: ' . $result); + } else { + $this->removeCookieIfEmpty($cookie); + return false; + } + } + + // Resolve conflicts with previously set cookies + foreach ($this->cookies as $i => $c) { + + // Two cookies are identical, when their path, and domain are + // identical. + if ($c->getPath() != $cookie->getPath() || + $c->getDomain() != $cookie->getDomain() || + $c->getName() != $cookie->getName() + ) { + continue; + } + + // The previously set cookie is a discard cookie and this one is + // not so allow the new cookie to be set + if (!$cookie->getDiscard() && $c->getDiscard()) { + unset($this->cookies[$i]); + continue; + } + + // If the new cookie's expiration is further into the future, then + // replace the old cookie + if ($cookie->getExpires() > $c->getExpires()) { + unset($this->cookies[$i]); + continue; + } + + // If the value has changed, we better change it + if ($cookie->getValue() !== $c->getValue()) { + unset($this->cookies[$i]); + continue; + } + + // The cookie exists, so no need to continue + return false; + } + + $this->cookies[] = $cookie; + + return true; + } + + public function count() + { + return count($this->cookies); + } + + public function getIterator() + { + return new \ArrayIterator(array_values($this->cookies)); + } + + public function extractCookies( + RequestInterface $request, + ResponseInterface $response + ) { + if ($cookieHeader = $response->getHeader('Set-Cookie')) { + foreach ($cookieHeader as $cookie) { + $sc = SetCookie::fromString($cookie); + if (!$sc->getDomain()) { + $sc->setDomain($request->getUri()->getHost()); + } + if (0 !== strpos($sc->getPath(), '/')) { + $sc->setPath($this->getCookiePathFromRequest($request)); + } + $this->setCookie($sc); + } + } + } + + /** + * Computes cookie path following RFC 6265 section 5.1.4 + * + * @link https://tools.ietf.org/html/rfc6265#section-5.1.4 + * + * @param RequestInterface $request + * @return string + */ + private function getCookiePathFromRequest(RequestInterface $request) + { + $uriPath = $request->getUri()->getPath(); + if ('' === $uriPath) { + return '/'; + } + if (0 !== strpos($uriPath, '/')) { + return '/'; + } + if ('/' === $uriPath) { + return '/'; + } + if (0 === $lastSlashPos = strrpos($uriPath, '/')) { + return '/'; + } + + return substr($uriPath, 0, $lastSlashPos); + } + + public function withCookieHeader(RequestInterface $request) + { + $values = []; + $uri = $request->getUri(); + $scheme = $uri->getScheme(); + $host = $uri->getHost(); + $path = $uri->getPath() ?: '/'; + + foreach ($this->cookies as $cookie) { + if ($cookie->matchesPath($path) && + $cookie->matchesDomain($host) && + !$cookie->isExpired() && + (!$cookie->getSecure() || $scheme === 'https') + ) { + $values[] = $cookie->getName() . '=' + . $cookie->getValue(); + } + } + + return $values + ? $request->withHeader('Cookie', implode('; ', $values)) + : $request; + } + + /** + * If a cookie already exists and the server asks to set it again with a + * null value, the cookie must be deleted. + * + * @param SetCookie $cookie + */ + private function removeCookieIfEmpty(SetCookie $cookie) + { + $cookieValue = $cookie->getValue(); + if ($cookieValue === null || $cookieValue === '') { + $this->clear( + $cookie->getDomain(), + $cookie->getPath(), + $cookie->getName() + ); + } + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..2cf298a867b3713f6fa3143d5288ce2458c311c2 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php @@ -0,0 +1,84 @@ +<?php +namespace GuzzleHttp\Cookie; + +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Stores HTTP cookies. + * + * It extracts cookies from HTTP requests, and returns them in HTTP responses. + * CookieJarInterface instances automatically expire contained cookies when + * necessary. Subclasses are also responsible for storing and retrieving + * cookies from a file, database, etc. + * + * @link http://docs.python.org/2/library/cookielib.html Inspiration + */ +interface CookieJarInterface extends \Countable, \IteratorAggregate +{ + /** + * Create a request with added cookie headers. + * + * If no matching cookies are found in the cookie jar, then no Cookie + * header is added to the request and the same request is returned. + * + * @param RequestInterface $request Request object to modify. + * + * @return RequestInterface returns the modified request. + */ + public function withCookieHeader(RequestInterface $request); + + /** + * Extract cookies from an HTTP response and store them in the CookieJar. + * + * @param RequestInterface $request Request that was sent + * @param ResponseInterface $response Response that was received + */ + public function extractCookies( + RequestInterface $request, + ResponseInterface $response + ); + + /** + * Sets a cookie in the cookie jar. + * + * @param SetCookie $cookie Cookie to set. + * + * @return bool Returns true on success or false on failure + */ + public function setCookie(SetCookie $cookie); + + /** + * Remove cookies currently held in the cookie jar. + * + * Invoking this method without arguments will empty the whole cookie jar. + * If given a $domain argument only cookies belonging to that domain will + * be removed. If given a $domain and $path argument, cookies belonging to + * the specified path within that domain are removed. If given all three + * arguments, then the cookie with the specified name, path and domain is + * removed. + * + * @param string $domain Clears cookies matching a domain + * @param string $path Clears cookies matching a domain and path + * @param string $name Clears cookies matching a domain, path, and name + * + * @return CookieJarInterface + */ + public function clear($domain = null, $path = null, $name = null); + + /** + * Discard all sessions cookies. + * + * Removes cookies that don't have an expire field or a have a discard + * field set to true. To be called when the user agent shuts down according + * to RFC 2965. + */ + public function clearSessionCookies(); + + /** + * Converts the cookie jar to an array. + * + * @return array + */ + public function toArray(); +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php new file mode 100644 index 0000000000000000000000000000000000000000..9887c1d54b2db295e6d9e5dfc67510d54941d940 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php @@ -0,0 +1,90 @@ +<?php +namespace GuzzleHttp\Cookie; + +/** + * Persists non-session cookies using a JSON formatted file + */ +class FileCookieJar extends CookieJar +{ + /** @var string filename */ + private $filename; + + /** @var bool Control whether to persist session cookies or not. */ + private $storeSessionCookies; + + /** + * Create a new FileCookieJar object + * + * @param string $cookieFile File to store the cookie data + * @param bool $storeSessionCookies Set to true to store session cookies + * in the cookie jar. + * + * @throws \RuntimeException if the file cannot be found or created + */ + public function __construct($cookieFile, $storeSessionCookies = false) + { + $this->filename = $cookieFile; + $this->storeSessionCookies = $storeSessionCookies; + + if (file_exists($cookieFile)) { + $this->load($cookieFile); + } + } + + /** + * Saves the file when shutting down + */ + public function __destruct() + { + $this->save($this->filename); + } + + /** + * Saves the cookies to a file. + * + * @param string $filename File to save + * @throws \RuntimeException if the file cannot be found or created + */ + public function save($filename) + { + $json = []; + foreach ($this as $cookie) { + /** @var SetCookie $cookie */ + if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { + $json[] = $cookie->toArray(); + } + } + + $jsonStr = \GuzzleHttp\json_encode($json); + if (false === file_put_contents($filename, $jsonStr)) { + throw new \RuntimeException("Unable to save file {$filename}"); + } + } + + /** + * Load cookies from a JSON formatted file. + * + * Old cookies are kept unless overwritten by newly loaded ones. + * + * @param string $filename Cookie file to load. + * @throws \RuntimeException if the file cannot be loaded. + */ + public function load($filename) + { + $json = file_get_contents($filename); + if (false === $json) { + throw new \RuntimeException("Unable to load file {$filename}"); + } elseif ($json === '') { + return; + } + + $data = \GuzzleHttp\json_decode($json, true); + if (is_array($data)) { + foreach (json_decode($json, true) as $cookie) { + $this->setCookie(new SetCookie($cookie)); + } + } elseif (strlen($data)) { + throw new \RuntimeException("Invalid cookie file: {$filename}"); + } + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php new file mode 100644 index 0000000000000000000000000000000000000000..e4bfafd4fb034451f4e71b44c45a55f1f5810a2b --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php @@ -0,0 +1,71 @@ +<?php +namespace GuzzleHttp\Cookie; + +/** + * Persists cookies in the client session + */ +class SessionCookieJar extends CookieJar +{ + /** @var string session key */ + private $sessionKey; + + /** @var bool Control whether to persist session cookies or not. */ + private $storeSessionCookies; + + /** + * Create a new SessionCookieJar object + * + * @param string $sessionKey Session key name to store the cookie + * data in session + * @param bool $storeSessionCookies Set to true to store session cookies + * in the cookie jar. + */ + public function __construct($sessionKey, $storeSessionCookies = false) + { + $this->sessionKey = $sessionKey; + $this->storeSessionCookies = $storeSessionCookies; + $this->load(); + } + + /** + * Saves cookies to session when shutting down + */ + public function __destruct() + { + $this->save(); + } + + /** + * Save cookies to the client session + */ + public function save() + { + $json = []; + foreach ($this as $cookie) { + /** @var SetCookie $cookie */ + if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { + $json[] = $cookie->toArray(); + } + } + + $_SESSION[$this->sessionKey] = json_encode($json); + } + + /** + * Load the contents of the client session into the data array + */ + protected function load() + { + if (!isset($_SESSION[$this->sessionKey])) { + return; + } + $data = json_decode($_SESSION[$this->sessionKey], true); + if (is_array($data)) { + foreach ($data as $cookie) { + $this->setCookie(new SetCookie($cookie)); + } + } elseif (strlen($data)) { + throw new \RuntimeException("Invalid cookie data"); + } + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php new file mode 100644 index 0000000000000000000000000000000000000000..c911e2a3fca459736020d178964a5106de886c4c --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php @@ -0,0 +1,404 @@ +<?php +namespace GuzzleHttp\Cookie; + +/** + * Set-Cookie object + */ +class SetCookie +{ + /** @var array */ + private static $defaults = [ + 'Name' => null, + 'Value' => null, + 'Domain' => null, + 'Path' => '/', + 'Max-Age' => null, + 'Expires' => null, + 'Secure' => false, + 'Discard' => false, + 'HttpOnly' => false + ]; + + /** @var array Cookie data */ + private $data; + + /** + * Create a new SetCookie object from a string + * + * @param string $cookie Set-Cookie header string + * + * @return self + */ + public static function fromString($cookie) + { + // Create the default return array + $data = self::$defaults; + // Explode the cookie string using a series of semicolons + $pieces = array_filter(array_map('trim', explode(';', $cookie))); + // The name of the cookie (first kvp) must include an equal sign. + if (empty($pieces) || !strpos($pieces[0], '=')) { + return new self($data); + } + + // Add the cookie pieces into the parsed data array + foreach ($pieces as $part) { + + $cookieParts = explode('=', $part, 2); + $key = trim($cookieParts[0]); + $value = isset($cookieParts[1]) + ? trim($cookieParts[1], " \n\r\t\0\x0B") + : true; + + // Only check for non-cookies when cookies have been found + if (empty($data['Name'])) { + $data['Name'] = $key; + $data['Value'] = $value; + } else { + foreach (array_keys(self::$defaults) as $search) { + if (!strcasecmp($search, $key)) { + $data[$search] = $value; + continue 2; + } + } + $data[$key] = $value; + } + } + + return new self($data); + } + + /** + * @param array $data Array of cookie data provided by a Cookie parser + */ + public function __construct(array $data = []) + { + $this->data = array_replace(self::$defaults, $data); + // Extract the Expires value and turn it into a UNIX timestamp if needed + if (!$this->getExpires() && $this->getMaxAge()) { + // Calculate the Expires date + $this->setExpires(time() + $this->getMaxAge()); + } elseif ($this->getExpires() && !is_numeric($this->getExpires())) { + $this->setExpires($this->getExpires()); + } + } + + public function __toString() + { + $str = $this->data['Name'] . '=' . $this->data['Value'] . '; '; + foreach ($this->data as $k => $v) { + if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) { + if ($k === 'Expires') { + $str .= 'Expires=' . gmdate('D, d M Y H:i:s \G\M\T', $v) . '; '; + } else { + $str .= ($v === true ? $k : "{$k}={$v}") . '; '; + } + } + } + + return rtrim($str, '; '); + } + + public function toArray() + { + return $this->data; + } + + /** + * Get the cookie name + * + * @return string + */ + public function getName() + { + return $this->data['Name']; + } + + /** + * Set the cookie name + * + * @param string $name Cookie name + */ + public function setName($name) + { + $this->data['Name'] = $name; + } + + /** + * Get the cookie value + * + * @return string + */ + public function getValue() + { + return $this->data['Value']; + } + + /** + * Set the cookie value + * + * @param string $value Cookie value + */ + public function setValue($value) + { + $this->data['Value'] = $value; + } + + /** + * Get the domain + * + * @return string|null + */ + public function getDomain() + { + return $this->data['Domain']; + } + + /** + * Set the domain of the cookie + * + * @param string $domain + */ + public function setDomain($domain) + { + $this->data['Domain'] = $domain; + } + + /** + * Get the path + * + * @return string + */ + public function getPath() + { + return $this->data['Path']; + } + + /** + * Set the path of the cookie + * + * @param string $path Path of the cookie + */ + public function setPath($path) + { + $this->data['Path'] = $path; + } + + /** + * Maximum lifetime of the cookie in seconds + * + * @return int|null + */ + public function getMaxAge() + { + return $this->data['Max-Age']; + } + + /** + * Set the max-age of the cookie + * + * @param int $maxAge Max age of the cookie in seconds + */ + public function setMaxAge($maxAge) + { + $this->data['Max-Age'] = $maxAge; + } + + /** + * The UNIX timestamp when the cookie Expires + * + * @return mixed + */ + public function getExpires() + { + return $this->data['Expires']; + } + + /** + * Set the unix timestamp for which the cookie will expire + * + * @param int $timestamp Unix timestamp + */ + public function setExpires($timestamp) + { + $this->data['Expires'] = is_numeric($timestamp) + ? (int) $timestamp + : strtotime($timestamp); + } + + /** + * Get whether or not this is a secure cookie + * + * @return null|bool + */ + public function getSecure() + { + return $this->data['Secure']; + } + + /** + * Set whether or not the cookie is secure + * + * @param bool $secure Set to true or false if secure + */ + public function setSecure($secure) + { + $this->data['Secure'] = $secure; + } + + /** + * Get whether or not this is a session cookie + * + * @return null|bool + */ + public function getDiscard() + { + return $this->data['Discard']; + } + + /** + * Set whether or not this is a session cookie + * + * @param bool $discard Set to true or false if this is a session cookie + */ + public function setDiscard($discard) + { + $this->data['Discard'] = $discard; + } + + /** + * Get whether or not this is an HTTP only cookie + * + * @return bool + */ + public function getHttpOnly() + { + return $this->data['HttpOnly']; + } + + /** + * Set whether or not this is an HTTP only cookie + * + * @param bool $httpOnly Set to true or false if this is HTTP only + */ + public function setHttpOnly($httpOnly) + { + $this->data['HttpOnly'] = $httpOnly; + } + + /** + * Check if the cookie matches a path value. + * + * A request-path path-matches a given cookie-path if at least one of + * the following conditions holds: + * + * - The cookie-path and the request-path are identical. + * - The cookie-path is a prefix of the request-path, and the last + * character of the cookie-path is %x2F ("/"). + * - The cookie-path is a prefix of the request-path, and the first + * character of the request-path that is not included in the cookie- + * path is a %x2F ("/") character. + * + * @param string $requestPath Path to check against + * + * @return bool + */ + public function matchesPath($requestPath) + { + $cookiePath = $this->getPath(); + + // Match on exact matches or when path is the default empty "/" + if ($cookiePath === '/' || $cookiePath == $requestPath) { + return true; + } + + // Ensure that the cookie-path is a prefix of the request path. + if (0 !== strpos($requestPath, $cookiePath)) { + return false; + } + + // Match if the last character of the cookie-path is "/" + if (substr($cookiePath, -1, 1) === '/') { + return true; + } + + // Match if the first character not included in cookie path is "/" + return substr($requestPath, strlen($cookiePath), 1) === '/'; + } + + /** + * Check if the cookie matches a domain value + * + * @param string $domain Domain to check against + * + * @return bool + */ + public function matchesDomain($domain) + { + // Remove the leading '.' as per spec in RFC 6265. + // http://tools.ietf.org/html/rfc6265#section-5.2.3 + $cookieDomain = ltrim($this->getDomain(), '.'); + + // Domain not set or exact match. + if (!$cookieDomain || !strcasecmp($domain, $cookieDomain)) { + return true; + } + + // Matching the subdomain according to RFC 6265. + // http://tools.ietf.org/html/rfc6265#section-5.1.3 + if (filter_var($domain, FILTER_VALIDATE_IP)) { + return false; + } + + return (bool) preg_match('/\.' . preg_quote($cookieDomain) . '$/', $domain); + } + + /** + * Check if the cookie is expired + * + * @return bool + */ + public function isExpired() + { + return $this->getExpires() && time() > $this->getExpires(); + } + + /** + * Check if the cookie is valid according to RFC 6265 + * + * @return bool|string Returns true if valid or an error message if invalid + */ + public function validate() + { + // Names must not be empty, but can be 0 + $name = $this->getName(); + if (empty($name) && !is_numeric($name)) { + return 'The cookie name must not be empty'; + } + + // Check if any of the invalid characters are present in the cookie name + if (preg_match( + '/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/', + $name) + ) { + return 'Cookie name must not contain invalid characters: ASCII ' + . 'Control characters (0-31;127), space, tab and the ' + . 'following characters: ()<>@,;:\"/?={}'; + } + + // Value must not be empty, but can be 0 + $value = $this->getValue(); + if (empty($value) && !is_numeric($value)) { + return 'The cookie value must not be empty'; + } + + // Domains must not be empty, but can be 0 + // A "0" is not a valid internet domain, but may be used as server name + // in a private network. + $domain = $this->getDomain(); + if (empty($domain) && !is_numeric($domain)) { + return 'The cookie domain must not be empty'; + } + + return true; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php new file mode 100644 index 0000000000000000000000000000000000000000..427d896fb2f2a715d6c797b87ec6159ddf8453bc --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php @@ -0,0 +1,27 @@ +<?php +namespace GuzzleHttp\Exception; + +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Exception when an HTTP error occurs (4xx or 5xx error) + */ +class BadResponseException extends RequestException +{ + public function __construct( + $message, + RequestInterface $request, + ResponseInterface $response = null, + \Exception $previous = null, + array $handlerContext = [] + ) { + if (null === $response) { + @trigger_error( + 'Instantiating the ' . __CLASS__ . ' class without a Response is deprecated since version 6.3 and will be removed in 7.0.', + E_USER_DEPRECATED + ); + } + parent::__construct($message, $request, $response, $previous, $handlerContext); + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php new file mode 100644 index 0000000000000000000000000000000000000000..f95c09f2b1a50923056acbf108e1695e2a148bfa --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php @@ -0,0 +1,7 @@ +<?php +namespace GuzzleHttp\Exception; + +/** + * Exception when a client error is encountered (4xx codes) + */ +class ClientException extends BadResponseException {} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php new file mode 100644 index 0000000000000000000000000000000000000000..d33b0cc19d6f808fd16ad5f24982348b219cb999 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php @@ -0,0 +1,37 @@ +<?php +namespace GuzzleHttp\Exception; + +use Psr\Http\Message\RequestInterface; + +/** + * Exception thrown when a connection cannot be established. + * + * Note that no response is present for a ConnectException + */ +class ConnectException extends RequestException +{ + public function __construct( + $message, + RequestInterface $request, + \Exception $previous = null, + array $handlerContext = [] + ) { + parent::__construct($message, $request, null, $previous, $handlerContext); + } + + /** + * @return null + */ + public function getResponse() + { + return null; + } + + /** + * @return bool + */ + public function hasResponse() + { + return false; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php new file mode 100644 index 0000000000000000000000000000000000000000..c82998e0d7ef06fad4bbf048e2a61fc921b768ed --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php @@ -0,0 +1,4 @@ +<?php +namespace GuzzleHttp\Exception; + +interface GuzzleException {} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php new file mode 100644 index 0000000000000000000000000000000000000000..39de327e7b6ea887f0ebb904faa3340c2c1d5d0f --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php @@ -0,0 +1,217 @@ +<?php +namespace GuzzleHttp\Exception; + +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use GuzzleHttp\Promise\PromiseInterface; +use Psr\Http\Message\UriInterface; + +/** + * HTTP Request exception + */ +class RequestException extends TransferException +{ + /** @var RequestInterface */ + private $request; + + /** @var ResponseInterface */ + private $response; + + /** @var array */ + private $handlerContext; + + public function __construct( + $message, + RequestInterface $request, + ResponseInterface $response = null, + \Exception $previous = null, + array $handlerContext = [] + ) { + // Set the code of the exception if the response is set and not future. + $code = $response && !($response instanceof PromiseInterface) + ? $response->getStatusCode() + : 0; + parent::__construct($message, $code, $previous); + $this->request = $request; + $this->response = $response; + $this->handlerContext = $handlerContext; + } + + /** + * Wrap non-RequestExceptions with a RequestException + * + * @param RequestInterface $request + * @param \Exception $e + * + * @return RequestException + */ + public static function wrapException(RequestInterface $request, \Exception $e) + { + return $e instanceof RequestException + ? $e + : new RequestException($e->getMessage(), $request, null, $e); + } + + /** + * Factory method to create a new exception with a normalized error message + * + * @param RequestInterface $request Request + * @param ResponseInterface $response Response received + * @param \Exception $previous Previous exception + * @param array $ctx Optional handler context. + * + * @return self + */ + public static function create( + RequestInterface $request, + ResponseInterface $response = null, + \Exception $previous = null, + array $ctx = [] + ) { + if (!$response) { + return new self( + 'Error completing request', + $request, + null, + $previous, + $ctx + ); + } + + $level = (int) floor($response->getStatusCode() / 100); + if ($level === 4) { + $label = 'Client error'; + $className = ClientException::class; + } elseif ($level === 5) { + $label = 'Server error'; + $className = ServerException::class; + } else { + $label = 'Unsuccessful request'; + $className = __CLASS__; + } + + $uri = $request->getUri(); + $uri = static::obfuscateUri($uri); + + // Client Error: `GET /` resulted in a `404 Not Found` response: + // <html> ... (truncated) + $message = sprintf( + '%s: `%s %s` resulted in a `%s %s` response', + $label, + $request->getMethod(), + $uri, + $response->getStatusCode(), + $response->getReasonPhrase() + ); + + $summary = static::getResponseBodySummary($response); + + if ($summary !== null) { + $message .= ":\n{$summary}\n"; + } + + return new $className($message, $request, $response, $previous, $ctx); + } + + /** + * Get a short summary of the response + * + * Will return `null` if the response is not printable. + * + * @param ResponseInterface $response + * + * @return string|null + */ + public static function getResponseBodySummary(ResponseInterface $response) + { + $body = $response->getBody(); + + if (!$body->isSeekable()) { + return null; + } + + $size = $body->getSize(); + + if ($size === 0) { + return null; + } + + $summary = $body->read(120); + $body->rewind(); + + if ($size > 120) { + $summary .= ' (truncated...)'; + } + + // Matches any printable character, including unicode characters: + // letters, marks, numbers, punctuation, spacing, and separators. + if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) { + return null; + } + + return $summary; + } + + /** + * Obfuscates URI if there is an username and a password present + * + * @param UriInterface $uri + * + * @return UriInterface + */ + private static function obfuscateUri($uri) + { + $userInfo = $uri->getUserInfo(); + + if (false !== ($pos = strpos($userInfo, ':'))) { + return $uri->withUserInfo(substr($userInfo, 0, $pos), '***'); + } + + return $uri; + } + + /** + * Get the request that caused the exception + * + * @return RequestInterface + */ + public function getRequest() + { + return $this->request; + } + + /** + * Get the associated response + * + * @return ResponseInterface|null + */ + public function getResponse() + { + return $this->response; + } + + /** + * Check if a response was received + * + * @return bool + */ + public function hasResponse() + { + return $this->response !== null; + } + + /** + * Get contextual information about the error from the underlying handler. + * + * The contents of this array will vary depending on which handler you are + * using. It may also be just an empty array. Relying on this data will + * couple you to a specific handler, but can give more debug information + * when needed. + * + * @return array + */ + public function getHandlerContext() + { + return $this->handlerContext; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php new file mode 100644 index 0000000000000000000000000000000000000000..a77c28926cf94c4232feeda5d3062b87b15dce53 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php @@ -0,0 +1,27 @@ +<?php +namespace GuzzleHttp\Exception; + +use Psr\Http\Message\StreamInterface; + +/** + * Exception thrown when a seek fails on a stream. + */ +class SeekException extends \RuntimeException implements GuzzleException +{ + private $stream; + + public function __construct(StreamInterface $stream, $pos = 0, $msg = '') + { + $this->stream = $stream; + $msg = $msg ?: 'Could not seek the stream to position ' . $pos; + parent::__construct($msg); + } + + /** + * @return StreamInterface + */ + public function getStream() + { + return $this->stream; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php new file mode 100644 index 0000000000000000000000000000000000000000..7cdd340866b63b318e78b38981565d3e78eaacdd --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php @@ -0,0 +1,7 @@ +<?php +namespace GuzzleHttp\Exception; + +/** + * Exception when a server error is encountered (5xx codes) + */ +class ServerException extends BadResponseException {} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php new file mode 100644 index 0000000000000000000000000000000000000000..b60a9678d650676bdecd6fab6740d0f9a39e7849 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php @@ -0,0 +1,4 @@ +<?php +namespace GuzzleHttp\Exception; + +class TooManyRedirectsException extends RequestException {} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php new file mode 100644 index 0000000000000000000000000000000000000000..b92071ca20630d1a988249a9befc247ab4e3d2de --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php @@ -0,0 +1,4 @@ +<?php +namespace GuzzleHttp\Exception; + +class TransferException extends \RuntimeException implements GuzzleException {} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php new file mode 100644 index 0000000000000000000000000000000000000000..49808e5c44679c724ecaacb3856973f3937a0607 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php @@ -0,0 +1,559 @@ +<?php +namespace GuzzleHttp\Handler; + +use GuzzleHttp\Exception\RequestException; +use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Promise\FulfilledPromise; +use GuzzleHttp\Promise\RejectedPromise; +use GuzzleHttp\Psr7; +use GuzzleHttp\Psr7\LazyOpenStream; +use GuzzleHttp\TransferStats; +use Psr\Http\Message\RequestInterface; + +/** + * Creates curl resources from a request + */ +class CurlFactory implements CurlFactoryInterface +{ + /** @var array */ + private $handles = []; + + /** @var int Total number of idle handles to keep in cache */ + private $maxHandles; + + /** + * @param int $maxHandles Maximum number of idle handles. + */ + public function __construct($maxHandles) + { + $this->maxHandles = $maxHandles; + } + + public function create(RequestInterface $request, array $options) + { + if (isset($options['curl']['body_as_string'])) { + $options['_body_as_string'] = $options['curl']['body_as_string']; + unset($options['curl']['body_as_string']); + } + + $easy = new EasyHandle; + $easy->request = $request; + $easy->options = $options; + $conf = $this->getDefaultConf($easy); + $this->applyMethod($easy, $conf); + $this->applyHandlerOptions($easy, $conf); + $this->applyHeaders($easy, $conf); + unset($conf['_headers']); + + // Add handler options from the request configuration options + if (isset($options['curl'])) { + $conf = array_replace($conf, $options['curl']); + } + + $conf[CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy); + $easy->handle = $this->handles + ? array_pop($this->handles) + : curl_init(); + curl_setopt_array($easy->handle, $conf); + + return $easy; + } + + public function release(EasyHandle $easy) + { + $resource = $easy->handle; + unset($easy->handle); + + if (count($this->handles) >= $this->maxHandles) { + curl_close($resource); + } else { + // Remove all callback functions as they can hold onto references + // and are not cleaned up by curl_reset. Using curl_setopt_array + // does not work for some reason, so removing each one + // individually. + curl_setopt($resource, CURLOPT_HEADERFUNCTION, null); + curl_setopt($resource, CURLOPT_READFUNCTION, null); + curl_setopt($resource, CURLOPT_WRITEFUNCTION, null); + curl_setopt($resource, CURLOPT_PROGRESSFUNCTION, null); + curl_reset($resource); + $this->handles[] = $resource; + } + } + + /** + * Completes a cURL transaction, either returning a response promise or a + * rejected promise. + * + * @param callable $handler + * @param EasyHandle $easy + * @param CurlFactoryInterface $factory Dictates how the handle is released + * + * @return \GuzzleHttp\Promise\PromiseInterface + */ + public static function finish( + callable $handler, + EasyHandle $easy, + CurlFactoryInterface $factory + ) { + if (isset($easy->options['on_stats'])) { + self::invokeStats($easy); + } + + if (!$easy->response || $easy->errno) { + return self::finishError($handler, $easy, $factory); + } + + // Return the response if it is present and there is no error. + $factory->release($easy); + + // Rewind the body of the response if possible. + $body = $easy->response->getBody(); + if ($body->isSeekable()) { + $body->rewind(); + } + + return new FulfilledPromise($easy->response); + } + + private static function invokeStats(EasyHandle $easy) + { + $curlStats = curl_getinfo($easy->handle); + $stats = new TransferStats( + $easy->request, + $easy->response, + $curlStats['total_time'], + $easy->errno, + $curlStats + ); + call_user_func($easy->options['on_stats'], $stats); + } + + private static function finishError( + callable $handler, + EasyHandle $easy, + CurlFactoryInterface $factory + ) { + // Get error information and release the handle to the factory. + $ctx = [ + 'errno' => $easy->errno, + 'error' => curl_error($easy->handle), + ] + curl_getinfo($easy->handle); + $factory->release($easy); + + // Retry when nothing is present or when curl failed to rewind. + if (empty($easy->options['_err_message']) + && (!$easy->errno || $easy->errno == 65) + ) { + return self::retryFailedRewind($handler, $easy, $ctx); + } + + return self::createRejection($easy, $ctx); + } + + private static function createRejection(EasyHandle $easy, array $ctx) + { + static $connectionErrors = [ + CURLE_OPERATION_TIMEOUTED => true, + CURLE_COULDNT_RESOLVE_HOST => true, + CURLE_COULDNT_CONNECT => true, + CURLE_SSL_CONNECT_ERROR => true, + CURLE_GOT_NOTHING => true, + ]; + + // If an exception was encountered during the onHeaders event, then + // return a rejected promise that wraps that exception. + if ($easy->onHeadersException) { + return \GuzzleHttp\Promise\rejection_for( + new RequestException( + 'An error was encountered during the on_headers event', + $easy->request, + $easy->response, + $easy->onHeadersException, + $ctx + ) + ); + } + + $message = sprintf( + 'cURL error %s: %s (%s)', + $ctx['errno'], + $ctx['error'], + 'see http://curl.haxx.se/libcurl/c/libcurl-errors.html' + ); + + // Create a connection exception if it was a specific error code. + $error = isset($connectionErrors[$easy->errno]) + ? new ConnectException($message, $easy->request, null, $ctx) + : new RequestException($message, $easy->request, $easy->response, null, $ctx); + + return \GuzzleHttp\Promise\rejection_for($error); + } + + private function getDefaultConf(EasyHandle $easy) + { + $conf = [ + '_headers' => $easy->request->getHeaders(), + CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(), + CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''), + CURLOPT_RETURNTRANSFER => false, + CURLOPT_HEADER => false, + CURLOPT_CONNECTTIMEOUT => 150, + ]; + + if (defined('CURLOPT_PROTOCOLS')) { + $conf[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS; + } + + $version = $easy->request->getProtocolVersion(); + if ($version == 1.1) { + $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1; + } elseif ($version == 2.0) { + $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_2_0; + } else { + $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_0; + } + + return $conf; + } + + private function applyMethod(EasyHandle $easy, array &$conf) + { + $body = $easy->request->getBody(); + $size = $body->getSize(); + + if ($size === null || $size > 0) { + $this->applyBody($easy->request, $easy->options, $conf); + return; + } + + $method = $easy->request->getMethod(); + if ($method === 'PUT' || $method === 'POST') { + // See http://tools.ietf.org/html/rfc7230#section-3.3.2 + if (!$easy->request->hasHeader('Content-Length')) { + $conf[CURLOPT_HTTPHEADER][] = 'Content-Length: 0'; + } + } elseif ($method === 'HEAD') { + $conf[CURLOPT_NOBODY] = true; + unset( + $conf[CURLOPT_WRITEFUNCTION], + $conf[CURLOPT_READFUNCTION], + $conf[CURLOPT_FILE], + $conf[CURLOPT_INFILE] + ); + } + } + + private function applyBody(RequestInterface $request, array $options, array &$conf) + { + $size = $request->hasHeader('Content-Length') + ? (int) $request->getHeaderLine('Content-Length') + : null; + + // Send the body as a string if the size is less than 1MB OR if the + // [curl][body_as_string] request value is set. + if (($size !== null && $size < 1000000) || + !empty($options['_body_as_string']) + ) { + $conf[CURLOPT_POSTFIELDS] = (string) $request->getBody(); + // Don't duplicate the Content-Length header + $this->removeHeader('Content-Length', $conf); + $this->removeHeader('Transfer-Encoding', $conf); + } else { + $conf[CURLOPT_UPLOAD] = true; + if ($size !== null) { + $conf[CURLOPT_INFILESIZE] = $size; + $this->removeHeader('Content-Length', $conf); + } + $body = $request->getBody(); + if ($body->isSeekable()) { + $body->rewind(); + } + $conf[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) { + return $body->read($length); + }; + } + + // If the Expect header is not present, prevent curl from adding it + if (!$request->hasHeader('Expect')) { + $conf[CURLOPT_HTTPHEADER][] = 'Expect:'; + } + + // cURL sometimes adds a content-type by default. Prevent this. + if (!$request->hasHeader('Content-Type')) { + $conf[CURLOPT_HTTPHEADER][] = 'Content-Type:'; + } + } + + private function applyHeaders(EasyHandle $easy, array &$conf) + { + foreach ($conf['_headers'] as $name => $values) { + foreach ($values as $value) { + $conf[CURLOPT_HTTPHEADER][] = "$name: $value"; + } + } + + // Remove the Accept header if one was not set + if (!$easy->request->hasHeader('Accept')) { + $conf[CURLOPT_HTTPHEADER][] = 'Accept:'; + } + } + + /** + * Remove a header from the options array. + * + * @param string $name Case-insensitive header to remove + * @param array $options Array of options to modify + */ + private function removeHeader($name, array &$options) + { + foreach (array_keys($options['_headers']) as $key) { + if (!strcasecmp($key, $name)) { + unset($options['_headers'][$key]); + return; + } + } + } + + private function applyHandlerOptions(EasyHandle $easy, array &$conf) + { + $options = $easy->options; + if (isset($options['verify'])) { + if ($options['verify'] === false) { + unset($conf[CURLOPT_CAINFO]); + $conf[CURLOPT_SSL_VERIFYHOST] = 0; + $conf[CURLOPT_SSL_VERIFYPEER] = false; + } else { + $conf[CURLOPT_SSL_VERIFYHOST] = 2; + $conf[CURLOPT_SSL_VERIFYPEER] = true; + if (is_string($options['verify'])) { + // Throw an error if the file/folder/link path is not valid or doesn't exist. + if (!file_exists($options['verify'])) { + throw new \InvalidArgumentException( + "SSL CA bundle not found: {$options['verify']}" + ); + } + // If it's a directory or a link to a directory use CURLOPT_CAPATH. + // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO. + if (is_dir($options['verify']) || + (is_link($options['verify']) && is_dir(readlink($options['verify'])))) { + $conf[CURLOPT_CAPATH] = $options['verify']; + } else { + $conf[CURLOPT_CAINFO] = $options['verify']; + } + } + } + } + + if (!empty($options['decode_content'])) { + $accept = $easy->request->getHeaderLine('Accept-Encoding'); + if ($accept) { + $conf[CURLOPT_ENCODING] = $accept; + } else { + $conf[CURLOPT_ENCODING] = ''; + // Don't let curl send the header over the wire + $conf[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:'; + } + } + + if (isset($options['sink'])) { + $sink = $options['sink']; + if (!is_string($sink)) { + $sink = \GuzzleHttp\Psr7\stream_for($sink); + } elseif (!is_dir(dirname($sink))) { + // Ensure that the directory exists before failing in curl. + throw new \RuntimeException(sprintf( + 'Directory %s does not exist for sink value of %s', + dirname($sink), + $sink + )); + } else { + $sink = new LazyOpenStream($sink, 'w+'); + } + $easy->sink = $sink; + $conf[CURLOPT_WRITEFUNCTION] = function ($ch, $write) use ($sink) { + return $sink->write($write); + }; + } else { + // Use a default temp stream if no sink was set. + $conf[CURLOPT_FILE] = fopen('php://temp', 'w+'); + $easy->sink = Psr7\stream_for($conf[CURLOPT_FILE]); + } + $timeoutRequiresNoSignal = false; + if (isset($options['timeout'])) { + $timeoutRequiresNoSignal |= $options['timeout'] < 1; + $conf[CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000; + } + + // CURL default value is CURL_IPRESOLVE_WHATEVER + if (isset($options['force_ip_resolve'])) { + if ('v4' === $options['force_ip_resolve']) { + $conf[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; + } else if ('v6' === $options['force_ip_resolve']) { + $conf[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V6; + } + } + + if (isset($options['connect_timeout'])) { + $timeoutRequiresNoSignal |= $options['connect_timeout'] < 1; + $conf[CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000; + } + + if ($timeoutRequiresNoSignal && strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') { + $conf[CURLOPT_NOSIGNAL] = true; + } + + if (isset($options['proxy'])) { + if (!is_array($options['proxy'])) { + $conf[CURLOPT_PROXY] = $options['proxy']; + } else { + $scheme = $easy->request->getUri()->getScheme(); + if (isset($options['proxy'][$scheme])) { + $host = $easy->request->getUri()->getHost(); + if (!isset($options['proxy']['no']) || + !\GuzzleHttp\is_host_in_noproxy($host, $options['proxy']['no']) + ) { + $conf[CURLOPT_PROXY] = $options['proxy'][$scheme]; + } + } + } + } + + if (isset($options['cert'])) { + $cert = $options['cert']; + if (is_array($cert)) { + $conf[CURLOPT_SSLCERTPASSWD] = $cert[1]; + $cert = $cert[0]; + } + if (!file_exists($cert)) { + throw new \InvalidArgumentException( + "SSL certificate not found: {$cert}" + ); + } + $conf[CURLOPT_SSLCERT] = $cert; + } + + if (isset($options['ssl_key'])) { + $sslKey = $options['ssl_key']; + if (is_array($sslKey)) { + $conf[CURLOPT_SSLKEYPASSWD] = $sslKey[1]; + $sslKey = $sslKey[0]; + } + if (!file_exists($sslKey)) { + throw new \InvalidArgumentException( + "SSL private key not found: {$sslKey}" + ); + } + $conf[CURLOPT_SSLKEY] = $sslKey; + } + + if (isset($options['progress'])) { + $progress = $options['progress']; + if (!is_callable($progress)) { + throw new \InvalidArgumentException( + 'progress client option must be callable' + ); + } + $conf[CURLOPT_NOPROGRESS] = false; + $conf[CURLOPT_PROGRESSFUNCTION] = function () use ($progress) { + $args = func_get_args(); + // PHP 5.5 pushed the handle onto the start of the args + if (is_resource($args[0])) { + array_shift($args); + } + call_user_func_array($progress, $args); + }; + } + + if (!empty($options['debug'])) { + $conf[CURLOPT_STDERR] = \GuzzleHttp\debug_resource($options['debug']); + $conf[CURLOPT_VERBOSE] = true; + } + } + + /** + * This function ensures that a response was set on a transaction. If one + * was not set, then the request is retried if possible. This error + * typically means you are sending a payload, curl encountered a + * "Connection died, retrying a fresh connect" error, tried to rewind the + * stream, and then encountered a "necessary data rewind wasn't possible" + * error, causing the request to be sent through curl_multi_info_read() + * without an error status. + */ + private static function retryFailedRewind( + callable $handler, + EasyHandle $easy, + array $ctx + ) { + try { + // Only rewind if the body has been read from. + $body = $easy->request->getBody(); + if ($body->tell() > 0) { + $body->rewind(); + } + } catch (\RuntimeException $e) { + $ctx['error'] = 'The connection unexpectedly failed without ' + . 'providing an error. The request would have been retried, ' + . 'but attempting to rewind the request body failed. ' + . 'Exception: ' . $e; + return self::createRejection($easy, $ctx); + } + + // Retry no more than 3 times before giving up. + if (!isset($easy->options['_curl_retries'])) { + $easy->options['_curl_retries'] = 1; + } elseif ($easy->options['_curl_retries'] == 2) { + $ctx['error'] = 'The cURL request was retried 3 times ' + . 'and did not succeed. The most likely reason for the failure ' + . 'is that cURL was unable to rewind the body of the request ' + . 'and subsequent retries resulted in the same error. Turn on ' + . 'the debug option to see what went wrong. See ' + . 'https://bugs.php.net/bug.php?id=47204 for more information.'; + return self::createRejection($easy, $ctx); + } else { + $easy->options['_curl_retries']++; + } + + return $handler($easy->request, $easy->options); + } + + private function createHeaderFn(EasyHandle $easy) + { + if (isset($easy->options['on_headers'])) { + $onHeaders = $easy->options['on_headers']; + + if (!is_callable($onHeaders)) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + } else { + $onHeaders = null; + } + + return function ($ch, $h) use ( + $onHeaders, + $easy, + &$startingResponse + ) { + $value = trim($h); + if ($value === '') { + $startingResponse = true; + $easy->createResponse(); + if ($onHeaders !== null) { + try { + $onHeaders($easy->response); + } catch (\Exception $e) { + // Associate the exception with the handle and trigger + // a curl header write error by returning 0. + $easy->onHeadersException = $e; + return -1; + } + } + } elseif ($startingResponse) { + $startingResponse = false; + $easy->headers = [$value]; + } else { + $easy->headers[] = $value; + } + return strlen($h); + }; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..b0fc236850b5db204532665f3db1f39ae907c4fa --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php @@ -0,0 +1,27 @@ +<?php +namespace GuzzleHttp\Handler; + +use Psr\Http\Message\RequestInterface; + +interface CurlFactoryInterface +{ + /** + * Creates a cURL handle resource. + * + * @param RequestInterface $request Request + * @param array $options Transfer options + * + * @return EasyHandle + * @throws \RuntimeException when an option cannot be applied + */ + public function create(RequestInterface $request, array $options); + + /** + * Release an easy handle, allowing it to be reused or closed. + * + * This function must call unset on the easy handle's "handle" property. + * + * @param EasyHandle $easy + */ + public function release(EasyHandle $easy); +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php new file mode 100644 index 0000000000000000000000000000000000000000..43577da66e25de9e8ab4f9f4fb74ebe20b4afd4a --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php @@ -0,0 +1,45 @@ +<?php +namespace GuzzleHttp\Handler; + +use GuzzleHttp\Psr7; +use Psr\Http\Message\RequestInterface; + +/** + * HTTP handler that uses cURL easy handles as a transport layer. + * + * When using the CurlHandler, custom curl options can be specified as an + * associative array of curl option constants mapping to values in the + * **curl** key of the "client" key of the request. + */ +class CurlHandler +{ + /** @var CurlFactoryInterface */ + private $factory; + + /** + * Accepts an associative array of options: + * + * - factory: Optional curl factory used to create cURL handles. + * + * @param array $options Array of options to use with the handler + */ + public function __construct(array $options = []) + { + $this->factory = isset($options['handle_factory']) + ? $options['handle_factory'] + : new CurlFactory(3); + } + + public function __invoke(RequestInterface $request, array $options) + { + if (isset($options['delay'])) { + usleep($options['delay'] * 1000); + } + + $easy = $this->factory->create($request, $options); + curl_exec($easy->handle); + $easy->errno = curl_errno($easy->handle); + + return CurlFactory::finish($this, $easy, $this->factory); + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php new file mode 100644 index 0000000000000000000000000000000000000000..945d06ee4e2adae1fa28d5202b5b97efd62ad4ab --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -0,0 +1,197 @@ +<?php +namespace GuzzleHttp\Handler; + +use GuzzleHttp\Promise as P; +use GuzzleHttp\Promise\Promise; +use GuzzleHttp\Psr7; +use Psr\Http\Message\RequestInterface; + +/** + * Returns an asynchronous response using curl_multi_* functions. + * + * When using the CurlMultiHandler, custom curl options can be specified as an + * associative array of curl option constants mapping to values in the + * **curl** key of the provided request options. + * + * @property resource $_mh Internal use only. Lazy loaded multi-handle. + */ +class CurlMultiHandler +{ + /** @var CurlFactoryInterface */ + private $factory; + private $selectTimeout; + private $active; + private $handles = []; + private $delays = []; + + /** + * This handler accepts the following options: + * + * - handle_factory: An optional factory used to create curl handles + * - select_timeout: Optional timeout (in seconds) to block before timing + * out while selecting curl handles. Defaults to 1 second. + * + * @param array $options + */ + public function __construct(array $options = []) + { + $this->factory = isset($options['handle_factory']) + ? $options['handle_factory'] : new CurlFactory(50); + $this->selectTimeout = isset($options['select_timeout']) + ? $options['select_timeout'] : 1; + } + + public function __get($name) + { + if ($name === '_mh') { + return $this->_mh = curl_multi_init(); + } + + throw new \BadMethodCallException(); + } + + public function __destruct() + { + if (isset($this->_mh)) { + curl_multi_close($this->_mh); + unset($this->_mh); + } + } + + public function __invoke(RequestInterface $request, array $options) + { + $easy = $this->factory->create($request, $options); + $id = (int) $easy->handle; + + $promise = new Promise( + [$this, 'execute'], + function () use ($id) { return $this->cancel($id); } + ); + + $this->addRequest(['easy' => $easy, 'deferred' => $promise]); + + return $promise; + } + + /** + * Ticks the curl event loop. + */ + public function tick() + { + // Add any delayed handles if needed. + if ($this->delays) { + $currentTime = microtime(true); + foreach ($this->delays as $id => $delay) { + if ($currentTime >= $delay) { + unset($this->delays[$id]); + curl_multi_add_handle( + $this->_mh, + $this->handles[$id]['easy']->handle + ); + } + } + } + + // Step through the task queue which may add additional requests. + P\queue()->run(); + + if ($this->active && + curl_multi_select($this->_mh, $this->selectTimeout) === -1 + ) { + // Perform a usleep if a select returns -1. + // See: https://bugs.php.net/bug.php?id=61141 + usleep(250); + } + + while (curl_multi_exec($this->_mh, $this->active) === CURLM_CALL_MULTI_PERFORM); + + $this->processMessages(); + } + + /** + * Runs until all outstanding connections have completed. + */ + public function execute() + { + $queue = P\queue(); + + while ($this->handles || !$queue->isEmpty()) { + // If there are no transfers, then sleep for the next delay + if (!$this->active && $this->delays) { + usleep($this->timeToNext()); + } + $this->tick(); + } + } + + private function addRequest(array $entry) + { + $easy = $entry['easy']; + $id = (int) $easy->handle; + $this->handles[$id] = $entry; + if (empty($easy->options['delay'])) { + curl_multi_add_handle($this->_mh, $easy->handle); + } else { + $this->delays[$id] = microtime(true) + ($easy->options['delay'] / 1000); + } + } + + /** + * Cancels a handle from sending and removes references to it. + * + * @param int $id Handle ID to cancel and remove. + * + * @return bool True on success, false on failure. + */ + private function cancel($id) + { + // Cannot cancel if it has been processed. + if (!isset($this->handles[$id])) { + return false; + } + + $handle = $this->handles[$id]['easy']->handle; + unset($this->delays[$id], $this->handles[$id]); + curl_multi_remove_handle($this->_mh, $handle); + curl_close($handle); + + return true; + } + + private function processMessages() + { + while ($done = curl_multi_info_read($this->_mh)) { + $id = (int) $done['handle']; + curl_multi_remove_handle($this->_mh, $done['handle']); + + if (!isset($this->handles[$id])) { + // Probably was cancelled. + continue; + } + + $entry = $this->handles[$id]; + unset($this->handles[$id], $this->delays[$id]); + $entry['easy']->errno = $done['result']; + $entry['deferred']->resolve( + CurlFactory::finish( + $this, + $entry['easy'], + $this->factory + ) + ); + } + } + + private function timeToNext() + { + $currentTime = microtime(true); + $nextTime = PHP_INT_MAX; + foreach ($this->delays as $time) { + if ($time < $nextTime) { + $nextTime = $time; + } + } + + return max(0, $nextTime - $currentTime) * 1000000; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php new file mode 100644 index 0000000000000000000000000000000000000000..7754e9111b7a18add1a188aa9efff05e2eebe550 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php @@ -0,0 +1,92 @@ +<?php +namespace GuzzleHttp\Handler; + +use GuzzleHttp\Psr7\Response; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\StreamInterface; + +/** + * Represents a cURL easy handle and the data it populates. + * + * @internal + */ +final class EasyHandle +{ + /** @var resource cURL resource */ + public $handle; + + /** @var StreamInterface Where data is being written */ + public $sink; + + /** @var array Received HTTP headers so far */ + public $headers = []; + + /** @var ResponseInterface Received response (if any) */ + public $response; + + /** @var RequestInterface Request being sent */ + public $request; + + /** @var array Request options */ + public $options = []; + + /** @var int cURL error number (if any) */ + public $errno = 0; + + /** @var \Exception Exception during on_headers (if any) */ + public $onHeadersException; + + /** + * Attach a response to the easy handle based on the received headers. + * + * @throws \RuntimeException if no headers have been received. + */ + public function createResponse() + { + if (empty($this->headers)) { + throw new \RuntimeException('No headers have been received'); + } + + // HTTP-version SP status-code SP reason-phrase + $startLine = explode(' ', array_shift($this->headers), 3); + $headers = \GuzzleHttp\headers_from_lines($this->headers); + $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers); + + if (!empty($this->options['decode_content']) + && isset($normalizedKeys['content-encoding']) + ) { + $headers['x-encoded-content-encoding'] + = $headers[$normalizedKeys['content-encoding']]; + unset($headers[$normalizedKeys['content-encoding']]); + if (isset($normalizedKeys['content-length'])) { + $headers['x-encoded-content-length'] + = $headers[$normalizedKeys['content-length']]; + + $bodyLength = (int) $this->sink->getSize(); + if ($bodyLength) { + $headers[$normalizedKeys['content-length']] = $bodyLength; + } else { + unset($headers[$normalizedKeys['content-length']]); + } + } + } + + // Attach a response to the easy handle with the parsed headers. + $this->response = new Response( + $startLine[1], + $headers, + $this->sink, + substr($startLine[0], 5), + isset($startLine[2]) ? (string) $startLine[2] : null + ); + } + + public function __get($name) + { + $msg = $name === 'handle' + ? 'The EasyHandle has been released' + : 'Invalid property: ' . $name; + throw new \BadMethodCallException($msg); + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php new file mode 100644 index 0000000000000000000000000000000000000000..d892061c7a0074063d33c20fea167c898dc2beb2 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php @@ -0,0 +1,189 @@ +<?php +namespace GuzzleHttp\Handler; + +use GuzzleHttp\Exception\RequestException; +use GuzzleHttp\HandlerStack; +use GuzzleHttp\Promise\PromiseInterface; +use GuzzleHttp\Promise\RejectedPromise; +use GuzzleHttp\TransferStats; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Handler that returns responses or throw exceptions from a queue. + */ +class MockHandler implements \Countable +{ + private $queue = []; + private $lastRequest; + private $lastOptions; + private $onFulfilled; + private $onRejected; + + /** + * Creates a new MockHandler that uses the default handler stack list of + * middlewares. + * + * @param array $queue Array of responses, callables, or exceptions. + * @param callable $onFulfilled Callback to invoke when the return value is fulfilled. + * @param callable $onRejected Callback to invoke when the return value is rejected. + * + * @return HandlerStack + */ + public static function createWithMiddleware( + array $queue = null, + callable $onFulfilled = null, + callable $onRejected = null + ) { + return HandlerStack::create(new self($queue, $onFulfilled, $onRejected)); + } + + /** + * The passed in value must be an array of + * {@see Psr7\Http\Message\ResponseInterface} objects, Exceptions, + * callables, or Promises. + * + * @param array $queue + * @param callable $onFulfilled Callback to invoke when the return value is fulfilled. + * @param callable $onRejected Callback to invoke when the return value is rejected. + */ + public function __construct( + array $queue = null, + callable $onFulfilled = null, + callable $onRejected = null + ) { + $this->onFulfilled = $onFulfilled; + $this->onRejected = $onRejected; + + if ($queue) { + call_user_func_array([$this, 'append'], $queue); + } + } + + public function __invoke(RequestInterface $request, array $options) + { + if (!$this->queue) { + throw new \OutOfBoundsException('Mock queue is empty'); + } + + if (isset($options['delay'])) { + usleep($options['delay'] * 1000); + } + + $this->lastRequest = $request; + $this->lastOptions = $options; + $response = array_shift($this->queue); + + if (isset($options['on_headers'])) { + if (!is_callable($options['on_headers'])) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + try { + $options['on_headers']($response); + } catch (\Exception $e) { + $msg = 'An error was encountered during the on_headers event'; + $response = new RequestException($msg, $request, $response, $e); + } + } + + if (is_callable($response)) { + $response = call_user_func($response, $request, $options); + } + + $response = $response instanceof \Exception + ? \GuzzleHttp\Promise\rejection_for($response) + : \GuzzleHttp\Promise\promise_for($response); + + return $response->then( + function ($value) use ($request, $options) { + $this->invokeStats($request, $options, $value); + if ($this->onFulfilled) { + call_user_func($this->onFulfilled, $value); + } + if (isset($options['sink'])) { + $contents = (string) $value->getBody(); + $sink = $options['sink']; + + if (is_resource($sink)) { + fwrite($sink, $contents); + } elseif (is_string($sink)) { + file_put_contents($sink, $contents); + } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) { + $sink->write($contents); + } + } + + return $value; + }, + function ($reason) use ($request, $options) { + $this->invokeStats($request, $options, null, $reason); + if ($this->onRejected) { + call_user_func($this->onRejected, $reason); + } + return \GuzzleHttp\Promise\rejection_for($reason); + } + ); + } + + /** + * Adds one or more variadic requests, exceptions, callables, or promises + * to the queue. + */ + public function append() + { + foreach (func_get_args() as $value) { + if ($value instanceof ResponseInterface + || $value instanceof \Exception + || $value instanceof PromiseInterface + || is_callable($value) + ) { + $this->queue[] = $value; + } else { + throw new \InvalidArgumentException('Expected a response or ' + . 'exception. Found ' . \GuzzleHttp\describe_type($value)); + } + } + } + + /** + * Get the last received request. + * + * @return RequestInterface + */ + public function getLastRequest() + { + return $this->lastRequest; + } + + /** + * Get the last received request options. + * + * @return array + */ + public function getLastOptions() + { + return $this->lastOptions; + } + + /** + * Returns the number of remaining items in the queue. + * + * @return int + */ + public function count() + { + return count($this->queue); + } + + private function invokeStats( + RequestInterface $request, + array $options, + ResponseInterface $response = null, + $reason = null + ) { + if (isset($options['on_stats'])) { + $stats = new TransferStats($request, $response, 0, $reason); + call_user_func($options['on_stats'], $stats); + } + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php new file mode 100644 index 0000000000000000000000000000000000000000..f8b00be0b99ed4b5de18098ca153fa1b44d41685 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php @@ -0,0 +1,55 @@ +<?php +namespace GuzzleHttp\Handler; + +use GuzzleHttp\RequestOptions; +use Psr\Http\Message\RequestInterface; + +/** + * Provides basic proxies for handlers. + */ +class Proxy +{ + /** + * Sends synchronous requests to a specific handler while sending all other + * requests to another handler. + * + * @param callable $default Handler used for normal responses + * @param callable $sync Handler used for synchronous responses. + * + * @return callable Returns the composed handler. + */ + public static function wrapSync( + callable $default, + callable $sync + ) { + return function (RequestInterface $request, array $options) use ($default, $sync) { + return empty($options[RequestOptions::SYNCHRONOUS]) + ? $default($request, $options) + : $sync($request, $options); + }; + } + + /** + * Sends streaming requests to a streaming compatible handler while sending + * all other requests to a default handler. + * + * This, for example, could be useful for taking advantage of the + * performance benefits of curl while still supporting true streaming + * through the StreamHandler. + * + * @param callable $default Handler used for non-streaming responses + * @param callable $streaming Handler used for streaming responses + * + * @return callable Returns the composed handler. + */ + public static function wrapStreaming( + callable $default, + callable $streaming + ) { + return function (RequestInterface $request, array $options) use ($default, $streaming) { + return empty($options['stream']) + ? $default($request, $options) + : $streaming($request, $options); + }; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php new file mode 100644 index 0000000000000000000000000000000000000000..b12bfd942398a63b3e6430e227dd05fa482e5a50 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php @@ -0,0 +1,533 @@ +<?php +namespace GuzzleHttp\Handler; + +use GuzzleHttp\Exception\RequestException; +use GuzzleHttp\Exception\ConnectException; +use GuzzleHttp\Promise\FulfilledPromise; +use GuzzleHttp\Promise\RejectedPromise; +use GuzzleHttp\Promise\PromiseInterface; +use GuzzleHttp\Psr7; +use GuzzleHttp\TransferStats; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\StreamInterface; + +/** + * HTTP handler that uses PHP's HTTP stream wrapper. + */ +class StreamHandler +{ + private $lastHeaders = []; + + /** + * Sends an HTTP request. + * + * @param RequestInterface $request Request to send. + * @param array $options Request transfer options. + * + * @return PromiseInterface + */ + public function __invoke(RequestInterface $request, array $options) + { + // Sleep if there is a delay specified. + if (isset($options['delay'])) { + usleep($options['delay'] * 1000); + } + + $startTime = isset($options['on_stats']) ? microtime(true) : null; + + try { + // Does not support the expect header. + $request = $request->withoutHeader('Expect'); + + // Append a content-length header if body size is zero to match + // cURL's behavior. + if (0 === $request->getBody()->getSize()) { + $request = $request->withHeader('Content-Length', 0); + } + + return $this->createResponse( + $request, + $options, + $this->createStream($request, $options), + $startTime + ); + } catch (\InvalidArgumentException $e) { + throw $e; + } catch (\Exception $e) { + // Determine if the error was a networking error. + $message = $e->getMessage(); + // This list can probably get more comprehensive. + if (strpos($message, 'getaddrinfo') // DNS lookup failed + || strpos($message, 'Connection refused') + || strpos($message, "couldn't connect to host") // error on HHVM + ) { + $e = new ConnectException($e->getMessage(), $request, $e); + } + $e = RequestException::wrapException($request, $e); + $this->invokeStats($options, $request, $startTime, null, $e); + + return \GuzzleHttp\Promise\rejection_for($e); + } + } + + private function invokeStats( + array $options, + RequestInterface $request, + $startTime, + ResponseInterface $response = null, + $error = null + ) { + if (isset($options['on_stats'])) { + $stats = new TransferStats( + $request, + $response, + microtime(true) - $startTime, + $error, + [] + ); + call_user_func($options['on_stats'], $stats); + } + } + + private function createResponse( + RequestInterface $request, + array $options, + $stream, + $startTime + ) { + $hdrs = $this->lastHeaders; + $this->lastHeaders = []; + $parts = explode(' ', array_shift($hdrs), 3); + $ver = explode('/', $parts[0])[1]; + $status = $parts[1]; + $reason = isset($parts[2]) ? $parts[2] : null; + $headers = \GuzzleHttp\headers_from_lines($hdrs); + list ($stream, $headers) = $this->checkDecode($options, $headers, $stream); + $stream = Psr7\stream_for($stream); + $sink = $stream; + + if (strcasecmp('HEAD', $request->getMethod())) { + $sink = $this->createSink($stream, $options); + } + + $response = new Psr7\Response($status, $headers, $sink, $ver, $reason); + + if (isset($options['on_headers'])) { + try { + $options['on_headers']($response); + } catch (\Exception $e) { + $msg = 'An error was encountered during the on_headers event'; + $ex = new RequestException($msg, $request, $response, $e); + return \GuzzleHttp\Promise\rejection_for($ex); + } + } + + // Do not drain when the request is a HEAD request because they have + // no body. + if ($sink !== $stream) { + $this->drain( + $stream, + $sink, + $response->getHeaderLine('Content-Length') + ); + } + + $this->invokeStats($options, $request, $startTime, $response, null); + + return new FulfilledPromise($response); + } + + private function createSink(StreamInterface $stream, array $options) + { + if (!empty($options['stream'])) { + return $stream; + } + + $sink = isset($options['sink']) + ? $options['sink'] + : fopen('php://temp', 'r+'); + + return is_string($sink) + ? new Psr7\LazyOpenStream($sink, 'w+') + : Psr7\stream_for($sink); + } + + private function checkDecode(array $options, array $headers, $stream) + { + // Automatically decode responses when instructed. + if (!empty($options['decode_content'])) { + $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers); + if (isset($normalizedKeys['content-encoding'])) { + $encoding = $headers[$normalizedKeys['content-encoding']]; + if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') { + $stream = new Psr7\InflateStream( + Psr7\stream_for($stream) + ); + $headers['x-encoded-content-encoding'] + = $headers[$normalizedKeys['content-encoding']]; + // Remove content-encoding header + unset($headers[$normalizedKeys['content-encoding']]); + // Fix content-length header + if (isset($normalizedKeys['content-length'])) { + $headers['x-encoded-content-length'] + = $headers[$normalizedKeys['content-length']]; + + $length = (int) $stream->getSize(); + if ($length === 0) { + unset($headers[$normalizedKeys['content-length']]); + } else { + $headers[$normalizedKeys['content-length']] = [$length]; + } + } + } + } + } + + return [$stream, $headers]; + } + + /** + * Drains the source stream into the "sink" client option. + * + * @param StreamInterface $source + * @param StreamInterface $sink + * @param string $contentLength Header specifying the amount of + * data to read. + * + * @return StreamInterface + * @throws \RuntimeException when the sink option is invalid. + */ + private function drain( + StreamInterface $source, + StreamInterface $sink, + $contentLength + ) { + // If a content-length header is provided, then stop reading once + // that number of bytes has been read. This can prevent infinitely + // reading from a stream when dealing with servers that do not honor + // Connection: Close headers. + Psr7\copy_to_stream( + $source, + $sink, + (strlen($contentLength) > 0 && (int) $contentLength > 0) ? (int) $contentLength : -1 + ); + + $sink->seek(0); + $source->close(); + + return $sink; + } + + /** + * Create a resource and check to ensure it was created successfully + * + * @param callable $callback Callable that returns stream resource + * + * @return resource + * @throws \RuntimeException on error + */ + private function createResource(callable $callback) + { + $errors = null; + set_error_handler(function ($_, $msg, $file, $line) use (&$errors) { + $errors[] = [ + 'message' => $msg, + 'file' => $file, + 'line' => $line + ]; + return true; + }); + + $resource = $callback(); + restore_error_handler(); + + if (!$resource) { + $message = 'Error creating resource: '; + foreach ($errors as $err) { + foreach ($err as $key => $value) { + $message .= "[$key] $value" . PHP_EOL; + } + } + throw new \RuntimeException(trim($message)); + } + + return $resource; + } + + private function createStream(RequestInterface $request, array $options) + { + static $methods; + if (!$methods) { + $methods = array_flip(get_class_methods(__CLASS__)); + } + + // HTTP/1.1 streams using the PHP stream wrapper require a + // Connection: close header + if ($request->getProtocolVersion() == '1.1' + && !$request->hasHeader('Connection') + ) { + $request = $request->withHeader('Connection', 'close'); + } + + // Ensure SSL is verified by default + if (!isset($options['verify'])) { + $options['verify'] = true; + } + + $params = []; + $context = $this->getDefaultContext($request, $options); + + if (isset($options['on_headers']) && !is_callable($options['on_headers'])) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + + if (!empty($options)) { + foreach ($options as $key => $value) { + $method = "add_{$key}"; + if (isset($methods[$method])) { + $this->{$method}($request, $context, $value, $params); + } + } + } + + if (isset($options['stream_context'])) { + if (!is_array($options['stream_context'])) { + throw new \InvalidArgumentException('stream_context must be an array'); + } + $context = array_replace_recursive( + $context, + $options['stream_context'] + ); + } + + // Microsoft NTLM authentication only supported with curl handler + if (isset($options['auth']) + && is_array($options['auth']) + && isset($options['auth'][2]) + && 'ntlm' == $options['auth'][2] + ) { + + throw new \InvalidArgumentException('Microsoft NTLM authentication only supported with curl handler'); + } + + $uri = $this->resolveHost($request, $options); + + $context = $this->createResource( + function () use ($context, $params) { + return stream_context_create($context, $params); + } + ); + + return $this->createResource( + function () use ($uri, &$http_response_header, $context, $options) { + $resource = fopen((string) $uri, 'r', null, $context); + $this->lastHeaders = $http_response_header; + + if (isset($options['read_timeout'])) { + $readTimeout = $options['read_timeout']; + $sec = (int) $readTimeout; + $usec = ($readTimeout - $sec) * 100000; + stream_set_timeout($resource, $sec, $usec); + } + + return $resource; + } + ); + } + + private function resolveHost(RequestInterface $request, array $options) + { + $uri = $request->getUri(); + + if (isset($options['force_ip_resolve']) && !filter_var($uri->getHost(), FILTER_VALIDATE_IP)) { + if ('v4' === $options['force_ip_resolve']) { + $records = dns_get_record($uri->getHost(), DNS_A); + if (!isset($records[0]['ip'])) { + throw new ConnectException(sprintf("Could not resolve IPv4 address for host '%s'", $uri->getHost()), $request); + } + $uri = $uri->withHost($records[0]['ip']); + } elseif ('v6' === $options['force_ip_resolve']) { + $records = dns_get_record($uri->getHost(), DNS_AAAA); + if (!isset($records[0]['ipv6'])) { + throw new ConnectException(sprintf("Could not resolve IPv6 address for host '%s'", $uri->getHost()), $request); + } + $uri = $uri->withHost('[' . $records[0]['ipv6'] . ']'); + } + } + + return $uri; + } + + private function getDefaultContext(RequestInterface $request) + { + $headers = ''; + foreach ($request->getHeaders() as $name => $value) { + foreach ($value as $val) { + $headers .= "$name: $val\r\n"; + } + } + + $context = [ + 'http' => [ + 'method' => $request->getMethod(), + 'header' => $headers, + 'protocol_version' => $request->getProtocolVersion(), + 'ignore_errors' => true, + 'follow_location' => 0, + ], + ]; + + $body = (string) $request->getBody(); + + if (!empty($body)) { + $context['http']['content'] = $body; + // Prevent the HTTP handler from adding a Content-Type header. + if (!$request->hasHeader('Content-Type')) { + $context['http']['header'] .= "Content-Type:\r\n"; + } + } + + $context['http']['header'] = rtrim($context['http']['header']); + + return $context; + } + + private function add_proxy(RequestInterface $request, &$options, $value, &$params) + { + if (!is_array($value)) { + $options['http']['proxy'] = $value; + } else { + $scheme = $request->getUri()->getScheme(); + if (isset($value[$scheme])) { + if (!isset($value['no']) + || !\GuzzleHttp\is_host_in_noproxy( + $request->getUri()->getHost(), + $value['no'] + ) + ) { + $options['http']['proxy'] = $value[$scheme]; + } + } + } + } + + private function add_timeout(RequestInterface $request, &$options, $value, &$params) + { + if ($value > 0) { + $options['http']['timeout'] = $value; + } + } + + private function add_verify(RequestInterface $request, &$options, $value, &$params) + { + if ($value === true) { + // PHP 5.6 or greater will find the system cert by default. When + // < 5.6, use the Guzzle bundled cacert. + if (PHP_VERSION_ID < 50600) { + $options['ssl']['cafile'] = \GuzzleHttp\default_ca_bundle(); + } + } elseif (is_string($value)) { + $options['ssl']['cafile'] = $value; + if (!file_exists($value)) { + throw new \RuntimeException("SSL CA bundle not found: $value"); + } + } elseif ($value === false) { + $options['ssl']['verify_peer'] = false; + $options['ssl']['verify_peer_name'] = false; + return; + } else { + throw new \InvalidArgumentException('Invalid verify request option'); + } + + $options['ssl']['verify_peer'] = true; + $options['ssl']['verify_peer_name'] = true; + $options['ssl']['allow_self_signed'] = false; + } + + private function add_cert(RequestInterface $request, &$options, $value, &$params) + { + if (is_array($value)) { + $options['ssl']['passphrase'] = $value[1]; + $value = $value[0]; + } + + if (!file_exists($value)) { + throw new \RuntimeException("SSL certificate not found: {$value}"); + } + + $options['ssl']['local_cert'] = $value; + } + + private function add_progress(RequestInterface $request, &$options, $value, &$params) + { + $this->addNotification( + $params, + function ($code, $a, $b, $c, $transferred, $total) use ($value) { + if ($code == STREAM_NOTIFY_PROGRESS) { + $value($total, $transferred, null, null); + } + } + ); + } + + private function add_debug(RequestInterface $request, &$options, $value, &$params) + { + if ($value === false) { + return; + } + + static $map = [ + STREAM_NOTIFY_CONNECT => 'CONNECT', + STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', + STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', + STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', + STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', + STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', + STREAM_NOTIFY_PROGRESS => 'PROGRESS', + STREAM_NOTIFY_FAILURE => 'FAILURE', + STREAM_NOTIFY_COMPLETED => 'COMPLETED', + STREAM_NOTIFY_RESOLVE => 'RESOLVE', + ]; + static $args = ['severity', 'message', 'message_code', + 'bytes_transferred', 'bytes_max']; + + $value = \GuzzleHttp\debug_resource($value); + $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment(''); + $this->addNotification( + $params, + function () use ($ident, $value, $map, $args) { + $passed = func_get_args(); + $code = array_shift($passed); + fprintf($value, '<%s> [%s] ', $ident, $map[$code]); + foreach (array_filter($passed) as $i => $v) { + fwrite($value, $args[$i] . ': "' . $v . '" '); + } + fwrite($value, "\n"); + } + ); + } + + private function addNotification(array &$params, callable $notify) + { + // Wrap the existing function if needed. + if (!isset($params['notification'])) { + $params['notification'] = $notify; + } else { + $params['notification'] = $this->callArray([ + $params['notification'], + $notify + ]); + } + } + + private function callArray(array $functions) + { + return function () use ($functions) { + $args = func_get_args(); + foreach ($functions as $fn) { + call_user_func_array($fn, $args); + } + }; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/civicrm/vendor/guzzlehttp/guzzle/src/HandlerStack.php new file mode 100644 index 0000000000000000000000000000000000000000..a72e38a532b2ee6a8f4da4a4f7ba49fdbf5be0a3 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/HandlerStack.php @@ -0,0 +1,273 @@ +<?php +namespace GuzzleHttp; + +use Psr\Http\Message\RequestInterface; + +/** + * Creates a composed Guzzle handler function by stacking middlewares on top of + * an HTTP handler function. + */ +class HandlerStack +{ + /** @var callable */ + private $handler; + + /** @var array */ + private $stack = []; + + /** @var callable|null */ + private $cached; + + /** + * Creates a default handler stack that can be used by clients. + * + * The returned handler will wrap the provided handler or use the most + * appropriate default handler for you system. The returned HandlerStack has + * support for cookies, redirects, HTTP error exceptions, and preparing a body + * before sending. + * + * The returned handler stack can be passed to a client in the "handler" + * option. + * + * @param callable $handler HTTP handler function to use with the stack. If no + * handler is provided, the best handler for your + * system will be utilized. + * + * @return HandlerStack + */ + public static function create(callable $handler = null) + { + $stack = new self($handler ?: choose_handler()); + $stack->push(Middleware::httpErrors(), 'http_errors'); + $stack->push(Middleware::redirect(), 'allow_redirects'); + $stack->push(Middleware::cookies(), 'cookies'); + $stack->push(Middleware::prepareBody(), 'prepare_body'); + + return $stack; + } + + /** + * @param callable $handler Underlying HTTP handler. + */ + public function __construct(callable $handler = null) + { + $this->handler = $handler; + } + + /** + * Invokes the handler stack as a composed handler + * + * @param RequestInterface $request + * @param array $options + */ + public function __invoke(RequestInterface $request, array $options) + { + $handler = $this->resolve(); + + return $handler($request, $options); + } + + /** + * Dumps a string representation of the stack. + * + * @return string + */ + public function __toString() + { + $depth = 0; + $stack = []; + if ($this->handler) { + $stack[] = "0) Handler: " . $this->debugCallable($this->handler); + } + + $result = ''; + foreach (array_reverse($this->stack) as $tuple) { + $depth++; + $str = "{$depth}) Name: '{$tuple[1]}', "; + $str .= "Function: " . $this->debugCallable($tuple[0]); + $result = "> {$str}\n{$result}"; + $stack[] = $str; + } + + foreach (array_keys($stack) as $k) { + $result .= "< {$stack[$k]}\n"; + } + + return $result; + } + + /** + * Set the HTTP handler that actually returns a promise. + * + * @param callable $handler Accepts a request and array of options and + * returns a Promise. + */ + public function setHandler(callable $handler) + { + $this->handler = $handler; + $this->cached = null; + } + + /** + * Returns true if the builder has a handler. + * + * @return bool + */ + public function hasHandler() + { + return (bool) $this->handler; + } + + /** + * Unshift a middleware to the bottom of the stack. + * + * @param callable $middleware Middleware function + * @param string $name Name to register for this middleware. + */ + public function unshift(callable $middleware, $name = null) + { + array_unshift($this->stack, [$middleware, $name]); + $this->cached = null; + } + + /** + * Push a middleware to the top of the stack. + * + * @param callable $middleware Middleware function + * @param string $name Name to register for this middleware. + */ + public function push(callable $middleware, $name = '') + { + $this->stack[] = [$middleware, $name]; + $this->cached = null; + } + + /** + * Add a middleware before another middleware by name. + * + * @param string $findName Middleware to find + * @param callable $middleware Middleware function + * @param string $withName Name to register for this middleware. + */ + public function before($findName, callable $middleware, $withName = '') + { + $this->splice($findName, $withName, $middleware, true); + } + + /** + * Add a middleware after another middleware by name. + * + * @param string $findName Middleware to find + * @param callable $middleware Middleware function + * @param string $withName Name to register for this middleware. + */ + public function after($findName, callable $middleware, $withName = '') + { + $this->splice($findName, $withName, $middleware, false); + } + + /** + * Remove a middleware by instance or name from the stack. + * + * @param callable|string $remove Middleware to remove by instance or name. + */ + public function remove($remove) + { + $this->cached = null; + $idx = is_callable($remove) ? 0 : 1; + $this->stack = array_values(array_filter( + $this->stack, + function ($tuple) use ($idx, $remove) { + return $tuple[$idx] !== $remove; + } + )); + } + + /** + * Compose the middleware and handler into a single callable function. + * + * @return callable + */ + public function resolve() + { + if (!$this->cached) { + if (!($prev = $this->handler)) { + throw new \LogicException('No handler has been specified'); + } + + foreach (array_reverse($this->stack) as $fn) { + $prev = $fn[0]($prev); + } + + $this->cached = $prev; + } + + return $this->cached; + } + + /** + * @param $name + * @return int + */ + private function findByName($name) + { + foreach ($this->stack as $k => $v) { + if ($v[1] === $name) { + return $k; + } + } + + throw new \InvalidArgumentException("Middleware not found: $name"); + } + + /** + * Splices a function into the middleware list at a specific position. + * + * @param $findName + * @param $withName + * @param callable $middleware + * @param $before + */ + private function splice($findName, $withName, callable $middleware, $before) + { + $this->cached = null; + $idx = $this->findByName($findName); + $tuple = [$middleware, $withName]; + + if ($before) { + if ($idx === 0) { + array_unshift($this->stack, $tuple); + } else { + $replacement = [$tuple, $this->stack[$idx]]; + array_splice($this->stack, $idx, 1, $replacement); + } + } elseif ($idx === count($this->stack) - 1) { + $this->stack[] = $tuple; + } else { + $replacement = [$this->stack[$idx], $tuple]; + array_splice($this->stack, $idx, 1, $replacement); + } + } + + /** + * Provides a debug string for a given callable. + * + * @param array|callable $fn Function to write as a string. + * + * @return string + */ + private function debugCallable($fn) + { + if (is_string($fn)) { + return "callable({$fn})"; + } + + if (is_array($fn)) { + return is_string($fn[0]) + ? "callable({$fn[0]}::{$fn[1]})" + : "callable(['" . get_class($fn[0]) . "', '{$fn[1]}'])"; + } + + return 'callable(' . spl_object_hash($fn) . ')'; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/civicrm/vendor/guzzlehttp/guzzle/src/MessageFormatter.php new file mode 100644 index 0000000000000000000000000000000000000000..6b090a977391a3903e580b05ff882965239a388d --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/MessageFormatter.php @@ -0,0 +1,182 @@ +<?php +namespace GuzzleHttp; + +use Psr\Http\Message\MessageInterface; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Formats log messages using variable substitutions for requests, responses, + * and other transactional data. + * + * The following variable substitutions are supported: + * + * - {request}: Full HTTP request message + * - {response}: Full HTTP response message + * - {ts}: ISO 8601 date in GMT + * - {date_iso_8601} ISO 8601 date in GMT + * - {date_common_log} Apache common log date using the configured timezone. + * - {host}: Host of the request + * - {method}: Method of the request + * - {uri}: URI of the request + * - {host}: Host of the request + * - {version}: Protocol version + * - {target}: Request target of the request (path + query + fragment) + * - {hostname}: Hostname of the machine that sent the request + * - {code}: Status code of the response (if available) + * - {phrase}: Reason phrase of the response (if available) + * - {error}: Any error messages (if available) + * - {req_header_*}: Replace `*` with the lowercased name of a request header to add to the message + * - {res_header_*}: Replace `*` with the lowercased name of a response header to add to the message + * - {req_headers}: Request headers + * - {res_headers}: Response headers + * - {req_body}: Request body + * - {res_body}: Response body + */ +class MessageFormatter +{ + /** + * Apache Common Log Format. + * @link http://httpd.apache.org/docs/2.4/logs.html#common + * @var string + */ + const CLF = "{hostname} {req_header_User-Agent} - [{date_common_log}] \"{method} {target} HTTP/{version}\" {code} {res_header_Content-Length}"; + const DEBUG = ">>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; + const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; + + /** @var string Template used to format log messages */ + private $template; + + /** + * @param string $template Log message template + */ + public function __construct($template = self::CLF) + { + $this->template = $template ?: self::CLF; + } + + /** + * Returns a formatted message string. + * + * @param RequestInterface $request Request that was sent + * @param ResponseInterface $response Response that was received + * @param \Exception $error Exception that was received + * + * @return string + */ + public function format( + RequestInterface $request, + ResponseInterface $response = null, + \Exception $error = null + ) { + $cache = []; + + return preg_replace_callback( + '/{\s*([A-Za-z_\-\.0-9]+)\s*}/', + function (array $matches) use ($request, $response, $error, &$cache) { + + if (isset($cache[$matches[1]])) { + return $cache[$matches[1]]; + } + + $result = ''; + switch ($matches[1]) { + case 'request': + $result = Psr7\str($request); + break; + case 'response': + $result = $response ? Psr7\str($response) : ''; + break; + case 'req_headers': + $result = trim($request->getMethod() + . ' ' . $request->getRequestTarget()) + . ' HTTP/' . $request->getProtocolVersion() . "\r\n" + . $this->headers($request); + break; + case 'res_headers': + $result = $response ? + sprintf( + 'HTTP/%s %d %s', + $response->getProtocolVersion(), + $response->getStatusCode(), + $response->getReasonPhrase() + ) . "\r\n" . $this->headers($response) + : 'NULL'; + break; + case 'req_body': + $result = $request->getBody(); + break; + case 'res_body': + $result = $response ? $response->getBody() : 'NULL'; + break; + case 'ts': + case 'date_iso_8601': + $result = gmdate('c'); + break; + case 'date_common_log': + $result = date('d/M/Y:H:i:s O'); + break; + case 'method': + $result = $request->getMethod(); + break; + case 'version': + $result = $request->getProtocolVersion(); + break; + case 'uri': + case 'url': + $result = $request->getUri(); + break; + case 'target': + $result = $request->getRequestTarget(); + break; + case 'req_version': + $result = $request->getProtocolVersion(); + break; + case 'res_version': + $result = $response + ? $response->getProtocolVersion() + : 'NULL'; + break; + case 'host': + $result = $request->getHeaderLine('Host'); + break; + case 'hostname': + $result = gethostname(); + break; + case 'code': + $result = $response ? $response->getStatusCode() : 'NULL'; + break; + case 'phrase': + $result = $response ? $response->getReasonPhrase() : 'NULL'; + break; + case 'error': + $result = $error ? $error->getMessage() : 'NULL'; + break; + default: + // handle prefixed dynamic headers + if (strpos($matches[1], 'req_header_') === 0) { + $result = $request->getHeaderLine(substr($matches[1], 11)); + } elseif (strpos($matches[1], 'res_header_') === 0) { + $result = $response + ? $response->getHeaderLine(substr($matches[1], 11)) + : 'NULL'; + } + } + + $cache[$matches[1]] = $result; + return $result; + }, + $this->template + ); + } + + private function headers(MessageInterface $message) + { + $result = ''; + foreach ($message->getHeaders() as $name => $values) { + $result .= $name . ': ' . implode(', ', $values) . "\r\n"; + } + + return trim($result); + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Middleware.php b/civicrm/vendor/guzzlehttp/guzzle/src/Middleware.php new file mode 100644 index 0000000000000000000000000000000000000000..9d79bd26e8ae31006a0ce68204b5393208398967 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Middleware.php @@ -0,0 +1,254 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Cookie\CookieJarInterface; +use GuzzleHttp\Exception\RequestException; +use GuzzleHttp\Promise\RejectedPromise; +use GuzzleHttp\Psr7; +use Psr\Http\Message\ResponseInterface; +use Psr\Log\LoggerInterface; +use Psr\Log\LogLevel; + +/** + * Functions used to create and wrap handlers with handler middleware. + */ +final class Middleware +{ + /** + * Middleware that adds cookies to requests. + * + * The options array must be set to a CookieJarInterface in order to use + * cookies. This is typically handled for you by a client. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function cookies() + { + return function (callable $handler) { + return function ($request, array $options) use ($handler) { + if (empty($options['cookies'])) { + return $handler($request, $options); + } elseif (!($options['cookies'] instanceof CookieJarInterface)) { + throw new \InvalidArgumentException('cookies must be an instance of GuzzleHttp\Cookie\CookieJarInterface'); + } + $cookieJar = $options['cookies']; + $request = $cookieJar->withCookieHeader($request); + return $handler($request, $options) + ->then(function ($response) use ($cookieJar, $request) { + $cookieJar->extractCookies($request, $response); + return $response; + } + ); + }; + }; + } + + /** + * Middleware that throws exceptions for 4xx or 5xx responses when the + * "http_error" request option is set to true. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function httpErrors() + { + return function (callable $handler) { + return function ($request, array $options) use ($handler) { + if (empty($options['http_errors'])) { + return $handler($request, $options); + } + return $handler($request, $options)->then( + function (ResponseInterface $response) use ($request, $handler) { + $code = $response->getStatusCode(); + if ($code < 400) { + return $response; + } + throw RequestException::create($request, $response); + } + ); + }; + }; + } + + /** + * Middleware that pushes history data to an ArrayAccess container. + * + * @param array $container Container to hold the history (by reference). + * + * @return callable Returns a function that accepts the next handler. + * @throws \InvalidArgumentException if container is not an array or ArrayAccess. + */ + public static function history(&$container) + { + if (!is_array($container) && !$container instanceof \ArrayAccess) { + throw new \InvalidArgumentException('history container must be an array or object implementing ArrayAccess'); + } + + return function (callable $handler) use (&$container) { + return function ($request, array $options) use ($handler, &$container) { + return $handler($request, $options)->then( + function ($value) use ($request, &$container, $options) { + $container[] = [ + 'request' => $request, + 'response' => $value, + 'error' => null, + 'options' => $options + ]; + return $value; + }, + function ($reason) use ($request, &$container, $options) { + $container[] = [ + 'request' => $request, + 'response' => null, + 'error' => $reason, + 'options' => $options + ]; + return \GuzzleHttp\Promise\rejection_for($reason); + } + ); + }; + }; + } + + /** + * Middleware that invokes a callback before and after sending a request. + * + * The provided listener cannot modify or alter the response. It simply + * "taps" into the chain to be notified before returning the promise. The + * before listener accepts a request and options array, and the after + * listener accepts a request, options array, and response promise. + * + * @param callable $before Function to invoke before forwarding the request. + * @param callable $after Function invoked after forwarding. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function tap(callable $before = null, callable $after = null) + { + return function (callable $handler) use ($before, $after) { + return function ($request, array $options) use ($handler, $before, $after) { + if ($before) { + $before($request, $options); + } + $response = $handler($request, $options); + if ($after) { + $after($request, $options, $response); + } + return $response; + }; + }; + } + + /** + * Middleware that handles request redirects. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function redirect() + { + return function (callable $handler) { + return new RedirectMiddleware($handler); + }; + } + + /** + * Middleware that retries requests based on the boolean result of + * invoking the provided "decider" function. + * + * If no delay function is provided, a simple implementation of exponential + * backoff will be utilized. + * + * @param callable $decider Function that accepts the number of retries, + * a request, [response], and [exception] and + * returns true if the request is to be retried. + * @param callable $delay Function that accepts the number of retries and + * returns the number of milliseconds to delay. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function retry(callable $decider, callable $delay = null) + { + return function (callable $handler) use ($decider, $delay) { + return new RetryMiddleware($decider, $handler, $delay); + }; + } + + /** + * Middleware that logs requests, responses, and errors using a message + * formatter. + * + * @param LoggerInterface $logger Logs messages. + * @param MessageFormatter $formatter Formatter used to create message strings. + * @param string $logLevel Level at which to log requests. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = LogLevel::INFO) + { + return function (callable $handler) use ($logger, $formatter, $logLevel) { + return function ($request, array $options) use ($handler, $logger, $formatter, $logLevel) { + return $handler($request, $options)->then( + function ($response) use ($logger, $request, $formatter, $logLevel) { + $message = $formatter->format($request, $response); + $logger->log($logLevel, $message); + return $response; + }, + function ($reason) use ($logger, $request, $formatter) { + $response = $reason instanceof RequestException + ? $reason->getResponse() + : null; + $message = $formatter->format($request, $response, $reason); + $logger->notice($message); + return \GuzzleHttp\Promise\rejection_for($reason); + } + ); + }; + }; + } + + /** + * This middleware adds a default content-type if possible, a default + * content-length or transfer-encoding header, and the expect header. + * + * @return callable + */ + public static function prepareBody() + { + return function (callable $handler) { + return new PrepareBodyMiddleware($handler); + }; + } + + /** + * Middleware that applies a map function to the request before passing to + * the next handler. + * + * @param callable $fn Function that accepts a RequestInterface and returns + * a RequestInterface. + * @return callable + */ + public static function mapRequest(callable $fn) + { + return function (callable $handler) use ($fn) { + return function ($request, array $options) use ($handler, $fn) { + return $handler($fn($request), $options); + }; + }; + } + + /** + * Middleware that applies a map function to the resolved promise's + * response. + * + * @param callable $fn Function that accepts a ResponseInterface and + * returns a ResponseInterface. + * @return callable + */ + public static function mapResponse(callable $fn) + { + return function (callable $handler) use ($fn) { + return function ($request, array $options) use ($handler, $fn) { + return $handler($request, $options)->then($fn); + }; + }; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/Pool.php b/civicrm/vendor/guzzlehttp/guzzle/src/Pool.php new file mode 100644 index 0000000000000000000000000000000000000000..8f1be33cd396b60e9dd738fe81150cb62dd9e211 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/Pool.php @@ -0,0 +1,123 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Promise\PromisorInterface; +use Psr\Http\Message\RequestInterface; +use GuzzleHttp\Promise\EachPromise; + +/** + * Sends and iterator of requests concurrently using a capped pool size. + * + * The pool will read from an iterator until it is cancelled or until the + * iterator is consumed. When a request is yielded, the request is sent after + * applying the "request_options" request options (if provided in the ctor). + * + * When a function is yielded by the iterator, the function is provided the + * "request_options" array that should be merged on top of any existing + * options, and the function MUST then return a wait-able promise. + */ +class Pool implements PromisorInterface +{ + /** @var EachPromise */ + private $each; + + /** + * @param ClientInterface $client Client used to send the requests. + * @param array|\Iterator $requests Requests or functions that return + * requests to send concurrently. + * @param array $config Associative array of options + * - concurrency: (int) Maximum number of requests to send concurrently + * - options: Array of request options to apply to each request. + * - fulfilled: (callable) Function to invoke when a request completes. + * - rejected: (callable) Function to invoke when a request is rejected. + */ + public function __construct( + ClientInterface $client, + $requests, + array $config = [] + ) { + // Backwards compatibility. + if (isset($config['pool_size'])) { + $config['concurrency'] = $config['pool_size']; + } elseif (!isset($config['concurrency'])) { + $config['concurrency'] = 25; + } + + if (isset($config['options'])) { + $opts = $config['options']; + unset($config['options']); + } else { + $opts = []; + } + + $iterable = \GuzzleHttp\Promise\iter_for($requests); + $requests = function () use ($iterable, $client, $opts) { + foreach ($iterable as $key => $rfn) { + if ($rfn instanceof RequestInterface) { + yield $key => $client->sendAsync($rfn, $opts); + } elseif (is_callable($rfn)) { + yield $key => $rfn($opts); + } else { + throw new \InvalidArgumentException('Each value yielded by ' + . 'the iterator must be a Psr7\Http\Message\RequestInterface ' + . 'or a callable that returns a promise that fulfills ' + . 'with a Psr7\Message\Http\ResponseInterface object.'); + } + } + }; + + $this->each = new EachPromise($requests(), $config); + } + + public function promise() + { + return $this->each->promise(); + } + + /** + * Sends multiple requests concurrently and returns an array of responses + * and exceptions that uses the same ordering as the provided requests. + * + * IMPORTANT: This method keeps every request and response in memory, and + * as such, is NOT recommended when sending a large number or an + * indeterminate number of requests concurrently. + * + * @param ClientInterface $client Client used to send the requests + * @param array|\Iterator $requests Requests to send concurrently. + * @param array $options Passes through the options available in + * {@see GuzzleHttp\Pool::__construct} + * + * @return array Returns an array containing the response or an exception + * in the same order that the requests were sent. + * @throws \InvalidArgumentException if the event format is incorrect. + */ + public static function batch( + ClientInterface $client, + $requests, + array $options = [] + ) { + $res = []; + self::cmpCallback($options, 'fulfilled', $res); + self::cmpCallback($options, 'rejected', $res); + $pool = new static($client, $requests, $options); + $pool->promise()->wait(); + ksort($res); + + return $res; + } + + private static function cmpCallback(array &$options, $name, array &$results) + { + if (!isset($options[$name])) { + $options[$name] = function ($v, $k) use (&$results) { + $results[$k] = $v; + }; + } else { + $currentFn = $options[$name]; + $options[$name] = function ($v, $k) use (&$results, $currentFn) { + $currentFn($v, $k); + $results[$k] = $v; + }; + } + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/civicrm/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php new file mode 100644 index 0000000000000000000000000000000000000000..2eb95f9b2d3a1d9ce581f34bb01fcdf46ddd493d --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php @@ -0,0 +1,106 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Promise\PromiseInterface; +use GuzzleHttp\Psr7; +use Psr\Http\Message\RequestInterface; + +/** + * Prepares requests that contain a body, adding the Content-Length, + * Content-Type, and Expect headers. + */ +class PrepareBodyMiddleware +{ + /** @var callable */ + private $nextHandler; + + /** + * @param callable $nextHandler Next handler to invoke. + */ + public function __construct(callable $nextHandler) + { + $this->nextHandler = $nextHandler; + } + + /** + * @param RequestInterface $request + * @param array $options + * + * @return PromiseInterface + */ + public function __invoke(RequestInterface $request, array $options) + { + $fn = $this->nextHandler; + + // Don't do anything if the request has no body. + if ($request->getBody()->getSize() === 0) { + return $fn($request, $options); + } + + $modify = []; + + // Add a default content-type if possible. + if (!$request->hasHeader('Content-Type')) { + if ($uri = $request->getBody()->getMetadata('uri')) { + if ($type = Psr7\mimetype_from_filename($uri)) { + $modify['set_headers']['Content-Type'] = $type; + } + } + } + + // Add a default content-length or transfer-encoding header. + if (!$request->hasHeader('Content-Length') + && !$request->hasHeader('Transfer-Encoding') + ) { + $size = $request->getBody()->getSize(); + if ($size !== null) { + $modify['set_headers']['Content-Length'] = $size; + } else { + $modify['set_headers']['Transfer-Encoding'] = 'chunked'; + } + } + + // Add the expect header if needed. + $this->addExpectHeader($request, $options, $modify); + + return $fn(Psr7\modify_request($request, $modify), $options); + } + + private function addExpectHeader( + RequestInterface $request, + array $options, + array &$modify + ) { + // Determine if the Expect header should be used + if ($request->hasHeader('Expect')) { + return; + } + + $expect = isset($options['expect']) ? $options['expect'] : null; + + // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0 + if ($expect === false || $request->getProtocolVersion() < 1.1) { + return; + } + + // The expect header is unconditionally enabled + if ($expect === true) { + $modify['set_headers']['Expect'] = '100-Continue'; + return; + } + + // By default, send the expect header when the payload is > 1mb + if ($expect === null) { + $expect = 1048576; + } + + // Always add if the body cannot be rewound, the size cannot be + // determined, or the size is greater than the cutoff threshold + $body = $request->getBody(); + $size = $body->getSize(); + + if ($size === null || $size >= (int) $expect || !$body->isSeekable()) { + $modify['set_headers']['Expect'] = '100-Continue'; + } + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/civicrm/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php new file mode 100644 index 0000000000000000000000000000000000000000..131b77179aa07f59ef65ff0945dd51083d58eb0e --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -0,0 +1,237 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Exception\BadResponseException; +use GuzzleHttp\Exception\TooManyRedirectsException; +use GuzzleHttp\Promise\PromiseInterface; +use GuzzleHttp\Psr7; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\UriInterface; + +/** + * Request redirect middleware. + * + * Apply this middleware like other middleware using + * {@see GuzzleHttp\Middleware::redirect()}. + */ +class RedirectMiddleware +{ + const HISTORY_HEADER = 'X-Guzzle-Redirect-History'; + + const STATUS_HISTORY_HEADER = 'X-Guzzle-Redirect-Status-History'; + + public static $defaultSettings = [ + 'max' => 5, + 'protocols' => ['http', 'https'], + 'strict' => false, + 'referer' => false, + 'track_redirects' => false, + ]; + + /** @var callable */ + private $nextHandler; + + /** + * @param callable $nextHandler Next handler to invoke. + */ + public function __construct(callable $nextHandler) + { + $this->nextHandler = $nextHandler; + } + + /** + * @param RequestInterface $request + * @param array $options + * + * @return PromiseInterface + */ + public function __invoke(RequestInterface $request, array $options) + { + $fn = $this->nextHandler; + + if (empty($options['allow_redirects'])) { + return $fn($request, $options); + } + + if ($options['allow_redirects'] === true) { + $options['allow_redirects'] = self::$defaultSettings; + } elseif (!is_array($options['allow_redirects'])) { + throw new \InvalidArgumentException('allow_redirects must be true, false, or array'); + } else { + // Merge the default settings with the provided settings + $options['allow_redirects'] += self::$defaultSettings; + } + + if (empty($options['allow_redirects']['max'])) { + return $fn($request, $options); + } + + return $fn($request, $options) + ->then(function (ResponseInterface $response) use ($request, $options) { + return $this->checkRedirect($request, $options, $response); + }); + } + + /** + * @param RequestInterface $request + * @param array $options + * @param ResponseInterface|PromiseInterface $response + * + * @return ResponseInterface|PromiseInterface + */ + public function checkRedirect( + RequestInterface $request, + array $options, + ResponseInterface $response + ) { + if (substr($response->getStatusCode(), 0, 1) != '3' + || !$response->hasHeader('Location') + ) { + return $response; + } + + $this->guardMax($request, $options); + $nextRequest = $this->modifyRequest($request, $options, $response); + + if (isset($options['allow_redirects']['on_redirect'])) { + call_user_func( + $options['allow_redirects']['on_redirect'], + $request, + $response, + $nextRequest->getUri() + ); + } + + /** @var PromiseInterface|ResponseInterface $promise */ + $promise = $this($nextRequest, $options); + + // Add headers to be able to track history of redirects. + if (!empty($options['allow_redirects']['track_redirects'])) { + return $this->withTracking( + $promise, + (string) $nextRequest->getUri(), + $response->getStatusCode() + ); + } + + return $promise; + } + + private function withTracking(PromiseInterface $promise, $uri, $statusCode) + { + return $promise->then( + function (ResponseInterface $response) use ($uri, $statusCode) { + // Note that we are pushing to the front of the list as this + // would be an earlier response than what is currently present + // in the history header. + $historyHeader = $response->getHeader(self::HISTORY_HEADER); + $statusHeader = $response->getHeader(self::STATUS_HISTORY_HEADER); + array_unshift($historyHeader, $uri); + array_unshift($statusHeader, $statusCode); + return $response->withHeader(self::HISTORY_HEADER, $historyHeader) + ->withHeader(self::STATUS_HISTORY_HEADER, $statusHeader); + } + ); + } + + private function guardMax(RequestInterface $request, array &$options) + { + $current = isset($options['__redirect_count']) + ? $options['__redirect_count'] + : 0; + $options['__redirect_count'] = $current + 1; + $max = $options['allow_redirects']['max']; + + if ($options['__redirect_count'] > $max) { + throw new TooManyRedirectsException( + "Will not follow more than {$max} redirects", + $request + ); + } + } + + /** + * @param RequestInterface $request + * @param array $options + * @param ResponseInterface $response + * + * @return RequestInterface + */ + public function modifyRequest( + RequestInterface $request, + array $options, + ResponseInterface $response + ) { + // Request modifications to apply. + $modify = []; + $protocols = $options['allow_redirects']['protocols']; + + // Use a GET request if this is an entity enclosing request and we are + // not forcing RFC compliance, but rather emulating what all browsers + // would do. + $statusCode = $response->getStatusCode(); + if ($statusCode == 303 || + ($statusCode <= 302 && $request->getBody() && !$options['allow_redirects']['strict']) + ) { + $modify['method'] = 'GET'; + $modify['body'] = ''; + } + + $modify['uri'] = $this->redirectUri($request, $response, $protocols); + Psr7\rewind_body($request); + + // Add the Referer header if it is told to do so and only + // add the header if we are not redirecting from https to http. + if ($options['allow_redirects']['referer'] + && $modify['uri']->getScheme() === $request->getUri()->getScheme() + ) { + $uri = $request->getUri()->withUserInfo('', ''); + $modify['set_headers']['Referer'] = (string) $uri; + } else { + $modify['remove_headers'][] = 'Referer'; + } + + // Remove Authorization header if host is different. + if ($request->getUri()->getHost() !== $modify['uri']->getHost()) { + $modify['remove_headers'][] = 'Authorization'; + } + + return Psr7\modify_request($request, $modify); + } + + /** + * Set the appropriate URL on the request based on the location header + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param array $protocols + * + * @return UriInterface + */ + private function redirectUri( + RequestInterface $request, + ResponseInterface $response, + array $protocols + ) { + $location = Psr7\UriResolver::resolve( + $request->getUri(), + new Psr7\Uri($response->getHeaderLine('Location')) + ); + + // Ensure that the redirect URI is allowed based on the protocols. + if (!in_array($location->getScheme(), $protocols)) { + throw new BadResponseException( + sprintf( + 'Redirect URI, %s, does not use one of the allowed redirect protocols: %s', + $location, + implode(', ', $protocols) + ), + $request, + $response + ); + } + + return $location; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/civicrm/vendor/guzzlehttp/guzzle/src/RequestOptions.php new file mode 100644 index 0000000000000000000000000000000000000000..c6aacfb15782756a14e24ccc71143663795011fa --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/RequestOptions.php @@ -0,0 +1,255 @@ +<?php +namespace GuzzleHttp; + +/** + * This class contains a list of built-in Guzzle request options. + * + * More documentation for each option can be found at http://guzzlephp.org/. + * + * @link http://docs.guzzlephp.org/en/v6/request-options.html + */ +final class RequestOptions +{ + /** + * allow_redirects: (bool|array) Controls redirect behavior. Pass false + * to disable redirects, pass true to enable redirects, pass an + * associative to provide custom redirect settings. Defaults to "false". + * This option only works if your handler has the RedirectMiddleware. When + * passing an associative array, you can provide the following key value + * pairs: + * + * - max: (int, default=5) maximum number of allowed redirects. + * - strict: (bool, default=false) Set to true to use strict redirects + * meaning redirect POST requests with POST requests vs. doing what most + * browsers do which is redirect POST requests with GET requests + * - referer: (bool, default=true) Set to false to disable the Referer + * header. + * - protocols: (array, default=['http', 'https']) Allowed redirect + * protocols. + * - on_redirect: (callable) PHP callable that is invoked when a redirect + * is encountered. The callable is invoked with the request, the redirect + * response that was received, and the effective URI. Any return value + * from the on_redirect function is ignored. + */ + const ALLOW_REDIRECTS = 'allow_redirects'; + + /** + * auth: (array) Pass an array of HTTP authentication parameters to use + * with the request. The array must contain the username in index [0], + * the password in index [1], and you can optionally provide a built-in + * authentication type in index [2]. Pass null to disable authentication + * for a request. + */ + const AUTH = 'auth'; + + /** + * body: (resource|string|null|int|float|StreamInterface|callable|\Iterator) + * Body to send in the request. + */ + const BODY = 'body'; + + /** + * cert: (string|array) Set to a string to specify the path to a file + * containing a PEM formatted SSL client side certificate. If a password + * is required, then set cert to an array containing the path to the PEM + * file in the first array element followed by the certificate password + * in the second array element. + */ + const CERT = 'cert'; + + /** + * cookies: (bool|GuzzleHttp\Cookie\CookieJarInterface, default=false) + * Specifies whether or not cookies are used in a request or what cookie + * jar to use or what cookies to send. This option only works if your + * handler has the `cookie` middleware. Valid values are `false` and + * an instance of {@see GuzzleHttp\Cookie\CookieJarInterface}. + */ + const COOKIES = 'cookies'; + + /** + * connect_timeout: (float, default=0) Float describing the number of + * seconds to wait while trying to connect to a server. Use 0 to wait + * indefinitely (the default behavior). + */ + const CONNECT_TIMEOUT = 'connect_timeout'; + + /** + * debug: (bool|resource) Set to true or set to a PHP stream returned by + * fopen() enable debug output with the HTTP handler used to send a + * request. + */ + const DEBUG = 'debug'; + + /** + * decode_content: (bool, default=true) Specify whether or not + * Content-Encoding responses (gzip, deflate, etc.) are automatically + * decoded. + */ + const DECODE_CONTENT = 'decode_content'; + + /** + * delay: (int) The amount of time to delay before sending in milliseconds. + */ + const DELAY = 'delay'; + + /** + * expect: (bool|integer) Controls the behavior of the + * "Expect: 100-Continue" header. + * + * Set to `true` to enable the "Expect: 100-Continue" header for all + * requests that sends a body. Set to `false` to disable the + * "Expect: 100-Continue" header for all requests. Set to a number so that + * the size of the payload must be greater than the number in order to send + * the Expect header. Setting to a number will send the Expect header for + * all requests in which the size of the payload cannot be determined or + * where the body is not rewindable. + * + * By default, Guzzle will add the "Expect: 100-Continue" header when the + * size of the body of a request is greater than 1 MB and a request is + * using HTTP/1.1. + */ + const EXPECT = 'expect'; + + /** + * form_params: (array) Associative array of form field names to values + * where each value is a string or array of strings. Sets the Content-Type + * header to application/x-www-form-urlencoded when no Content-Type header + * is already present. + */ + const FORM_PARAMS = 'form_params'; + + /** + * headers: (array) Associative array of HTTP headers. Each value MUST be + * a string or array of strings. + */ + const HEADERS = 'headers'; + + /** + * http_errors: (bool, default=true) Set to false to disable exceptions + * when a non- successful HTTP response is received. By default, + * exceptions will be thrown for 4xx and 5xx responses. This option only + * works if your handler has the `httpErrors` middleware. + */ + const HTTP_ERRORS = 'http_errors'; + + /** + * json: (mixed) Adds JSON data to a request. The provided value is JSON + * encoded and a Content-Type header of application/json will be added to + * the request if no Content-Type header is already present. + */ + const JSON = 'json'; + + /** + * multipart: (array) Array of associative arrays, each containing a + * required "name" key mapping to the form field, name, a required + * "contents" key mapping to a StreamInterface|resource|string, an + * optional "headers" associative array of custom headers, and an + * optional "filename" key mapping to a string to send as the filename in + * the part. If no "filename" key is present, then no "filename" attribute + * will be added to the part. + */ + const MULTIPART = 'multipart'; + + /** + * on_headers: (callable) A callable that is invoked when the HTTP headers + * of the response have been received but the body has not yet begun to + * download. + */ + const ON_HEADERS = 'on_headers'; + + /** + * on_stats: (callable) allows you to get access to transfer statistics of + * a request and access the lower level transfer details of the handler + * associated with your client. ``on_stats`` is a callable that is invoked + * when a handler has finished sending a request. The callback is invoked + * with transfer statistics about the request, the response received, or + * the error encountered. Included in the data is the total amount of time + * taken to send the request. + */ + const ON_STATS = 'on_stats'; + + /** + * progress: (callable) Defines a function to invoke when transfer + * progress is made. The function accepts the following positional + * arguments: the total number of bytes expected to be downloaded, the + * number of bytes downloaded so far, the number of bytes expected to be + * uploaded, the number of bytes uploaded so far. + */ + const PROGRESS = 'progress'; + + /** + * proxy: (string|array) Pass a string to specify an HTTP proxy, or an + * array to specify different proxies for different protocols (where the + * key is the protocol and the value is a proxy string). + */ + const PROXY = 'proxy'; + + /** + * query: (array|string) Associative array of query string values to add + * to the request. This option uses PHP's http_build_query() to create + * the string representation. Pass a string value if you need more + * control than what this method provides + */ + const QUERY = 'query'; + + /** + * sink: (resource|string|StreamInterface) Where the data of the + * response is written to. Defaults to a PHP temp stream. Providing a + * string will write data to a file by the given name. + */ + const SINK = 'sink'; + + /** + * synchronous: (bool) Set to true to inform HTTP handlers that you intend + * on waiting on the response. This can be useful for optimizations. Note + * that a promise is still returned if you are using one of the async + * client methods. + */ + const SYNCHRONOUS = 'synchronous'; + + /** + * ssl_key: (array|string) Specify the path to a file containing a private + * SSL key in PEM format. If a password is required, then set to an array + * containing the path to the SSL key in the first array element followed + * by the password required for the certificate in the second element. + */ + const SSL_KEY = 'ssl_key'; + + /** + * stream: Set to true to attempt to stream a response rather than + * download it all up-front. + */ + const STREAM = 'stream'; + + /** + * verify: (bool|string, default=true) Describes the SSL certificate + * verification behavior of a request. Set to true to enable SSL + * certificate verification using the system CA bundle when available + * (the default). Set to false to disable certificate verification (this + * is insecure!). Set to a string to provide the path to a CA bundle on + * disk to enable verification using a custom certificate. + */ + const VERIFY = 'verify'; + + /** + * timeout: (float, default=0) Float describing the timeout of the + * request in seconds. Use 0 to wait indefinitely (the default behavior). + */ + const TIMEOUT = 'timeout'; + + /** + * read_timeout: (float, default=default_socket_timeout ini setting) Float describing + * the body read timeout, for stream requests. + */ + const READ_TIMEOUT = 'read_timeout'; + + /** + * version: (float) Specifies the HTTP protocol version to attempt to use. + */ + const VERSION = 'version'; + + /** + * force_ip_resolve: (bool) Force client to use only ipv4 or ipv6 protocol + */ + const FORCE_IP_RESOLVE = 'force_ip_resolve'; +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php b/civicrm/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php new file mode 100644 index 0000000000000000000000000000000000000000..f27090fd197ab7ff443f12f6501d639f169871cf --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php @@ -0,0 +1,112 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Promise\PromiseInterface; +use GuzzleHttp\Promise\RejectedPromise; +use GuzzleHttp\Psr7; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; + +/** + * Middleware that retries requests based on the boolean result of + * invoking the provided "decider" function. + */ +class RetryMiddleware +{ + /** @var callable */ + private $nextHandler; + + /** @var callable */ + private $decider; + + /** + * @param callable $decider Function that accepts the number of retries, + * a request, [response], and [exception] and + * returns true if the request is to be + * retried. + * @param callable $nextHandler Next handler to invoke. + * @param callable $delay Function that accepts the number of retries + * and [response] and returns the number of + * milliseconds to delay. + */ + public function __construct( + callable $decider, + callable $nextHandler, + callable $delay = null + ) { + $this->decider = $decider; + $this->nextHandler = $nextHandler; + $this->delay = $delay ?: __CLASS__ . '::exponentialDelay'; + } + + /** + * Default exponential backoff delay function. + * + * @param $retries + * + * @return int + */ + public static function exponentialDelay($retries) + { + return (int) pow(2, $retries - 1); + } + + /** + * @param RequestInterface $request + * @param array $options + * + * @return PromiseInterface + */ + public function __invoke(RequestInterface $request, array $options) + { + if (!isset($options['retries'])) { + $options['retries'] = 0; + } + + $fn = $this->nextHandler; + return $fn($request, $options) + ->then( + $this->onFulfilled($request, $options), + $this->onRejected($request, $options) + ); + } + + private function onFulfilled(RequestInterface $req, array $options) + { + return function ($value) use ($req, $options) { + if (!call_user_func( + $this->decider, + $options['retries'], + $req, + $value, + null + )) { + return $value; + } + return $this->doRetry($req, $options, $value); + }; + } + + private function onRejected(RequestInterface $req, array $options) + { + return function ($reason) use ($req, $options) { + if (!call_user_func( + $this->decider, + $options['retries'], + $req, + null, + $reason + )) { + return \GuzzleHttp\Promise\rejection_for($reason); + } + return $this->doRetry($req, $options); + }; + } + + private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null) + { + $options['delay'] = call_user_func($this->delay, ++$options['retries'], $response); + + return $this($request, $options); + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/TransferStats.php b/civicrm/vendor/guzzlehttp/guzzle/src/TransferStats.php new file mode 100644 index 0000000000000000000000000000000000000000..15f717e1ea6e8edf6bc3a252f5a478e19e835b04 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/TransferStats.php @@ -0,0 +1,126 @@ +<?php +namespace GuzzleHttp; + +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\UriInterface; + +/** + * Represents data at the point after it was transferred either successfully + * or after a network error. + */ +final class TransferStats +{ + private $request; + private $response; + private $transferTime; + private $handlerStats; + private $handlerErrorData; + + /** + * @param RequestInterface $request Request that was sent. + * @param ResponseInterface $response Response received (if any) + * @param null $transferTime Total handler transfer time. + * @param mixed $handlerErrorData Handler error data. + * @param array $handlerStats Handler specific stats. + */ + public function __construct( + RequestInterface $request, + ResponseInterface $response = null, + $transferTime = null, + $handlerErrorData = null, + $handlerStats = [] + ) { + $this->request = $request; + $this->response = $response; + $this->transferTime = $transferTime; + $this->handlerErrorData = $handlerErrorData; + $this->handlerStats = $handlerStats; + } + + /** + * @return RequestInterface + */ + public function getRequest() + { + return $this->request; + } + + /** + * Returns the response that was received (if any). + * + * @return ResponseInterface|null + */ + public function getResponse() + { + return $this->response; + } + + /** + * Returns true if a response was received. + * + * @return bool + */ + public function hasResponse() + { + return $this->response !== null; + } + + /** + * Gets handler specific error data. + * + * This might be an exception, a integer representing an error code, or + * anything else. Relying on this value assumes that you know what handler + * you are using. + * + * @return mixed + */ + public function getHandlerErrorData() + { + return $this->handlerErrorData; + } + + /** + * Get the effective URI the request was sent to. + * + * @return UriInterface + */ + public function getEffectiveUri() + { + return $this->request->getUri(); + } + + /** + * Get the estimated time the request was being transferred by the handler. + * + * @return float Time in seconds. + */ + public function getTransferTime() + { + return $this->transferTime; + } + + /** + * Gets an array of all of the handler specific transfer data. + * + * @return array + */ + public function getHandlerStats() + { + return $this->handlerStats; + } + + /** + * Get a specific handler statistic from the handler by name. + * + * @param string $stat Handler specific transfer stat to retrieve. + * + * @return mixed|null + */ + public function getHandlerStat($stat) + { + return isset($this->handlerStats[$stat]) + ? $this->handlerStats[$stat] + : null; + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/UriTemplate.php b/civicrm/vendor/guzzlehttp/guzzle/src/UriTemplate.php new file mode 100644 index 0000000000000000000000000000000000000000..0b1623ecaca007facc98ad039cf08037a213e98c --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/UriTemplate.php @@ -0,0 +1,241 @@ +<?php +namespace GuzzleHttp; + +/** + * Expands URI templates. Userland implementation of PECL uri_template. + * + * @link http://tools.ietf.org/html/rfc6570 + */ +class UriTemplate +{ + /** @var string URI template */ + private $template; + + /** @var array Variables to use in the template expansion */ + private $variables; + + /** @var array Hash for quick operator lookups */ + private static $operatorHash = [ + '' => ['prefix' => '', 'joiner' => ',', 'query' => false], + '+' => ['prefix' => '', 'joiner' => ',', 'query' => false], + '#' => ['prefix' => '#', 'joiner' => ',', 'query' => false], + '.' => ['prefix' => '.', 'joiner' => '.', 'query' => false], + '/' => ['prefix' => '/', 'joiner' => '/', 'query' => false], + ';' => ['prefix' => ';', 'joiner' => ';', 'query' => true], + '?' => ['prefix' => '?', 'joiner' => '&', 'query' => true], + '&' => ['prefix' => '&', 'joiner' => '&', 'query' => true] + ]; + + /** @var array Delimiters */ + private static $delims = [':', '/', '?', '#', '[', ']', '@', '!', '$', + '&', '\'', '(', ')', '*', '+', ',', ';', '=']; + + /** @var array Percent encoded delimiters */ + private static $delimsPct = ['%3A', '%2F', '%3F', '%23', '%5B', '%5D', + '%40', '%21', '%24', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C', + '%3B', '%3D']; + + public function expand($template, array $variables) + { + if (false === strpos($template, '{')) { + return $template; + } + + $this->template = $template; + $this->variables = $variables; + + return preg_replace_callback( + '/\{([^\}]+)\}/', + [$this, 'expandMatch'], + $this->template + ); + } + + /** + * Parse an expression into parts + * + * @param string $expression Expression to parse + * + * @return array Returns an associative array of parts + */ + private function parseExpression($expression) + { + $result = []; + + if (isset(self::$operatorHash[$expression[0]])) { + $result['operator'] = $expression[0]; + $expression = substr($expression, 1); + } else { + $result['operator'] = ''; + } + + foreach (explode(',', $expression) as $value) { + $value = trim($value); + $varspec = []; + if ($colonPos = strpos($value, ':')) { + $varspec['value'] = substr($value, 0, $colonPos); + $varspec['modifier'] = ':'; + $varspec['position'] = (int) substr($value, $colonPos + 1); + } elseif (substr($value, -1) === '*') { + $varspec['modifier'] = '*'; + $varspec['value'] = substr($value, 0, -1); + } else { + $varspec['value'] = (string) $value; + $varspec['modifier'] = ''; + } + $result['values'][] = $varspec; + } + + return $result; + } + + /** + * Process an expansion + * + * @param array $matches Matches met in the preg_replace_callback + * + * @return string Returns the replacement string + */ + private function expandMatch(array $matches) + { + static $rfc1738to3986 = ['+' => '%20', '%7e' => '~']; + + $replacements = []; + $parsed = self::parseExpression($matches[1]); + $prefix = self::$operatorHash[$parsed['operator']]['prefix']; + $joiner = self::$operatorHash[$parsed['operator']]['joiner']; + $useQuery = self::$operatorHash[$parsed['operator']]['query']; + + foreach ($parsed['values'] as $value) { + + if (!isset($this->variables[$value['value']])) { + continue; + } + + $variable = $this->variables[$value['value']]; + $actuallyUseQuery = $useQuery; + $expanded = ''; + + if (is_array($variable)) { + + $isAssoc = $this->isAssoc($variable); + $kvp = []; + foreach ($variable as $key => $var) { + + if ($isAssoc) { + $key = rawurlencode($key); + $isNestedArray = is_array($var); + } else { + $isNestedArray = false; + } + + if (!$isNestedArray) { + $var = rawurlencode($var); + if ($parsed['operator'] === '+' || + $parsed['operator'] === '#' + ) { + $var = $this->decodeReserved($var); + } + } + + if ($value['modifier'] === '*') { + if ($isAssoc) { + if ($isNestedArray) { + // Nested arrays must allow for deeply nested + // structures. + $var = strtr( + http_build_query([$key => $var]), + $rfc1738to3986 + ); + } else { + $var = $key . '=' . $var; + } + } elseif ($key > 0 && $actuallyUseQuery) { + $var = $value['value'] . '=' . $var; + } + } + + $kvp[$key] = $var; + } + + if (empty($variable)) { + $actuallyUseQuery = false; + } elseif ($value['modifier'] === '*') { + $expanded = implode($joiner, $kvp); + if ($isAssoc) { + // Don't prepend the value name when using the explode + // modifier with an associative array. + $actuallyUseQuery = false; + } + } else { + if ($isAssoc) { + // When an associative array is encountered and the + // explode modifier is not set, then the result must be + // a comma separated list of keys followed by their + // respective values. + foreach ($kvp as $k => &$v) { + $v = $k . ',' . $v; + } + } + $expanded = implode(',', $kvp); + } + + } else { + if ($value['modifier'] === ':') { + $variable = substr($variable, 0, $value['position']); + } + $expanded = rawurlencode($variable); + if ($parsed['operator'] === '+' || $parsed['operator'] === '#') { + $expanded = $this->decodeReserved($expanded); + } + } + + if ($actuallyUseQuery) { + if (!$expanded && $joiner !== '&') { + $expanded = $value['value']; + } else { + $expanded = $value['value'] . '=' . $expanded; + } + } + + $replacements[] = $expanded; + } + + $ret = implode($joiner, $replacements); + if ($ret && $prefix) { + return $prefix . $ret; + } + + return $ret; + } + + /** + * Determines if an array is associative. + * + * This makes the assumption that input arrays are sequences or hashes. + * This assumption is a tradeoff for accuracy in favor of speed, but it + * should work in almost every case where input is supplied for a URI + * template. + * + * @param array $array Array to check + * + * @return bool + */ + private function isAssoc(array $array) + { + return $array && array_keys($array)[0] !== 0; + } + + /** + * Removes percent encoding on reserved characters (used with + and # + * modifiers). + * + * @param string $string String to fix + * + * @return string + */ + private function decodeReserved($string) + { + return str_replace(self::$delimsPct, self::$delims, $string); + } +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/functions.php b/civicrm/vendor/guzzlehttp/guzzle/src/functions.php new file mode 100644 index 0000000000000000000000000000000000000000..59e212edfad829c2b0a016cac8a2fdc9352b5da7 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/functions.php @@ -0,0 +1,331 @@ +<?php +namespace GuzzleHttp; + +use GuzzleHttp\Handler\CurlHandler; +use GuzzleHttp\Handler\CurlMultiHandler; +use GuzzleHttp\Handler\Proxy; +use GuzzleHttp\Handler\StreamHandler; + +/** + * Expands a URI template + * + * @param string $template URI template + * @param array $variables Template variables + * + * @return string + */ +function uri_template($template, array $variables) +{ + if (extension_loaded('uri_template')) { + // @codeCoverageIgnoreStart + return \uri_template($template, $variables); + // @codeCoverageIgnoreEnd + } + + static $uriTemplate; + if (!$uriTemplate) { + $uriTemplate = new UriTemplate(); + } + + return $uriTemplate->expand($template, $variables); +} + +/** + * Debug function used to describe the provided value type and class. + * + * @param mixed $input + * + * @return string Returns a string containing the type of the variable and + * if a class is provided, the class name. + */ +function describe_type($input) +{ + switch (gettype($input)) { + case 'object': + return 'object(' . get_class($input) . ')'; + case 'array': + return 'array(' . count($input) . ')'; + default: + ob_start(); + var_dump($input); + // normalize float vs double + return str_replace('double(', 'float(', rtrim(ob_get_clean())); + } +} + +/** + * Parses an array of header lines into an associative array of headers. + * + * @param array $lines Header lines array of strings in the following + * format: "Name: Value" + * @return array + */ +function headers_from_lines($lines) +{ + $headers = []; + + foreach ($lines as $line) { + $parts = explode(':', $line, 2); + $headers[trim($parts[0])][] = isset($parts[1]) + ? trim($parts[1]) + : null; + } + + return $headers; +} + +/** + * Returns a debug stream based on the provided variable. + * + * @param mixed $value Optional value + * + * @return resource + */ +function debug_resource($value = null) +{ + if (is_resource($value)) { + return $value; + } elseif (defined('STDOUT')) { + return STDOUT; + } + + return fopen('php://output', 'w'); +} + +/** + * Chooses and creates a default handler to use based on the environment. + * + * The returned handler is not wrapped by any default middlewares. + * + * @throws \RuntimeException if no viable Handler is available. + * @return callable Returns the best handler for the given system. + */ +function choose_handler() +{ + $handler = null; + if (function_exists('curl_multi_exec') && function_exists('curl_exec')) { + $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler()); + } elseif (function_exists('curl_exec')) { + $handler = new CurlHandler(); + } elseif (function_exists('curl_multi_exec')) { + $handler = new CurlMultiHandler(); + } + + if (ini_get('allow_url_fopen')) { + $handler = $handler + ? Proxy::wrapStreaming($handler, new StreamHandler()) + : new StreamHandler(); + } elseif (!$handler) { + throw new \RuntimeException('GuzzleHttp requires cURL, the ' + . 'allow_url_fopen ini setting, or a custom HTTP handler.'); + } + + return $handler; +} + +/** + * Get the default User-Agent string to use with Guzzle + * + * @return string + */ +function default_user_agent() +{ + static $defaultAgent = ''; + + if (!$defaultAgent) { + $defaultAgent = 'GuzzleHttp/' . Client::VERSION; + if (extension_loaded('curl') && function_exists('curl_version')) { + $defaultAgent .= ' curl/' . \curl_version()['version']; + } + $defaultAgent .= ' PHP/' . PHP_VERSION; + } + + return $defaultAgent; +} + +/** + * Returns the default cacert bundle for the current system. + * + * First, the openssl.cafile and curl.cainfo php.ini settings are checked. + * If those settings are not configured, then the common locations for + * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X + * and Windows are checked. If any of these file locations are found on + * disk, they will be utilized. + * + * Note: the result of this function is cached for subsequent calls. + * + * @return string + * @throws \RuntimeException if no bundle can be found. + */ +function default_ca_bundle() +{ + static $cached = null; + static $cafiles = [ + // Red Hat, CentOS, Fedora (provided by the ca-certificates package) + '/etc/pki/tls/certs/ca-bundle.crt', + // Ubuntu, Debian (provided by the ca-certificates package) + '/etc/ssl/certs/ca-certificates.crt', + // FreeBSD (provided by the ca_root_nss package) + '/usr/local/share/certs/ca-root-nss.crt', + // SLES 12 (provided by the ca-certificates package) + '/var/lib/ca-certificates/ca-bundle.pem', + // OS X provided by homebrew (using the default path) + '/usr/local/etc/openssl/cert.pem', + // Google app engine + '/etc/ca-certificates.crt', + // Windows? + 'C:\\windows\\system32\\curl-ca-bundle.crt', + 'C:\\windows\\curl-ca-bundle.crt', + ]; + + if ($cached) { + return $cached; + } + + if ($ca = ini_get('openssl.cafile')) { + return $cached = $ca; + } + + if ($ca = ini_get('curl.cainfo')) { + return $cached = $ca; + } + + foreach ($cafiles as $filename) { + if (file_exists($filename)) { + return $cached = $filename; + } + } + + throw new \RuntimeException(<<< EOT +No system CA bundle could be found in any of the the common system locations. +PHP versions earlier than 5.6 are not properly configured to use the system's +CA bundle by default. In order to verify peer certificates, you will need to +supply the path on disk to a certificate bundle to the 'verify' request +option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not +need a specific certificate bundle, then Mozilla provides a commonly used CA +bundle which can be downloaded here (provided by the maintainer of cURL): +https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once +you have a CA bundle available on disk, you can set the 'openssl.cafile' PHP +ini setting to point to the path to the file, allowing you to omit the 'verify' +request option. See http://curl.haxx.se/docs/sslcerts.html for more +information. +EOT + ); +} + +/** + * Creates an associative array of lowercase header names to the actual + * header casing. + * + * @param array $headers + * + * @return array + */ +function normalize_header_keys(array $headers) +{ + $result = []; + foreach (array_keys($headers) as $key) { + $result[strtolower($key)] = $key; + } + + return $result; +} + +/** + * Returns true if the provided host matches any of the no proxy areas. + * + * This method will strip a port from the host if it is present. Each pattern + * can be matched with an exact match (e.g., "foo.com" == "foo.com") or a + * partial match: (e.g., "foo.com" == "baz.foo.com" and ".foo.com" == + * "baz.foo.com", but ".foo.com" != "foo.com"). + * + * Areas are matched in the following cases: + * 1. "*" (without quotes) always matches any hosts. + * 2. An exact match. + * 3. The area starts with "." and the area is the last part of the host. e.g. + * '.mit.edu' will match any host that ends with '.mit.edu'. + * + * @param string $host Host to check against the patterns. + * @param array $noProxyArray An array of host patterns. + * + * @return bool + */ +function is_host_in_noproxy($host, array $noProxyArray) +{ + if (strlen($host) === 0) { + throw new \InvalidArgumentException('Empty host provided'); + } + + // Strip port if present. + if (strpos($host, ':')) { + $host = explode($host, ':', 2)[0]; + } + + foreach ($noProxyArray as $area) { + // Always match on wildcards. + if ($area === '*') { + return true; + } elseif (empty($area)) { + // Don't match on empty values. + continue; + } elseif ($area === $host) { + // Exact matches. + return true; + } else { + // Special match if the area when prefixed with ".". Remove any + // existing leading "." and add a new leading ".". + $area = '.' . ltrim($area, '.'); + if (substr($host, -(strlen($area))) === $area) { + return true; + } + } + } + + return false; +} + +/** + * Wrapper for json_decode that throws when an error occurs. + * + * @param string $json JSON data to parse + * @param bool $assoc When true, returned objects will be converted + * into associative arrays. + * @param int $depth User specified recursion depth. + * @param int $options Bitmask of JSON decode options. + * + * @return mixed + * @throws \InvalidArgumentException if the JSON cannot be decoded. + * @link http://www.php.net/manual/en/function.json-decode.php + */ +function json_decode($json, $assoc = false, $depth = 512, $options = 0) +{ + $data = \json_decode($json, $assoc, $depth, $options); + if (JSON_ERROR_NONE !== json_last_error()) { + throw new \InvalidArgumentException( + 'json_decode error: ' . json_last_error_msg()); + } + + return $data; +} + +/** + * Wrapper for JSON encoding that throws when an error occurs. + * + * @param mixed $value The value being encoded + * @param int $options JSON encode option bitmask + * @param int $depth Set the maximum depth. Must be greater than zero. + * + * @return string + * @throws \InvalidArgumentException if the JSON cannot be encoded. + * @link http://www.php.net/manual/en/function.json-encode.php + */ +function json_encode($value, $options = 0, $depth = 512) +{ + $json = \json_encode($value, $options, $depth); + if (JSON_ERROR_NONE !== json_last_error()) { + throw new \InvalidArgumentException( + 'json_encode error: ' . json_last_error_msg()); + } + + return $json; +} diff --git a/civicrm/vendor/guzzlehttp/guzzle/src/functions_include.php b/civicrm/vendor/guzzlehttp/guzzle/src/functions_include.php new file mode 100644 index 0000000000000000000000000000000000000000..a93393acc4e7c5e6021f070ad65dbbf2e3924241 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/guzzle/src/functions_include.php @@ -0,0 +1,6 @@ +<?php + +// Don't redefine the functions if included multiple times. +if (!function_exists('GuzzleHttp\uri_template')) { + require __DIR__ . '/functions.php'; +} diff --git a/civicrm/vendor/guzzlehttp/promises/CHANGELOG.md b/civicrm/vendor/guzzlehttp/promises/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..551929f6bd5ad98911da0dc6bb279f8861ec6b7f --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/CHANGELOG.md @@ -0,0 +1,65 @@ +# CHANGELOG + + +## 1.3.1 - 2016-12-20 + +### Fixed + +- `wait()` foreign promise compatibility + + +## 1.3.0 - 2016-11-18 + +### Added + +- Adds support for custom task queues. + +### Fixed + +- Fixed coroutine promise memory leak. + + +## 1.2.0 - 2016-05-18 + +### Changed + +- Update to now catch `\Throwable` on PHP 7+ + + +## 1.1.0 - 2016-03-07 + +### Changed + +- Update EachPromise to prevent recurring on a iterator when advancing, as this + could trigger fatal generator errors. +- Update Promise to allow recursive waiting without unwrapping exceptions. + + +## 1.0.3 - 2015-10-15 + +### Changed + +- Update EachPromise to immediately resolve when the underlying promise iterator + is empty. Previously, such a promise would throw an exception when its `wait` + function was called. + + +## 1.0.2 - 2015-05-15 + +### Changed + +- Conditionally require functions.php. + + +## 1.0.1 - 2015-06-24 + +### Changed + +- Updating EachPromise to call next on the underlying promise iterator as late + as possible to ensure that generators that generate new requests based on + callbacks are not iterated until after callbacks are invoked. + + +## 1.0.0 - 2015-05-12 + +- Initial release diff --git a/civicrm/vendor/guzzlehttp/promises/LICENSE b/civicrm/vendor/guzzlehttp/promises/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..67f91a14c0057818f23322c77e80daa80ae9d751 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2016 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/guzzlehttp/promises/Makefile b/civicrm/vendor/guzzlehttp/promises/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8d5b3ef95eb4679a3998176bcc96fa88f5d60cdd --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/Makefile @@ -0,0 +1,13 @@ +all: clean test + +test: + vendor/bin/phpunit + +coverage: + vendor/bin/phpunit --coverage-html=artifacts/coverage + +view-coverage: + open artifacts/coverage/index.html + +clean: + rm -rf artifacts/* diff --git a/civicrm/vendor/guzzlehttp/promises/README.md b/civicrm/vendor/guzzlehttp/promises/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7b607e28b13bfdd4f9b784082ef4ef20169e4458 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/README.md @@ -0,0 +1,504 @@ +# Guzzle Promises + +[Promises/A+](https://promisesaplus.com/) implementation that handles promise +chaining and resolution iteratively, allowing for "infinite" promise chaining +while keeping the stack size constant. Read [this blog post](https://blog.domenic.me/youre-missing-the-point-of-promises/) +for a general introduction to promises. + +- [Features](#features) +- [Quick start](#quick-start) +- [Synchronous wait](#synchronous-wait) +- [Cancellation](#cancellation) +- [API](#api) + - [Promise](#promise) + - [FulfilledPromise](#fulfilledpromise) + - [RejectedPromise](#rejectedpromise) +- [Promise interop](#promise-interop) +- [Implementation notes](#implementation-notes) + + +# Features + +- [Promises/A+](https://promisesaplus.com/) implementation. +- Promise resolution and chaining is handled iteratively, allowing for + "infinite" promise chaining. +- Promises have a synchronous `wait` method. +- Promises can be cancelled. +- Works with any object that has a `then` function. +- C# style async/await coroutine promises using + `GuzzleHttp\Promise\coroutine()`. + + +# Quick start + +A *promise* represents the eventual result of an asynchronous operation. The +primary way of interacting with a promise is through its `then` method, which +registers callbacks to receive either a promise's eventual value or the reason +why the promise cannot be fulfilled. + + +## Callbacks + +Callbacks are registered with the `then` method by providing an optional +`$onFulfilled` followed by an optional `$onRejected` function. + + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$promise->then( + // $onFulfilled + function ($value) { + echo 'The promise was fulfilled.'; + }, + // $onRejected + function ($reason) { + echo 'The promise was rejected.'; + } +); +``` + +*Resolving* a promise means that you either fulfill a promise with a *value* or +reject a promise with a *reason*. Resolving a promises triggers callbacks +registered with the promises's `then` method. These callbacks are triggered +only once and in the order in which they were added. + + +## Resolving a promise + +Promises are fulfilled using the `resolve($value)` method. Resolving a promise +with any value other than a `GuzzleHttp\Promise\RejectedPromise` will trigger +all of the onFulfilled callbacks (resolving a promise with a rejected promise +will reject the promise and trigger the `$onRejected` callbacks). + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$promise + ->then(function ($value) { + // Return a value and don't break the chain + return "Hello, " . $value; + }) + // This then is executed after the first then and receives the value + // returned from the first then. + ->then(function ($value) { + echo $value; + }); + +// Resolving the promise triggers the $onFulfilled callbacks and outputs +// "Hello, reader". +$promise->resolve('reader.'); +``` + + +## Promise forwarding + +Promises can be chained one after the other. Each then in the chain is a new +promise. The return value of a promise is what's forwarded to the next +promise in the chain. Returning a promise in a `then` callback will cause the +subsequent promises in the chain to only be fulfilled when the returned promise +has been fulfilled. The next promise in the chain will be invoked with the +resolved value of the promise. + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$nextPromise = new Promise(); + +$promise + ->then(function ($value) use ($nextPromise) { + echo $value; + return $nextPromise; + }) + ->then(function ($value) { + echo $value; + }); + +// Triggers the first callback and outputs "A" +$promise->resolve('A'); +// Triggers the second callback and outputs "B" +$nextPromise->resolve('B'); +``` + +## Promise rejection + +When a promise is rejected, the `$onRejected` callbacks are invoked with the +rejection reason. + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$promise->then(null, function ($reason) { + echo $reason; +}); + +$promise->reject('Error!'); +// Outputs "Error!" +``` + +## Rejection forwarding + +If an exception is thrown in an `$onRejected` callback, subsequent +`$onRejected` callbacks are invoked with the thrown exception as the reason. + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$promise->then(null, function ($reason) { + throw new \Exception($reason); +})->then(null, function ($reason) { + assert($reason->getMessage() === 'Error!'); +}); + +$promise->reject('Error!'); +``` + +You can also forward a rejection down the promise chain by returning a +`GuzzleHttp\Promise\RejectedPromise` in either an `$onFulfilled` or +`$onRejected` callback. + +```php +use GuzzleHttp\Promise\Promise; +use GuzzleHttp\Promise\RejectedPromise; + +$promise = new Promise(); +$promise->then(null, function ($reason) { + return new RejectedPromise($reason); +})->then(null, function ($reason) { + assert($reason === 'Error!'); +}); + +$promise->reject('Error!'); +``` + +If an exception is not thrown in a `$onRejected` callback and the callback +does not return a rejected promise, downstream `$onFulfilled` callbacks are +invoked using the value returned from the `$onRejected` callback. + +```php +use GuzzleHttp\Promise\Promise; +use GuzzleHttp\Promise\RejectedPromise; + +$promise = new Promise(); +$promise + ->then(null, function ($reason) { + return "It's ok"; + }) + ->then(function ($value) { + assert($value === "It's ok"); + }); + +$promise->reject('Error!'); +``` + +# Synchronous wait + +You can synchronously force promises to complete using a promise's `wait` +method. When creating a promise, you can provide a wait function that is used +to synchronously force a promise to complete. When a wait function is invoked +it is expected to deliver a value to the promise or reject the promise. If the +wait function does not deliver a value, then an exception is thrown. The wait +function provided to a promise constructor is invoked when the `wait` function +of the promise is called. + +```php +$promise = new Promise(function () use (&$promise) { + $promise->resolve('foo'); +}); + +// Calling wait will return the value of the promise. +echo $promise->wait(); // outputs "foo" +``` + +If an exception is encountered while invoking the wait function of a promise, +the promise is rejected with the exception and the exception is thrown. + +```php +$promise = new Promise(function () use (&$promise) { + throw new \Exception('foo'); +}); + +$promise->wait(); // throws the exception. +``` + +Calling `wait` on a promise that has been fulfilled will not trigger the wait +function. It will simply return the previously resolved value. + +```php +$promise = new Promise(function () { die('this is not called!'); }); +$promise->resolve('foo'); +echo $promise->wait(); // outputs "foo" +``` + +Calling `wait` on a promise that has been rejected will throw an exception. If +the rejection reason is an instance of `\Exception` the reason is thrown. +Otherwise, a `GuzzleHttp\Promise\RejectionException` is thrown and the reason +can be obtained by calling the `getReason` method of the exception. + +```php +$promise = new Promise(); +$promise->reject('foo'); +$promise->wait(); +``` + +> PHP Fatal error: Uncaught exception 'GuzzleHttp\Promise\RejectionException' with message 'The promise was rejected with value: foo' + + +## Unwrapping a promise + +When synchronously waiting on a promise, you are joining the state of the +promise into the current state of execution (i.e., return the value of the +promise if it was fulfilled or throw an exception if it was rejected). This is +called "unwrapping" the promise. Waiting on a promise will by default unwrap +the promise state. + +You can force a promise to resolve and *not* unwrap the state of the promise +by passing `false` to the first argument of the `wait` function: + +```php +$promise = new Promise(); +$promise->reject('foo'); +// This will not throw an exception. It simply ensures the promise has +// been resolved. +$promise->wait(false); +``` + +When unwrapping a promise, the resolved value of the promise will be waited +upon until the unwrapped value is not a promise. This means that if you resolve +promise A with a promise B and unwrap promise A, the value returned by the +wait function will be the value delivered to promise B. + +**Note**: when you do not unwrap the promise, no value is returned. + + +# Cancellation + +You can cancel a promise that has not yet been fulfilled using the `cancel()` +method of a promise. When creating a promise you can provide an optional +cancel function that when invoked cancels the action of computing a resolution +of the promise. + + +# API + + +## Promise + +When creating a promise object, you can provide an optional `$waitFn` and +`$cancelFn`. `$waitFn` is a function that is invoked with no arguments and is +expected to resolve the promise. `$cancelFn` is a function with no arguments +that is expected to cancel the computation of a promise. It is invoked when the +`cancel()` method of a promise is called. + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise( + function () use (&$promise) { + $promise->resolve('waited'); + }, + function () { + // do something that will cancel the promise computation (e.g., close + // a socket, cancel a database query, etc...) + } +); + +assert('waited' === $promise->wait()); +``` + +A promise has the following methods: + +- `then(callable $onFulfilled, callable $onRejected) : PromiseInterface` + + Appends fulfillment and rejection handlers to the promise, and returns a new promise resolving to the return value of the called handler. + +- `otherwise(callable $onRejected) : PromiseInterface` + + Appends a rejection handler callback to the promise, and returns a new promise resolving to the return value of the callback if it is called, or to its original fulfillment value if the promise is instead fulfilled. + +- `wait($unwrap = true) : mixed` + + Synchronously waits on the promise to complete. + + `$unwrap` controls whether or not the value of the promise is returned for a + fulfilled promise or if an exception is thrown if the promise is rejected. + This is set to `true` by default. + +- `cancel()` + + Attempts to cancel the promise if possible. The promise being cancelled and + the parent most ancestor that has not yet been resolved will also be + cancelled. Any promises waiting on the cancelled promise to resolve will also + be cancelled. + +- `getState() : string` + + Returns the state of the promise. One of `pending`, `fulfilled`, or + `rejected`. + +- `resolve($value)` + + Fulfills the promise with the given `$value`. + +- `reject($reason)` + + Rejects the promise with the given `$reason`. + + +## FulfilledPromise + +A fulfilled promise can be created to represent a promise that has been +fulfilled. + +```php +use GuzzleHttp\Promise\FulfilledPromise; + +$promise = new FulfilledPromise('value'); + +// Fulfilled callbacks are immediately invoked. +$promise->then(function ($value) { + echo $value; +}); +``` + + +## RejectedPromise + +A rejected promise can be created to represent a promise that has been +rejected. + +```php +use GuzzleHttp\Promise\RejectedPromise; + +$promise = new RejectedPromise('Error'); + +// Rejected callbacks are immediately invoked. +$promise->then(null, function ($reason) { + echo $reason; +}); +``` + + +# Promise interop + +This library works with foreign promises that have a `then` method. This means +you can use Guzzle promises with [React promises](https://github.com/reactphp/promise) +for example. When a foreign promise is returned inside of a then method +callback, promise resolution will occur recursively. + +```php +// Create a React promise +$deferred = new React\Promise\Deferred(); +$reactPromise = $deferred->promise(); + +// Create a Guzzle promise that is fulfilled with a React promise. +$guzzlePromise = new \GuzzleHttp\Promise\Promise(); +$guzzlePromise->then(function ($value) use ($reactPromise) { + // Do something something with the value... + // Return the React promise + return $reactPromise; +}); +``` + +Please note that wait and cancel chaining is no longer possible when forwarding +a foreign promise. You will need to wrap a third-party promise with a Guzzle +promise in order to utilize wait and cancel functions with foreign promises. + + +## Event Loop Integration + +In order to keep the stack size constant, Guzzle promises are resolved +asynchronously using a task queue. When waiting on promises synchronously, the +task queue will be automatically run to ensure that the blocking promise and +any forwarded promises are resolved. When using promises asynchronously in an +event loop, you will need to run the task queue on each tick of the loop. If +you do not run the task queue, then promises will not be resolved. + +You can run the task queue using the `run()` method of the global task queue +instance. + +```php +// Get the global task queue +$queue = \GuzzleHttp\Promise\queue(); +$queue->run(); +``` + +For example, you could use Guzzle promises with React using a periodic timer: + +```php +$loop = React\EventLoop\Factory::create(); +$loop->addPeriodicTimer(0, [$queue, 'run']); +``` + +*TODO*: Perhaps adding a `futureTick()` on each tick would be faster? + + +# Implementation notes + + +## Promise resolution and chaining is handled iteratively + +By shuffling pending handlers from one owner to another, promises are +resolved iteratively, allowing for "infinite" then chaining. + +```php +<?php +require 'vendor/autoload.php'; + +use GuzzleHttp\Promise\Promise; + +$parent = new Promise(); +$p = $parent; + +for ($i = 0; $i < 1000; $i++) { + $p = $p->then(function ($v) { + // The stack size remains constant (a good thing) + echo xdebug_get_stack_depth() . ', '; + return $v + 1; + }); +} + +$parent->resolve(0); +var_dump($p->wait()); // int(1000) + +``` + +When a promise is fulfilled or rejected with a non-promise value, the promise +then takes ownership of the handlers of each child promise and delivers values +down the chain without using recursion. + +When a promise is resolved with another promise, the original promise transfers +all of its pending handlers to the new promise. When the new promise is +eventually resolved, all of the pending handlers are delivered the forwarded +value. + + +## A promise is the deferred. + +Some promise libraries implement promises using a deferred object to represent +a computation and a promise object to represent the delivery of the result of +the computation. This is a nice separation of computation and delivery because +consumers of the promise cannot modify the value that will be eventually +delivered. + +One side effect of being able to implement promise resolution and chaining +iteratively is that you need to be able for one promise to reach into the state +of another promise to shuffle around ownership of handlers. In order to achieve +this without making the handlers of a promise publicly mutable, a promise is +also the deferred value, allowing promises of the same parent class to reach +into and modify the private properties of promises of the same type. While this +does allow consumers of the value to modify the resolution or rejection of the +deferred, it is a small price to pay for keeping the stack size constant. + +```php +$promise = new Promise(); +$promise->then(function ($value) { echo $value; }); +// The promise is the deferred value, so you can deliver a value to it. +$promise->resolve('foo'); +// prints "foo" +``` diff --git a/civicrm/vendor/guzzlehttp/promises/composer.json b/civicrm/vendor/guzzlehttp/promises/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..ec41a61e6e8765924b0caeb2c29671e96b061c07 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/composer.json @@ -0,0 +1,34 @@ +{ + "name": "guzzlehttp/promises", + "description": "Guzzle promises library", + "keywords": ["promise"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": ["src/functions_include.php"] + }, + "scripts": { + "test": "vendor/bin/phpunit", + "test-ci": "vendor/bin/phpunit --coverage-text" + }, + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/AggregateException.php b/civicrm/vendor/guzzlehttp/promises/src/AggregateException.php new file mode 100644 index 0000000000000000000000000000000000000000..6a5690c3762224eb73a6555b128074dd185d58bf --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/AggregateException.php @@ -0,0 +1,16 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * Exception thrown when too many errors occur in the some() or any() methods. + */ +class AggregateException extends RejectionException +{ + public function __construct($msg, array $reasons) + { + parent::__construct( + $reasons, + sprintf('%s; %d rejected promises', $msg, count($reasons)) + ); + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/CancellationException.php b/civicrm/vendor/guzzlehttp/promises/src/CancellationException.php new file mode 100644 index 0000000000000000000000000000000000000000..cb360b8056abbf065ea27ef93a4e2fe895b3989f --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/CancellationException.php @@ -0,0 +1,9 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * Exception that is set as the reason for a promise that has been cancelled. + */ +class CancellationException extends RejectionException +{ +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/Coroutine.php b/civicrm/vendor/guzzlehttp/promises/src/Coroutine.php new file mode 100644 index 0000000000000000000000000000000000000000..6aa095870224617d89b5f82d949e3dcb375a9dc3 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/Coroutine.php @@ -0,0 +1,151 @@ +<?php +namespace GuzzleHttp\Promise; + +use Exception; +use Generator; +use Throwable; + +/** + * Creates a promise that is resolved using a generator that yields values or + * promises (somewhat similar to C#'s async keyword). + * + * When called, the coroutine function will start an instance of the generator + * and returns a promise that is fulfilled with its final yielded value. + * + * Control is returned back to the generator when the yielded promise settles. + * This can lead to less verbose code when doing lots of sequential async calls + * with minimal processing in between. + * + * use GuzzleHttp\Promise; + * + * function createPromise($value) { + * return new Promise\FulfilledPromise($value); + * } + * + * $promise = Promise\coroutine(function () { + * $value = (yield createPromise('a')); + * try { + * $value = (yield createPromise($value . 'b')); + * } catch (\Exception $e) { + * // The promise was rejected. + * } + * yield $value . 'c'; + * }); + * + * // Outputs "abc" + * $promise->then(function ($v) { echo $v; }); + * + * @param callable $generatorFn Generator function to wrap into a promise. + * + * @return Promise + * @link https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration + */ +final class Coroutine implements PromiseInterface +{ + /** + * @var PromiseInterface|null + */ + private $currentPromise; + + /** + * @var Generator + */ + private $generator; + + /** + * @var Promise + */ + private $result; + + public function __construct(callable $generatorFn) + { + $this->generator = $generatorFn(); + $this->result = new Promise(function () { + while (isset($this->currentPromise)) { + $this->currentPromise->wait(); + } + }); + $this->nextCoroutine($this->generator->current()); + } + + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ) { + return $this->result->then($onFulfilled, $onRejected); + } + + public function otherwise(callable $onRejected) + { + return $this->result->otherwise($onRejected); + } + + public function wait($unwrap = true) + { + return $this->result->wait($unwrap); + } + + public function getState() + { + return $this->result->getState(); + } + + public function resolve($value) + { + $this->result->resolve($value); + } + + public function reject($reason) + { + $this->result->reject($reason); + } + + public function cancel() + { + $this->currentPromise->cancel(); + $this->result->cancel(); + } + + private function nextCoroutine($yielded) + { + $this->currentPromise = promise_for($yielded) + ->then([$this, '_handleSuccess'], [$this, '_handleFailure']); + } + + /** + * @internal + */ + public function _handleSuccess($value) + { + unset($this->currentPromise); + try { + $next = $this->generator->send($value); + if ($this->generator->valid()) { + $this->nextCoroutine($next); + } else { + $this->result->resolve($value); + } + } catch (Exception $exception) { + $this->result->reject($exception); + } catch (Throwable $throwable) { + $this->result->reject($throwable); + } + } + + /** + * @internal + */ + public function _handleFailure($reason) + { + unset($this->currentPromise); + try { + $nextYield = $this->generator->throw(exception_for($reason)); + // The throw was caught, so keep iterating on the coroutine + $this->nextCoroutine($nextYield); + } catch (Exception $exception) { + $this->result->reject($exception); + } catch (Throwable $throwable) { + $this->result->reject($throwable); + } + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/EachPromise.php b/civicrm/vendor/guzzlehttp/promises/src/EachPromise.php new file mode 100644 index 0000000000000000000000000000000000000000..d0ddf603fb3d566bc90a7f711b0723b876782983 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/EachPromise.php @@ -0,0 +1,229 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * Represents a promise that iterates over many promises and invokes + * side-effect functions in the process. + */ +class EachPromise implements PromisorInterface +{ + private $pending = []; + + /** @var \Iterator */ + private $iterable; + + /** @var callable|int */ + private $concurrency; + + /** @var callable */ + private $onFulfilled; + + /** @var callable */ + private $onRejected; + + /** @var Promise */ + private $aggregate; + + /** @var bool */ + private $mutex; + + /** + * Configuration hash can include the following key value pairs: + * + * - fulfilled: (callable) Invoked when a promise fulfills. The function + * is invoked with three arguments: the fulfillment value, the index + * position from the iterable list of the promise, and the aggregate + * promise that manages all of the promises. The aggregate promise may + * be resolved from within the callback to short-circuit the promise. + * - rejected: (callable) Invoked when a promise is rejected. The + * function is invoked with three arguments: the rejection reason, the + * index position from the iterable list of the promise, and the + * aggregate promise that manages all of the promises. The aggregate + * promise may be resolved from within the callback to short-circuit + * the promise. + * - concurrency: (integer) Pass this configuration option to limit the + * allowed number of outstanding concurrently executing promises, + * creating a capped pool of promises. There is no limit by default. + * + * @param mixed $iterable Promises or values to iterate. + * @param array $config Configuration options + */ + public function __construct($iterable, array $config = []) + { + $this->iterable = iter_for($iterable); + + if (isset($config['concurrency'])) { + $this->concurrency = $config['concurrency']; + } + + if (isset($config['fulfilled'])) { + $this->onFulfilled = $config['fulfilled']; + } + + if (isset($config['rejected'])) { + $this->onRejected = $config['rejected']; + } + } + + public function promise() + { + if ($this->aggregate) { + return $this->aggregate; + } + + try { + $this->createPromise(); + $this->iterable->rewind(); + $this->refillPending(); + } catch (\Throwable $e) { + $this->aggregate->reject($e); + } catch (\Exception $e) { + $this->aggregate->reject($e); + } + + return $this->aggregate; + } + + private function createPromise() + { + $this->mutex = false; + $this->aggregate = new Promise(function () { + reset($this->pending); + if (empty($this->pending) && !$this->iterable->valid()) { + $this->aggregate->resolve(null); + return; + } + + // Consume a potentially fluctuating list of promises while + // ensuring that indexes are maintained (precluding array_shift). + while ($promise = current($this->pending)) { + next($this->pending); + $promise->wait(); + if ($this->aggregate->getState() !== PromiseInterface::PENDING) { + return; + } + } + }); + + // Clear the references when the promise is resolved. + $clearFn = function () { + $this->iterable = $this->concurrency = $this->pending = null; + $this->onFulfilled = $this->onRejected = null; + }; + + $this->aggregate->then($clearFn, $clearFn); + } + + private function refillPending() + { + if (!$this->concurrency) { + // Add all pending promises. + while ($this->addPending() && $this->advanceIterator()); + return; + } + + // Add only up to N pending promises. + $concurrency = is_callable($this->concurrency) + ? call_user_func($this->concurrency, count($this->pending)) + : $this->concurrency; + $concurrency = max($concurrency - count($this->pending), 0); + // Concurrency may be set to 0 to disallow new promises. + if (!$concurrency) { + return; + } + // Add the first pending promise. + $this->addPending(); + // Note this is special handling for concurrency=1 so that we do + // not advance the iterator after adding the first promise. This + // helps work around issues with generators that might not have the + // next value to yield until promise callbacks are called. + while (--$concurrency + && $this->advanceIterator() + && $this->addPending()); + } + + private function addPending() + { + if (!$this->iterable || !$this->iterable->valid()) { + return false; + } + + $promise = promise_for($this->iterable->current()); + $idx = $this->iterable->key(); + + $this->pending[$idx] = $promise->then( + function ($value) use ($idx) { + if ($this->onFulfilled) { + call_user_func( + $this->onFulfilled, $value, $idx, $this->aggregate + ); + } + $this->step($idx); + }, + function ($reason) use ($idx) { + if ($this->onRejected) { + call_user_func( + $this->onRejected, $reason, $idx, $this->aggregate + ); + } + $this->step($idx); + } + ); + + return true; + } + + private function advanceIterator() + { + // Place a lock on the iterator so that we ensure to not recurse, + // preventing fatal generator errors. + if ($this->mutex) { + return false; + } + + $this->mutex = true; + + try { + $this->iterable->next(); + $this->mutex = false; + return true; + } catch (\Throwable $e) { + $this->aggregate->reject($e); + $this->mutex = false; + return false; + } catch (\Exception $e) { + $this->aggregate->reject($e); + $this->mutex = false; + return false; + } + } + + private function step($idx) + { + // If the promise was already resolved, then ignore this step. + if ($this->aggregate->getState() !== PromiseInterface::PENDING) { + return; + } + + unset($this->pending[$idx]); + + // Only refill pending promises if we are not locked, preventing the + // EachPromise to recursively invoke the provided iterator, which + // cause a fatal error: "Cannot resume an already running generator" + if ($this->advanceIterator() && !$this->checkIfFinished()) { + // Add more pending promises if possible. + $this->refillPending(); + } + } + + private function checkIfFinished() + { + if (!$this->pending && !$this->iterable->valid()) { + // Resolve the promise if there's nothing left to do. + $this->aggregate->resolve(null); + return true; + } + + return false; + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/FulfilledPromise.php b/civicrm/vendor/guzzlehttp/promises/src/FulfilledPromise.php new file mode 100644 index 0000000000000000000000000000000000000000..dbbeeb9f71b2927a66057c5ac34d1a9b9d356183 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/FulfilledPromise.php @@ -0,0 +1,82 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * A promise that has been fulfilled. + * + * Thenning off of this promise will invoke the onFulfilled callback + * immediately and ignore other callbacks. + */ +class FulfilledPromise implements PromiseInterface +{ + private $value; + + public function __construct($value) + { + if (method_exists($value, 'then')) { + throw new \InvalidArgumentException( + 'You cannot create a FulfilledPromise with a promise.'); + } + + $this->value = $value; + } + + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ) { + // Return itself if there is no onFulfilled function. + if (!$onFulfilled) { + return $this; + } + + $queue = queue(); + $p = new Promise([$queue, 'run']); + $value = $this->value; + $queue->add(static function () use ($p, $value, $onFulfilled) { + if ($p->getState() === self::PENDING) { + try { + $p->resolve($onFulfilled($value)); + } catch (\Throwable $e) { + $p->reject($e); + } catch (\Exception $e) { + $p->reject($e); + } + } + }); + + return $p; + } + + public function otherwise(callable $onRejected) + { + return $this->then(null, $onRejected); + } + + public function wait($unwrap = true, $defaultDelivery = null) + { + return $unwrap ? $this->value : null; + } + + public function getState() + { + return self::FULFILLED; + } + + public function resolve($value) + { + if ($value !== $this->value) { + throw new \LogicException("Cannot resolve a fulfilled promise"); + } + } + + public function reject($reason) + { + throw new \LogicException("Cannot reject a fulfilled promise"); + } + + public function cancel() + { + // pass + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/Promise.php b/civicrm/vendor/guzzlehttp/promises/src/Promise.php new file mode 100644 index 0000000000000000000000000000000000000000..844ada073c808ce92dfcf3a5a66a010586cec9b3 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/Promise.php @@ -0,0 +1,280 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * Promises/A+ implementation that avoids recursion when possible. + * + * @link https://promisesaplus.com/ + */ +class Promise implements PromiseInterface +{ + private $state = self::PENDING; + private $result; + private $cancelFn; + private $waitFn; + private $waitList; + private $handlers = []; + + /** + * @param callable $waitFn Fn that when invoked resolves the promise. + * @param callable $cancelFn Fn that when invoked cancels the promise. + */ + public function __construct( + callable $waitFn = null, + callable $cancelFn = null + ) { + $this->waitFn = $waitFn; + $this->cancelFn = $cancelFn; + } + + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ) { + if ($this->state === self::PENDING) { + $p = new Promise(null, [$this, 'cancel']); + $this->handlers[] = [$p, $onFulfilled, $onRejected]; + $p->waitList = $this->waitList; + $p->waitList[] = $this; + return $p; + } + + // Return a fulfilled promise and immediately invoke any callbacks. + if ($this->state === self::FULFILLED) { + return $onFulfilled + ? promise_for($this->result)->then($onFulfilled) + : promise_for($this->result); + } + + // It's either cancelled or rejected, so return a rejected promise + // and immediately invoke any callbacks. + $rejection = rejection_for($this->result); + return $onRejected ? $rejection->then(null, $onRejected) : $rejection; + } + + public function otherwise(callable $onRejected) + { + return $this->then(null, $onRejected); + } + + public function wait($unwrap = true) + { + $this->waitIfPending(); + + $inner = $this->result instanceof PromiseInterface + ? $this->result->wait($unwrap) + : $this->result; + + if ($unwrap) { + if ($this->result instanceof PromiseInterface + || $this->state === self::FULFILLED + ) { + return $inner; + } else { + // It's rejected so "unwrap" and throw an exception. + throw exception_for($inner); + } + } + } + + public function getState() + { + return $this->state; + } + + public function cancel() + { + if ($this->state !== self::PENDING) { + return; + } + + $this->waitFn = $this->waitList = null; + + if ($this->cancelFn) { + $fn = $this->cancelFn; + $this->cancelFn = null; + try { + $fn(); + } catch (\Throwable $e) { + $this->reject($e); + } catch (\Exception $e) { + $this->reject($e); + } + } + + // Reject the promise only if it wasn't rejected in a then callback. + if ($this->state === self::PENDING) { + $this->reject(new CancellationException('Promise has been cancelled')); + } + } + + public function resolve($value) + { + $this->settle(self::FULFILLED, $value); + } + + public function reject($reason) + { + $this->settle(self::REJECTED, $reason); + } + + private function settle($state, $value) + { + if ($this->state !== self::PENDING) { + // Ignore calls with the same resolution. + if ($state === $this->state && $value === $this->result) { + return; + } + throw $this->state === $state + ? new \LogicException("The promise is already {$state}.") + : new \LogicException("Cannot change a {$this->state} promise to {$state}"); + } + + if ($value === $this) { + throw new \LogicException('Cannot fulfill or reject a promise with itself'); + } + + // Clear out the state of the promise but stash the handlers. + $this->state = $state; + $this->result = $value; + $handlers = $this->handlers; + $this->handlers = null; + $this->waitList = $this->waitFn = null; + $this->cancelFn = null; + + if (!$handlers) { + return; + } + + // If the value was not a settled promise or a thenable, then resolve + // it in the task queue using the correct ID. + if (!method_exists($value, 'then')) { + $id = $state === self::FULFILLED ? 1 : 2; + // It's a success, so resolve the handlers in the queue. + queue()->add(static function () use ($id, $value, $handlers) { + foreach ($handlers as $handler) { + self::callHandler($id, $value, $handler); + } + }); + } elseif ($value instanceof Promise + && $value->getState() === self::PENDING + ) { + // We can just merge our handlers onto the next promise. + $value->handlers = array_merge($value->handlers, $handlers); + } else { + // Resolve the handlers when the forwarded promise is resolved. + $value->then( + static function ($value) use ($handlers) { + foreach ($handlers as $handler) { + self::callHandler(1, $value, $handler); + } + }, + static function ($reason) use ($handlers) { + foreach ($handlers as $handler) { + self::callHandler(2, $reason, $handler); + } + } + ); + } + } + + /** + * Call a stack of handlers using a specific callback index and value. + * + * @param int $index 1 (resolve) or 2 (reject). + * @param mixed $value Value to pass to the callback. + * @param array $handler Array of handler data (promise and callbacks). + * + * @return array Returns the next group to resolve. + */ + private static function callHandler($index, $value, array $handler) + { + /** @var PromiseInterface $promise */ + $promise = $handler[0]; + + // The promise may have been cancelled or resolved before placing + // this thunk in the queue. + if ($promise->getState() !== self::PENDING) { + return; + } + + try { + if (isset($handler[$index])) { + $promise->resolve($handler[$index]($value)); + } elseif ($index === 1) { + // Forward resolution values as-is. + $promise->resolve($value); + } else { + // Forward rejections down the chain. + $promise->reject($value); + } + } catch (\Throwable $reason) { + $promise->reject($reason); + } catch (\Exception $reason) { + $promise->reject($reason); + } + } + + private function waitIfPending() + { + if ($this->state !== self::PENDING) { + return; + } elseif ($this->waitFn) { + $this->invokeWaitFn(); + } elseif ($this->waitList) { + $this->invokeWaitList(); + } else { + // If there's not wait function, then reject the promise. + $this->reject('Cannot wait on a promise that has ' + . 'no internal wait function. You must provide a wait ' + . 'function when constructing the promise to be able to ' + . 'wait on a promise.'); + } + + queue()->run(); + + if ($this->state === self::PENDING) { + $this->reject('Invoking the wait callback did not resolve the promise'); + } + } + + private function invokeWaitFn() + { + try { + $wfn = $this->waitFn; + $this->waitFn = null; + $wfn(true); + } catch (\Exception $reason) { + if ($this->state === self::PENDING) { + // The promise has not been resolved yet, so reject the promise + // with the exception. + $this->reject($reason); + } else { + // The promise was already resolved, so there's a problem in + // the application. + throw $reason; + } + } + } + + private function invokeWaitList() + { + $waitList = $this->waitList; + $this->waitList = null; + + foreach ($waitList as $result) { + while (true) { + $result->waitIfPending(); + + if ($result->result instanceof Promise) { + $result = $result->result; + } else { + if ($result->result instanceof PromiseInterface) { + $result->result->wait(false); + } + break; + } + } + } + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/PromiseInterface.php b/civicrm/vendor/guzzlehttp/promises/src/PromiseInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..8f5f4b99b26c64c7e4177e537e13a2703ca56a6d --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/PromiseInterface.php @@ -0,0 +1,93 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * A promise represents the eventual result of an asynchronous operation. + * + * The primary way of interacting with a promise is through its then method, + * which registers callbacks to receive either a promise’s eventual value or + * the reason why the promise cannot be fulfilled. + * + * @link https://promisesaplus.com/ + */ +interface PromiseInterface +{ + const PENDING = 'pending'; + const FULFILLED = 'fulfilled'; + const REJECTED = 'rejected'; + + /** + * Appends fulfillment and rejection handlers to the promise, and returns + * a new promise resolving to the return value of the called handler. + * + * @param callable $onFulfilled Invoked when the promise fulfills. + * @param callable $onRejected Invoked when the promise is rejected. + * + * @return PromiseInterface + */ + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ); + + /** + * Appends a rejection handler callback to the promise, and returns a new + * promise resolving to the return value of the callback if it is called, + * or to its original fulfillment value if the promise is instead + * fulfilled. + * + * @param callable $onRejected Invoked when the promise is rejected. + * + * @return PromiseInterface + */ + public function otherwise(callable $onRejected); + + /** + * Get the state of the promise ("pending", "rejected", or "fulfilled"). + * + * The three states can be checked against the constants defined on + * PromiseInterface: PENDING, FULFILLED, and REJECTED. + * + * @return string + */ + public function getState(); + + /** + * Resolve the promise with the given value. + * + * @param mixed $value + * @throws \RuntimeException if the promise is already resolved. + */ + public function resolve($value); + + /** + * Reject the promise with the given reason. + * + * @param mixed $reason + * @throws \RuntimeException if the promise is already resolved. + */ + public function reject($reason); + + /** + * Cancels the promise if possible. + * + * @link https://github.com/promises-aplus/cancellation-spec/issues/7 + */ + public function cancel(); + + /** + * Waits until the promise completes if possible. + * + * Pass $unwrap as true to unwrap the result of the promise, either + * returning the resolved value or throwing the rejected exception. + * + * If the promise cannot be waited on, then the promise will be rejected. + * + * @param bool $unwrap + * + * @return mixed + * @throws \LogicException if the promise has no wait function or if the + * promise does not settle after waiting. + */ + public function wait($unwrap = true); +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/PromisorInterface.php b/civicrm/vendor/guzzlehttp/promises/src/PromisorInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..b07fe32bc138c56fc393522434d852531012174e --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/PromisorInterface.php @@ -0,0 +1,15 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * Interface used with classes that return a promise. + */ +interface PromisorInterface +{ + /** + * Returns a promise. + * + * @return PromiseInterface + */ + public function promise(); +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/RejectedPromise.php b/civicrm/vendor/guzzlehttp/promises/src/RejectedPromise.php new file mode 100644 index 0000000000000000000000000000000000000000..2bc6508e7b6faae653a076b8ba57c8e339a9fbad --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/RejectedPromise.php @@ -0,0 +1,87 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * A promise that has been rejected. + * + * Thenning off of this promise will invoke the onRejected callback + * immediately and ignore other callbacks. + */ +class RejectedPromise implements PromiseInterface +{ + private $reason; + + public function __construct($reason) + { + if (method_exists($reason, 'then')) { + throw new \InvalidArgumentException( + 'You cannot create a RejectedPromise with a promise.'); + } + + $this->reason = $reason; + } + + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ) { + // If there's no onRejected callback then just return self. + if (!$onRejected) { + return $this; + } + + $queue = queue(); + $reason = $this->reason; + $p = new Promise([$queue, 'run']); + $queue->add(static function () use ($p, $reason, $onRejected) { + if ($p->getState() === self::PENDING) { + try { + // Return a resolved promise if onRejected does not throw. + $p->resolve($onRejected($reason)); + } catch (\Throwable $e) { + // onRejected threw, so return a rejected promise. + $p->reject($e); + } catch (\Exception $e) { + // onRejected threw, so return a rejected promise. + $p->reject($e); + } + } + }); + + return $p; + } + + public function otherwise(callable $onRejected) + { + return $this->then(null, $onRejected); + } + + public function wait($unwrap = true, $defaultDelivery = null) + { + if ($unwrap) { + throw exception_for($this->reason); + } + } + + public function getState() + { + return self::REJECTED; + } + + public function resolve($value) + { + throw new \LogicException("Cannot resolve a rejected promise"); + } + + public function reject($reason) + { + if ($reason !== $this->reason) { + throw new \LogicException("Cannot reject a rejected promise"); + } + } + + public function cancel() + { + // pass + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/RejectionException.php b/civicrm/vendor/guzzlehttp/promises/src/RejectionException.php new file mode 100644 index 0000000000000000000000000000000000000000..07c1136da166075fb7354548306b5755be8ceab2 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/RejectionException.php @@ -0,0 +1,47 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * A special exception that is thrown when waiting on a rejected promise. + * + * The reason value is available via the getReason() method. + */ +class RejectionException extends \RuntimeException +{ + /** @var mixed Rejection reason. */ + private $reason; + + /** + * @param mixed $reason Rejection reason. + * @param string $description Optional description + */ + public function __construct($reason, $description = null) + { + $this->reason = $reason; + + $message = 'The promise was rejected'; + + if ($description) { + $message .= ' with reason: ' . $description; + } elseif (is_string($reason) + || (is_object($reason) && method_exists($reason, '__toString')) + ) { + $message .= ' with reason: ' . $this->reason; + } elseif ($reason instanceof \JsonSerializable) { + $message .= ' with reason: ' + . json_encode($this->reason, JSON_PRETTY_PRINT); + } + + parent::__construct($message); + } + + /** + * Returns the rejection reason. + * + * @return mixed + */ + public function getReason() + { + return $this->reason; + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/TaskQueue.php b/civicrm/vendor/guzzlehttp/promises/src/TaskQueue.php new file mode 100644 index 0000000000000000000000000000000000000000..6e8a2a083cd919ad90efd13b0701da0605267fe2 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/TaskQueue.php @@ -0,0 +1,66 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * A task queue that executes tasks in a FIFO order. + * + * This task queue class is used to settle promises asynchronously and + * maintains a constant stack size. You can use the task queue asynchronously + * by calling the `run()` function of the global task queue in an event loop. + * + * GuzzleHttp\Promise\queue()->run(); + */ +class TaskQueue implements TaskQueueInterface +{ + private $enableShutdown = true; + private $queue = []; + + public function __construct($withShutdown = true) + { + if ($withShutdown) { + register_shutdown_function(function () { + if ($this->enableShutdown) { + // Only run the tasks if an E_ERROR didn't occur. + $err = error_get_last(); + if (!$err || ($err['type'] ^ E_ERROR)) { + $this->run(); + } + } + }); + } + } + + public function isEmpty() + { + return !$this->queue; + } + + public function add(callable $task) + { + $this->queue[] = $task; + } + + public function run() + { + /** @var callable $task */ + while ($task = array_shift($this->queue)) { + $task(); + } + } + + /** + * The task queue will be run and exhausted by default when the process + * exits IFF the exit is not the result of a PHP E_ERROR error. + * + * You can disable running the automatic shutdown of the queue by calling + * this function. If you disable the task queue shutdown process, then you + * MUST either run the task queue (as a result of running your event loop + * or manually using the run() method) or wait on each outstanding promise. + * + * Note: This shutdown will occur before any destructors are triggered. + */ + public function disableShutdown() + { + $this->enableShutdown = false; + } +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/TaskQueueInterface.php b/civicrm/vendor/guzzlehttp/promises/src/TaskQueueInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..ac8306e1971226a46e5fdff1bed9140f8cbade59 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/TaskQueueInterface.php @@ -0,0 +1,25 @@ +<?php +namespace GuzzleHttp\Promise; + +interface TaskQueueInterface +{ + /** + * Returns true if the queue is empty. + * + * @return bool + */ + public function isEmpty(); + + /** + * Adds a task to the queue that will be executed the next time run is + * called. + * + * @param callable $task + */ + public function add(callable $task); + + /** + * Execute all of the pending task in the queue. + */ + public function run(); +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/functions.php b/civicrm/vendor/guzzlehttp/promises/src/functions.php new file mode 100644 index 0000000000000000000000000000000000000000..4e27709af3641337e285f66e9a22d1778060d2ec --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/functions.php @@ -0,0 +1,457 @@ +<?php +namespace GuzzleHttp\Promise; + +/** + * Get the global task queue used for promise resolution. + * + * This task queue MUST be run in an event loop in order for promises to be + * settled asynchronously. It will be automatically run when synchronously + * waiting on a promise. + * + * <code> + * while ($eventLoop->isRunning()) { + * GuzzleHttp\Promise\queue()->run(); + * } + * </code> + * + * @param TaskQueueInterface $assign Optionally specify a new queue instance. + * + * @return TaskQueueInterface + */ +function queue(TaskQueueInterface $assign = null) +{ + static $queue; + + if ($assign) { + $queue = $assign; + } elseif (!$queue) { + $queue = new TaskQueue(); + } + + return $queue; +} + +/** + * Adds a function to run in the task queue when it is next `run()` and returns + * a promise that is fulfilled or rejected with the result. + * + * @param callable $task Task function to run. + * + * @return PromiseInterface + */ +function task(callable $task) +{ + $queue = queue(); + $promise = new Promise([$queue, 'run']); + $queue->add(function () use ($task, $promise) { + try { + $promise->resolve($task()); + } catch (\Throwable $e) { + $promise->reject($e); + } catch (\Exception $e) { + $promise->reject($e); + } + }); + + return $promise; +} + +/** + * Creates a promise for a value if the value is not a promise. + * + * @param mixed $value Promise or value. + * + * @return PromiseInterface + */ +function promise_for($value) +{ + if ($value instanceof PromiseInterface) { + return $value; + } + + // Return a Guzzle promise that shadows the given promise. + if (method_exists($value, 'then')) { + $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null; + $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null; + $promise = new Promise($wfn, $cfn); + $value->then([$promise, 'resolve'], [$promise, 'reject']); + return $promise; + } + + return new FulfilledPromise($value); +} + +/** + * Creates a rejected promise for a reason if the reason is not a promise. If + * the provided reason is a promise, then it is returned as-is. + * + * @param mixed $reason Promise or reason. + * + * @return PromiseInterface + */ +function rejection_for($reason) +{ + if ($reason instanceof PromiseInterface) { + return $reason; + } + + return new RejectedPromise($reason); +} + +/** + * Create an exception for a rejected promise value. + * + * @param mixed $reason + * + * @return \Exception|\Throwable + */ +function exception_for($reason) +{ + return $reason instanceof \Exception || $reason instanceof \Throwable + ? $reason + : new RejectionException($reason); +} + +/** + * Returns an iterator for the given value. + * + * @param mixed $value + * + * @return \Iterator + */ +function iter_for($value) +{ + if ($value instanceof \Iterator) { + return $value; + } elseif (is_array($value)) { + return new \ArrayIterator($value); + } else { + return new \ArrayIterator([$value]); + } +} + +/** + * Synchronously waits on a promise to resolve and returns an inspection state + * array. + * + * Returns a state associative array containing a "state" key mapping to a + * valid promise state. If the state of the promise is "fulfilled", the array + * will contain a "value" key mapping to the fulfilled value of the promise. If + * the promise is rejected, the array will contain a "reason" key mapping to + * the rejection reason of the promise. + * + * @param PromiseInterface $promise Promise or value. + * + * @return array + */ +function inspect(PromiseInterface $promise) +{ + try { + return [ + 'state' => PromiseInterface::FULFILLED, + 'value' => $promise->wait() + ]; + } catch (RejectionException $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; + } catch (\Throwable $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; + } catch (\Exception $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; + } +} + +/** + * Waits on all of the provided promises, but does not unwrap rejected promises + * as thrown exception. + * + * Returns an array of inspection state arrays. + * + * @param PromiseInterface[] $promises Traversable of promises to wait upon. + * + * @return array + * @see GuzzleHttp\Promise\inspect for the inspection state array format. + */ +function inspect_all($promises) +{ + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = inspect($promise); + } + + return $results; +} + +/** + * Waits on all of the provided promises and returns the fulfilled values. + * + * Returns an array that contains the value of each promise (in the same order + * the promises were provided). An exception is thrown if any of the promises + * are rejected. + * + * @param mixed $promises Iterable of PromiseInterface objects to wait on. + * + * @return array + * @throws \Exception on error + * @throws \Throwable on error in PHP >=7 + */ +function unwrap($promises) +{ + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = $promise->wait(); + } + + return $results; +} + +/** + * Given an array of promises, return a promise that is fulfilled when all the + * items in the array are fulfilled. + * + * The promise's fulfillment value is an array with fulfillment values at + * respective positions to the original array. If any promise in the array + * rejects, the returned promise is rejected with the rejection reason. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ +function all($promises) +{ + $results = []; + return each( + $promises, + function ($value, $idx) use (&$results) { + $results[$idx] = $value; + }, + function ($reason, $idx, Promise $aggregate) { + $aggregate->reject($reason); + } + )->then(function () use (&$results) { + ksort($results); + return $results; + }); +} + +/** + * Initiate a competitive race between multiple promises or values (values will + * become immediately fulfilled promises). + * + * When count amount of promises have been fulfilled, the returned promise is + * fulfilled with an array that contains the fulfillment values of the winners + * in order of resolution. + * + * This prommise is rejected with a {@see GuzzleHttp\Promise\AggregateException} + * if the number of fulfilled promises is less than the desired $count. + * + * @param int $count Total number of promises. + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ +function some($count, $promises) +{ + $results = []; + $rejections = []; + + return each( + $promises, + function ($value, $idx, PromiseInterface $p) use (&$results, $count) { + if ($p->getState() !== PromiseInterface::PENDING) { + return; + } + $results[$idx] = $value; + if (count($results) >= $count) { + $p->resolve(null); + } + }, + function ($reason) use (&$rejections) { + $rejections[] = $reason; + } + )->then( + function () use (&$results, &$rejections, $count) { + if (count($results) !== $count) { + throw new AggregateException( + 'Not enough promises to fulfill count', + $rejections + ); + } + ksort($results); + return array_values($results); + } + ); +} + +/** + * Like some(), with 1 as count. However, if the promise fulfills, the + * fulfillment value is not an array of 1 but the value directly. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ +function any($promises) +{ + return some(1, $promises)->then(function ($values) { return $values[0]; }); +} + +/** + * Returns a promise that is fulfilled when all of the provided promises have + * been fulfilled or rejected. + * + * The returned promise is fulfilled with an array of inspection state arrays. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + * @see GuzzleHttp\Promise\inspect for the inspection state array format. + */ +function settle($promises) +{ + $results = []; + + return each( + $promises, + function ($value, $idx) use (&$results) { + $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; + }, + function ($reason, $idx) use (&$results) { + $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; + } + )->then(function () use (&$results) { + ksort($results); + return $results; + }); +} + +/** + * Given an iterator that yields promises or values, returns a promise that is + * fulfilled with a null value when the iterator has been consumed or the + * aggregate promise has been fulfilled or rejected. + * + * $onFulfilled is a function that accepts the fulfilled value, iterator + * index, and the aggregate promise. The callback can invoke any necessary side + * effects and choose to resolve or reject the aggregate promise if needed. + * + * $onRejected is a function that accepts the rejection reason, iterator + * index, and the aggregate promise. The callback can invoke any necessary side + * effects and choose to resolve or reject the aggregate promise if needed. + * + * @param mixed $iterable Iterator or array to iterate over. + * @param callable $onFulfilled + * @param callable $onRejected + * + * @return PromiseInterface + */ +function each( + $iterable, + callable $onFulfilled = null, + callable $onRejected = null +) { + return (new EachPromise($iterable, [ + 'fulfilled' => $onFulfilled, + 'rejected' => $onRejected + ]))->promise(); +} + +/** + * Like each, but only allows a certain number of outstanding promises at any + * given time. + * + * $concurrency may be an integer or a function that accepts the number of + * pending promises and returns a numeric concurrency limit value to allow for + * dynamic a concurrency size. + * + * @param mixed $iterable + * @param int|callable $concurrency + * @param callable $onFulfilled + * @param callable $onRejected + * + * @return PromiseInterface + */ +function each_limit( + $iterable, + $concurrency, + callable $onFulfilled = null, + callable $onRejected = null +) { + return (new EachPromise($iterable, [ + 'fulfilled' => $onFulfilled, + 'rejected' => $onRejected, + 'concurrency' => $concurrency + ]))->promise(); +} + +/** + * Like each_limit, but ensures that no promise in the given $iterable argument + * is rejected. If any promise is rejected, then the aggregate promise is + * rejected with the encountered rejection. + * + * @param mixed $iterable + * @param int|callable $concurrency + * @param callable $onFulfilled + * + * @return PromiseInterface + */ +function each_limit_all( + $iterable, + $concurrency, + callable $onFulfilled = null +) { + return each_limit( + $iterable, + $concurrency, + $onFulfilled, + function ($reason, $idx, PromiseInterface $aggregate) { + $aggregate->reject($reason); + } + ); +} + +/** + * Returns true if a promise is fulfilled. + * + * @param PromiseInterface $promise + * + * @return bool + */ +function is_fulfilled(PromiseInterface $promise) +{ + return $promise->getState() === PromiseInterface::FULFILLED; +} + +/** + * Returns true if a promise is rejected. + * + * @param PromiseInterface $promise + * + * @return bool + */ +function is_rejected(PromiseInterface $promise) +{ + return $promise->getState() === PromiseInterface::REJECTED; +} + +/** + * Returns true if a promise is fulfilled or rejected. + * + * @param PromiseInterface $promise + * + * @return bool + */ +function is_settled(PromiseInterface $promise) +{ + return $promise->getState() !== PromiseInterface::PENDING; +} + +/** + * @see Coroutine + * + * @param callable $generatorFn + * + * @return PromiseInterface + */ +function coroutine(callable $generatorFn) +{ + return new Coroutine($generatorFn); +} diff --git a/civicrm/vendor/guzzlehttp/promises/src/functions_include.php b/civicrm/vendor/guzzlehttp/promises/src/functions_include.php new file mode 100644 index 0000000000000000000000000000000000000000..34cd1710aa220b6e7ee59a7bda1ea0c6ab52ef80 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/promises/src/functions_include.php @@ -0,0 +1,6 @@ +<?php + +// Don't redefine the functions if included multiple times. +if (!function_exists('GuzzleHttp\Promise\promise_for')) { + require __DIR__ . '/functions.php'; +} diff --git a/civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md b/civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..5c252b3a208313cd73f7a84d63b752800edd96ff --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/CHANGELOG.md @@ -0,0 +1,110 @@ +# CHANGELOG + +## 1.4.2 - 2017-03-20 + +* Reverted BC break to `Uri::resolve` and `Uri::removeDotSegments` by removing + calls to `trigger_error` when deprecated methods are invoked. + +## 1.4.1 - 2017-02-27 + +* Reverted BC break by reintroducing behavior to automagically fix a URI with a + relative path and an authority by adding a leading slash to the path. It's only + deprecated now. +* Added triggering of silenced deprecation warnings. + +## 1.4.0 - 2017-02-21 + +* Fix `Stream::read` when length parameter <= 0. +* `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory. +* Fix `ServerRequest::getUriFromGlobals` when `Host` header contains port. +* Ensure `ServerRequest::getUriFromGlobals` returns a URI in absolute form. +* Allow `parse_response` to parse a response without delimiting space and reason. +* Ensure each URI modification results in a valid URI according to PSR-7 discussions. + Invalid modifications will throw an exception instead of returning a wrong URI or + doing some magic. + - `(new Uri)->withPath('foo')->withHost('example.com')` will throw an exception + because the path of a URI with an authority must start with a slash "/" or be empty + - `(new Uri())->withScheme('http')` will return `'http://localhost'` +* Fix compatibility of URIs with `file` scheme and empty host. +* Added common URI utility methods based on RFC 3986 (see documentation in the readme): + - `Uri::isDefaultPort` + - `Uri::isAbsolute` + - `Uri::isNetworkPathReference` + - `Uri::isAbsolutePathReference` + - `Uri::isRelativePathReference` + - `Uri::isSameDocumentReference` + - `Uri::composeComponents` + - `UriNormalizer::normalize` + - `UriNormalizer::isEquivalent` + - `UriResolver::relativize` +* Deprecated `Uri::resolve` in favor of `UriResolver::resolve` +* Deprecated `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments` + +## 1.3.1 - 2016-06-25 + +* Fix `Uri::__toString` for network path references, e.g. `//example.org`. +* Fix missing lowercase normalization for host. +* Fix handling of URI components in case they are `'0'` in a lot of places, + e.g. as a user info password. +* Fix `Uri::withAddedHeader` to correctly merge headers with different case. +* Fix trimming of header values in `Uri::withAddedHeader`. Header values may + be surrounded by whitespace which should be ignored according to RFC 7230 + Section 3.2.4. This does not apply to header names. +* Fix `Uri::withAddedHeader` with an array of header values. +* Fix `Uri::resolve` when base path has no slash and handling of fragment. +* Fix handling of encoding in `Uri::with(out)QueryValue` so one can pass the + key/value both in encoded as well as decoded form to those methods. This is + consistent with withPath, withQuery etc. +* Fix `ServerRequest::withoutAttribute` when attribute value is null. + +## 1.3.0 - 2016-04-13 + +* Added remaining interfaces needed for full PSR7 compatibility + (ServerRequestInterface, UploadedFileInterface, etc.). +* Added support for stream_for from scalars. +* Can now extend Uri. +* Fixed a bug in validating request methods by making it more permissive. + +## 1.2.3 - 2016-02-18 + +* Fixed support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote + streams, which can sometimes return fewer bytes than requested with `fread`. +* Fixed handling of gzipped responses with FNAME headers. + +## 1.2.2 - 2016-01-22 + +* Added support for URIs without any authority. +* Added support for HTTP 451 'Unavailable For Legal Reasons.' +* Added support for using '0' as a filename. +* Added support for including non-standard ports in Host headers. + +## 1.2.1 - 2015-11-02 + +* Now supporting negative offsets when seeking to SEEK_END. + +## 1.2.0 - 2015-08-15 + +* Body as `"0"` is now properly added to a response. +* Now allowing forward seeking in CachingStream. +* Now properly parsing HTTP requests that contain proxy targets in + `parse_request`. +* functions.php is now conditionally required. +* user-info is no longer dropped when resolving URIs. + +## 1.1.0 - 2015-06-24 + +* URIs can now be relative. +* `multipart/form-data` headers are now overridden case-insensitively. +* URI paths no longer encode the following characters because they are allowed + in URIs: "(", ")", "*", "!", "'" +* A port is no longer added to a URI when the scheme is missing and no port is + present. + +## 1.0.0 - 2015-05-19 + +Initial release. + +Currently unsupported: + +- `Psr\Http\Message\ServerRequestInterface` +- `Psr\Http\Message\UploadedFileInterface` diff --git a/civicrm/vendor/guzzlehttp/psr7/LICENSE b/civicrm/vendor/guzzlehttp/psr7/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..581d95f92024be7c805599690867b4d1e2e10f40 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 Michael Dowling, https://github.com/mtdowling <mtdowling@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/guzzlehttp/psr7/README.md b/civicrm/vendor/guzzlehttp/psr7/README.md new file mode 100644 index 0000000000000000000000000000000000000000..16499358ea102a6d05d5cc44fcdb7abba19083ab --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/README.md @@ -0,0 +1,739 @@ +# PSR-7 Message Implementation + +This repository contains a full [PSR-7](http://www.php-fig.org/psr/psr-7/) +message implementation, several stream decorators, and some helpful +functionality like query string parsing. + + +[](https://travis-ci.org/guzzle/psr7) + + +# Stream implementation + +This package comes with a number of stream implementations and stream +decorators. + + +## AppendStream + +`GuzzleHttp\Psr7\AppendStream` + +Reads from multiple streams, one after the other. + +```php +use GuzzleHttp\Psr7; + +$a = Psr7\stream_for('abc, '); +$b = Psr7\stream_for('123.'); +$composed = new Psr7\AppendStream([$a, $b]); + +$composed->addStream(Psr7\stream_for(' Above all listen to me')); + +echo $composed; // abc, 123. Above all listen to me. +``` + + +## BufferStream + +`GuzzleHttp\Psr7\BufferStream` + +Provides a buffer stream that can be written to fill a buffer, and read +from to remove bytes from the buffer. + +This stream returns a "hwm" metadata value that tells upstream consumers +what the configured high water mark of the stream is, or the maximum +preferred size of the buffer. + +```php +use GuzzleHttp\Psr7; + +// When more than 1024 bytes are in the buffer, it will begin returning +// false to writes. This is an indication that writers should slow down. +$buffer = new Psr7\BufferStream(1024); +``` + + +## CachingStream + +The CachingStream is used to allow seeking over previously read bytes on +non-seekable streams. This can be useful when transferring a non-seekable +entity body fails due to needing to rewind the stream (for example, resulting +from a redirect). Data that is read from the remote stream will be buffered in +a PHP temp stream so that previously read bytes are cached first in memory, +then on disk. + +```php +use GuzzleHttp\Psr7; + +$original = Psr7\stream_for(fopen('http://www.google.com', 'r')); +$stream = new Psr7\CachingStream($original); + +$stream->read(1024); +echo $stream->tell(); +// 1024 + +$stream->seek(0); +echo $stream->tell(); +// 0 +``` + + +## DroppingStream + +`GuzzleHttp\Psr7\DroppingStream` + +Stream decorator that begins dropping data once the size of the underlying +stream becomes too full. + +```php +use GuzzleHttp\Psr7; + +// Create an empty stream +$stream = Psr7\stream_for(); + +// Start dropping data when the stream has more than 10 bytes +$dropping = new Psr7\DroppingStream($stream, 10); + +$dropping->write('01234567890123456789'); +echo $stream; // 0123456789 +``` + + +## FnStream + +`GuzzleHttp\Psr7\FnStream` + +Compose stream implementations based on a hash of functions. + +Allows for easy testing and extension of a provided stream without needing +to create a concrete class for a simple extension point. + +```php + +use GuzzleHttp\Psr7; + +$stream = Psr7\stream_for('hi'); +$fnStream = Psr7\FnStream::decorate($stream, [ + 'rewind' => function () use ($stream) { + echo 'About to rewind - '; + $stream->rewind(); + echo 'rewound!'; + } +]); + +$fnStream->rewind(); +// Outputs: About to rewind - rewound! +``` + + +## InflateStream + +`GuzzleHttp\Psr7\InflateStream` + +Uses PHP's zlib.inflate filter to inflate deflate or gzipped content. + +This stream decorator skips the first 10 bytes of the given stream to remove +the gzip header, converts the provided stream to a PHP stream resource, +then appends the zlib.inflate filter. The stream is then converted back +to a Guzzle stream resource to be used as a Guzzle stream. + + +## LazyOpenStream + +`GuzzleHttp\Psr7\LazyOpenStream` + +Lazily reads or writes to a file that is opened only after an IO operation +take place on the stream. + +```php +use GuzzleHttp\Psr7; + +$stream = new Psr7\LazyOpenStream('/path/to/file', 'r'); +// The file has not yet been opened... + +echo $stream->read(10); +// The file is opened and read from only when needed. +``` + + +## LimitStream + +`GuzzleHttp\Psr7\LimitStream` + +LimitStream can be used to read a subset or slice of an existing stream object. +This can be useful for breaking a large file into smaller pieces to be sent in +chunks (e.g. Amazon S3's multipart upload API). + +```php +use GuzzleHttp\Psr7; + +$original = Psr7\stream_for(fopen('/tmp/test.txt', 'r+')); +echo $original->getSize(); +// >>> 1048576 + +// Limit the size of the body to 1024 bytes and start reading from byte 2048 +$stream = new Psr7\LimitStream($original, 1024, 2048); +echo $stream->getSize(); +// >>> 1024 +echo $stream->tell(); +// >>> 0 +``` + + +## MultipartStream + +`GuzzleHttp\Psr7\MultipartStream` + +Stream that when read returns bytes for a streaming multipart or +multipart/form-data stream. + + +## NoSeekStream + +`GuzzleHttp\Psr7\NoSeekStream` + +NoSeekStream wraps a stream and does not allow seeking. + +```php +use GuzzleHttp\Psr7; + +$original = Psr7\stream_for('foo'); +$noSeek = new Psr7\NoSeekStream($original); + +echo $noSeek->read(3); +// foo +var_export($noSeek->isSeekable()); +// false +$noSeek->seek(0); +var_export($noSeek->read(3)); +// NULL +``` + + +## PumpStream + +`GuzzleHttp\Psr7\PumpStream` + +Provides a read only stream that pumps data from a PHP callable. + +When invoking the provided callable, the PumpStream will pass the amount of +data requested to read to the callable. The callable can choose to ignore +this value and return fewer or more bytes than requested. Any extra data +returned by the provided callable is buffered internally until drained using +the read() function of the PumpStream. The provided callable MUST return +false when there is no more data to read. + + +## Implementing stream decorators + +Creating a stream decorator is very easy thanks to the +`GuzzleHttp\Psr7\StreamDecoratorTrait`. This trait provides methods that +implement `Psr\Http\Message\StreamInterface` by proxying to an underlying +stream. Just `use` the `StreamDecoratorTrait` and implement your custom +methods. + +For example, let's say we wanted to call a specific function each time the last +byte is read from a stream. This could be implemented by overriding the +`read()` method. + +```php +use Psr\Http\Message\StreamInterface; +use GuzzleHttp\Psr7\StreamDecoratorTrait; + +class EofCallbackStream implements StreamInterface +{ + use StreamDecoratorTrait; + + private $callback; + + public function __construct(StreamInterface $stream, callable $cb) + { + $this->stream = $stream; + $this->callback = $cb; + } + + public function read($length) + { + $result = $this->stream->read($length); + + // Invoke the callback when EOF is hit. + if ($this->eof()) { + call_user_func($this->callback); + } + + return $result; + } +} +``` + +This decorator could be added to any existing stream and used like so: + +```php +use GuzzleHttp\Psr7; + +$original = Psr7\stream_for('foo'); + +$eofStream = new EofCallbackStream($original, function () { + echo 'EOF!'; +}); + +$eofStream->read(2); +$eofStream->read(1); +// echoes "EOF!" +$eofStream->seek(0); +$eofStream->read(3); +// echoes "EOF!" +``` + + +## PHP StreamWrapper + +You can use the `GuzzleHttp\Psr7\StreamWrapper` class if you need to use a +PSR-7 stream as a PHP stream resource. + +Use the `GuzzleHttp\Psr7\StreamWrapper::getResource()` method to create a PHP +stream from a PSR-7 stream. + +```php +use GuzzleHttp\Psr7\StreamWrapper; + +$stream = GuzzleHttp\Psr7\stream_for('hello!'); +$resource = StreamWrapper::getResource($stream); +echo fread($resource, 6); // outputs hello! +``` + + +# Function API + +There are various functions available under the `GuzzleHttp\Psr7` namespace. + + +## `function str` + +`function str(MessageInterface $message)` + +Returns the string representation of an HTTP message. + +```php +$request = new GuzzleHttp\Psr7\Request('GET', 'http://example.com'); +echo GuzzleHttp\Psr7\str($request); +``` + + +## `function uri_for` + +`function uri_for($uri)` + +This function accepts a string or `Psr\Http\Message\UriInterface` and returns a +UriInterface for the given value. If the value is already a `UriInterface`, it +is returned as-is. + +```php +$uri = GuzzleHttp\Psr7\uri_for('http://example.com'); +assert($uri === GuzzleHttp\Psr7\uri_for($uri)); +``` + + +## `function stream_for` + +`function stream_for($resource = '', array $options = [])` + +Create a new stream based on the input type. + +Options is an associative array that can contain the following keys: + +* - metadata: Array of custom metadata. +* - size: Size of the stream. + +This method accepts the following `$resource` types: + +- `Psr\Http\Message\StreamInterface`: Returns the value as-is. +- `string`: Creates a stream object that uses the given string as the contents. +- `resource`: Creates a stream object that wraps the given PHP stream resource. +- `Iterator`: If the provided value implements `Iterator`, then a read-only + stream object will be created that wraps the given iterable. Each time the + stream is read from, data from the iterator will fill a buffer and will be + continuously called until the buffer is equal to the requested read size. + Subsequent read calls will first read from the buffer and then call `next` + on the underlying iterator until it is exhausted. +- `object` with `__toString()`: If the object has the `__toString()` method, + the object will be cast to a string and then a stream will be returned that + uses the string value. +- `NULL`: When `null` is passed, an empty stream object is returned. +- `callable` When a callable is passed, a read-only stream object will be + created that invokes the given callable. The callable is invoked with the + number of suggested bytes to read. The callable can return any number of + bytes, but MUST return `false` when there is no more data to return. The + stream object that wraps the callable will invoke the callable until the + number of requested bytes are available. Any additional bytes will be + buffered and used in subsequent reads. + +```php +$stream = GuzzleHttp\Psr7\stream_for('foo'); +$stream = GuzzleHttp\Psr7\stream_for(fopen('/path/to/file', 'r')); + +$generator function ($bytes) { + for ($i = 0; $i < $bytes; $i++) { + yield ' '; + } +} + +$stream = GuzzleHttp\Psr7\stream_for($generator(100)); +``` + + +## `function parse_header` + +`function parse_header($header)` + +Parse an array of header values containing ";" separated data into an array of +associative arrays representing the header key value pair data of the header. +When a parameter does not contain a value, but just contains a key, this +function will inject a key with a '' string value. + + +## `function normalize_header` + +`function normalize_header($header)` + +Converts an array of header values that may contain comma separated headers +into an array of headers with no comma separated values. + + +## `function modify_request` + +`function modify_request(RequestInterface $request, array $changes)` + +Clone and modify a request with the given changes. This method is useful for +reducing the number of clones needed to mutate a message. + +The changes can be one of: + +- method: (string) Changes the HTTP method. +- set_headers: (array) Sets the given headers. +- remove_headers: (array) Remove the given headers. +- body: (mixed) Sets the given body. +- uri: (UriInterface) Set the URI. +- query: (string) Set the query string value of the URI. +- version: (string) Set the protocol version. + + +## `function rewind_body` + +`function rewind_body(MessageInterface $message)` + +Attempts to rewind a message body and throws an exception on failure. The body +of the message will only be rewound if a call to `tell()` returns a value other +than `0`. + + +## `function try_fopen` + +`function try_fopen($filename, $mode)` + +Safely opens a PHP stream resource using a filename. + +When fopen fails, PHP normally raises a warning. This function adds an error +handler that checks for errors and throws an exception instead. + + +## `function copy_to_string` + +`function copy_to_string(StreamInterface $stream, $maxLen = -1)` + +Copy the contents of a stream into a string until the given number of bytes +have been read. + + +## `function copy_to_stream` + +`function copy_to_stream(StreamInterface $source, StreamInterface $dest, $maxLen = -1)` + +Copy the contents of a stream into another stream until the given number of +bytes have been read. + + +## `function hash` + +`function hash(StreamInterface $stream, $algo, $rawOutput = false)` + +Calculate a hash of a Stream. This method reads the entire stream to calculate +a rolling hash (based on PHP's hash_init functions). + + +## `function readline` + +`function readline(StreamInterface $stream, $maxLength = null)` + +Read a line from the stream up to the maximum allowed buffer length. + + +## `function parse_request` + +`function parse_request($message)` + +Parses a request message string into a request object. + + +## `function parse_response` + +`function parse_response($message)` + +Parses a response message string into a response object. + + +## `function parse_query` + +`function parse_query($str, $urlEncoding = true)` + +Parse a query string into an associative array. + +If multiple values are found for the same key, the value of that key value pair +will become an array. This function does not parse nested PHP style arrays into +an associative array (e.g., `foo[a]=1&foo[b]=2` will be parsed into +`['foo[a]' => '1', 'foo[b]' => '2']`). + + +## `function build_query` + +`function build_query(array $params, $encoding = PHP_QUERY_RFC3986)` + +Build a query string from an array of key value pairs. + +This function can use the return value of parse_query() to build a query string. +This function does not modify the provided keys when an array is encountered +(like http_build_query would). + + +## `function mimetype_from_filename` + +`function mimetype_from_filename($filename)` + +Determines the mimetype of a file by looking at its extension. + + +## `function mimetype_from_extension` + +`function mimetype_from_extension($extension)` + +Maps a file extensions to a mimetype. + + +# Additional URI Methods + +Aside from the standard `Psr\Http\Message\UriInterface` implementation in form of the `GuzzleHttp\Psr7\Uri` class, +this library also provides additional functionality when working with URIs as static methods. + +## URI Types + +An instance of `Psr\Http\Message\UriInterface` can either be an absolute URI or a relative reference. +An absolute URI has a scheme. A relative reference is used to express a URI relative to another URI, +the base URI. Relative references can be divided into several forms according to +[RFC 3986 Section 4.2](https://tools.ietf.org/html/rfc3986#section-4.2): + +- network-path references, e.g. `//example.com/path` +- absolute-path references, e.g. `/path` +- relative-path references, e.g. `subpath` + +The following methods can be used to identify the type of the URI. + +### `GuzzleHttp\Psr7\Uri::isAbsolute` + +`public static function isAbsolute(UriInterface $uri): bool` + +Whether the URI is absolute, i.e. it has a scheme. + +### `GuzzleHttp\Psr7\Uri::isNetworkPathReference` + +`public static function isNetworkPathReference(UriInterface $uri): bool` + +Whether the URI is a network-path reference. A relative reference that begins with two slash characters is +termed an network-path reference. + +### `GuzzleHttp\Psr7\Uri::isAbsolutePathReference` + +`public static function isAbsolutePathReference(UriInterface $uri): bool` + +Whether the URI is a absolute-path reference. A relative reference that begins with a single slash character is +termed an absolute-path reference. + +### `GuzzleHttp\Psr7\Uri::isRelativePathReference` + +`public static function isRelativePathReference(UriInterface $uri): bool` + +Whether the URI is a relative-path reference. A relative reference that does not begin with a slash character is +termed a relative-path reference. + +### `GuzzleHttp\Psr7\Uri::isSameDocumentReference` + +`public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool` + +Whether the URI is a same-document reference. A same-document reference refers to a URI that is, aside from its +fragment component, identical to the base URI. When no base URI is given, only an empty URI reference +(apart from its fragment) is considered a same-document reference. + +## URI Components + +Additional methods to work with URI components. + +### `GuzzleHttp\Psr7\Uri::isDefaultPort` + +`public static function isDefaultPort(UriInterface $uri): bool` + +Whether the URI has the default port of the current scheme. `Psr\Http\Message\UriInterface::getPort` may return null +or the standard port. This method can be used independently of the implementation. + +### `GuzzleHttp\Psr7\Uri::composeComponents` + +`public static function composeComponents($scheme, $authority, $path, $query, $fragment): string` + +Composes a URI reference string from its various components according to +[RFC 3986 Section 5.3](https://tools.ietf.org/html/rfc3986#section-5.3). Usually this method does not need to be called +manually but instead is used indirectly via `Psr\Http\Message\UriInterface::__toString`. + +### `GuzzleHttp\Psr7\Uri::fromParts` + +`public static function fromParts(array $parts): UriInterface` + +Creates a URI from a hash of [`parse_url`](http://php.net/manual/en/function.parse-url.php) components. + + +### `GuzzleHttp\Psr7\Uri::withQueryValue` + +`public static function withQueryValue(UriInterface $uri, $key, $value): UriInterface` + +Creates a new URI with a specific query string value. Any existing query string values that exactly match the +provided key are removed and replaced with the given key value pair. A value of null will set the query string +key without a value, e.g. "key" instead of "key=value". + + +### `GuzzleHttp\Psr7\Uri::withoutQueryValue` + +`public static function withoutQueryValue(UriInterface $uri, $key): UriInterface` + +Creates a new URI with a specific query string value removed. Any existing query string values that exactly match the +provided key are removed. + +## Reference Resolution + +`GuzzleHttp\Psr7\UriResolver` provides methods to resolve a URI reference in the context of a base URI according +to [RFC 3986 Section 5](https://tools.ietf.org/html/rfc3986#section-5). This is for example also what web browsers +do when resolving a link in a website based on the current request URI. + +### `GuzzleHttp\Psr7\UriResolver::resolve` + +`public static function resolve(UriInterface $base, UriInterface $rel): UriInterface` + +Converts the relative URI into a new URI that is resolved against the base URI. + +### `GuzzleHttp\Psr7\UriResolver::removeDotSegments` + +`public static function removeDotSegments(string $path): string` + +Removes dot segments from a path and returns the new path according to +[RFC 3986 Section 5.2.4](https://tools.ietf.org/html/rfc3986#section-5.2.4). + +### `GuzzleHttp\Psr7\UriResolver::relativize` + +`public static function relativize(UriInterface $base, UriInterface $target): UriInterface` + +Returns the target URI as a relative reference from the base URI. This method is the counterpart to resolve(): + +```php +(string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target)) +``` + +One use-case is to use the current request URI as base URI and then generate relative links in your documents +to reduce the document size or offer self-contained downloadable document archives. + +```php +$base = new Uri('http://example.com/a/b/'); +echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'. +echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'. +echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'. +echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'. +``` + +## Normalization and Comparison + +`GuzzleHttp\Psr7\UriNormalizer` provides methods to normalize and compare URIs according to +[RFC 3986 Section 6](https://tools.ietf.org/html/rfc3986#section-6). + +### `GuzzleHttp\Psr7\UriNormalizer::normalize` + +`public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS): UriInterface` + +Returns a normalized URI. The scheme and host component are already normalized to lowercase per PSR-7 UriInterface. +This methods adds additional normalizations that can be configured with the `$flags` parameter which is a bitmask +of normalizations to apply. The following normalizations are available: + +- `UriNormalizer::PRESERVING_NORMALIZATIONS` + + Default normalizations which only include the ones that preserve semantics. + +- `UriNormalizer::CAPITALIZE_PERCENT_ENCODING` + + All letters within a percent-encoding triplet (e.g., "%3A") are case-insensitive, and should be capitalized. + + Example: `http://example.org/a%c2%b1b` → `http://example.org/a%C2%B1b` + +- `UriNormalizer::DECODE_UNRESERVED_CHARACTERS` + + Decodes percent-encoded octets of unreserved characters. For consistency, percent-encoded octets in the ranges of + ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should + not be created by URI producers and, when found in a URI, should be decoded to their corresponding unreserved + characters by URI normalizers. + + Example: `http://example.org/%7Eusern%61me/` → `http://example.org/~username/` + +- `UriNormalizer::CONVERT_EMPTY_PATH` + + Converts the empty path to "/" for http and https URIs. + + Example: `http://example.org` → `http://example.org/` + +- `UriNormalizer::REMOVE_DEFAULT_HOST` + + Removes the default host of the given URI scheme from the URI. Only the "file" scheme defines the default host + "localhost". All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile` are equivalent according to + RFC 3986. + + Example: `file://localhost/myfile` → `file:///myfile` + +- `UriNormalizer::REMOVE_DEFAULT_PORT` + + Removes the default port of the given URI scheme from the URI. + + Example: `http://example.org:80/` → `http://example.org/` + +- `UriNormalizer::REMOVE_DOT_SEGMENTS` + + Removes unnecessary dot-segments. Dot-segments in relative-path references are not removed as it would + change the semantics of the URI reference. + + Example: `http://example.org/../a/b/../c/./d.html` → `http://example.org/a/c/d.html` + +- `UriNormalizer::REMOVE_DUPLICATE_SLASHES` + + Paths which include two or more adjacent slashes are converted to one. Webservers usually ignore duplicate slashes + and treat those URIs equivalent. But in theory those URIs do not need to be equivalent. So this normalization + may change the semantics. Encoded slashes (%2F) are not removed. + + Example: `http://example.org//foo///bar.html` → `http://example.org/foo/bar.html` + +- `UriNormalizer::SORT_QUERY_PARAMETERS` + + Sort query parameters with their values in alphabetical order. However, the order of parameters in a URI may be + significant (this is not defined by the standard). So this normalization is not safe and may change the semantics + of the URI. + + Example: `?lang=en&article=fred` → `?article=fred&lang=en` + +### `GuzzleHttp\Psr7\UriNormalizer::isEquivalent` + +`public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS): bool` + +Whether two URIs can be considered equivalent. Both URIs are normalized automatically before comparison with the given +`$normalizations` bitmask. The method also accepts relative URI references and returns true when they are equivalent. +This of course assumes they will be resolved against the same base URI. If this is not the case, determination of +equivalence or difference of relative references does not mean anything. diff --git a/civicrm/vendor/guzzlehttp/psr7/composer.json b/civicrm/vendor/guzzlehttp/psr7/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..b1c5a90ba71569e748dd46146a1cd31dd3509a5a --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/composer.json @@ -0,0 +1,39 @@ +{ + "name": "guzzlehttp/psr7", + "type": "library", + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": ["request", "response", "message", "stream", "http", "uri", "url"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": ["src/functions_include.php"] + }, + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/AppendStream.php b/civicrm/vendor/guzzlehttp/psr7/src/AppendStream.php new file mode 100644 index 0000000000000000000000000000000000000000..23039fd794bbcaaf1fda658301e90d0a4b209c46 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/AppendStream.php @@ -0,0 +1,233 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Reads from multiple streams, one after the other. + * + * This is a read-only stream decorator. + */ +class AppendStream implements StreamInterface +{ + /** @var StreamInterface[] Streams being decorated */ + private $streams = []; + + private $seekable = true; + private $current = 0; + private $pos = 0; + private $detached = false; + + /** + * @param StreamInterface[] $streams Streams to decorate. Each stream must + * be readable. + */ + public function __construct(array $streams = []) + { + foreach ($streams as $stream) { + $this->addStream($stream); + } + } + + public function __toString() + { + try { + $this->rewind(); + return $this->getContents(); + } catch (\Exception $e) { + return ''; + } + } + + /** + * Add a stream to the AppendStream + * + * @param StreamInterface $stream Stream to append. Must be readable. + * + * @throws \InvalidArgumentException if the stream is not readable + */ + public function addStream(StreamInterface $stream) + { + if (!$stream->isReadable()) { + throw new \InvalidArgumentException('Each stream must be readable'); + } + + // The stream is only seekable if all streams are seekable + if (!$stream->isSeekable()) { + $this->seekable = false; + } + + $this->streams[] = $stream; + } + + public function getContents() + { + return copy_to_string($this); + } + + /** + * Closes each attached stream. + * + * {@inheritdoc} + */ + public function close() + { + $this->pos = $this->current = 0; + + foreach ($this->streams as $stream) { + $stream->close(); + } + + $this->streams = []; + } + + /** + * Detaches each attached stream + * + * {@inheritdoc} + */ + public function detach() + { + $this->close(); + $this->detached = true; + } + + public function tell() + { + return $this->pos; + } + + /** + * Tries to calculate the size by adding the size of each stream. + * + * If any of the streams do not return a valid number, then the size of the + * append stream cannot be determined and null is returned. + * + * {@inheritdoc} + */ + public function getSize() + { + $size = 0; + + foreach ($this->streams as $stream) { + $s = $stream->getSize(); + if ($s === null) { + return null; + } + $size += $s; + } + + return $size; + } + + public function eof() + { + return !$this->streams || + ($this->current >= count($this->streams) - 1 && + $this->streams[$this->current]->eof()); + } + + public function rewind() + { + $this->seek(0); + } + + /** + * Attempts to seek to the given position. Only supports SEEK_SET. + * + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET) + { + if (!$this->seekable) { + throw new \RuntimeException('This AppendStream is not seekable'); + } elseif ($whence !== SEEK_SET) { + throw new \RuntimeException('The AppendStream can only seek with SEEK_SET'); + } + + $this->pos = $this->current = 0; + + // Rewind each stream + foreach ($this->streams as $i => $stream) { + try { + $stream->rewind(); + } catch (\Exception $e) { + throw new \RuntimeException('Unable to seek stream ' + . $i . ' of the AppendStream', 0, $e); + } + } + + // Seek to the actual position by reading from each stream + while ($this->pos < $offset && !$this->eof()) { + $result = $this->read(min(8096, $offset - $this->pos)); + if ($result === '') { + break; + } + } + } + + /** + * Reads from all of the appended streams until the length is met or EOF. + * + * {@inheritdoc} + */ + public function read($length) + { + $buffer = ''; + $total = count($this->streams) - 1; + $remaining = $length; + $progressToNext = false; + + while ($remaining > 0) { + + // Progress to the next stream if needed. + if ($progressToNext || $this->streams[$this->current]->eof()) { + $progressToNext = false; + if ($this->current === $total) { + break; + } + $this->current++; + } + + $result = $this->streams[$this->current]->read($remaining); + + // Using a loose comparison here to match on '', false, and null + if ($result == null) { + $progressToNext = true; + continue; + } + + $buffer .= $result; + $remaining = $length - strlen($buffer); + } + + $this->pos += strlen($buffer); + + return $buffer; + } + + public function isReadable() + { + return true; + } + + public function isWritable() + { + return false; + } + + public function isSeekable() + { + return $this->seekable; + } + + public function write($string) + { + throw new \RuntimeException('Cannot write to an AppendStream'); + } + + public function getMetadata($key = null) + { + return $key ? null : []; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/BufferStream.php b/civicrm/vendor/guzzlehttp/psr7/src/BufferStream.php new file mode 100644 index 0000000000000000000000000000000000000000..af4d4c2277786966521deda08580d241ba4cd522 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/BufferStream.php @@ -0,0 +1,137 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Provides a buffer stream that can be written to to fill a buffer, and read + * from to remove bytes from the buffer. + * + * This stream returns a "hwm" metadata value that tells upstream consumers + * what the configured high water mark of the stream is, or the maximum + * preferred size of the buffer. + */ +class BufferStream implements StreamInterface +{ + private $hwm; + private $buffer = ''; + + /** + * @param int $hwm High water mark, representing the preferred maximum + * buffer size. If the size of the buffer exceeds the high + * water mark, then calls to write will continue to succeed + * but will return false to inform writers to slow down + * until the buffer has been drained by reading from it. + */ + public function __construct($hwm = 16384) + { + $this->hwm = $hwm; + } + + public function __toString() + { + return $this->getContents(); + } + + public function getContents() + { + $buffer = $this->buffer; + $this->buffer = ''; + + return $buffer; + } + + public function close() + { + $this->buffer = ''; + } + + public function detach() + { + $this->close(); + } + + public function getSize() + { + return strlen($this->buffer); + } + + public function isReadable() + { + return true; + } + + public function isWritable() + { + return true; + } + + public function isSeekable() + { + return false; + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + throw new \RuntimeException('Cannot seek a BufferStream'); + } + + public function eof() + { + return strlen($this->buffer) === 0; + } + + public function tell() + { + throw new \RuntimeException('Cannot determine the position of a BufferStream'); + } + + /** + * Reads data from the buffer. + */ + public function read($length) + { + $currentLength = strlen($this->buffer); + + if ($length >= $currentLength) { + // No need to slice the buffer because we don't have enough data. + $result = $this->buffer; + $this->buffer = ''; + } else { + // Slice up the result to provide a subset of the buffer. + $result = substr($this->buffer, 0, $length); + $this->buffer = substr($this->buffer, $length); + } + + return $result; + } + + /** + * Writes data to the buffer. + */ + public function write($string) + { + $this->buffer .= $string; + + // TODO: What should happen here? + if (strlen($this->buffer) >= $this->hwm) { + return false; + } + + return strlen($string); + } + + public function getMetadata($key = null) + { + if ($key == 'hwm') { + return $this->hwm; + } + + return $key ? null : []; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/CachingStream.php b/civicrm/vendor/guzzlehttp/psr7/src/CachingStream.php new file mode 100644 index 0000000000000000000000000000000000000000..ed68f0861aabae9e2426129bf9fe234ce95e6654 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/CachingStream.php @@ -0,0 +1,138 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Stream decorator that can cache previously read bytes from a sequentially + * read stream. + */ +class CachingStream implements StreamInterface +{ + use StreamDecoratorTrait; + + /** @var StreamInterface Stream being wrapped */ + private $remoteStream; + + /** @var int Number of bytes to skip reading due to a write on the buffer */ + private $skipReadBytes = 0; + + /** + * We will treat the buffer object as the body of the stream + * + * @param StreamInterface $stream Stream to cache + * @param StreamInterface $target Optionally specify where data is cached + */ + public function __construct( + StreamInterface $stream, + StreamInterface $target = null + ) { + $this->remoteStream = $stream; + $this->stream = $target ?: new Stream(fopen('php://temp', 'r+')); + } + + public function getSize() + { + return max($this->stream->getSize(), $this->remoteStream->getSize()); + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + if ($whence == SEEK_SET) { + $byte = $offset; + } elseif ($whence == SEEK_CUR) { + $byte = $offset + $this->tell(); + } elseif ($whence == SEEK_END) { + $size = $this->remoteStream->getSize(); + if ($size === null) { + $size = $this->cacheEntireStream(); + } + $byte = $size + $offset; + } else { + throw new \InvalidArgumentException('Invalid whence'); + } + + $diff = $byte - $this->stream->getSize(); + + if ($diff > 0) { + // Read the remoteStream until we have read in at least the amount + // of bytes requested, or we reach the end of the file. + while ($diff > 0 && !$this->remoteStream->eof()) { + $this->read($diff); + $diff = $byte - $this->stream->getSize(); + } + } else { + // We can just do a normal seek since we've already seen this byte. + $this->stream->seek($byte); + } + } + + public function read($length) + { + // Perform a regular read on any previously read data from the buffer + $data = $this->stream->read($length); + $remaining = $length - strlen($data); + + // More data was requested so read from the remote stream + if ($remaining) { + // If data was written to the buffer in a position that would have + // been filled from the remote stream, then we must skip bytes on + // the remote stream to emulate overwriting bytes from that + // position. This mimics the behavior of other PHP stream wrappers. + $remoteData = $this->remoteStream->read( + $remaining + $this->skipReadBytes + ); + + if ($this->skipReadBytes) { + $len = strlen($remoteData); + $remoteData = substr($remoteData, $this->skipReadBytes); + $this->skipReadBytes = max(0, $this->skipReadBytes - $len); + } + + $data .= $remoteData; + $this->stream->write($remoteData); + } + + return $data; + } + + public function write($string) + { + // When appending to the end of the currently read stream, you'll want + // to skip bytes from being read from the remote stream to emulate + // other stream wrappers. Basically replacing bytes of data of a fixed + // length. + $overflow = (strlen($string) + $this->tell()) - $this->remoteStream->tell(); + if ($overflow > 0) { + $this->skipReadBytes += $overflow; + } + + return $this->stream->write($string); + } + + public function eof() + { + return $this->stream->eof() && $this->remoteStream->eof(); + } + + /** + * Close both the remote stream and buffer stream + */ + public function close() + { + $this->remoteStream->close() && $this->stream->close(); + } + + private function cacheEntireStream() + { + $target = new FnStream(['write' => 'strlen']); + copy_to_stream($this, $target); + + return $this->tell(); + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/DroppingStream.php b/civicrm/vendor/guzzlehttp/psr7/src/DroppingStream.php new file mode 100644 index 0000000000000000000000000000000000000000..8935c80d7298b82796025998b4451d4cd0a91df2 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/DroppingStream.php @@ -0,0 +1,42 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Stream decorator that begins dropping data once the size of the underlying + * stream becomes too full. + */ +class DroppingStream implements StreamInterface +{ + use StreamDecoratorTrait; + + private $maxLength; + + /** + * @param StreamInterface $stream Underlying stream to decorate. + * @param int $maxLength Maximum size before dropping data. + */ + public function __construct(StreamInterface $stream, $maxLength) + { + $this->stream = $stream; + $this->maxLength = $maxLength; + } + + public function write($string) + { + $diff = $this->maxLength - $this->stream->getSize(); + + // Begin returning 0 when the underlying stream is too large. + if ($diff <= 0) { + return 0; + } + + // Write the stream or a subset of the stream if needed. + if (strlen($string) < $diff) { + return $this->stream->write($string); + } + + return $this->stream->write(substr($string, 0, $diff)); + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/FnStream.php b/civicrm/vendor/guzzlehttp/psr7/src/FnStream.php new file mode 100644 index 0000000000000000000000000000000000000000..cc9b4453f716150dacb93db04289b65a014c9186 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/FnStream.php @@ -0,0 +1,149 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Compose stream implementations based on a hash of functions. + * + * Allows for easy testing and extension of a provided stream without needing + * to create a concrete class for a simple extension point. + */ +class FnStream implements StreamInterface +{ + /** @var array */ + private $methods; + + /** @var array Methods that must be implemented in the given array */ + private static $slots = ['__toString', 'close', 'detach', 'rewind', + 'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write', + 'isReadable', 'read', 'getContents', 'getMetadata']; + + /** + * @param array $methods Hash of method name to a callable. + */ + public function __construct(array $methods) + { + $this->methods = $methods; + + // Create the functions on the class + foreach ($methods as $name => $fn) { + $this->{'_fn_' . $name} = $fn; + } + } + + /** + * Lazily determine which methods are not implemented. + * @throws \BadMethodCallException + */ + public function __get($name) + { + throw new \BadMethodCallException(str_replace('_fn_', '', $name) + . '() is not implemented in the FnStream'); + } + + /** + * The close method is called on the underlying stream only if possible. + */ + public function __destruct() + { + if (isset($this->_fn_close)) { + call_user_func($this->_fn_close); + } + } + + /** + * Adds custom functionality to an underlying stream by intercepting + * specific method calls. + * + * @param StreamInterface $stream Stream to decorate + * @param array $methods Hash of method name to a closure + * + * @return FnStream + */ + public static function decorate(StreamInterface $stream, array $methods) + { + // If any of the required methods were not provided, then simply + // proxy to the decorated stream. + foreach (array_diff(self::$slots, array_keys($methods)) as $diff) { + $methods[$diff] = [$stream, $diff]; + } + + return new self($methods); + } + + public function __toString() + { + return call_user_func($this->_fn___toString); + } + + public function close() + { + return call_user_func($this->_fn_close); + } + + public function detach() + { + return call_user_func($this->_fn_detach); + } + + public function getSize() + { + return call_user_func($this->_fn_getSize); + } + + public function tell() + { + return call_user_func($this->_fn_tell); + } + + public function eof() + { + return call_user_func($this->_fn_eof); + } + + public function isSeekable() + { + return call_user_func($this->_fn_isSeekable); + } + + public function rewind() + { + call_user_func($this->_fn_rewind); + } + + public function seek($offset, $whence = SEEK_SET) + { + call_user_func($this->_fn_seek, $offset, $whence); + } + + public function isWritable() + { + return call_user_func($this->_fn_isWritable); + } + + public function write($string) + { + return call_user_func($this->_fn_write, $string); + } + + public function isReadable() + { + return call_user_func($this->_fn_isReadable); + } + + public function read($length) + { + return call_user_func($this->_fn_read, $length); + } + + public function getContents() + { + return call_user_func($this->_fn_getContents); + } + + public function getMetadata($key = null) + { + return call_user_func($this->_fn_getMetadata, $key); + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/InflateStream.php b/civicrm/vendor/guzzlehttp/psr7/src/InflateStream.php new file mode 100644 index 0000000000000000000000000000000000000000..0051d3fec5a8bdd2d906f85bad4c6120949c7f4b --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -0,0 +1,52 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Uses PHP's zlib.inflate filter to inflate deflate or gzipped content. + * + * This stream decorator skips the first 10 bytes of the given stream to remove + * the gzip header, converts the provided stream to a PHP stream resource, + * then appends the zlib.inflate filter. The stream is then converted back + * to a Guzzle stream resource to be used as a Guzzle stream. + * + * @link http://tools.ietf.org/html/rfc1952 + * @link http://php.net/manual/en/filters.compression.php + */ +class InflateStream implements StreamInterface +{ + use StreamDecoratorTrait; + + public function __construct(StreamInterface $stream) + { + // read the first 10 bytes, ie. gzip header + $header = $stream->read(10); + $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header); + // Skip the header, that is 10 + length of filename + 1 (nil) bytes + $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength); + $resource = StreamWrapper::getResource($stream); + stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ); + $this->stream = new Stream($resource); + } + + /** + * @param StreamInterface $stream + * @param $header + * @return int + */ + private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header) + { + $filename_header_length = 0; + + if (substr(bin2hex($header), 6, 2) === '08') { + // we have a filename, read until nil + $filename_header_length = 1; + while ($stream->read(1) !== chr(0)) { + $filename_header_length++; + } + } + + return $filename_header_length; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/LazyOpenStream.php b/civicrm/vendor/guzzlehttp/psr7/src/LazyOpenStream.php new file mode 100644 index 0000000000000000000000000000000000000000..02cec3af493cf3115dcb7cf8af0fc0a87dfbb0eb --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/LazyOpenStream.php @@ -0,0 +1,39 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Lazily reads or writes to a file that is opened only after an IO operation + * take place on the stream. + */ +class LazyOpenStream implements StreamInterface +{ + use StreamDecoratorTrait; + + /** @var string File to open */ + private $filename; + + /** @var string $mode */ + private $mode; + + /** + * @param string $filename File to lazily open + * @param string $mode fopen mode to use when opening the stream + */ + public function __construct($filename, $mode) + { + $this->filename = $filename; + $this->mode = $mode; + } + + /** + * Creates the underlying stream lazily when required. + * + * @return StreamInterface + */ + protected function createStream() + { + return stream_for(try_fopen($this->filename, $this->mode)); + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/LimitStream.php b/civicrm/vendor/guzzlehttp/psr7/src/LimitStream.php new file mode 100644 index 0000000000000000000000000000000000000000..3c13d4f41155dc292b81be222a4bde4d027a63fd --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/LimitStream.php @@ -0,0 +1,155 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + + +/** + * Decorator used to return only a subset of a stream + */ +class LimitStream implements StreamInterface +{ + use StreamDecoratorTrait; + + /** @var int Offset to start reading from */ + private $offset; + + /** @var int Limit the number of bytes that can be read */ + private $limit; + + /** + * @param StreamInterface $stream Stream to wrap + * @param int $limit Total number of bytes to allow to be read + * from the stream. Pass -1 for no limit. + * @param int $offset Position to seek to before reading (only + * works on seekable streams). + */ + public function __construct( + StreamInterface $stream, + $limit = -1, + $offset = 0 + ) { + $this->stream = $stream; + $this->setLimit($limit); + $this->setOffset($offset); + } + + public function eof() + { + // Always return true if the underlying stream is EOF + if ($this->stream->eof()) { + return true; + } + + // No limit and the underlying stream is not at EOF + if ($this->limit == -1) { + return false; + } + + return $this->stream->tell() >= $this->offset + $this->limit; + } + + /** + * Returns the size of the limited subset of data + * {@inheritdoc} + */ + public function getSize() + { + if (null === ($length = $this->stream->getSize())) { + return null; + } elseif ($this->limit == -1) { + return $length - $this->offset; + } else { + return min($this->limit, $length - $this->offset); + } + } + + /** + * Allow for a bounded seek on the read limited stream + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET) + { + if ($whence !== SEEK_SET || $offset < 0) { + throw new \RuntimeException(sprintf( + 'Cannot seek to offset % with whence %s', + $offset, + $whence + )); + } + + $offset += $this->offset; + + if ($this->limit !== -1) { + if ($offset > $this->offset + $this->limit) { + $offset = $this->offset + $this->limit; + } + } + + $this->stream->seek($offset); + } + + /** + * Give a relative tell() + * {@inheritdoc} + */ + public function tell() + { + return $this->stream->tell() - $this->offset; + } + + /** + * Set the offset to start limiting from + * + * @param int $offset Offset to seek to and begin byte limiting from + * + * @throws \RuntimeException if the stream cannot be seeked. + */ + public function setOffset($offset) + { + $current = $this->stream->tell(); + + if ($current !== $offset) { + // If the stream cannot seek to the offset position, then read to it + if ($this->stream->isSeekable()) { + $this->stream->seek($offset); + } elseif ($current > $offset) { + throw new \RuntimeException("Could not seek to stream offset $offset"); + } else { + $this->stream->read($offset - $current); + } + } + + $this->offset = $offset; + } + + /** + * Set the limit of bytes that the decorator allows to be read from the + * stream. + * + * @param int $limit Number of bytes to allow to be read from the stream. + * Use -1 for no limit. + */ + public function setLimit($limit) + { + $this->limit = $limit; + } + + public function read($length) + { + if ($this->limit == -1) { + return $this->stream->read($length); + } + + // Check if the current position is less than the total allowed + // bytes + original offset + $remaining = ($this->offset + $this->limit) - $this->stream->tell(); + if ($remaining > 0) { + // Only return the amount of requested data, ensuring that the byte + // limit is not exceeded + return $this->stream->read(min($remaining, $length)); + } + + return ''; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/MessageTrait.php b/civicrm/vendor/guzzlehttp/psr7/src/MessageTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..1e4da649ad5279f94c351f3ef95cc64a3cf837e3 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/MessageTrait.php @@ -0,0 +1,183 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Trait implementing functionality common to requests and responses. + */ +trait MessageTrait +{ + /** @var array Map of all registered headers, as original name => array of values */ + private $headers = []; + + /** @var array Map of lowercase header name => original name at registration */ + private $headerNames = []; + + /** @var string */ + private $protocol = '1.1'; + + /** @var StreamInterface */ + private $stream; + + public function getProtocolVersion() + { + return $this->protocol; + } + + public function withProtocolVersion($version) + { + if ($this->protocol === $version) { + return $this; + } + + $new = clone $this; + $new->protocol = $version; + return $new; + } + + public function getHeaders() + { + return $this->headers; + } + + public function hasHeader($header) + { + return isset($this->headerNames[strtolower($header)]); + } + + public function getHeader($header) + { + $header = strtolower($header); + + if (!isset($this->headerNames[$header])) { + return []; + } + + $header = $this->headerNames[$header]; + + return $this->headers[$header]; + } + + public function getHeaderLine($header) + { + return implode(', ', $this->getHeader($header)); + } + + public function withHeader($header, $value) + { + if (!is_array($value)) { + $value = [$value]; + } + + $value = $this->trimHeaderValues($value); + $normalized = strtolower($header); + + $new = clone $this; + if (isset($new->headerNames[$normalized])) { + unset($new->headers[$new->headerNames[$normalized]]); + } + $new->headerNames[$normalized] = $header; + $new->headers[$header] = $value; + + return $new; + } + + public function withAddedHeader($header, $value) + { + if (!is_array($value)) { + $value = [$value]; + } + + $value = $this->trimHeaderValues($value); + $normalized = strtolower($header); + + $new = clone $this; + if (isset($new->headerNames[$normalized])) { + $header = $this->headerNames[$normalized]; + $new->headers[$header] = array_merge($this->headers[$header], $value); + } else { + $new->headerNames[$normalized] = $header; + $new->headers[$header] = $value; + } + + return $new; + } + + public function withoutHeader($header) + { + $normalized = strtolower($header); + + if (!isset($this->headerNames[$normalized])) { + return $this; + } + + $header = $this->headerNames[$normalized]; + + $new = clone $this; + unset($new->headers[$header], $new->headerNames[$normalized]); + + return $new; + } + + public function getBody() + { + if (!$this->stream) { + $this->stream = stream_for(''); + } + + return $this->stream; + } + + public function withBody(StreamInterface $body) + { + if ($body === $this->stream) { + return $this; + } + + $new = clone $this; + $new->stream = $body; + return $new; + } + + private function setHeaders(array $headers) + { + $this->headerNames = $this->headers = []; + foreach ($headers as $header => $value) { + if (!is_array($value)) { + $value = [$value]; + } + + $value = $this->trimHeaderValues($value); + $normalized = strtolower($header); + if (isset($this->headerNames[$normalized])) { + $header = $this->headerNames[$normalized]; + $this->headers[$header] = array_merge($this->headers[$header], $value); + } else { + $this->headerNames[$normalized] = $header; + $this->headers[$header] = $value; + } + } + } + + /** + * Trims whitespace from the header values. + * + * Spaces and tabs ought to be excluded by parsers when extracting the field value from a header field. + * + * header-field = field-name ":" OWS field-value OWS + * OWS = *( SP / HTAB ) + * + * @param string[] $values Header values + * + * @return string[] Trimmed header values + * + * @see https://tools.ietf.org/html/rfc7230#section-3.2.4 + */ + private function trimHeaderValues(array $values) + { + return array_map(function ($value) { + return trim($value, " \t"); + }, $values); + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/MultipartStream.php b/civicrm/vendor/guzzlehttp/psr7/src/MultipartStream.php new file mode 100644 index 0000000000000000000000000000000000000000..c0fd584f759909f1491fdc316698fcbc6f92b365 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/MultipartStream.php @@ -0,0 +1,153 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Stream that when read returns bytes for a streaming multipart or + * multipart/form-data stream. + */ +class MultipartStream implements StreamInterface +{ + use StreamDecoratorTrait; + + private $boundary; + + /** + * @param array $elements Array of associative arrays, each containing a + * required "name" key mapping to the form field, + * name, a required "contents" key mapping to a + * StreamInterface/resource/string, an optional + * "headers" associative array of custom headers, + * and an optional "filename" key mapping to a + * string to send as the filename in the part. + * @param string $boundary You can optionally provide a specific boundary + * + * @throws \InvalidArgumentException + */ + public function __construct(array $elements = [], $boundary = null) + { + $this->boundary = $boundary ?: sha1(uniqid('', true)); + $this->stream = $this->createStream($elements); + } + + /** + * Get the boundary + * + * @return string + */ + public function getBoundary() + { + return $this->boundary; + } + + public function isWritable() + { + return false; + } + + /** + * Get the headers needed before transferring the content of a POST file + */ + private function getHeaders(array $headers) + { + $str = ''; + foreach ($headers as $key => $value) { + $str .= "{$key}: {$value}\r\n"; + } + + return "--{$this->boundary}\r\n" . trim($str) . "\r\n\r\n"; + } + + /** + * Create the aggregate stream that will be used to upload the POST data + */ + protected function createStream(array $elements) + { + $stream = new AppendStream(); + + foreach ($elements as $element) { + $this->addElement($stream, $element); + } + + // Add the trailing boundary with CRLF + $stream->addStream(stream_for("--{$this->boundary}--\r\n")); + + return $stream; + } + + private function addElement(AppendStream $stream, array $element) + { + foreach (['contents', 'name'] as $key) { + if (!array_key_exists($key, $element)) { + throw new \InvalidArgumentException("A '{$key}' key is required"); + } + } + + $element['contents'] = stream_for($element['contents']); + + if (empty($element['filename'])) { + $uri = $element['contents']->getMetadata('uri'); + if (substr($uri, 0, 6) !== 'php://') { + $element['filename'] = $uri; + } + } + + list($body, $headers) = $this->createElement( + $element['name'], + $element['contents'], + isset($element['filename']) ? $element['filename'] : null, + isset($element['headers']) ? $element['headers'] : [] + ); + + $stream->addStream(stream_for($this->getHeaders($headers))); + $stream->addStream($body); + $stream->addStream(stream_for("\r\n")); + } + + /** + * @return array + */ + private function createElement($name, StreamInterface $stream, $filename, array $headers) + { + // Set a default content-disposition header if one was no provided + $disposition = $this->getHeader($headers, 'content-disposition'); + if (!$disposition) { + $headers['Content-Disposition'] = ($filename === '0' || $filename) + ? sprintf('form-data; name="%s"; filename="%s"', + $name, + basename($filename)) + : "form-data; name=\"{$name}\""; + } + + // Set a default content-length header if one was no provided + $length = $this->getHeader($headers, 'content-length'); + if (!$length) { + if ($length = $stream->getSize()) { + $headers['Content-Length'] = (string) $length; + } + } + + // Set a default Content-Type if one was not supplied + $type = $this->getHeader($headers, 'content-type'); + if (!$type && ($filename === '0' || $filename)) { + if ($type = mimetype_from_filename($filename)) { + $headers['Content-Type'] = $type; + } + } + + return [$stream, $headers]; + } + + private function getHeader(array $headers, $key) + { + $lowercaseHeader = strtolower($key); + foreach ($headers as $k => $v) { + if (strtolower($k) === $lowercaseHeader) { + return $v; + } + } + + return null; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/NoSeekStream.php b/civicrm/vendor/guzzlehttp/psr7/src/NoSeekStream.php new file mode 100644 index 0000000000000000000000000000000000000000..233221805ec619a752486e34251555f53987f410 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/NoSeekStream.php @@ -0,0 +1,22 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Stream decorator that prevents a stream from being seeked + */ +class NoSeekStream implements StreamInterface +{ + use StreamDecoratorTrait; + + public function seek($offset, $whence = SEEK_SET) + { + throw new \RuntimeException('Cannot seek a NoSeekStream'); + } + + public function isSeekable() + { + return false; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/PumpStream.php b/civicrm/vendor/guzzlehttp/psr7/src/PumpStream.php new file mode 100644 index 0000000000000000000000000000000000000000..ffb5440da16585076adb6aea04c281eb9fd492fc --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/PumpStream.php @@ -0,0 +1,165 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Provides a read only stream that pumps data from a PHP callable. + * + * When invoking the provided callable, the PumpStream will pass the amount of + * data requested to read to the callable. The callable can choose to ignore + * this value and return fewer or more bytes than requested. Any extra data + * returned by the provided callable is buffered internally until drained using + * the read() function of the PumpStream. The provided callable MUST return + * false when there is no more data to read. + */ +class PumpStream implements StreamInterface +{ + /** @var callable */ + private $source; + + /** @var int */ + private $size; + + /** @var int */ + private $tellPos = 0; + + /** @var array */ + private $metadata; + + /** @var BufferStream */ + private $buffer; + + /** + * @param callable $source Source of the stream data. The callable MAY + * accept an integer argument used to control the + * amount of data to return. The callable MUST + * return a string when called, or false on error + * or EOF. + * @param array $options Stream options: + * - metadata: Hash of metadata to use with stream. + * - size: Size of the stream, if known. + */ + public function __construct(callable $source, array $options = []) + { + $this->source = $source; + $this->size = isset($options['size']) ? $options['size'] : null; + $this->metadata = isset($options['metadata']) ? $options['metadata'] : []; + $this->buffer = new BufferStream(); + } + + public function __toString() + { + try { + return copy_to_string($this); + } catch (\Exception $e) { + return ''; + } + } + + public function close() + { + $this->detach(); + } + + public function detach() + { + $this->tellPos = false; + $this->source = null; + } + + public function getSize() + { + return $this->size; + } + + public function tell() + { + return $this->tellPos; + } + + public function eof() + { + return !$this->source; + } + + public function isSeekable() + { + return false; + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + throw new \RuntimeException('Cannot seek a PumpStream'); + } + + public function isWritable() + { + return false; + } + + public function write($string) + { + throw new \RuntimeException('Cannot write to a PumpStream'); + } + + public function isReadable() + { + return true; + } + + public function read($length) + { + $data = $this->buffer->read($length); + $readLen = strlen($data); + $this->tellPos += $readLen; + $remaining = $length - $readLen; + + if ($remaining) { + $this->pump($remaining); + $data .= $this->buffer->read($remaining); + $this->tellPos += strlen($data) - $readLen; + } + + return $data; + } + + public function getContents() + { + $result = ''; + while (!$this->eof()) { + $result .= $this->read(1000000); + } + + return $result; + } + + public function getMetadata($key = null) + { + if (!$key) { + return $this->metadata; + } + + return isset($this->metadata[$key]) ? $this->metadata[$key] : null; + } + + private function pump($length) + { + if ($this->source) { + do { + $data = call_user_func($this->source, $length); + if ($data === false || $data === null) { + $this->source = null; + return; + } + $this->buffer->write($data); + $length -= strlen($data); + } while ($length > 0); + } + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Request.php b/civicrm/vendor/guzzlehttp/psr7/src/Request.php new file mode 100644 index 0000000000000000000000000000000000000000..08285484da22d738e3b7bc2781ef06e81d7f6b19 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/Request.php @@ -0,0 +1,142 @@ +<?php +namespace GuzzleHttp\Psr7; + +use InvalidArgumentException; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\StreamInterface; +use Psr\Http\Message\UriInterface; + +/** + * PSR-7 request implementation. + */ +class Request implements RequestInterface +{ + use MessageTrait; + + /** @var string */ + private $method; + + /** @var null|string */ + private $requestTarget; + + /** @var UriInterface */ + private $uri; + + /** + * @param string $method HTTP method + * @param string|UriInterface $uri URI + * @param array $headers Request headers + * @param string|null|resource|StreamInterface $body Request body + * @param string $version Protocol version + */ + public function __construct( + $method, + $uri, + array $headers = [], + $body = null, + $version = '1.1' + ) { + if (!($uri instanceof UriInterface)) { + $uri = new Uri($uri); + } + + $this->method = strtoupper($method); + $this->uri = $uri; + $this->setHeaders($headers); + $this->protocol = $version; + + if (!$this->hasHeader('Host')) { + $this->updateHostFromUri(); + } + + if ($body !== '' && $body !== null) { + $this->stream = stream_for($body); + } + } + + public function getRequestTarget() + { + if ($this->requestTarget !== null) { + return $this->requestTarget; + } + + $target = $this->uri->getPath(); + if ($target == '') { + $target = '/'; + } + if ($this->uri->getQuery() != '') { + $target .= '?' . $this->uri->getQuery(); + } + + return $target; + } + + public function withRequestTarget($requestTarget) + { + if (preg_match('#\s#', $requestTarget)) { + throw new InvalidArgumentException( + 'Invalid request target provided; cannot contain whitespace' + ); + } + + $new = clone $this; + $new->requestTarget = $requestTarget; + return $new; + } + + public function getMethod() + { + return $this->method; + } + + public function withMethod($method) + { + $new = clone $this; + $new->method = strtoupper($method); + return $new; + } + + public function getUri() + { + return $this->uri; + } + + public function withUri(UriInterface $uri, $preserveHost = false) + { + if ($uri === $this->uri) { + return $this; + } + + $new = clone $this; + $new->uri = $uri; + + if (!$preserveHost) { + $new->updateHostFromUri(); + } + + return $new; + } + + private function updateHostFromUri() + { + $host = $this->uri->getHost(); + + if ($host == '') { + return; + } + + if (($port = $this->uri->getPort()) !== null) { + $host .= ':' . $port; + } + + if (isset($this->headerNames['host'])) { + $header = $this->headerNames['host']; + } else { + $header = 'Host'; + $this->headerNames['host'] = 'Host'; + } + // Ensure Host is the first header. + // See: http://tools.ietf.org/html/rfc7230#section-5.4 + $this->headers = [$header => [$host]] + $this->headers; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Response.php b/civicrm/vendor/guzzlehttp/psr7/src/Response.php new file mode 100644 index 0000000000000000000000000000000000000000..2830c6c9ee10229c613e94f7b4360d6796c3e752 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/Response.php @@ -0,0 +1,132 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\StreamInterface; + +/** + * PSR-7 response implementation. + */ +class Response implements ResponseInterface +{ + use MessageTrait; + + /** @var array Map of standard HTTP status code/reason phrases */ + private static $phrases = [ + 100 => 'Continue', + 101 => 'Switching Protocols', + 102 => 'Processing', + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + 207 => 'Multi-status', + 208 => 'Already Reported', + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 306 => 'Switch Proxy', + 307 => 'Temporary Redirect', + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Time-out', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Large', + 415 => 'Unsupported Media Type', + 416 => 'Requested range not satisfiable', + 417 => 'Expectation Failed', + 418 => 'I\'m a teapot', + 422 => 'Unprocessable Entity', + 423 => 'Locked', + 424 => 'Failed Dependency', + 425 => 'Unordered Collection', + 426 => 'Upgrade Required', + 428 => 'Precondition Required', + 429 => 'Too Many Requests', + 431 => 'Request Header Fields Too Large', + 451 => 'Unavailable For Legal Reasons', + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Time-out', + 505 => 'HTTP Version not supported', + 506 => 'Variant Also Negotiates', + 507 => 'Insufficient Storage', + 508 => 'Loop Detected', + 511 => 'Network Authentication Required', + ]; + + /** @var string */ + private $reasonPhrase = ''; + + /** @var int */ + private $statusCode = 200; + + /** + * @param int $status Status code + * @param array $headers Response headers + * @param string|null|resource|StreamInterface $body Response body + * @param string $version Protocol version + * @param string|null $reason Reason phrase (when empty a default will be used based on the status code) + */ + public function __construct( + $status = 200, + array $headers = [], + $body = null, + $version = '1.1', + $reason = null + ) { + $this->statusCode = (int) $status; + + if ($body !== '' && $body !== null) { + $this->stream = stream_for($body); + } + + $this->setHeaders($headers); + if ($reason == '' && isset(self::$phrases[$this->statusCode])) { + $this->reasonPhrase = self::$phrases[$this->statusCode]; + } else { + $this->reasonPhrase = (string) $reason; + } + + $this->protocol = $version; + } + + public function getStatusCode() + { + return $this->statusCode; + } + + public function getReasonPhrase() + { + return $this->reasonPhrase; + } + + public function withStatus($code, $reasonPhrase = '') + { + $new = clone $this; + $new->statusCode = (int) $code; + if ($reasonPhrase == '' && isset(self::$phrases[$new->statusCode])) { + $reasonPhrase = self::$phrases[$new->statusCode]; + } + $new->reasonPhrase = $reasonPhrase; + return $new; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/ServerRequest.php b/civicrm/vendor/guzzlehttp/psr7/src/ServerRequest.php new file mode 100644 index 0000000000000000000000000000000000000000..575aab8489a60279366f1b1cca29d93ad77287cd --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/ServerRequest.php @@ -0,0 +1,358 @@ +<?php + +namespace GuzzleHttp\Psr7; + +use InvalidArgumentException; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Message\UriInterface; +use Psr\Http\Message\StreamInterface; +use Psr\Http\Message\UploadedFileInterface; + +/** + * Server-side HTTP request + * + * Extends the Request definition to add methods for accessing incoming data, + * specifically server parameters, cookies, matched path parameters, query + * string arguments, body parameters, and upload file information. + * + * "Attributes" are discovered via decomposing the request (and usually + * specifically the URI path), and typically will be injected by the application. + * + * Requests are considered immutable; all methods that might change state are + * implemented such that they retain the internal state of the current + * message and return a new instance that contains the changed state. + */ +class ServerRequest extends Request implements ServerRequestInterface +{ + /** + * @var array + */ + private $attributes = []; + + /** + * @var array + */ + private $cookieParams = []; + + /** + * @var null|array|object + */ + private $parsedBody; + + /** + * @var array + */ + private $queryParams = []; + + /** + * @var array + */ + private $serverParams; + + /** + * @var array + */ + private $uploadedFiles = []; + + /** + * @param string $method HTTP method + * @param string|UriInterface $uri URI + * @param array $headers Request headers + * @param string|null|resource|StreamInterface $body Request body + * @param string $version Protocol version + * @param array $serverParams Typically the $_SERVER superglobal + */ + public function __construct( + $method, + $uri, + array $headers = [], + $body = null, + $version = '1.1', + array $serverParams = [] + ) { + $this->serverParams = $serverParams; + + parent::__construct($method, $uri, $headers, $body, $version); + } + + /** + * Return an UploadedFile instance array. + * + * @param array $files A array which respect $_FILES structure + * @throws InvalidArgumentException for unrecognized values + * @return array + */ + public static function normalizeFiles(array $files) + { + $normalized = []; + + foreach ($files as $key => $value) { + if ($value instanceof UploadedFileInterface) { + $normalized[$key] = $value; + } elseif (is_array($value) && isset($value['tmp_name'])) { + $normalized[$key] = self::createUploadedFileFromSpec($value); + } elseif (is_array($value)) { + $normalized[$key] = self::normalizeFiles($value); + continue; + } else { + throw new InvalidArgumentException('Invalid value in files specification'); + } + } + + return $normalized; + } + + /** + * Create and return an UploadedFile instance from a $_FILES specification. + * + * If the specification represents an array of values, this method will + * delegate to normalizeNestedFileSpec() and return that return value. + * + * @param array $value $_FILES struct + * @return array|UploadedFileInterface + */ + private static function createUploadedFileFromSpec(array $value) + { + if (is_array($value['tmp_name'])) { + return self::normalizeNestedFileSpec($value); + } + + return new UploadedFile( + $value['tmp_name'], + (int) $value['size'], + (int) $value['error'], + $value['name'], + $value['type'] + ); + } + + /** + * Normalize an array of file specifications. + * + * Loops through all nested files and returns a normalized array of + * UploadedFileInterface instances. + * + * @param array $files + * @return UploadedFileInterface[] + */ + private static function normalizeNestedFileSpec(array $files = []) + { + $normalizedFiles = []; + + foreach (array_keys($files['tmp_name']) as $key) { + $spec = [ + 'tmp_name' => $files['tmp_name'][$key], + 'size' => $files['size'][$key], + 'error' => $files['error'][$key], + 'name' => $files['name'][$key], + 'type' => $files['type'][$key], + ]; + $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec); + } + + return $normalizedFiles; + } + + /** + * Return a ServerRequest populated with superglobals: + * $_GET + * $_POST + * $_COOKIE + * $_FILES + * $_SERVER + * + * @return ServerRequestInterface + */ + public static function fromGlobals() + { + $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; + $headers = function_exists('getallheaders') ? getallheaders() : []; + $uri = self::getUriFromGlobals(); + $body = new LazyOpenStream('php://input', 'r+'); + $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1'; + + $serverRequest = new ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER); + + return $serverRequest + ->withCookieParams($_COOKIE) + ->withQueryParams($_GET) + ->withParsedBody($_POST) + ->withUploadedFiles(self::normalizeFiles($_FILES)); + } + + /** + * Get a Uri populated with values from $_SERVER. + * + * @return UriInterface + */ + public static function getUriFromGlobals() { + $uri = new Uri(''); + + $uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http'); + + $hasPort = false; + if (isset($_SERVER['HTTP_HOST'])) { + $hostHeaderParts = explode(':', $_SERVER['HTTP_HOST']); + $uri = $uri->withHost($hostHeaderParts[0]); + if (isset($hostHeaderParts[1])) { + $hasPort = true; + $uri = $uri->withPort($hostHeaderParts[1]); + } + } elseif (isset($_SERVER['SERVER_NAME'])) { + $uri = $uri->withHost($_SERVER['SERVER_NAME']); + } elseif (isset($_SERVER['SERVER_ADDR'])) { + $uri = $uri->withHost($_SERVER['SERVER_ADDR']); + } + + if (!$hasPort && isset($_SERVER['SERVER_PORT'])) { + $uri = $uri->withPort($_SERVER['SERVER_PORT']); + } + + $hasQuery = false; + if (isset($_SERVER['REQUEST_URI'])) { + $requestUriParts = explode('?', $_SERVER['REQUEST_URI']); + $uri = $uri->withPath($requestUriParts[0]); + if (isset($requestUriParts[1])) { + $hasQuery = true; + $uri = $uri->withQuery($requestUriParts[1]); + } + } + + if (!$hasQuery && isset($_SERVER['QUERY_STRING'])) { + $uri = $uri->withQuery($_SERVER['QUERY_STRING']); + } + + return $uri; + } + + + /** + * {@inheritdoc} + */ + public function getServerParams() + { + return $this->serverParams; + } + + /** + * {@inheritdoc} + */ + public function getUploadedFiles() + { + return $this->uploadedFiles; + } + + /** + * {@inheritdoc} + */ + public function withUploadedFiles(array $uploadedFiles) + { + $new = clone $this; + $new->uploadedFiles = $uploadedFiles; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function getCookieParams() + { + return $this->cookieParams; + } + + /** + * {@inheritdoc} + */ + public function withCookieParams(array $cookies) + { + $new = clone $this; + $new->cookieParams = $cookies; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function getQueryParams() + { + return $this->queryParams; + } + + /** + * {@inheritdoc} + */ + public function withQueryParams(array $query) + { + $new = clone $this; + $new->queryParams = $query; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function getParsedBody() + { + return $this->parsedBody; + } + + /** + * {@inheritdoc} + */ + public function withParsedBody($data) + { + $new = clone $this; + $new->parsedBody = $data; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function getAttributes() + { + return $this->attributes; + } + + /** + * {@inheritdoc} + */ + public function getAttribute($attribute, $default = null) + { + if (false === array_key_exists($attribute, $this->attributes)) { + return $default; + } + + return $this->attributes[$attribute]; + } + + /** + * {@inheritdoc} + */ + public function withAttribute($attribute, $value) + { + $new = clone $this; + $new->attributes[$attribute] = $value; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function withoutAttribute($attribute) + { + if (false === array_key_exists($attribute, $this->attributes)) { + return $this; + } + + $new = clone $this; + unset($new->attributes[$attribute]); + + return $new; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Stream.php b/civicrm/vendor/guzzlehttp/psr7/src/Stream.php new file mode 100644 index 0000000000000000000000000000000000000000..e33662879ffbac5ee1fc971f1dc17fdedfd8979f --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/Stream.php @@ -0,0 +1,257 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * PHP stream implementation. + * + * @var $stream + */ +class Stream implements StreamInterface +{ + private $stream; + private $size; + private $seekable; + private $readable; + private $writable; + private $uri; + private $customMetadata; + + /** @var array Hash of readable and writable stream types */ + private static $readWriteHash = [ + 'read' => [ + 'r' => true, 'w+' => true, 'r+' => true, 'x+' => true, 'c+' => true, + 'rb' => true, 'w+b' => true, 'r+b' => true, 'x+b' => true, + 'c+b' => true, 'rt' => true, 'w+t' => true, 'r+t' => true, + 'x+t' => true, 'c+t' => true, 'a+' => true + ], + 'write' => [ + 'w' => true, 'w+' => true, 'rw' => true, 'r+' => true, 'x+' => true, + 'c+' => true, 'wb' => true, 'w+b' => true, 'r+b' => true, + 'x+b' => true, 'c+b' => true, 'w+t' => true, 'r+t' => true, + 'x+t' => true, 'c+t' => true, 'a' => true, 'a+' => true + ] + ]; + + /** + * This constructor accepts an associative array of options. + * + * - size: (int) If a read stream would otherwise have an indeterminate + * size, but the size is known due to foreknowledge, then you can + * provide that size, in bytes. + * - metadata: (array) Any additional metadata to return when the metadata + * of the stream is accessed. + * + * @param resource $stream Stream resource to wrap. + * @param array $options Associative array of options. + * + * @throws \InvalidArgumentException if the stream is not a stream resource + */ + public function __construct($stream, $options = []) + { + if (!is_resource($stream)) { + throw new \InvalidArgumentException('Stream must be a resource'); + } + + if (isset($options['size'])) { + $this->size = $options['size']; + } + + $this->customMetadata = isset($options['metadata']) + ? $options['metadata'] + : []; + + $this->stream = $stream; + $meta = stream_get_meta_data($this->stream); + $this->seekable = $meta['seekable']; + $this->readable = isset(self::$readWriteHash['read'][$meta['mode']]); + $this->writable = isset(self::$readWriteHash['write'][$meta['mode']]); + $this->uri = $this->getMetadata('uri'); + } + + public function __get($name) + { + if ($name == 'stream') { + throw new \RuntimeException('The stream is detached'); + } + + throw new \BadMethodCallException('No value for ' . $name); + } + + /** + * Closes the stream when the destructed + */ + public function __destruct() + { + $this->close(); + } + + public function __toString() + { + try { + $this->seek(0); + return (string) stream_get_contents($this->stream); + } catch (\Exception $e) { + return ''; + } + } + + public function getContents() + { + $contents = stream_get_contents($this->stream); + + if ($contents === false) { + throw new \RuntimeException('Unable to read stream contents'); + } + + return $contents; + } + + public function close() + { + if (isset($this->stream)) { + if (is_resource($this->stream)) { + fclose($this->stream); + } + $this->detach(); + } + } + + public function detach() + { + if (!isset($this->stream)) { + return null; + } + + $result = $this->stream; + unset($this->stream); + $this->size = $this->uri = null; + $this->readable = $this->writable = $this->seekable = false; + + return $result; + } + + public function getSize() + { + if ($this->size !== null) { + return $this->size; + } + + if (!isset($this->stream)) { + return null; + } + + // Clear the stat cache if the stream has a URI + if ($this->uri) { + clearstatcache(true, $this->uri); + } + + $stats = fstat($this->stream); + if (isset($stats['size'])) { + $this->size = $stats['size']; + return $this->size; + } + + return null; + } + + public function isReadable() + { + return $this->readable; + } + + public function isWritable() + { + return $this->writable; + } + + public function isSeekable() + { + return $this->seekable; + } + + public function eof() + { + return !$this->stream || feof($this->stream); + } + + public function tell() + { + $result = ftell($this->stream); + + if ($result === false) { + throw new \RuntimeException('Unable to determine stream position'); + } + + return $result; + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + if (!$this->seekable) { + throw new \RuntimeException('Stream is not seekable'); + } elseif (fseek($this->stream, $offset, $whence) === -1) { + throw new \RuntimeException('Unable to seek to stream position ' + . $offset . ' with whence ' . var_export($whence, true)); + } + } + + public function read($length) + { + if (!$this->readable) { + throw new \RuntimeException('Cannot read from non-readable stream'); + } + if ($length < 0) { + throw new \RuntimeException('Length parameter cannot be negative'); + } + + if (0 === $length) { + return ''; + } + + $string = fread($this->stream, $length); + if (false === $string) { + throw new \RuntimeException('Unable to read from stream'); + } + + return $string; + } + + public function write($string) + { + if (!$this->writable) { + throw new \RuntimeException('Cannot write to a non-writable stream'); + } + + // We can't know the size after writing anything + $this->size = null; + $result = fwrite($this->stream, $string); + + if ($result === false) { + throw new \RuntimeException('Unable to write to stream'); + } + + return $result; + } + + public function getMetadata($key = null) + { + if (!isset($this->stream)) { + return $key ? null : []; + } elseif (!$key) { + return $this->customMetadata + stream_get_meta_data($this->stream); + } elseif (isset($this->customMetadata[$key])) { + return $this->customMetadata[$key]; + } + + $meta = stream_get_meta_data($this->stream); + + return isset($meta[$key]) ? $meta[$key] : null; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/civicrm/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..daec6f52ea740fe3312af92b63947bd9738168eb --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php @@ -0,0 +1,149 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Stream decorator trait + * @property StreamInterface stream + */ +trait StreamDecoratorTrait +{ + /** + * @param StreamInterface $stream Stream to decorate + */ + public function __construct(StreamInterface $stream) + { + $this->stream = $stream; + } + + /** + * Magic method used to create a new stream if streams are not added in + * the constructor of a decorator (e.g., LazyOpenStream). + * + * @param string $name Name of the property (allows "stream" only). + * + * @return StreamInterface + */ + public function __get($name) + { + if ($name == 'stream') { + $this->stream = $this->createStream(); + return $this->stream; + } + + throw new \UnexpectedValueException("$name not found on class"); + } + + public function __toString() + { + try { + if ($this->isSeekable()) { + $this->seek(0); + } + return $this->getContents(); + } catch (\Exception $e) { + // Really, PHP? https://bugs.php.net/bug.php?id=53648 + trigger_error('StreamDecorator::__toString exception: ' + . (string) $e, E_USER_ERROR); + return ''; + } + } + + public function getContents() + { + return copy_to_string($this); + } + + /** + * Allow decorators to implement custom methods + * + * @param string $method Missing method name + * @param array $args Method arguments + * + * @return mixed + */ + public function __call($method, array $args) + { + $result = call_user_func_array([$this->stream, $method], $args); + + // Always return the wrapped object if the result is a return $this + return $result === $this->stream ? $this : $result; + } + + public function close() + { + $this->stream->close(); + } + + public function getMetadata($key = null) + { + return $this->stream->getMetadata($key); + } + + public function detach() + { + return $this->stream->detach(); + } + + public function getSize() + { + return $this->stream->getSize(); + } + + public function eof() + { + return $this->stream->eof(); + } + + public function tell() + { + return $this->stream->tell(); + } + + public function isReadable() + { + return $this->stream->isReadable(); + } + + public function isWritable() + { + return $this->stream->isWritable(); + } + + public function isSeekable() + { + return $this->stream->isSeekable(); + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + $this->stream->seek($offset, $whence); + } + + public function read($length) + { + return $this->stream->read($length); + } + + public function write($string) + { + return $this->stream->write($string); + } + + /** + * Implement in subclasses to dynamically create streams when requested. + * + * @return StreamInterface + * @throws \BadMethodCallException + */ + protected function createStream() + { + throw new \BadMethodCallException('Not implemented'); + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/StreamWrapper.php b/civicrm/vendor/guzzlehttp/psr7/src/StreamWrapper.php new file mode 100644 index 0000000000000000000000000000000000000000..cf7b2232e463e21dc3eb6de440fdef70c6d057e7 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/StreamWrapper.php @@ -0,0 +1,121 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\StreamInterface; + +/** + * Converts Guzzle streams into PHP stream resources. + */ +class StreamWrapper +{ + /** @var resource */ + public $context; + + /** @var StreamInterface */ + private $stream; + + /** @var string r, r+, or w */ + private $mode; + + /** + * Returns a resource representing the stream. + * + * @param StreamInterface $stream The stream to get a resource for + * + * @return resource + * @throws \InvalidArgumentException if stream is not readable or writable + */ + public static function getResource(StreamInterface $stream) + { + self::register(); + + if ($stream->isReadable()) { + $mode = $stream->isWritable() ? 'r+' : 'r'; + } elseif ($stream->isWritable()) { + $mode = 'w'; + } else { + throw new \InvalidArgumentException('The stream must be readable, ' + . 'writable, or both.'); + } + + return fopen('guzzle://stream', $mode, null, stream_context_create([ + 'guzzle' => ['stream' => $stream] + ])); + } + + /** + * Registers the stream wrapper if needed + */ + public static function register() + { + if (!in_array('guzzle', stream_get_wrappers())) { + stream_wrapper_register('guzzle', __CLASS__); + } + } + + public function stream_open($path, $mode, $options, &$opened_path) + { + $options = stream_context_get_options($this->context); + + if (!isset($options['guzzle']['stream'])) { + return false; + } + + $this->mode = $mode; + $this->stream = $options['guzzle']['stream']; + + return true; + } + + public function stream_read($count) + { + return $this->stream->read($count); + } + + public function stream_write($data) + { + return (int) $this->stream->write($data); + } + + public function stream_tell() + { + return $this->stream->tell(); + } + + public function stream_eof() + { + return $this->stream->eof(); + } + + public function stream_seek($offset, $whence) + { + $this->stream->seek($offset, $whence); + + return true; + } + + public function stream_stat() + { + static $modeMap = [ + 'r' => 33060, + 'r+' => 33206, + 'w' => 33188 + ]; + + return [ + 'dev' => 0, + 'ino' => 0, + 'mode' => $modeMap[$this->mode], + 'nlink' => 0, + 'uid' => 0, + 'gid' => 0, + 'rdev' => 0, + 'size' => $this->stream->getSize() ?: 0, + 'atime' => 0, + 'mtime' => 0, + 'ctime' => 0, + 'blksize' => 0, + 'blocks' => 0 + ]; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/UploadedFile.php b/civicrm/vendor/guzzlehttp/psr7/src/UploadedFile.php new file mode 100644 index 0000000000000000000000000000000000000000..e62bd5c807698e37f2eb6e3c9a351aa9da18d05e --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/UploadedFile.php @@ -0,0 +1,316 @@ +<?php +namespace GuzzleHttp\Psr7; + +use InvalidArgumentException; +use Psr\Http\Message\StreamInterface; +use Psr\Http\Message\UploadedFileInterface; +use RuntimeException; + +class UploadedFile implements UploadedFileInterface +{ + /** + * @var int[] + */ + private static $errors = [ + UPLOAD_ERR_OK, + UPLOAD_ERR_INI_SIZE, + UPLOAD_ERR_FORM_SIZE, + UPLOAD_ERR_PARTIAL, + UPLOAD_ERR_NO_FILE, + UPLOAD_ERR_NO_TMP_DIR, + UPLOAD_ERR_CANT_WRITE, + UPLOAD_ERR_EXTENSION, + ]; + + /** + * @var string + */ + private $clientFilename; + + /** + * @var string + */ + private $clientMediaType; + + /** + * @var int + */ + private $error; + + /** + * @var null|string + */ + private $file; + + /** + * @var bool + */ + private $moved = false; + + /** + * @var int + */ + private $size; + + /** + * @var StreamInterface|null + */ + private $stream; + + /** + * @param StreamInterface|string|resource $streamOrFile + * @param int $size + * @param int $errorStatus + * @param string|null $clientFilename + * @param string|null $clientMediaType + */ + public function __construct( + $streamOrFile, + $size, + $errorStatus, + $clientFilename = null, + $clientMediaType = null + ) { + $this->setError($errorStatus); + $this->setSize($size); + $this->setClientFilename($clientFilename); + $this->setClientMediaType($clientMediaType); + + if ($this->isOk()) { + $this->setStreamOrFile($streamOrFile); + } + } + + /** + * Depending on the value set file or stream variable + * + * @param mixed $streamOrFile + * @throws InvalidArgumentException + */ + private function setStreamOrFile($streamOrFile) + { + if (is_string($streamOrFile)) { + $this->file = $streamOrFile; + } elseif (is_resource($streamOrFile)) { + $this->stream = new Stream($streamOrFile); + } elseif ($streamOrFile instanceof StreamInterface) { + $this->stream = $streamOrFile; + } else { + throw new InvalidArgumentException( + 'Invalid stream or file provided for UploadedFile' + ); + } + } + + /** + * @param int $error + * @throws InvalidArgumentException + */ + private function setError($error) + { + if (false === is_int($error)) { + throw new InvalidArgumentException( + 'Upload file error status must be an integer' + ); + } + + if (false === in_array($error, UploadedFile::$errors)) { + throw new InvalidArgumentException( + 'Invalid error status for UploadedFile' + ); + } + + $this->error = $error; + } + + /** + * @param int $size + * @throws InvalidArgumentException + */ + private function setSize($size) + { + if (false === is_int($size)) { + throw new InvalidArgumentException( + 'Upload file size must be an integer' + ); + } + + $this->size = $size; + } + + /** + * @param mixed $param + * @return boolean + */ + private function isStringOrNull($param) + { + return in_array(gettype($param), ['string', 'NULL']); + } + + /** + * @param mixed $param + * @return boolean + */ + private function isStringNotEmpty($param) + { + return is_string($param) && false === empty($param); + } + + /** + * @param string|null $clientFilename + * @throws InvalidArgumentException + */ + private function setClientFilename($clientFilename) + { + if (false === $this->isStringOrNull($clientFilename)) { + throw new InvalidArgumentException( + 'Upload file client filename must be a string or null' + ); + } + + $this->clientFilename = $clientFilename; + } + + /** + * @param string|null $clientMediaType + * @throws InvalidArgumentException + */ + private function setClientMediaType($clientMediaType) + { + if (false === $this->isStringOrNull($clientMediaType)) { + throw new InvalidArgumentException( + 'Upload file client media type must be a string or null' + ); + } + + $this->clientMediaType = $clientMediaType; + } + + /** + * Return true if there is no upload error + * + * @return boolean + */ + private function isOk() + { + return $this->error === UPLOAD_ERR_OK; + } + + /** + * @return boolean + */ + public function isMoved() + { + return $this->moved; + } + + /** + * @throws RuntimeException if is moved or not ok + */ + private function validateActive() + { + if (false === $this->isOk()) { + throw new RuntimeException('Cannot retrieve stream due to upload error'); + } + + if ($this->isMoved()) { + throw new RuntimeException('Cannot retrieve stream after it has already been moved'); + } + } + + /** + * {@inheritdoc} + * @throws RuntimeException if the upload was not successful. + */ + public function getStream() + { + $this->validateActive(); + + if ($this->stream instanceof StreamInterface) { + return $this->stream; + } + + return new LazyOpenStream($this->file, 'r+'); + } + + /** + * {@inheritdoc} + * + * @see http://php.net/is_uploaded_file + * @see http://php.net/move_uploaded_file + * @param string $targetPath Path to which to move the uploaded file. + * @throws RuntimeException if the upload was not successful. + * @throws InvalidArgumentException if the $path specified is invalid. + * @throws RuntimeException on any error during the move operation, or on + * the second or subsequent call to the method. + */ + public function moveTo($targetPath) + { + $this->validateActive(); + + if (false === $this->isStringNotEmpty($targetPath)) { + throw new InvalidArgumentException( + 'Invalid path provided for move operation; must be a non-empty string' + ); + } + + if ($this->file) { + $this->moved = php_sapi_name() == 'cli' + ? rename($this->file, $targetPath) + : move_uploaded_file($this->file, $targetPath); + } else { + copy_to_stream( + $this->getStream(), + new LazyOpenStream($targetPath, 'w') + ); + + $this->moved = true; + } + + if (false === $this->moved) { + throw new RuntimeException( + sprintf('Uploaded file could not be moved to %s', $targetPath) + ); + } + } + + /** + * {@inheritdoc} + * + * @return int|null The file size in bytes or null if unknown. + */ + public function getSize() + { + return $this->size; + } + + /** + * {@inheritdoc} + * + * @see http://php.net/manual/en/features.file-upload.errors.php + * @return int One of PHP's UPLOAD_ERR_XXX constants. + */ + public function getError() + { + return $this->error; + } + + /** + * {@inheritdoc} + * + * @return string|null The filename sent by the client or null if none + * was provided. + */ + public function getClientFilename() + { + return $this->clientFilename; + } + + /** + * {@inheritdoc} + */ + public function getClientMediaType() + { + return $this->clientMediaType; + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/Uri.php b/civicrm/vendor/guzzlehttp/psr7/src/Uri.php new file mode 100644 index 0000000000000000000000000000000000000000..f46c1db9e07812e8d0069a4d9beb145ea3bfbf31 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/Uri.php @@ -0,0 +1,702 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\UriInterface; + +/** + * PSR-7 URI implementation. + * + * @author Michael Dowling + * @author Tobias Schultze + * @author Matthew Weier O'Phinney + */ +class Uri implements UriInterface +{ + /** + * Absolute http and https URIs require a host per RFC 7230 Section 2.7 + * but in generic URIs the host can be empty. So for http(s) URIs + * we apply this default host when no host is given yet to form a + * valid URI. + */ + const HTTP_DEFAULT_HOST = 'localhost'; + + private static $defaultPorts = [ + 'http' => 80, + 'https' => 443, + 'ftp' => 21, + 'gopher' => 70, + 'nntp' => 119, + 'news' => 119, + 'telnet' => 23, + 'tn3270' => 23, + 'imap' => 143, + 'pop' => 110, + 'ldap' => 389, + ]; + + private static $charUnreserved = 'a-zA-Z0-9_\-\.~'; + private static $charSubDelims = '!\$&\'\(\)\*\+,;='; + private static $replaceQuery = ['=' => '%3D', '&' => '%26']; + + /** @var string Uri scheme. */ + private $scheme = ''; + + /** @var string Uri user info. */ + private $userInfo = ''; + + /** @var string Uri host. */ + private $host = ''; + + /** @var int|null Uri port. */ + private $port; + + /** @var string Uri path. */ + private $path = ''; + + /** @var string Uri query string. */ + private $query = ''; + + /** @var string Uri fragment. */ + private $fragment = ''; + + /** + * @param string $uri URI to parse + */ + public function __construct($uri = '') + { + // weak type check to also accept null until we can add scalar type hints + if ($uri != '') { + $parts = parse_url($uri); + if ($parts === false) { + throw new \InvalidArgumentException("Unable to parse URI: $uri"); + } + $this->applyParts($parts); + } + } + + public function __toString() + { + return self::composeComponents( + $this->scheme, + $this->getAuthority(), + $this->path, + $this->query, + $this->fragment + ); + } + + /** + * Composes a URI reference string from its various components. + * + * Usually this method does not need to be called manually but instead is used indirectly via + * `Psr\Http\Message\UriInterface::__toString`. + * + * PSR-7 UriInterface treats an empty component the same as a missing component as + * getQuery(), getFragment() etc. always return a string. This explains the slight + * difference to RFC 3986 Section 5.3. + * + * Another adjustment is that the authority separator is added even when the authority is missing/empty + * for the "file" scheme. This is because PHP stream functions like `file_get_contents` only work with + * `file:///myfile` but not with `file:/myfile` although they are equivalent according to RFC 3986. But + * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to + * that format). + * + * @param string $scheme + * @param string $authority + * @param string $path + * @param string $query + * @param string $fragment + * + * @return string + * + * @link https://tools.ietf.org/html/rfc3986#section-5.3 + */ + public static function composeComponents($scheme, $authority, $path, $query, $fragment) + { + $uri = ''; + + // weak type checks to also accept null until we can add scalar type hints + if ($scheme != '') { + $uri .= $scheme . ':'; + } + + if ($authority != ''|| $scheme === 'file') { + $uri .= '//' . $authority; + } + + $uri .= $path; + + if ($query != '') { + $uri .= '?' . $query; + } + + if ($fragment != '') { + $uri .= '#' . $fragment; + } + + return $uri; + } + + /** + * Whether the URI has the default port of the current scheme. + * + * `Psr\Http\Message\UriInterface::getPort` may return null or the standard port. This method can be used + * independently of the implementation. + * + * @param UriInterface $uri + * + * @return bool + */ + public static function isDefaultPort(UriInterface $uri) + { + return $uri->getPort() === null + || (isset(self::$defaultPorts[$uri->getScheme()]) && $uri->getPort() === self::$defaultPorts[$uri->getScheme()]); + } + + /** + * Whether the URI is absolute, i.e. it has a scheme. + * + * An instance of UriInterface can either be an absolute URI or a relative reference. This method returns true + * if it is the former. An absolute URI has a scheme. A relative reference is used to express a URI relative + * to another URI, the base URI. Relative references can be divided into several forms: + * - network-path references, e.g. '//example.com/path' + * - absolute-path references, e.g. '/path' + * - relative-path references, e.g. 'subpath' + * + * @param UriInterface $uri + * + * @return bool + * @see Uri::isNetworkPathReference + * @see Uri::isAbsolutePathReference + * @see Uri::isRelativePathReference + * @link https://tools.ietf.org/html/rfc3986#section-4 + */ + public static function isAbsolute(UriInterface $uri) + { + return $uri->getScheme() !== ''; + } + + /** + * Whether the URI is a network-path reference. + * + * A relative reference that begins with two slash characters is termed an network-path reference. + * + * @param UriInterface $uri + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-4.2 + */ + public static function isNetworkPathReference(UriInterface $uri) + { + return $uri->getScheme() === '' && $uri->getAuthority() !== ''; + } + + /** + * Whether the URI is a absolute-path reference. + * + * A relative reference that begins with a single slash character is termed an absolute-path reference. + * + * @param UriInterface $uri + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-4.2 + */ + public static function isAbsolutePathReference(UriInterface $uri) + { + return $uri->getScheme() === '' + && $uri->getAuthority() === '' + && isset($uri->getPath()[0]) + && $uri->getPath()[0] === '/'; + } + + /** + * Whether the URI is a relative-path reference. + * + * A relative reference that does not begin with a slash character is termed a relative-path reference. + * + * @param UriInterface $uri + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-4.2 + */ + public static function isRelativePathReference(UriInterface $uri) + { + return $uri->getScheme() === '' + && $uri->getAuthority() === '' + && (!isset($uri->getPath()[0]) || $uri->getPath()[0] !== '/'); + } + + /** + * Whether the URI is a same-document reference. + * + * A same-document reference refers to a URI that is, aside from its fragment + * component, identical to the base URI. When no base URI is given, only an empty + * URI reference (apart from its fragment) is considered a same-document reference. + * + * @param UriInterface $uri The URI to check + * @param UriInterface|null $base An optional base URI to compare against + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-4.4 + */ + public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null) + { + if ($base !== null) { + $uri = UriResolver::resolve($base, $uri); + + return ($uri->getScheme() === $base->getScheme()) + && ($uri->getAuthority() === $base->getAuthority()) + && ($uri->getPath() === $base->getPath()) + && ($uri->getQuery() === $base->getQuery()); + } + + return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === ''; + } + + /** + * Removes dot segments from a path and returns the new path. + * + * @param string $path + * + * @return string + * + * @deprecated since version 1.4. Use UriResolver::removeDotSegments instead. + * @see UriResolver::removeDotSegments + */ + public static function removeDotSegments($path) + { + return UriResolver::removeDotSegments($path); + } + + /** + * Converts the relative URI into a new URI that is resolved against the base URI. + * + * @param UriInterface $base Base URI + * @param string|UriInterface $rel Relative URI + * + * @return UriInterface + * + * @deprecated since version 1.4. Use UriResolver::resolve instead. + * @see UriResolver::resolve + */ + public static function resolve(UriInterface $base, $rel) + { + if (!($rel instanceof UriInterface)) { + $rel = new self($rel); + } + + return UriResolver::resolve($base, $rel); + } + + /** + * Creates a new URI with a specific query string value removed. + * + * Any existing query string values that exactly match the provided key are + * removed. + * + * @param UriInterface $uri URI to use as a base. + * @param string $key Query string key to remove. + * + * @return UriInterface + */ + public static function withoutQueryValue(UriInterface $uri, $key) + { + $current = $uri->getQuery(); + if ($current === '') { + return $uri; + } + + $decodedKey = rawurldecode($key); + $result = array_filter(explode('&', $current), function ($part) use ($decodedKey) { + return rawurldecode(explode('=', $part)[0]) !== $decodedKey; + }); + + return $uri->withQuery(implode('&', $result)); + } + + /** + * Creates a new URI with a specific query string value. + * + * Any existing query string values that exactly match the provided key are + * removed and replaced with the given key value pair. + * + * A value of null will set the query string key without a value, e.g. "key" + * instead of "key=value". + * + * @param UriInterface $uri URI to use as a base. + * @param string $key Key to set. + * @param string|null $value Value to set + * + * @return UriInterface + */ + public static function withQueryValue(UriInterface $uri, $key, $value) + { + $current = $uri->getQuery(); + + if ($current === '') { + $result = []; + } else { + $decodedKey = rawurldecode($key); + $result = array_filter(explode('&', $current), function ($part) use ($decodedKey) { + return rawurldecode(explode('=', $part)[0]) !== $decodedKey; + }); + } + + // Query string separators ("=", "&") within the key or value need to be encoded + // (while preventing double-encoding) before setting the query string. All other + // chars that need percent-encoding will be encoded by withQuery(). + $key = strtr($key, self::$replaceQuery); + + if ($value !== null) { + $result[] = $key . '=' . strtr($value, self::$replaceQuery); + } else { + $result[] = $key; + } + + return $uri->withQuery(implode('&', $result)); + } + + /** + * Creates a URI from a hash of `parse_url` components. + * + * @param array $parts + * + * @return UriInterface + * @link http://php.net/manual/en/function.parse-url.php + * + * @throws \InvalidArgumentException If the components do not form a valid URI. + */ + public static function fromParts(array $parts) + { + $uri = new self(); + $uri->applyParts($parts); + $uri->validateState(); + + return $uri; + } + + public function getScheme() + { + return $this->scheme; + } + + public function getAuthority() + { + $authority = $this->host; + if ($this->userInfo !== '') { + $authority = $this->userInfo . '@' . $authority; + } + + if ($this->port !== null) { + $authority .= ':' . $this->port; + } + + return $authority; + } + + public function getUserInfo() + { + return $this->userInfo; + } + + public function getHost() + { + return $this->host; + } + + public function getPort() + { + return $this->port; + } + + public function getPath() + { + return $this->path; + } + + public function getQuery() + { + return $this->query; + } + + public function getFragment() + { + return $this->fragment; + } + + public function withScheme($scheme) + { + $scheme = $this->filterScheme($scheme); + + if ($this->scheme === $scheme) { + return $this; + } + + $new = clone $this; + $new->scheme = $scheme; + $new->removeDefaultPort(); + $new->validateState(); + + return $new; + } + + public function withUserInfo($user, $password = null) + { + $info = $user; + if ($password != '') { + $info .= ':' . $password; + } + + if ($this->userInfo === $info) { + return $this; + } + + $new = clone $this; + $new->userInfo = $info; + $new->validateState(); + + return $new; + } + + public function withHost($host) + { + $host = $this->filterHost($host); + + if ($this->host === $host) { + return $this; + } + + $new = clone $this; + $new->host = $host; + $new->validateState(); + + return $new; + } + + public function withPort($port) + { + $port = $this->filterPort($port); + + if ($this->port === $port) { + return $this; + } + + $new = clone $this; + $new->port = $port; + $new->removeDefaultPort(); + $new->validateState(); + + return $new; + } + + public function withPath($path) + { + $path = $this->filterPath($path); + + if ($this->path === $path) { + return $this; + } + + $new = clone $this; + $new->path = $path; + $new->validateState(); + + return $new; + } + + public function withQuery($query) + { + $query = $this->filterQueryAndFragment($query); + + if ($this->query === $query) { + return $this; + } + + $new = clone $this; + $new->query = $query; + + return $new; + } + + public function withFragment($fragment) + { + $fragment = $this->filterQueryAndFragment($fragment); + + if ($this->fragment === $fragment) { + return $this; + } + + $new = clone $this; + $new->fragment = $fragment; + + return $new; + } + + /** + * Apply parse_url parts to a URI. + * + * @param array $parts Array of parse_url parts to apply. + */ + private function applyParts(array $parts) + { + $this->scheme = isset($parts['scheme']) + ? $this->filterScheme($parts['scheme']) + : ''; + $this->userInfo = isset($parts['user']) ? $parts['user'] : ''; + $this->host = isset($parts['host']) + ? $this->filterHost($parts['host']) + : ''; + $this->port = isset($parts['port']) + ? $this->filterPort($parts['port']) + : null; + $this->path = isset($parts['path']) + ? $this->filterPath($parts['path']) + : ''; + $this->query = isset($parts['query']) + ? $this->filterQueryAndFragment($parts['query']) + : ''; + $this->fragment = isset($parts['fragment']) + ? $this->filterQueryAndFragment($parts['fragment']) + : ''; + if (isset($parts['pass'])) { + $this->userInfo .= ':' . $parts['pass']; + } + + $this->removeDefaultPort(); + } + + /** + * @param string $scheme + * + * @return string + * + * @throws \InvalidArgumentException If the scheme is invalid. + */ + private function filterScheme($scheme) + { + if (!is_string($scheme)) { + throw new \InvalidArgumentException('Scheme must be a string'); + } + + return strtolower($scheme); + } + + /** + * @param string $host + * + * @return string + * + * @throws \InvalidArgumentException If the host is invalid. + */ + private function filterHost($host) + { + if (!is_string($host)) { + throw new \InvalidArgumentException('Host must be a string'); + } + + return strtolower($host); + } + + /** + * @param int|null $port + * + * @return int|null + * + * @throws \InvalidArgumentException If the port is invalid. + */ + private function filterPort($port) + { + if ($port === null) { + return null; + } + + $port = (int) $port; + if (1 > $port || 0xffff < $port) { + throw new \InvalidArgumentException( + sprintf('Invalid port: %d. Must be between 1 and 65535', $port) + ); + } + + return $port; + } + + private function removeDefaultPort() + { + if ($this->port !== null && self::isDefaultPort($this)) { + $this->port = null; + } + } + + /** + * Filters the path of a URI + * + * @param string $path + * + * @return string + * + * @throws \InvalidArgumentException If the path is invalid. + */ + private function filterPath($path) + { + if (!is_string($path)) { + throw new \InvalidArgumentException('Path must be a string'); + } + + return preg_replace_callback( + '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/]++|%(?![A-Fa-f0-9]{2}))/', + [$this, 'rawurlencodeMatchZero'], + $path + ); + } + + /** + * Filters the query string or fragment of a URI. + * + * @param string $str + * + * @return string + * + * @throws \InvalidArgumentException If the query or fragment is invalid. + */ + private function filterQueryAndFragment($str) + { + if (!is_string($str)) { + throw new \InvalidArgumentException('Query and fragment must be a string'); + } + + return preg_replace_callback( + '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/', + [$this, 'rawurlencodeMatchZero'], + $str + ); + } + + private function rawurlencodeMatchZero(array $match) + { + return rawurlencode($match[0]); + } + + private function validateState() + { + if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) { + $this->host = self::HTTP_DEFAULT_HOST; + } + + if ($this->getAuthority() === '') { + if (0 === strpos($this->path, '//')) { + throw new \InvalidArgumentException('The path of a URI without an authority must not start with two slashes "//"'); + } + if ($this->scheme === '' && false !== strpos(explode('/', $this->path, 2)[0], ':')) { + throw new \InvalidArgumentException('A relative URI must not have a path beginning with a segment containing a colon'); + } + } elseif (isset($this->path[0]) && $this->path[0] !== '/') { + @trigger_error( + 'The path of a URI with an authority must start with a slash "/" or be empty. Automagically fixing the URI ' . + 'by adding a leading slash to the path is deprecated since version 1.4 and will throw an exception instead.', + E_USER_DEPRECATED + ); + $this->path = '/'. $this->path; + //throw new \InvalidArgumentException('The path of a URI with an authority must start with a slash "/" or be empty'); + } + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/UriNormalizer.php b/civicrm/vendor/guzzlehttp/psr7/src/UriNormalizer.php new file mode 100644 index 0000000000000000000000000000000000000000..384c29e50864f584d947e75fddb39538b3862258 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/UriNormalizer.php @@ -0,0 +1,216 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\UriInterface; + +/** + * Provides methods to normalize and compare URIs. + * + * @author Tobias Schultze + * + * @link https://tools.ietf.org/html/rfc3986#section-6 + */ +final class UriNormalizer +{ + /** + * Default normalizations which only include the ones that preserve semantics. + * + * self::CAPITALIZE_PERCENT_ENCODING | self::DECODE_UNRESERVED_CHARACTERS | self::CONVERT_EMPTY_PATH | + * self::REMOVE_DEFAULT_HOST | self::REMOVE_DEFAULT_PORT | self::REMOVE_DOT_SEGMENTS + */ + const PRESERVING_NORMALIZATIONS = 63; + + /** + * All letters within a percent-encoding triplet (e.g., "%3A") are case-insensitive, and should be capitalized. + * + * Example: http://example.org/a%c2%b1b → http://example.org/a%C2%B1b + */ + const CAPITALIZE_PERCENT_ENCODING = 1; + + /** + * Decodes percent-encoded octets of unreserved characters. + * + * For consistency, percent-encoded octets in the ranges of ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39), + * hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should not be created by URI producers and, + * when found in a URI, should be decoded to their corresponding unreserved characters by URI normalizers. + * + * Example: http://example.org/%7Eusern%61me/ → http://example.org/~username/ + */ + const DECODE_UNRESERVED_CHARACTERS = 2; + + /** + * Converts the empty path to "/" for http and https URIs. + * + * Example: http://example.org → http://example.org/ + */ + const CONVERT_EMPTY_PATH = 4; + + /** + * Removes the default host of the given URI scheme from the URI. + * + * Only the "file" scheme defines the default host "localhost". + * All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile` + * are equivalent according to RFC 3986. The first format is not accepted + * by PHPs stream functions and thus already normalized implicitly to the + * second format in the Uri class. See `GuzzleHttp\Psr7\Uri::composeComponents`. + * + * Example: file://localhost/myfile → file:///myfile + */ + const REMOVE_DEFAULT_HOST = 8; + + /** + * Removes the default port of the given URI scheme from the URI. + * + * Example: http://example.org:80/ → http://example.org/ + */ + const REMOVE_DEFAULT_PORT = 16; + + /** + * Removes unnecessary dot-segments. + * + * Dot-segments in relative-path references are not removed as it would + * change the semantics of the URI reference. + * + * Example: http://example.org/../a/b/../c/./d.html → http://example.org/a/c/d.html + */ + const REMOVE_DOT_SEGMENTS = 32; + + /** + * Paths which include two or more adjacent slashes are converted to one. + * + * Webservers usually ignore duplicate slashes and treat those URIs equivalent. + * But in theory those URIs do not need to be equivalent. So this normalization + * may change the semantics. Encoded slashes (%2F) are not removed. + * + * Example: http://example.org//foo///bar.html → http://example.org/foo/bar.html + */ + const REMOVE_DUPLICATE_SLASHES = 64; + + /** + * Sort query parameters with their values in alphabetical order. + * + * However, the order of parameters in a URI may be significant (this is not defined by the standard). + * So this normalization is not safe and may change the semantics of the URI. + * + * Example: ?lang=en&article=fred → ?article=fred&lang=en + * + * Note: The sorting is neither locale nor Unicode aware (the URI query does not get decoded at all) as the + * purpose is to be able to compare URIs in a reproducible way, not to have the params sorted perfectly. + */ + const SORT_QUERY_PARAMETERS = 128; + + /** + * Returns a normalized URI. + * + * The scheme and host component are already normalized to lowercase per PSR-7 UriInterface. + * This methods adds additional normalizations that can be configured with the $flags parameter. + * + * PSR-7 UriInterface cannot distinguish between an empty component and a missing component as + * getQuery(), getFragment() etc. always return a string. This means the URIs "/?#" and "/" are + * treated equivalent which is not necessarily true according to RFC 3986. But that difference + * is highly uncommon in reality. So this potential normalization is implied in PSR-7 as well. + * + * @param UriInterface $uri The URI to normalize + * @param int $flags A bitmask of normalizations to apply, see constants + * + * @return UriInterface The normalized URI + * @link https://tools.ietf.org/html/rfc3986#section-6.2 + */ + public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS) + { + if ($flags & self::CAPITALIZE_PERCENT_ENCODING) { + $uri = self::capitalizePercentEncoding($uri); + } + + if ($flags & self::DECODE_UNRESERVED_CHARACTERS) { + $uri = self::decodeUnreservedCharacters($uri); + } + + if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' && + ($uri->getScheme() === 'http' || $uri->getScheme() === 'https') + ) { + $uri = $uri->withPath('/'); + } + + if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') { + $uri = $uri->withHost(''); + } + + if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && Uri::isDefaultPort($uri)) { + $uri = $uri->withPort(null); + } + + if ($flags & self::REMOVE_DOT_SEGMENTS && !Uri::isRelativePathReference($uri)) { + $uri = $uri->withPath(UriResolver::removeDotSegments($uri->getPath())); + } + + if ($flags & self::REMOVE_DUPLICATE_SLASHES) { + $uri = $uri->withPath(preg_replace('#//++#', '/', $uri->getPath())); + } + + if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') { + $queryKeyValues = explode('&', $uri->getQuery()); + sort($queryKeyValues); + $uri = $uri->withQuery(implode('&', $queryKeyValues)); + } + + return $uri; + } + + /** + * Whether two URIs can be considered equivalent. + * + * Both URIs are normalized automatically before comparison with the given $normalizations bitmask. The method also + * accepts relative URI references and returns true when they are equivalent. This of course assumes they will be + * resolved against the same base URI. If this is not the case, determination of equivalence or difference of + * relative references does not mean anything. + * + * @param UriInterface $uri1 An URI to compare + * @param UriInterface $uri2 An URI to compare + * @param int $normalizations A bitmask of normalizations to apply, see constants + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-6.1 + */ + public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS) + { + return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations); + } + + private static function capitalizePercentEncoding(UriInterface $uri) + { + $regex = '/(?:%[A-Fa-f0-9]{2})++/'; + + $callback = function (array $match) { + return strtoupper($match[0]); + }; + + return + $uri->withPath( + preg_replace_callback($regex, $callback, $uri->getPath()) + )->withQuery( + preg_replace_callback($regex, $callback, $uri->getQuery()) + ); + } + + private static function decodeUnreservedCharacters(UriInterface $uri) + { + $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i'; + + $callback = function (array $match) { + return rawurldecode($match[0]); + }; + + return + $uri->withPath( + preg_replace_callback($regex, $callback, $uri->getPath()) + )->withQuery( + preg_replace_callback($regex, $callback, $uri->getQuery()) + ); + } + + private function __construct() + { + // cannot be instantiated + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/UriResolver.php b/civicrm/vendor/guzzlehttp/psr7/src/UriResolver.php new file mode 100644 index 0000000000000000000000000000000000000000..c1cb8a275af212848f5014f424cc5732e4d32906 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/UriResolver.php @@ -0,0 +1,219 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\UriInterface; + +/** + * Resolves a URI reference in the context of a base URI and the opposite way. + * + * @author Tobias Schultze + * + * @link https://tools.ietf.org/html/rfc3986#section-5 + */ +final class UriResolver +{ + /** + * Removes dot segments from a path and returns the new path. + * + * @param string $path + * + * @return string + * @link http://tools.ietf.org/html/rfc3986#section-5.2.4 + */ + public static function removeDotSegments($path) + { + if ($path === '' || $path === '/') { + return $path; + } + + $results = []; + $segments = explode('/', $path); + foreach ($segments as $segment) { + if ($segment === '..') { + array_pop($results); + } elseif ($segment !== '.') { + $results[] = $segment; + } + } + + $newPath = implode('/', $results); + + if ($path[0] === '/' && (!isset($newPath[0]) || $newPath[0] !== '/')) { + // Re-add the leading slash if necessary for cases like "/.." + $newPath = '/' . $newPath; + } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) { + // Add the trailing slash if necessary + // If newPath is not empty, then $segment must be set and is the last segment from the foreach + $newPath .= '/'; + } + + return $newPath; + } + + /** + * Converts the relative URI into a new URI that is resolved against the base URI. + * + * @param UriInterface $base Base URI + * @param UriInterface $rel Relative URI + * + * @return UriInterface + * @link http://tools.ietf.org/html/rfc3986#section-5.2 + */ + public static function resolve(UriInterface $base, UriInterface $rel) + { + if ((string) $rel === '') { + // we can simply return the same base URI instance for this same-document reference + return $base; + } + + if ($rel->getScheme() != '') { + return $rel->withPath(self::removeDotSegments($rel->getPath())); + } + + if ($rel->getAuthority() != '') { + $targetAuthority = $rel->getAuthority(); + $targetPath = self::removeDotSegments($rel->getPath()); + $targetQuery = $rel->getQuery(); + } else { + $targetAuthority = $base->getAuthority(); + if ($rel->getPath() === '') { + $targetPath = $base->getPath(); + $targetQuery = $rel->getQuery() != '' ? $rel->getQuery() : $base->getQuery(); + } else { + if ($rel->getPath()[0] === '/') { + $targetPath = $rel->getPath(); + } else { + if ($targetAuthority != '' && $base->getPath() === '') { + $targetPath = '/' . $rel->getPath(); + } else { + $lastSlashPos = strrpos($base->getPath(), '/'); + if ($lastSlashPos === false) { + $targetPath = $rel->getPath(); + } else { + $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1) . $rel->getPath(); + } + } + } + $targetPath = self::removeDotSegments($targetPath); + $targetQuery = $rel->getQuery(); + } + } + + return new Uri(Uri::composeComponents( + $base->getScheme(), + $targetAuthority, + $targetPath, + $targetQuery, + $rel->getFragment() + )); + } + + /** + * Returns the target URI as a relative reference from the base URI. + * + * This method is the counterpart to resolve(): + * + * (string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target)) + * + * One use-case is to use the current request URI as base URI and then generate relative links in your documents + * to reduce the document size or offer self-contained downloadable document archives. + * + * $base = new Uri('http://example.com/a/b/'); + * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'. + * echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'. + * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'. + * echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'. + * + * This method also accepts a target that is already relative and will try to relativize it further. Only a + * relative-path reference will be returned as-is. + * + * echo UriResolver::relativize($base, new Uri('/a/b/c')); // prints 'c' as well + * + * @param UriInterface $base Base URI + * @param UriInterface $target Target URI + * + * @return UriInterface The relative URI reference + */ + public static function relativize(UriInterface $base, UriInterface $target) + { + if ($target->getScheme() !== '' && + ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '') + ) { + return $target; + } + + if (Uri::isRelativePathReference($target)) { + // As the target is already highly relative we return it as-is. It would be possible to resolve + // the target with `$target = self::resolve($base, $target);` and then try make it more relative + // by removing a duplicate query. But let's not do that automatically. + return $target; + } + + if ($target->getAuthority() !== '' && $base->getAuthority() !== $target->getAuthority()) { + return $target->withScheme(''); + } + + // We must remove the path before removing the authority because if the path starts with two slashes, the URI + // would turn invalid. And we also cannot set a relative path before removing the authority, as that is also + // invalid. + $emptyPathUri = $target->withScheme('')->withPath('')->withUserInfo('')->withPort(null)->withHost(''); + + if ($base->getPath() !== $target->getPath()) { + return $emptyPathUri->withPath(self::getRelativePath($base, $target)); + } + + if ($base->getQuery() === $target->getQuery()) { + // Only the target fragment is left. And it must be returned even if base and target fragment are the same. + return $emptyPathUri->withQuery(''); + } + + // If the base URI has a query but the target has none, we cannot return an empty path reference as it would + // inherit the base query component when resolving. + if ($target->getQuery() === '') { + $segments = explode('/', $target->getPath()); + $lastSegment = end($segments); + + return $emptyPathUri->withPath($lastSegment === '' ? './' : $lastSegment); + } + + return $emptyPathUri; + } + + private static function getRelativePath(UriInterface $base, UriInterface $target) + { + $sourceSegments = explode('/', $base->getPath()); + $targetSegments = explode('/', $target->getPath()); + array_pop($sourceSegments); + $targetLastSegment = array_pop($targetSegments); + foreach ($sourceSegments as $i => $segment) { + if (isset($targetSegments[$i]) && $segment === $targetSegments[$i]) { + unset($sourceSegments[$i], $targetSegments[$i]); + } else { + break; + } + } + $targetSegments[] = $targetLastSegment; + $relativePath = str_repeat('../', count($sourceSegments)) . implode('/', $targetSegments); + + // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./". + // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used + // as the first segment of a relative-path reference, as it would be mistaken for a scheme name. + if ('' === $relativePath || false !== strpos(explode('/', $relativePath, 2)[0], ':')) { + $relativePath = "./$relativePath"; + } elseif ('/' === $relativePath[0]) { + if ($base->getAuthority() != '' && $base->getPath() === '') { + // In this case an extra slash is added by resolve() automatically. So we must not add one here. + $relativePath = ".$relativePath"; + } else { + $relativePath = "./$relativePath"; + } + } + + return $relativePath; + } + + private function __construct() + { + // cannot be instantiated + } +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/functions.php b/civicrm/vendor/guzzlehttp/psr7/src/functions.php new file mode 100644 index 0000000000000000000000000000000000000000..e40348d6abdee0bafd739cae12f99f033b131da8 --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/functions.php @@ -0,0 +1,828 @@ +<?php +namespace GuzzleHttp\Psr7; + +use Psr\Http\Message\MessageInterface; +use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Message\StreamInterface; +use Psr\Http\Message\UriInterface; + +/** + * Returns the string representation of an HTTP message. + * + * @param MessageInterface $message Message to convert to a string. + * + * @return string + */ +function str(MessageInterface $message) +{ + if ($message instanceof RequestInterface) { + $msg = trim($message->getMethod() . ' ' + . $message->getRequestTarget()) + . ' HTTP/' . $message->getProtocolVersion(); + if (!$message->hasHeader('host')) { + $msg .= "\r\nHost: " . $message->getUri()->getHost(); + } + } elseif ($message instanceof ResponseInterface) { + $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' + . $message->getStatusCode() . ' ' + . $message->getReasonPhrase(); + } else { + throw new \InvalidArgumentException('Unknown message type'); + } + + foreach ($message->getHeaders() as $name => $values) { + $msg .= "\r\n{$name}: " . implode(', ', $values); + } + + return "{$msg}\r\n\r\n" . $message->getBody(); +} + +/** + * Returns a UriInterface for the given value. + * + * This function accepts a string or {@see Psr\Http\Message\UriInterface} and + * returns a UriInterface for the given value. If the value is already a + * `UriInterface`, it is returned as-is. + * + * @param string|UriInterface $uri + * + * @return UriInterface + * @throws \InvalidArgumentException + */ +function uri_for($uri) +{ + if ($uri instanceof UriInterface) { + return $uri; + } elseif (is_string($uri)) { + return new Uri($uri); + } + + throw new \InvalidArgumentException('URI must be a string or UriInterface'); +} + +/** + * Create a new stream based on the input type. + * + * Options is an associative array that can contain the following keys: + * - metadata: Array of custom metadata. + * - size: Size of the stream. + * + * @param resource|string|null|int|float|bool|StreamInterface|callable $resource Entity body data + * @param array $options Additional options + * + * @return Stream + * @throws \InvalidArgumentException if the $resource arg is not valid. + */ +function stream_for($resource = '', array $options = []) +{ + if (is_scalar($resource)) { + $stream = fopen('php://temp', 'r+'); + if ($resource !== '') { + fwrite($stream, $resource); + fseek($stream, 0); + } + return new Stream($stream, $options); + } + + switch (gettype($resource)) { + case 'resource': + return new Stream($resource, $options); + case 'object': + if ($resource instanceof StreamInterface) { + return $resource; + } elseif ($resource instanceof \Iterator) { + return new PumpStream(function () use ($resource) { + if (!$resource->valid()) { + return false; + } + $result = $resource->current(); + $resource->next(); + return $result; + }, $options); + } elseif (method_exists($resource, '__toString')) { + return stream_for((string) $resource, $options); + } + break; + case 'NULL': + return new Stream(fopen('php://temp', 'r+'), $options); + } + + if (is_callable($resource)) { + return new PumpStream($resource, $options); + } + + throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource)); +} + +/** + * Parse an array of header values containing ";" separated data into an + * array of associative arrays representing the header key value pair + * data of the header. When a parameter does not contain a value, but just + * contains a key, this function will inject a key with a '' string value. + * + * @param string|array $header Header to parse into components. + * + * @return array Returns the parsed header values. + */ +function parse_header($header) +{ + static $trimmed = "\"' \n\t\r"; + $params = $matches = []; + + foreach (normalize_header($header) as $val) { + $part = []; + foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) { + if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) { + $m = $matches[0]; + if (isset($m[1])) { + $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed); + } else { + $part[] = trim($m[0], $trimmed); + } + } + } + if ($part) { + $params[] = $part; + } + } + + return $params; +} + +/** + * Converts an array of header values that may contain comma separated + * headers into an array of headers with no comma separated values. + * + * @param string|array $header Header to normalize. + * + * @return array Returns the normalized header field values. + */ +function normalize_header($header) +{ + if (!is_array($header)) { + return array_map('trim', explode(',', $header)); + } + + $result = []; + foreach ($header as $value) { + foreach ((array) $value as $v) { + if (strpos($v, ',') === false) { + $result[] = $v; + continue; + } + foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) { + $result[] = trim($vv); + } + } + } + + return $result; +} + +/** + * Clone and modify a request with the given changes. + * + * The changes can be one of: + * - method: (string) Changes the HTTP method. + * - set_headers: (array) Sets the given headers. + * - remove_headers: (array) Remove the given headers. + * - body: (mixed) Sets the given body. + * - uri: (UriInterface) Set the URI. + * - query: (string) Set the query string value of the URI. + * - version: (string) Set the protocol version. + * + * @param RequestInterface $request Request to clone and modify. + * @param array $changes Changes to apply. + * + * @return RequestInterface + */ +function modify_request(RequestInterface $request, array $changes) +{ + if (!$changes) { + return $request; + } + + $headers = $request->getHeaders(); + + if (!isset($changes['uri'])) { + $uri = $request->getUri(); + } else { + // Remove the host header if one is on the URI + if ($host = $changes['uri']->getHost()) { + $changes['set_headers']['Host'] = $host; + + if ($port = $changes['uri']->getPort()) { + $standardPorts = ['http' => 80, 'https' => 443]; + $scheme = $changes['uri']->getScheme(); + if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { + $changes['set_headers']['Host'] .= ':'.$port; + } + } + } + $uri = $changes['uri']; + } + + if (!empty($changes['remove_headers'])) { + $headers = _caseless_remove($changes['remove_headers'], $headers); + } + + if (!empty($changes['set_headers'])) { + $headers = _caseless_remove(array_keys($changes['set_headers']), $headers); + $headers = $changes['set_headers'] + $headers; + } + + if (isset($changes['query'])) { + $uri = $uri->withQuery($changes['query']); + } + + if ($request instanceof ServerRequestInterface) { + return new ServerRequest( + isset($changes['method']) ? $changes['method'] : $request->getMethod(), + $uri, + $headers, + isset($changes['body']) ? $changes['body'] : $request->getBody(), + isset($changes['version']) + ? $changes['version'] + : $request->getProtocolVersion(), + $request->getServerParams() + ); + } + + return new Request( + isset($changes['method']) ? $changes['method'] : $request->getMethod(), + $uri, + $headers, + isset($changes['body']) ? $changes['body'] : $request->getBody(), + isset($changes['version']) + ? $changes['version'] + : $request->getProtocolVersion() + ); +} + +/** + * Attempts to rewind a message body and throws an exception on failure. + * + * The body of the message will only be rewound if a call to `tell()` returns a + * value other than `0`. + * + * @param MessageInterface $message Message to rewind + * + * @throws \RuntimeException + */ +function rewind_body(MessageInterface $message) +{ + $body = $message->getBody(); + + if ($body->tell()) { + $body->rewind(); + } +} + +/** + * Safely opens a PHP stream resource using a filename. + * + * When fopen fails, PHP normally raises a warning. This function adds an + * error handler that checks for errors and throws an exception instead. + * + * @param string $filename File to open + * @param string $mode Mode used to open the file + * + * @return resource + * @throws \RuntimeException if the file cannot be opened + */ +function try_fopen($filename, $mode) +{ + $ex = null; + set_error_handler(function () use ($filename, $mode, &$ex) { + $ex = new \RuntimeException(sprintf( + 'Unable to open %s using mode %s: %s', + $filename, + $mode, + func_get_args()[1] + )); + }); + + $handle = fopen($filename, $mode); + restore_error_handler(); + + if ($ex) { + /** @var $ex \RuntimeException */ + throw $ex; + } + + return $handle; +} + +/** + * Copy the contents of a stream into a string until the given number of + * bytes have been read. + * + * @param StreamInterface $stream Stream to read + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * @return string + * @throws \RuntimeException on error. + */ +function copy_to_string(StreamInterface $stream, $maxLen = -1) +{ + $buffer = ''; + + if ($maxLen === -1) { + while (!$stream->eof()) { + $buf = $stream->read(1048576); + // Using a loose equality here to match on '' and false. + if ($buf == null) { + break; + } + $buffer .= $buf; + } + return $buffer; + } + + $len = 0; + while (!$stream->eof() && $len < $maxLen) { + $buf = $stream->read($maxLen - $len); + // Using a loose equality here to match on '' and false. + if ($buf == null) { + break; + } + $buffer .= $buf; + $len = strlen($buffer); + } + + return $buffer; +} + +/** + * Copy the contents of a stream into another stream until the given number + * of bytes have been read. + * + * @param StreamInterface $source Stream to read from + * @param StreamInterface $dest Stream to write to + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * + * @throws \RuntimeException on error. + */ +function copy_to_stream( + StreamInterface $source, + StreamInterface $dest, + $maxLen = -1 +) { + $bufferSize = 8192; + + if ($maxLen === -1) { + while (!$source->eof()) { + if (!$dest->write($source->read($bufferSize))) { + break; + } + } + } else { + $remaining = $maxLen; + while ($remaining > 0 && !$source->eof()) { + $buf = $source->read(min($bufferSize, $remaining)); + $len = strlen($buf); + if (!$len) { + break; + } + $remaining -= $len; + $dest->write($buf); + } + } +} + +/** + * Calculate a hash of a Stream + * + * @param StreamInterface $stream Stream to calculate the hash for + * @param string $algo Hash algorithm (e.g. md5, crc32, etc) + * @param bool $rawOutput Whether or not to use raw output + * + * @return string Returns the hash of the stream + * @throws \RuntimeException on error. + */ +function hash( + StreamInterface $stream, + $algo, + $rawOutput = false +) { + $pos = $stream->tell(); + + if ($pos > 0) { + $stream->rewind(); + } + + $ctx = hash_init($algo); + while (!$stream->eof()) { + hash_update($ctx, $stream->read(1048576)); + } + + $out = hash_final($ctx, (bool) $rawOutput); + $stream->seek($pos); + + return $out; +} + +/** + * Read a line from the stream up to the maximum allowed buffer length + * + * @param StreamInterface $stream Stream to read from + * @param int $maxLength Maximum buffer length + * + * @return string|bool + */ +function readline(StreamInterface $stream, $maxLength = null) +{ + $buffer = ''; + $size = 0; + + while (!$stream->eof()) { + // Using a loose equality here to match on '' and false. + if (null == ($byte = $stream->read(1))) { + return $buffer; + } + $buffer .= $byte; + // Break when a new line is found or the max length - 1 is reached + if ($byte === "\n" || ++$size === $maxLength - 1) { + break; + } + } + + return $buffer; +} + +/** + * Parses a request message string into a request object. + * + * @param string $message Request message string. + * + * @return Request + */ +function parse_request($message) +{ + $data = _parse_message($message); + $matches = []; + if (!preg_match('/^[\S]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) { + throw new \InvalidArgumentException('Invalid request string'); + } + $parts = explode(' ', $data['start-line'], 3); + $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1'; + + $request = new Request( + $parts[0], + $matches[1] === '/' ? _parse_request_uri($parts[1], $data['headers']) : $parts[1], + $data['headers'], + $data['body'], + $version + ); + + return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]); +} + +/** + * Parses a response message string into a response object. + * + * @param string $message Response message string. + * + * @return Response + */ +function parse_response($message) +{ + $data = _parse_message($message); + // According to https://tools.ietf.org/html/rfc7230#section-3.1.2 the space + // between status-code and reason-phrase is required. But browsers accept + // responses without space and reason as well. + if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { + throw new \InvalidArgumentException('Invalid response string'); + } + $parts = explode(' ', $data['start-line'], 3); + + return new Response( + $parts[1], + $data['headers'], + $data['body'], + explode('/', $parts[0])[1], + isset($parts[2]) ? $parts[2] : null + ); +} + +/** + * Parse a query string into an associative array. + * + * If multiple values are found for the same key, the value of that key + * value pair will become an array. This function does not parse nested + * PHP style arrays into an associative array (e.g., foo[a]=1&foo[b]=2 will + * be parsed into ['foo[a]' => '1', 'foo[b]' => '2']). + * + * @param string $str Query string to parse + * @param bool|string $urlEncoding How the query string is encoded + * + * @return array + */ +function parse_query($str, $urlEncoding = true) +{ + $result = []; + + if ($str === '') { + return $result; + } + + if ($urlEncoding === true) { + $decoder = function ($value) { + return rawurldecode(str_replace('+', ' ', $value)); + }; + } elseif ($urlEncoding == PHP_QUERY_RFC3986) { + $decoder = 'rawurldecode'; + } elseif ($urlEncoding == PHP_QUERY_RFC1738) { + $decoder = 'urldecode'; + } else { + $decoder = function ($str) { return $str; }; + } + + foreach (explode('&', $str) as $kvp) { + $parts = explode('=', $kvp, 2); + $key = $decoder($parts[0]); + $value = isset($parts[1]) ? $decoder($parts[1]) : null; + if (!isset($result[$key])) { + $result[$key] = $value; + } else { + if (!is_array($result[$key])) { + $result[$key] = [$result[$key]]; + } + $result[$key][] = $value; + } + } + + return $result; +} + +/** + * Build a query string from an array of key value pairs. + * + * This function can use the return value of parse_query() to build a query + * string. This function does not modify the provided keys when an array is + * encountered (like http_build_query would). + * + * @param array $params Query string parameters. + * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986 + * to encode using RFC3986, or PHP_QUERY_RFC1738 + * to encode using RFC1738. + * @return string + */ +function build_query(array $params, $encoding = PHP_QUERY_RFC3986) +{ + if (!$params) { + return ''; + } + + if ($encoding === false) { + $encoder = function ($str) { return $str; }; + } elseif ($encoding === PHP_QUERY_RFC3986) { + $encoder = 'rawurlencode'; + } elseif ($encoding === PHP_QUERY_RFC1738) { + $encoder = 'urlencode'; + } else { + throw new \InvalidArgumentException('Invalid type'); + } + + $qs = ''; + foreach ($params as $k => $v) { + $k = $encoder($k); + if (!is_array($v)) { + $qs .= $k; + if ($v !== null) { + $qs .= '=' . $encoder($v); + } + $qs .= '&'; + } else { + foreach ($v as $vv) { + $qs .= $k; + if ($vv !== null) { + $qs .= '=' . $encoder($vv); + } + $qs .= '&'; + } + } + } + + return $qs ? (string) substr($qs, 0, -1) : ''; +} + +/** + * Determines the mimetype of a file by looking at its extension. + * + * @param $filename + * + * @return null|string + */ +function mimetype_from_filename($filename) +{ + return mimetype_from_extension(pathinfo($filename, PATHINFO_EXTENSION)); +} + +/** + * Maps a file extensions to a mimetype. + * + * @param $extension string The file extension. + * + * @return string|null + * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types + */ +function mimetype_from_extension($extension) +{ + static $mimetypes = [ + '7z' => 'application/x-7z-compressed', + 'aac' => 'audio/x-aac', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'asc' => 'text/plain', + 'asf' => 'video/x-ms-asf', + 'atom' => 'application/atom+xml', + 'avi' => 'video/x-msvideo', + 'bmp' => 'image/bmp', + 'bz2' => 'application/x-bzip2', + 'cer' => 'application/pkix-cert', + 'crl' => 'application/pkix-crl', + 'crt' => 'application/x-x509-ca-cert', + 'css' => 'text/css', + 'csv' => 'text/csv', + 'cu' => 'application/cu-seeme', + 'deb' => 'application/x-debian-package', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dvi' => 'application/x-dvi', + 'eot' => 'application/vnd.ms-fontobject', + 'eps' => 'application/postscript', + 'epub' => 'application/epub+zip', + 'etx' => 'text/x-setext', + 'flac' => 'audio/flac', + 'flv' => 'video/x-flv', + 'gif' => 'image/gif', + 'gz' => 'application/gzip', + 'htm' => 'text/html', + 'html' => 'text/html', + 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', + 'ini' => 'text/plain', + 'iso' => 'application/x-iso9660-image', + 'jar' => 'application/java-archive', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'js' => 'text/javascript', + 'json' => 'application/json', + 'latex' => 'application/x-latex', + 'log' => 'text/plain', + 'm4a' => 'audio/mp4', + 'm4v' => 'video/mp4', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mp4a' => 'audio/mp4', + 'mp4v' => 'video/mp4', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpg4' => 'video/mp4', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'ogv' => 'video/ogg', + 'ogx' => 'application/ogg', + 'pbm' => 'image/x-portable-bitmap', + 'pdf' => 'application/pdf', + 'pgm' => 'image/x-portable-graymap', + 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', + 'ppm' => 'image/x-portable-pixmap', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'ps' => 'application/postscript', + 'qt' => 'video/quicktime', + 'rar' => 'application/x-rar-compressed', + 'ras' => 'image/x-cmu-raster', + 'rss' => 'application/rss+xml', + 'rtf' => 'application/rtf', + 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', + 'svg' => 'image/svg+xml', + 'swf' => 'application/x-shockwave-flash', + 'tar' => 'application/x-tar', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'torrent' => 'application/x-bittorrent', + 'ttf' => 'application/x-font-ttf', + 'txt' => 'text/plain', + 'wav' => 'audio/x-wav', + 'webm' => 'video/webm', + 'wma' => 'audio/x-ms-wma', + 'wmv' => 'video/x-ms-wmv', + 'woff' => 'application/x-font-woff', + 'wsdl' => 'application/wsdl+xml', + 'xbm' => 'image/x-xbitmap', + 'xls' => 'application/vnd.ms-excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'application/xml', + 'xpm' => 'image/x-xpixmap', + 'xwd' => 'image/x-xwindowdump', + 'yaml' => 'text/yaml', + 'yml' => 'text/yaml', + 'zip' => 'application/zip', + ]; + + $extension = strtolower($extension); + + return isset($mimetypes[$extension]) + ? $mimetypes[$extension] + : null; +} + +/** + * Parses an HTTP message into an associative array. + * + * The array contains the "start-line" key containing the start line of + * the message, "headers" key containing an associative array of header + * array values, and a "body" key containing the body of the message. + * + * @param string $message HTTP request or response to parse. + * + * @return array + * @internal + */ +function _parse_message($message) +{ + if (!$message) { + throw new \InvalidArgumentException('Invalid message'); + } + + // Iterate over each line in the message, accounting for line endings + $lines = preg_split('/(\\r?\\n)/', $message, -1, PREG_SPLIT_DELIM_CAPTURE); + $result = ['start-line' => array_shift($lines), 'headers' => [], 'body' => '']; + array_shift($lines); + + for ($i = 0, $totalLines = count($lines); $i < $totalLines; $i += 2) { + $line = $lines[$i]; + // If two line breaks were encountered, then this is the end of body + if (empty($line)) { + if ($i < $totalLines - 1) { + $result['body'] = implode('', array_slice($lines, $i + 2)); + } + break; + } + if (strpos($line, ':')) { + $parts = explode(':', $line, 2); + $key = trim($parts[0]); + $value = isset($parts[1]) ? trim($parts[1]) : ''; + $result['headers'][$key][] = $value; + } + } + + return $result; +} + +/** + * Constructs a URI for an HTTP request message. + * + * @param string $path Path from the start-line + * @param array $headers Array of headers (each value an array). + * + * @return string + * @internal + */ +function _parse_request_uri($path, array $headers) +{ + $hostKey = array_filter(array_keys($headers), function ($k) { + return strtolower($k) === 'host'; + }); + + // If no host is found, then a full URI cannot be constructed. + if (!$hostKey) { + return $path; + } + + $host = $headers[reset($hostKey)][0]; + $scheme = substr($host, -4) === ':443' ? 'https' : 'http'; + + return $scheme . '://' . $host . '/' . ltrim($path, '/'); +} + +/** @internal */ +function _caseless_remove($keys, array $data) +{ + $result = []; + + foreach ($keys as &$key) { + $key = strtolower($key); + } + + foreach ($data as $k => $v) { + if (!in_array(strtolower($k), $keys)) { + $result[$k] = $v; + } + } + + return $result; +} diff --git a/civicrm/vendor/guzzlehttp/psr7/src/functions_include.php b/civicrm/vendor/guzzlehttp/psr7/src/functions_include.php new file mode 100644 index 0000000000000000000000000000000000000000..96a4a83a01aac6412572b74fd9b0abc339f6ad0f --- /dev/null +++ b/civicrm/vendor/guzzlehttp/psr7/src/functions_include.php @@ -0,0 +1,6 @@ +<?php + +// Don't redefine the functions if included multiple times. +if (!function_exists('GuzzleHttp\Psr7\str')) { + require __DIR__ . '/functions.php'; +} diff --git a/civicrm/vendor/marcj/topsort/README.md b/civicrm/vendor/marcj/topsort/README.md index 18288789b4cf6842883f289599087ccccbf08013..2f1ee525f2c1028c1ec1db248ab00e5c432953bf 100644 --- a/civicrm/vendor/marcj/topsort/README.md +++ b/civicrm/vendor/marcj/topsort/README.md @@ -120,93 +120,48 @@ Small drawback: You can not store element ids containing a null byte. This is the most basic, not so efficient implementation of grouped topSort using plain php arrays. -### GroupedFixedArraySort - -This uses \SplFixedArray of php and is therefore much more memory friendly, but is extremely inefficient, - because it burns your CPU since it has to shifts all array in php and not in c (like normal GroupedArraySort it does - with `array_splice`). - ### GroupedStringSort -This uses a string as storage and has therefore no array operations overhead. It's extremely faster than those implementations -above and has almost equal memory footprint like FixedArraySort. +This uses a string as storage and has therefore no array operations overhead. It's extremely faster + and has better memory footprint than GroupedArraySort. Small drawback: You can not store element ids containing a null byte. -## Benchmarks +## Benchmarks with PHP 7.0.9 Test data: 1/3 has two edges, 1/3 has one edge and 1/3 has no edges. Use the `benchmark` command in `./bin/console` to play with it. -### 50 elements - -Implementation | Memory | Duration ----------------|--------------|--------- -FixedArraySort | 2,344b | 0.0005s -ArraySort | 6,728b | 0.0005s -StringSort | 2,008b | 0.0005s - - -Implementation | Memory | Duration -----------------------|--------------|--------- -GroupedFixedArraySort | 2,728b | 0.0013s -GroupedArraySort | 10,912b | 0.0010s -GroupedStringSort | 2,496b | 0.0010s - - -### 1.000 elements - -Implementation | Memory | Duration ----------------|--------------|--------- -FixedArraySort | 8,944b | 0.0098s -ArraySort | 98,208b | 0.0102s -StringSort | 9,224b | 0.0095s - - -Implementation | Memory | Duration -----------------------|--------------|--------- -GroupedFixedArraySort | 35,296b | 0.1467s -GroupedArraySort | 132,960b | 0.0497s -GroupedStringSort | 36,376b | 0.0248s - - -### 10.000 elements - -Implementation | Memory | Duration ----------------|--------------|--------- -FixedArraySort | 81,712b | 0.1146s -ArraySort | 1,014,000b | 0.1128s -StringSort | 91,088b | 0.1144s - - -Implementation | Memory | Duration -----------------------|--------------|--------- -GroupedFixedArraySort | 395,224b | 13.2805s -GroupedArraySort | 1,454,832b | 5.5021s -GroupedStringSort | 391,704b | 0.2504s - - -### 100.000 elements - -`--` means took too long. - -Implementation | Memory | Duration ----------------|--------------|--------- -FixedArraySort | 801,496b | 1.8707s -ArraySort | 9,850,048b | 1.9147s -StringSort | 1,001,176b | 1.7949s - - -Implementation | Memory | Duration -----------------------|--------------|--------- -GroupedFixedArraySort | -- | -- -GroupedArraySort | -- | -- -GroupedStringSort | -3,795,944b | 6.6949s - -### 1.000.000 elements - - -Implementation | Memory | Duration ----------------|--------------|--------- -FixedArraySort | 7,995,152b | 86.6527s -ArraySort | 96,386,112b | 97.5971s -StringSort | 10,994,248b | 80.8750s ++-----------+----------------+--------------+----------+ +| Count | Implementation | Memory | Duration | ++-----------+----------------+--------------+----------+ +| 50 | FixedArraySort | 0b | 0.0001s | +| 50 | ArraySort | 0b | 0.0001s | +| 50 | StringSort | 0b | 0.0001s | +| 1,000 | FixedArraySort | 53,432b | 0.0013s | +| 1,000 | ArraySort | 37,720b | 0.0012s | +| 1,000 | StringSort | 89,112b | 0.0013s | +| 10,000 | FixedArraySort | 692,464b | 0.0141s | +| 10,000 | ArraySort | 529,240b | 0.0138s | +| 10,000 | StringSort | 1,080,472b | 0.0154s | +| 100,000 | FixedArraySort | 5,800,200b | 0.1540s | +| 100,000 | ArraySort | 4,199,280b | 0.1499s | +| 100,000 | StringSort | 10,124,000b | 0.1645s | +| 1,000,000 | FixedArraySort | 49,561,888b | 1.5456s | +| 1,000,000 | ArraySort | 33,559,408b | 1.5597s | +| 1,000,000 | StringSort | 95,480,848b | 1.7942s | ++-----------+----------------+--------------+----------+ + ++-----------+-------------------+--------------+-----------+ +| Count | Implementation | Memory | Duration | ++-----------+-------------------+--------------+-----------+ +| 50 | GroupedArraySort | 0b | 0.0002s | +| 50 | GroupedStringSort | 0b | 0.0002s | +| 1,000 | GroupedArraySort | 112,280b | 0.0090s | +| 1,000 | GroupedStringSort | 99,440b | 0.0025s | +| 10,000 | GroupedArraySort | 1,431,320b | 0.8385s | +| 10,000 | GroupedStringSort | 1,176,304b | 0.0267s | +| 100,000 | GroupedArraySort | 12,318,072b | 132.9709s | +| 100,000 | GroupedStringSort | 11,129,144b | 0.2788s | +| 1,000,000 | GroupedArraySort | - | too long | +| 1,000,000 | GroupedStringSort | 106,488,496b | 3.0879s | ++-----------+-------------------+--------------+-----------+ \ No newline at end of file diff --git a/civicrm/vendor/marcj/topsort/bin/test.php b/civicrm/vendor/marcj/topsort/bin/test.php new file mode 100644 index 0000000000000000000000000000000000000000..9b95f1b397c0d551f438e521b7daf5e7b7e696ca --- /dev/null +++ b/civicrm/vendor/marcj/topsort/bin/test.php @@ -0,0 +1,44 @@ +<?php + +require __DIR__ . '/../vendor/autoload.php'; + +$class = $argv[1]; +$count = $argv[2]; + + +function getElementsFlat($count) { + $elements = []; + for ($i = 0; $i < $count/3; $i++) { + $elements['car' . $i] = ['brand' . $i]; + $elements['owner' . $i] = ['brand' . $i, 'car' . $i]; + $elements['brand' . $i] = []; + } + + return $elements; +} + +function getElementsGroup($count) { + $elements = []; + for ($i = 0; $i < $count/3; $i++) { + $elements['car' . $i] = ['car', ['brand' . $i]]; + $elements['owner' . $i] = ['owner', ['brand' . $i, 'car' . $i]]; + $elements['brand' . $i] = ['brand', []]; + } + return $elements; +} + +$elements = 0 === strpos($class, 'Grouped') ? getElementsGroup($count) : getElementsFlat($count); + +$class = '\MJS\TopSort\Implementations\\' . $class; +$sorted = new $class($elements); + +$start = microtime(true); +gc_collect_cycles(); +$lastMemory = memory_get_peak_usage(); + +$sorted->sort(); + +echo json_encode([ + 'memory' => memory_get_peak_usage() - $lastMemory, + 'time' => microtime(true) - $start +]); diff --git a/civicrm/vendor/marcj/topsort/composer.json b/civicrm/vendor/marcj/topsort/composer.json index 1bdc4bbc4a5555f3190081b9237afafa968f05c2..b80ed8a3115805cbf53deb2cabd92ca5a8a42a1e 100644 --- a/civicrm/vendor/marcj/topsort/composer.json +++ b/civicrm/vendor/marcj/topsort/composer.json @@ -15,7 +15,7 @@ } ], "require": { - "php": ">=5.3" + "php": ">=5.4" }, "require-dev": { "phpunit/phpunit": "~4.0", diff --git a/civicrm/vendor/marcj/topsort/composer.lock b/civicrm/vendor/marcj/topsort/composer.lock index 0db7b0b85e41903e2da906e646c3458aeb19742d..5c80af9517c863c3c2880953fc05800aa65a004a 100644 --- a/civicrm/vendor/marcj/topsort/composer.lock +++ b/civicrm/vendor/marcj/topsort/composer.lock @@ -4,7 +4,7 @@ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "cc6783e7988291f4d16973c4460bf448", + "hash": "3cb3b320ff8857995319e933a2cb677f", "packages": [], "packages-dev": [ { @@ -1267,7 +1267,7 @@ }, "prefer-stable": false, "platform": { - "php": ">=5.3" + "php": ">=5.4" }, "platform-dev": [] } diff --git a/civicrm/vendor/marcj/topsort/src/Command/BenchmarkCommand.php b/civicrm/vendor/marcj/topsort/src/Command/BenchmarkCommand.php index 6277de924b6f8256aee5a728baf168950932d15b..d67ee2ffd270c570b6ae6aecf1496408412f1b9c 100644 --- a/civicrm/vendor/marcj/topsort/src/Command/BenchmarkCommand.php +++ b/civicrm/vendor/marcj/topsort/src/Command/BenchmarkCommand.php @@ -24,56 +24,59 @@ class BenchmarkCommand extends Command { $this ->setName('benchmark') - ->addArgument('count', InputArgument::OPTIONAL, 'Count', 1000) ; } protected function execute(InputInterface $input, OutputInterface $output) { - $this->testSimpleCount($input->getArgument('count'), $output); - $this->testGroupCount($input->getArgument('count'), $output); + $this->testSimpleCount($output); + $this->testGroupCount($output); } - protected function testGroupCount($count, $output) + protected function testGroupCount($output) { - $this->test($count, ['GroupedFixedArraySort', 'GroupedArraySort', 'GroupedStringSort'], $output); + $this->test(['GroupedArraySort', 'GroupedStringSort'], $output); } - protected function testSimpleCount($count, $output) + protected function testSimpleCount($output) { - $this->test($count, ['FixedArraySort', 'ArraySort', 'StringSort'], $output); + $this->test(['FixedArraySort', 'ArraySort', 'StringSort'], $output); } - protected function test($count, $classes, OutputInterface $output) + protected function test($classes, OutputInterface $output) { $this->table = new Table($output); - $this->table->setHeaders(array('Implementation', 'Memory', 'Duration')); - $output->writeln(sprintf('<info>%d elements</info>', $count)); + $this->table->setHeaders(array('Count', 'Implementation', 'Memory', 'Duration')); - $this->process = new ProgressBar($output, count($classes)); + $counts = array(50, 1000, 10000, 100000, 1000000); + + $this->process = new ProgressBar($output, count($counts)); $this->process->start(); - foreach ($classes as $class) { - $shortClass = $class; -// if (in_array($class, $blacklist)) { -// $this->table->addRow([$class, '--', '--']); -// continue; -// }; - - $path = __DIR__ . '/../../bin/test.php'; - - $result = `php $path $class $count`; - $data = json_decode($result, true); - if (!$data) { - echo $result; - } + foreach ($counts as $count) { + + foreach ($classes as $class) { + if ($count === 1000000 && $class === 'GroupedArraySort') { + continue; + } + + $path = __DIR__ . '/../../bin/test.php'; - $this->table->addRow( - [ - $shortClass, - sprintf('%11sb', number_format($data['memory'])), - sprintf('%6.4fs', $data['time']) - ] - ); + $result = `php $path $class $count`; + $data = json_decode($result, true); + if (!$data) { + echo $result; + } + + $this->table->addRow( + array( + number_format($count), + $class, + sprintf('%11sb', number_format($data['memory'])), + sprintf('%6.4fs', $data['time']) + ) + ); + + } $this->process->advance(); } diff --git a/civicrm/vendor/marcj/topsort/src/GroupedTopSortInterface.php b/civicrm/vendor/marcj/topsort/src/GroupedTopSortInterface.php index fc78e3e6241cc7373793574df9bd53b2ee75551a..7c240dbf3ce7e3a442bdd83875f5ddc6a417023e 100644 --- a/civicrm/vendor/marcj/topsort/src/GroupedTopSortInterface.php +++ b/civicrm/vendor/marcj/topsort/src/GroupedTopSortInterface.php @@ -57,13 +57,50 @@ interface GroupedTopSortInterface * * where type is the type given by ->add($id, $type, $deps), level * is the position of the group within all groups and position - * is the position of the first element in the list of all elements (getList()) + * is the position of the first element in the list of all elements (sort()) * * $firstElementPosition = $sorter->getGroups()[0]->position; * * $element = $this->sort()[$firstElementPosition]; * + * $firstElementOfSecondGroup = $sorter->getGroups()[1]->position; + * + * $element = $this->sort()[$firstElementPosition]; + * * @return object[] */ public function getGroups(); + + + /** + * Sorts dependencies and returns the groups of types with sorted elements. + * + * [ + * [ + * type: 'car' + * elements: ['element1', 'element2'] + * ],[ + * type: 'brand' + * elements: ['brand1'] + * ] + * ] + * + * @return array + */ + public function sortGrouped(); + + + /** + * When active the sorter creates a new group when a element has a dependency to the same type. + * + * @return boolean + */ + public function isSameTypeExtraGrouping(); + + /** + * When active the sorter creates a new group when a element has a dependency to the same type. + * + * @param boolean $sameTypeExtraGrouping + */ + public function setSameTypeExtraGrouping($sameTypeExtraGrouping); } \ No newline at end of file diff --git a/civicrm/vendor/marcj/topsort/src/Implementations/GroupedArraySort.php b/civicrm/vendor/marcj/topsort/src/Implementations/GroupedArraySort.php index 4306afa687b0c540750664e9a61e1d7e372504c8..ae3698a895262e2c263319ae1791eab566d77bc6 100644 --- a/civicrm/vendor/marcj/topsort/src/Implementations/GroupedArraySort.php +++ b/civicrm/vendor/marcj/topsort/src/Implementations/GroupedArraySort.php @@ -20,6 +20,29 @@ class GroupedArraySort extends BaseImplementation implements GroupedTopSortInter protected $debugging = false; + /** + * When active the sorter creates a new group when a element has a dependency to the same type. + * + * @var bool + */ + protected $sameTypeExtraGrouping = false; + + /** + * @return boolean + */ + public function isSameTypeExtraGrouping() + { + return $this->sameTypeExtraGrouping; + } + + /** + * @param boolean $sameTypeExtraGrouping + */ + public function setSameTypeExtraGrouping($sameTypeExtraGrouping) + { + $this->sameTypeExtraGrouping = $sameTypeExtraGrouping; + } + /** * @param string $name * @param string $type @@ -38,6 +61,7 @@ class GroupedArraySort extends BaseImplementation implements GroupedTopSortInter ); } + /** * @param array[] $elements ['id' => ['type', ['dep1', 'dep2']], 'id2' => ...] */ @@ -76,6 +100,12 @@ class GroupedArraySort extends BaseImplementation implements GroupedTopSortInter if ($addedAtGroupLevel > $minLevel) { $minLevel = $addedAtGroupLevel; } + if ($this->isSameTypeExtraGrouping()) { + if ($this->elements[$dependency]->type === $element->type) { + //add a new group + $minLevel = $this->groupLevel; + } + } } else { throw ElementNotFoundException::create($element->id, $dependency); } @@ -86,7 +116,7 @@ class GroupedArraySort extends BaseImplementation implements GroupedTopSortInter $this->injectElement($element, $minLevel); - return $minLevel; + return $minLevel === -1 ? $element->addedAtLevel : $minLevel; } return $element->addedAtLevel; @@ -112,6 +142,7 @@ class GroupedArraySort extends BaseImplementation implements GroupedTopSortInter } } $element->addedAtLevel = $group->level; + $this->position++; } else { $this->groups[] = (object)array( 'type' => $element->type, @@ -156,6 +187,20 @@ class GroupedArraySort extends BaseImplementation implements GroupedTopSortInter return $this->groups; } + /** + * @return array + */ + public function sortGrouped() + { + $items = $this->sort(); + $groups = array(); + foreach ($this->getGroups() as $group) { + $groups[] = array('type' => $group->type, 'elements' => array_slice($items, $group->position, $group->length)); + } + + return $groups; + } + /** * @param string $type * @param integer $minLevel @@ -189,7 +234,17 @@ class GroupedArraySort extends BaseImplementation implements GroupedTopSortInter */ public function doSort() { + if ($this->sorted) { + //reset state when already executed + foreach ($this->elements as $element) { + $element->visited = false; + } + } + $this->sorted = array(); + $this->groups = array(); + $this->position = 0; + $this->groupLevel = 0; foreach ($this->elements as $element) { $parents = array(); diff --git a/civicrm/vendor/marcj/topsort/src/Implementations/GroupedFixedArraySort.php b/civicrm/vendor/marcj/topsort/src/Implementations/GroupedFixedArraySort.php deleted file mode 100644 index 892d0a11af64352d535209f1782dff728fe03eaf..0000000000000000000000000000000000000000 --- a/civicrm/vendor/marcj/topsort/src/Implementations/GroupedFixedArraySort.php +++ /dev/null @@ -1,87 +0,0 @@ -<?php - -namespace MJS\TopSort\Implementations; - -/** - * - * Implements grouped topological-sort based on fixed arrays (\SplFixedArray). - * - * @author Marc J. Schmidt <marc@marcjschmidt.de> - */ -class GroupedFixedArraySort extends GroupedArraySort -{ - /** - * @param object $element - * @param integer $minLevel - */ - protected function injectElement($element, $minLevel) - { - if ($group = $this->getFirstGroup($element->type, $minLevel)) { - $this->addItemAt($group->position + $group->length, $element); - $group->length++; - - //increase all following groups +1 - $i = $group->position; - foreach ($this->groups as $tempGroup) { - if ($tempGroup->position > $i) { - $tempGroup->position++; - } - } - - $element->addedAtLevel = $group->level; - } else { - $this->groups[] = (object)array( - 'type' => $element->type, - 'level' => $this->groupLevel, - 'position' => $this->position, - 'length' => 1 - ); - $element->addedAtLevel = $this->groupLevel; - $this->sorted[$this->position] = $element->id; - $this->position++; - - $this->groupLevel++; - } - } - - /** - * @param integer $position - * @param object $element - */ - public function addItemAt($position, $element) - { - //shift all items >> - for ($i = $this->position; $i > $position; $i--) { - $this->sorted[$i] = $this->sorted[$i - 1]; - } - - $this->sorted[$position] = $element->id; - $this->position++; - } - - /** - * {@inheritDoc} - */ - public function sort() - { - return $this->doSort()->toArray(); - } - - /** - * {@inheritDoc} - * - * @return \SplFixedArray - */ - public function doSort() - { - $this->position = 0; - $this->sorted = new \SplFixedArray(count($this->elements)); - - foreach ($this->elements as $element) { - $parents = array(); - $this->visit($element, $parents); - } - - return $this->sorted; - } -} \ No newline at end of file diff --git a/civicrm/vendor/marcj/topsort/src/Implementations/GroupedStringSort.php b/civicrm/vendor/marcj/topsort/src/Implementations/GroupedStringSort.php index 7bb54d6253cbc321a4155fb9cd8d94a1695562c9..e6c096ee55aa72cd4e6113fc83a674c9daec261d 100644 --- a/civicrm/vendor/marcj/topsort/src/Implementations/GroupedStringSort.php +++ b/civicrm/vendor/marcj/topsort/src/Implementations/GroupedStringSort.php @@ -94,6 +94,13 @@ class GroupedStringSort extends GroupedArraySort */ public function doSort() { + if ($this->sorted) { + //reset state when already executed + foreach ($this->elements as $element) { + $element->visited = false; + } + } + $this->position = 0; $this->sorted = ''; diff --git a/civicrm/vendor/phpoffice/phpword/.gitignore b/civicrm/vendor/phpoffice/phpword/.gitignore index e5deb643872cc12a0736b3abe90c53063513b1eb..2ac6e2b5c79f71253ab2ce1cf476991e43202800 100644 --- a/civicrm/vendor/phpoffice/phpword/.gitignore +++ b/civicrm/vendor/phpoffice/phpword/.gitignore @@ -6,14 +6,18 @@ Thumbs.db Desktop.ini .idea _build +/build phpunit.xml composer.lock composer.phar vendor /report +/build /samples/resources /samples/results /.settings phpword.ini /.buildpath -/.project \ No newline at end of file +/.project +/nbproject +/.php_cs.cache diff --git a/civicrm/vendor/phpoffice/phpword/.php_cs.dist b/civicrm/vendor/phpoffice/phpword/.php_cs.dist new file mode 100644 index 0000000000000000000000000000000000000000..895ed80f56236d5122a6870cabb760ff4666e483 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/.php_cs.dist @@ -0,0 +1,146 @@ +<?php + +$finder = PhpCsFixer\Finder::create() + ->notName('pclzip.lib.php') + ->notName('OLERead.php') + ->in('samples') + ->in('src') + ->in('tests'); + +return PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setFinder($finder) + ->setRules(array( + 'array_syntax' => array('syntax' => 'long'), + 'binary_operator_spaces' => array('align_double_arrow' => true), + 'blank_line_after_namespace' => true, + 'blank_line_after_opening_tag' => false, + 'blank_line_before_return' => true, + 'braces' => true, + 'cast_spaces' => true, + 'class_definition' => true, + 'class_keyword_remove' => false, // ::class keyword gives us beter support in IDE + 'combine_consecutive_unsets' => true, + 'concat_space' => array('spacing' => 'one'), + 'declare_equal_normalize' => true, + 'declare_strict_types' => false, // Too early to adopt strict types + 'dir_constant' => true, + 'elseif' => true, + 'encoding' => true, + 'ereg_to_preg' => true, + 'full_opening_tag' => true, + 'function_declaration' => true, + 'function_typehint_space' => true, + 'general_phpdoc_annotation_remove' => false, // No use for that + 'hash_to_slash_comment' => true, + 'header_comment' => false, // We don't use common header in all our files + 'heredoc_to_nowdoc' => false, // Not sure about this one + 'is_null' => false, // Risky + 'include' => true, + 'indentation_type' => true, + 'line_ending' => true, + 'linebreak_after_opening_tag' => true, + 'lowercase_cast' => true, + 'lowercase_constants' => true, + 'lowercase_keywords' => true, + 'mb_str_functions' => false, // No, too dangerous to change that + 'method_argument_space' => true, + 'method_separation' => true, + 'modernize_types_casting' => true, + 'native_function_casing' => true, + 'native_function_invocation'=> false, // This is risky and seems to be micro-optimization that make code uglier so not worth it, at least for now + 'new_with_braces' => true, + 'no_alias_functions' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_blank_lines_before_namespace' => false, // we want 1 blank line before namespace + 'no_closing_tag' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_consecutive_blank_lines' => array('break', 'continue', 'extra', 'return', 'throw', 'use', 'useTrait', 'curly_brace_block', 'parenthesis_brace_block', 'square_brace_block'), + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => true, + 'no_multiline_whitespace_around_double_arrow' => true, + 'no_multiline_whitespace_before_semicolons' => true, + 'no_php4_constructor' => true, + 'no_short_bool_cast' => true, + 'no_short_echo_tag' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_around_offset' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_trailing_whitespace' => true, + 'no_trailing_whitespace_in_comment' => true, + 'no_unneeded_control_parentheses' => true, + 'no_unreachable_default_argument_value' => true, + 'no_unused_imports' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'normalize_index_brace' => true, + 'not_operator_with_space' => false, // No we prefer to keep '!' without spaces + 'not_operator_with_successor_space' => false, // idem + 'object_operator_without_whitespace' => true, + 'ordered_class_elements' => false, // We prefer to keep some freedom + 'ordered_imports' => true, + 'php_unit_construct' => true, + 'php_unit_dedicate_assert' => true, + 'php_unit_fqcn_annotation' => true, + 'php_unit_strict' => false, // We sometime actually need assertEquals + 'phpdoc_add_missing_param_annotation' => true, + 'phpdoc_align' => false, // Waste of time + 'phpdoc_annotation_without_dot' => true, + 'phpdoc_indent' => true, + 'phpdoc_inline_tag' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_alias_tag' => true, + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, + 'phpdoc_no_useless_inheritdoc' => true, + 'phpdoc_order' => true, + 'phpdoc_return_self_reference' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => false, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_summary' => false, + 'phpdoc_to_comment' => true, + 'phpdoc_trim' => true, + 'phpdoc_types' => true, + 'phpdoc_var_without_name' => true, + 'pow_to_exponentiation' => false, + 'pre_increment' => false, + 'protected_to_private' => true, + 'psr0' => true, + 'psr4' => true, + 'random_api_migration' => false, // This breaks our unit tests + 'return_type_declaration' => true, + 'self_accessor' => true, + 'semicolon_after_instruction' => false, // Buggy in `samples/index.php` + 'short_scalar_cast' => true, + 'silenced_deprecation_error' => true, + 'simplified_null_return' => false, // While technically correct we prefer to be explicit when returning null + 'single_blank_line_at_eof' => true, + 'single_blank_line_before_namespace' => true, + 'single_class_element_per_statement' => true, + 'single_import_per_statement' => true, + 'single_line_after_imports' => true, + 'single_quote' => true, + 'space_after_semicolon' => true, + 'standardize_not_equals' => true, + 'strict_comparison' => false, // No, too dangerous to change that + 'strict_param' => false, // No, too dangerous to change that + 'switch_case_semicolon_to_colon' => true, + 'switch_case_space' => true, + 'ternary_operator_spaces' => true, + 'ternary_to_null_coalescing' => false, // Cannot use that with PHP 5.6 + 'trailing_comma_in_multiline_array' => true, + 'trim_array_spaces' => false, + 'unary_operator_spaces' => true, + 'visibility_required' => true, + 'whitespace_after_comma_in_array' => true, + )); diff --git a/civicrm/vendor/phpoffice/phpword/.scrutinizer.yml b/civicrm/vendor/phpoffice/phpword/.scrutinizer.yml index 6f982d8e89c8a497ba77c7a01cae49859365814c..c8fe57cf63b7f1a0601f2847229bad6757a3c737 100644 --- a/civicrm/vendor/phpoffice/phpword/.scrutinizer.yml +++ b/civicrm/vendor/phpoffice/phpword/.scrutinizer.yml @@ -15,7 +15,7 @@ tools: ruleset: phpmd.xml.dist external_code_coverage: enabled: true - timeout: 900 + timeout: 1200 php_cpd: true # php_sim: # Temporarily disabled to allow focus on things other than duplicates # min_mass: 40 diff --git a/civicrm/vendor/phpoffice/phpword/.travis.yml b/civicrm/vendor/phpoffice/phpword/.travis.yml index 0712f734616a57372af4a95c7e3f787a2a3917c9..d63b7bb22c228a8747fa36a55c574f9f13a48676 100644 --- a/civicrm/vendor/phpoffice/phpword/.travis.yml +++ b/civicrm/vendor/phpoffice/phpword/.travis.yml @@ -1,17 +1,28 @@ language: php +dist: precise + php: - 5.3 - 5.4 - 5.5 - 5.6 - 7.0 - - hhvm + - 7.1 + - 7.2 matrix: + include: + - php: 5.6 + env: COVERAGE=1 allow_failures: - - php: 7.0 - - php: hhvm + - php: 7.2 + +cache: + directories: + - vendor + - $HOME/.composer/cache + - .php-cs.cache env: global: @@ -23,6 +34,8 @@ before_install: - sudo apt-get install -y graphviz before_script: + ## Deactivate xdebug if we don't do code coverage + - if [ -z "$COVERAGE" ]; then phpenv config-rm xdebug.ini ; fi ## Composer - composer self-update - composer install --prefer-source @@ -32,19 +45,20 @@ before_script: script: ## PHP_CodeSniffer - - ./vendor/bin/phpcs src/ tests/ --standard=PSR2 -n --ignore=src/PhpWord/Shared/PCLZip + - if [ -z "$COVERAGE" ]; then ./vendor/bin/phpcs src/ tests/ --standard=PSR2 -n --ignore=src/PhpWord/Shared/PCLZip ; fi + ## PHP-CS-Fixer + - if [ -n "$COVERAGE" ]; then ./vendor/bin/php-cs-fixer fix --diff --verbose --dry-run ; fi ## PHP Mess Detector - - ./vendor/bin/phpmd src/,tests/ text ./phpmd.xml.dist --exclude pclzip.lib.php + - if [ -z "$COVERAGE" ]; then ./vendor/bin/phpmd src/,tests/ text ./phpmd.xml.dist --exclude pclzip.lib.php ; fi ## PHPUnit - - ./vendor/bin/phpunit -c ./ --coverage-text --coverage-html ./build/coverage + - ./vendor/bin/phpunit -c ./ $(if [ -n "$COVERAGE" ]; then echo --coverage-text; else echo --no-coverage; fi) ## PHPLOC - - ./vendor/bin/phploc src/ + - if [ -z "$COVERAGE" ]; then ./vendor/bin/phploc src/ ; fi ## PHPDocumentor - - ./vendor/bin/phpdoc -q -d ./src -t ./build/docs --ignore "*/src/PhpWord/Shared/*/*" --template="responsive-twig" + - if [ -z "$COVERAGE" ]; then ./vendor/bin/phpdoc -q -d ./src -t ./build/docs --ignore "*/src/PhpWord/Shared/*/*" --template="responsive-twig" ; fi after_script: ## PHPDocumentor - bash .travis_shell_after_success.sh ## Scrutinizer - - wget https://scrutinizer-ci.com/ocular.phar - - php ocular.phar code-coverage:upload --format=php-clover build/logs/clover.xml + - if [ -n "$COVERAGE" ]; then wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover build/logs/clover.xml ; fi diff --git a/civicrm/vendor/phpoffice/phpword/.travis_shell_after_success.sh b/civicrm/vendor/phpoffice/phpword/.travis_shell_after_success.sh index 35c7a338b9e636074bd5312f40ee3a02ecebedd2..127285261927f8929f0d5041fbc363d317119d54 100644 --- a/civicrm/vendor/phpoffice/phpword/.travis_shell_after_success.sh +++ b/civicrm/vendor/phpoffice/phpword/.travis_shell_after_success.sh @@ -5,7 +5,7 @@ echo "TRAVIS_REPO_SLUG: $TRAVIS_REPO_SLUG" echo "TRAVIS_PHP_VERSION: $TRAVIS_PHP_VERSION" echo "TRAVIS_PULL_REQUEST: $TRAVIS_PULL_REQUEST" -if [ "$TRAVIS_REPO_SLUG" == "PHPOffice/PHPWord" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_PHP_VERSION" == "5.5" ]; then +if [ "$TRAVIS_REPO_SLUG" == "PHPOffice/PHPWord" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_PHP_VERSION" == "5.6" ]; then echo -e "Publishing PHPDoc...\n" diff --git a/civicrm/vendor/phpoffice/phpword/CHANGELOG.md b/civicrm/vendor/phpoffice/phpword/CHANGELOG.md index 66f38ddacaf31ee1b1a145b9b7060dea100f9e47..93945189a91cf65b50f8997b6e7cc5f29bba2dcb 100644 --- a/civicrm/vendor/phpoffice/phpword/CHANGELOG.md +++ b/civicrm/vendor/phpoffice/phpword/CHANGELOG.md @@ -3,6 +3,53 @@ Change Log All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +v0.14.0 (29 Dec 2017) +---------------------- +This release fixes several bugs and adds some new features. +This version brings compatibility with PHP 7.0 & 7.1 + +### Added +- Possibility to control the footnote numbering - @troosan #1068 +- Image creation from string - @troosan #937 +- Introduced the `\PhpOffice\PhpWord\SimpleType\NumberFormat` simple type. - @troosan +- Support for ContextualSpacing - @postHawk #1088 +- Possiblity to hide spelling and/or grammatical errors - @troosan #542 +- Possiblity to set default document language as well as changing the language for each text element - @troosan #1108 +- Support for Comments - @troosan #1067 +- Support for paragraph textAlignment - @troosan #1165 +- Add support for HTML underline tag <u> in addHtml - @zNightFalLz #1186 +- Add support for HTML <br> in addHtml - @anrikun @troosan #659 +- Allow to change cell width unit - guillaume-ro-fr #986 +- Allow to change the line height rule @troosan +- Implement PageBreak for odt writer @cookiekiller #863 #824 +- Allow to force an update of all fields on opening a document - @troosan #951 +- Allow adding a CheckBox in a TextRun - @irond #727 +- Add support for HTML img tag - @srggroup #934 +- Add support for password protection for docx - @mariahaubner #1019 + +### Fixed +- Loosen dependency to Zend +- Images are not being printed when generating PDF - @hubertinio #1074 #431 +- Fixed some PHP 7 warnings - @likeuntomurphy #927 +- Fixed Word 97 reader - @alsofronie @Benpxpx @mario-rivera #912 #920 #892 +- Fixed image loading over https - @troosan #988 +- Impossibility to set different even and odd page headers - @troosan #981 +- Fixed Word2007 reader where unnecessary paragraphs were being created - @donghaobo #1043 #620 +- Fixed Word2007 reader where margins were not being read correctly - @slowprog #885 #1008 +- Impossible to add element PreserveText in Section - @rvanlaak #452 +- Added missing options for numbering format - @troosan #1041 +- Fixed impossibility to set a different footer for first page - @ctrlaltca #1116, @aoloe #875 +- Fixed styles not being applied by HTML writer, better pdf output - @sarke #1047 #500 #1139 +- Fixed read docx error when document contains image from remote url - @FBnil #1173 #1176 +- Padded the $args array to remove error - @kaigoh #1150, @reformed #870 +- Fix incorrect image size between windows and mac - @bskrtich #874 +- Fix adding HTML table to document - @mogilvie @arivanbastos #324 +- Fix parsing on/off values (w:val="true|false|1|0|on|off") - @troosan #1221 #1219 +- Fix error on Empty Dropdown Entry - @ComputerTinker #592 + +### Deprecated +- PhpWord->getProtection(), get it from the settings instead PhpWord->getSettings()->getDocumentProtection(); + v0.13.0 (31 July 2016) ------------------- This release brings several improvements in `TemplateProcessor`, automatic output escaping feature for OOXML, ODF, HTML, and RTF (turned off, by default). @@ -22,6 +69,7 @@ Manual installation feature has been dropped since the release. Please, use [Com - Improved error message for the case when `autoload.php` is not found. - @RomanSyroeshko #371 - Renamed the `align` option of `NumberingLevel`, `Frame`, `Table`, and `Paragraph` styles into `alignment`. - @RomanSyroeshko - Improved performance of `TemplateProcessor::setValue()`. - @kazitanvirahsan #614, #617 +- Fixed some HTML tags not rendering any output (p, header & table) - #257, #324 - @twmobius and @garethellis ### Deprecated - `getAlign` and `setAlign` methods of `NumberingLevel`, `Frame`, `Table`, and `Paragraph` styles. diff --git a/civicrm/vendor/phpoffice/phpword/README.md b/civicrm/vendor/phpoffice/phpword/README.md index 949238a79b165b695839957f7b03b79ba01ee5a6..ac5f3b958bd3cd1577b1f24c369208b29800cf68 100644 --- a/civicrm/vendor/phpoffice/phpword/README.md +++ b/civicrm/vendor/phpoffice/phpword/README.md @@ -12,6 +12,8 @@ PHPWord is a library written in pure PHP that provides a set of classes to write PHPWord is an open source project licensed under the terms of [LGPL version 3](https://github.com/PHPOffice/PHPWord/blob/develop/COPYING.LESSER). PHPWord is aimed to be a high quality software product by incorporating [continuous integration](https://travis-ci.org/PHPOffice/PHPWord) and [unit testing](http://phpoffice.github.io/PHPWord/coverage/develop/). You can learn more about PHPWord by reading the [Developers' Documentation](http://phpword.readthedocs.org/) and the [API Documentation](http://phpoffice.github.io/PHPWord/docs/develop/). +If you have any questions, please ask on [StackOverFlow](https://stackoverflow.com/questions/tagged/phpword) + Read more about PHPWord: - [Features](#features) @@ -55,8 +57,7 @@ PHPWord requires the following: - PHP 5.3.3+ - [XML Parser extension](http://www.php.net/manual/en/xml.installation.php) - [Zend\Escaper component](http://framework.zend.com/manual/current/en/modules/zend.escaper.introduction.html) -- Zend\Stdlib component -- [Zend\Validator component](http://framework.zend.com/manual/current/en/modules/zend.validator.html) +- [Zend\Stdlib component](http://framework.zend.com/manual/current/en/modules/zend.stdlib.hydrator.html) - [Zip extension](http://php.net/manual/en/book.zip.php) (optional, used to write OOXML and ODF) - [GD extension](http://php.net/manual/en/book.image.php) (optional, used to add images) - [XMLWriter extension](http://php.net/manual/en/book.xmlwriter.php) (optional, used to write OOXML and ODF) @@ -66,14 +67,22 @@ PHPWord requires the following: ## Installation PHPWord is installed via [Composer](https://getcomposer.org/). -You just need to [add dependency](https://getcomposer.org/doc/04-schema.md#package-links>) on PHPWord into your package. +To [add a dependency](https://getcomposer.org/doc/04-schema.md#package-links>) to PHPWord in your project, either -Example: +Run the following to use the latest stable version +```sh + composer require phpoffice/phpword +``` +or if you want the latest master version +```sh + composer require phpoffice/phpword:dev-master +``` +You can of course also manually edit your composer.json file ```json { "require": { - "phpoffice/phpword": "v0.13.*" + "phpoffice/phpword": "v0.14.*" } } ``` diff --git a/civicrm/vendor/phpoffice/phpword/bootstrap.php b/civicrm/vendor/phpoffice/phpword/bootstrap.php index 11939feefd4c6d1f2701674fa3bce2c0699ec55a..362e8b74e9537224fd22257096c29ae6d6dd0904 100644 --- a/civicrm/vendor/phpoffice/phpword/bootstrap.php +++ b/civicrm/vendor/phpoffice/phpword/bootstrap.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. test bootstrap * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/composer.json b/civicrm/vendor/phpoffice/phpword/composer.json index c49eb9cd28d5997d0fde1cefccc8526a3a682f80..3cc4b131cfcbd2fc90fc44366ab6d6ab3788402f 100644 --- a/civicrm/vendor/phpoffice/phpword/composer.json +++ b/civicrm/vendor/phpoffice/phpword/composer.json @@ -20,7 +20,7 @@ }, { "name": "Franck Lefevre", - "homepage": "http://blog.rootslabs.net" + "homepage": "https://rootslabs.net/blog/" }, { "name": "Ivan Lanin", @@ -29,25 +29,39 @@ { "name": "Roman Syroeshko", "homepage": "http://ru.linkedin.com/pub/roman-syroeshko/34/a53/994/" + }, + { + "name": "Antoine de Troostembergh" } ], + "scripts": { + "check": [ + "./vendor/bin/php-cs-fixer fix --ansi --dry-run --diff", + "./vendor/bin/phpcs --report-width=200 --report-summary --report-full samples/ src/ tests/ --ignore=src/PhpWord/Shared/PCLZip --standard=PSR2 -n", + "./vendor/bin/phpmd src/,tests/ text ./phpmd.xml.dist --exclude pclzip.lib.php", + "./vendor/bin/phpunit --color=always" + ], + "fix": [ + "./vendor/bin/php-cs-fixer fix --ansi" + ] + }, "require": { - "php": ">=5.3.3", + "php": "^5.3.3 || ^7.0", "ext-xml": "*", - "zendframework/zend-escaper": "2.4.*", - "zendframework/zend-stdlib": "2.4.*", - "zendframework/zend-validator": "2.4.*", - "phpoffice/common": "0.2.*" + "zendframework/zend-escaper": "^2.2", + "zendframework/zend-stdlib": "^2.2 || ^3.0", + "phpoffice/common": "^0.2" }, "require-dev": { - "phpunit/phpunit": "3.7.*", + "phpunit/phpunit": "^4.8.36 || ^5.0", "phpdocumentor/phpdocumentor":"2.*", - "squizlabs/php_codesniffer": "1.*", + "squizlabs/php_codesniffer": "^2.7", + "friendsofphp/php-cs-fixer": "^2.0", "phpmd/phpmd": "2.*", - "phploc/phploc": "2.*", - "dompdf/dompdf":"0.6.*", + "phploc/phploc": "2.* || 3.* || 4.*", + "dompdf/dompdf":"0.8.*", "tecnickcom/tcpdf": "6.*", - "mpdf/mpdf": "5.*" + "mpdf/mpdf": "5.* || 6.* || 7.*" }, "suggest": { "ext-zip": "Allows writing OOXML and ODF", diff --git a/civicrm/vendor/phpoffice/phpword/phpstan.neon b/civicrm/vendor/phpoffice/phpword/phpstan.neon new file mode 100644 index 0000000000000000000000000000000000000000..5ae6d0f28a6e40ca56df5268e9e8e2dd2da9880e --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/phpstan.neon @@ -0,0 +1,13 @@ +includes: + - vendor/phpstan/phpstan/conf/config.level1.neon +parameters: + memory-limit: 200000 + autoload_directories: + - tests + autoload_files: + - tests/bootstrap.php + excludes_analyse: + - */pclzip.lib.php + - src/PhpWord/Shared/OLERead.php + - src/PhpWord/Reader/MsDoc.php + - src/PhpWord/Writer/PDF/MPDF.php \ No newline at end of file diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/AbstractCollection.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/AbstractCollection.php index beff290eb0d523e22621b92c4e67013e0668e69d..61709a5001cf81d0ff7d1140ca4f5c48e9968612 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/AbstractCollection.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/AbstractCollection.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -51,9 +51,9 @@ abstract class AbstractCollection { if (array_key_exists($index, $this->items)) { return $this->items[$index]; - } else { - return null; } + + return null; } /** @@ -61,7 +61,6 @@ abstract class AbstractCollection * * @param int $index * @param mixed $item - * @return void */ public function setItem($index, $item) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Bookmarks.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Bookmarks.php index b263cda725051ec9c132989c5546770740d6b3b0..7210fb034e0a496fa7d3820da142c77a9c94debb 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Bookmarks.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Bookmarks.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Charts.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Charts.php index 01f3f72e858ddea2892d46cbcdcf90394c4d20bb..56d92c9411b39b60755e67a4dfe9a5663fd6223c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Charts.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Charts.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Comments.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Comments.php new file mode 100644 index 0000000000000000000000000000000000000000..f2fe82d921964d435271401bb64debb8cca2edfa --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Comments.php @@ -0,0 +1,27 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Collection; + +/** + * Comments collection + * + * @since 0.12.0 + */ +class Comments extends AbstractCollection +{ +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Endnotes.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Endnotes.php index 083142ed3fdfb74643fbd113a34f7264ee5172cd..52a56d3130bf81e974122d7e2f8f5ab096f5f1b2 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Endnotes.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Endnotes.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Footnotes.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Footnotes.php index 0c094a53c1f9f857866f0553c129ce1509b7d162..63989f53cde1ed28f68a415d00c99d530de7e049 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Footnotes.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Footnotes.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Titles.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Titles.php index 80e2d9d76bfffc34f6864994ce26daa14e2e2ccd..9e4f12cd6029cf9744d150a101fa568a7c7ee6d2 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Titles.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Collection/Titles.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/FootnoteProperties.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/FootnoteProperties.php new file mode 100644 index 0000000000000000000000000000000000000000..8cb3a869ee217f7abebd4ff287dee5f3f3528b0d --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/FootnoteProperties.php @@ -0,0 +1,181 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\ComplexType; + +use PhpOffice\PhpWord\SimpleType\NumberFormat; + +/** + * Footnote properties + * + * @see http://www.datypic.com/sc/ooxml/e-w_footnotePr-1.html + */ +final class FootnoteProperties +{ + const RESTART_NUMBER_CONTINUOUS = 'continuous'; + const RESTART_NUMBER_EACH_SECTION = 'eachSect'; + const RESTART_NUMBER_EACH_PAGE = 'eachPage'; + + const POSITION_PAGE_BOTTOM = 'pageBottom'; + const POSITION_BENEATH_TEXT = 'beneathText'; + const POSITION_SECTION_END = 'sectEnd'; + const POSITION_DOC_END = 'docEnd'; + + /** + * Footnote Positioning Location + * + * @var string + */ + private $pos; + + /** + * Footnote Numbering Format w:numFmt, one of PhpOffice\PhpWord\SimpleType\NumberFormat + * + * @var string + */ + private $numFmt; + + /** + * Footnote and Endnote Numbering Starting Value + * + * @var float + */ + private $numStart; + + /** + * Footnote and Endnote Numbering Restart Location + * + * @var string + */ + private $numRestart; + + /** + * Get the Footnote Positioning Location + * + * @return string + */ + public function getPos() + { + return $this->pos; + } + + /** + * Set the Footnote Positioning Location (pageBottom, beneathText, sectEnd, docEnd) + * + * @param string $pos + * @throws \InvalidArgumentException + * @return self + */ + public function setPos($pos) + { + $position = array( + self::POSITION_PAGE_BOTTOM, + self::POSITION_BENEATH_TEXT, + self::POSITION_SECTION_END, + self::POSITION_DOC_END, + ); + + if (in_array($pos, $position)) { + $this->pos = $pos; + } else { + throw new \InvalidArgumentException('Invalid value, on of ' . implode(', ', $position) . ' possible'); + } + + return $this; + } + + /** + * Get the Footnote Numbering Format + * + * @return string + */ + public function getNumFmt() + { + return $this->numFmt; + } + + /** + * Set the Footnote Numbering Format + * + * @param string $numFmt One of NumberFormat + * @return self + */ + public function setNumFmt($numFmt) + { + NumberFormat::validate($numFmt); + $this->numFmt = $numFmt; + + return $this; + } + + /** + * Get the Footnote Numbering Format + * + * @return float + */ + public function getNumStart() + { + return $this->numStart; + } + + /** + * Set the Footnote Numbering Format + * + * @param float $numStart + * @return self + */ + public function setNumStart($numStart) + { + $this->numStart = $numStart; + + return $this; + } + + /** + * Get the Footnote and Endnote Numbering Starting Value + * + * @return string + */ + public function getNumRestart() + { + return $this->numRestart; + } + + /** + * Set the Footnote and Endnote Numbering Starting Value (continuous, eachSect, eachPage) + * + * @param string $numRestart + * @throws \InvalidArgumentException + * @return self + */ + public function setNumRestart($numRestart) + { + $restartNumbers = array( + self::RESTART_NUMBER_CONTINUOUS, + self::RESTART_NUMBER_EACH_SECTION, + self::RESTART_NUMBER_EACH_PAGE, + ); + + if (in_array($numRestart, $restartNumbers)) { + $this->numRestart = $numRestart; + } else { + throw new \InvalidArgumentException('Invalid value, on of ' . implode(', ', $restartNumbers) . ' possible'); + } + + return $this; + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/ProofState.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/ProofState.php new file mode 100644 index 0000000000000000000000000000000000000000..6a915da1ba2c5710c8651bf7128c461a126bb46b --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/ProofState.php @@ -0,0 +1,106 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\ComplexType; + +/** + * Spelling and Grammatical Checking State + * + * @see http://www.datypic.com/sc/ooxml/e-w_proofState-1.html + */ +final class ProofState +{ + /** + * Check Completed + */ + const CLEAN = 'clean'; + + /** + * Check Not Completed + */ + const DIRTY = 'dirty'; + + /** + * Spell Checking State + * + * @var string + */ + private $spelling; + + /** + * Grammatical Checking State + * + * @var string + */ + private $grammar; + + /** + * Set the Spell Checking State (dirty or clean) + * + * @param string $spelling + * @throws \InvalidArgumentException + * @return self + */ + public function setSpelling($spelling) + { + if ($spelling == self::CLEAN || $spelling == self::DIRTY) { + $this->spelling = $spelling; + } else { + throw new \InvalidArgumentException('Invalid value, dirty or clean possible'); + } + + return $this; + } + + /** + * Get the Spell Checking State + * + * @return string + */ + public function getSpelling() + { + return $this->spelling; + } + + /** + * Set the Grammatical Checking State (dirty or clean) + * + * @param string $grammar + * @throws \InvalidArgumentException + * @return self + */ + public function setGrammar($grammar) + { + if ($grammar == self::CLEAN || $grammar == self::DIRTY) { + $this->grammar = $grammar; + } else { + throw new \InvalidArgumentException('Invalid value, dirty or clean possible'); + } + + return $this; + } + + /** + * Get the Grammatical Checking State + * + * @return string + */ + public function getGrammar() + { + return $this->grammar; + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/TrackChangesView.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/TrackChangesView.php new file mode 100644 index 0000000000000000000000000000000000000000..3fc16298c17904e1d791e6d8d2c2771cbf254096 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/ComplexType/TrackChangesView.php @@ -0,0 +1,166 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\ComplexType; + +/** + * Visibility of Annotation Types + * + * @see http://www.datypic.com/sc/ooxml/e-w_revisionView-1.html + */ +final class TrackChangesView +{ + /** + * Display Visual Indicator Of Markup Area + * + * @var bool + */ + private $markup; + + /** + * Display Comments + * + * @var bool + */ + private $comments; + + /** + * Display Content Revisions + * + * @var bool + */ + private $insDel; + + /** + * Display Formatting Revisions + * + * @var bool + */ + private $formatting; + + /** + * Display Ink Annotations + * + * @var bool + */ + private $inkAnnotations; + + /** + * Get Display Visual Indicator Of Markup Area + * + * @return bool True if markup is shown + */ + public function hasMarkup() + { + return $this->markup; + } + + /** + * Set Display Visual Indicator Of Markup Area + * + * @param bool $markup + * Set to true to show markup + */ + public function setMarkup($markup) + { + $this->markup = $markup === null ? true : $markup; + } + + /** + * Get Display Comments + * + * @return bool True if comments are shown + */ + public function hasComments() + { + return $this->comments; + } + + /** + * Set Display Comments + * + * @param bool $comments + * Set to true to show comments + */ + public function setComments($comments) + { + $this->comments = $comments === null ? true : $comments; + } + + /** + * Get Display Content Revisions + * + * @return bool True if content revisions are shown + */ + public function hasInsDel() + { + return $this->insDel; + } + + /** + * Set Display Content Revisions + * + * @param bool $insDel + * Set to true to show content revisions + */ + public function setInsDel($insDel) + { + $this->insDel = $insDel === null ? true : $insDel; + } + + /** + * Get Display Formatting Revisions + * + * @return bool True if formatting revisions are shown + */ + public function hasFormatting() + { + return $this->formatting; + } + + /** + * Set Display Formatting Revisions + * + * @param bool|null $formatting + * Set to true to show formatting revisions + */ + public function setFormatting($formatting = null) + { + $this->formatting = $formatting === null ? true : $formatting; + } + + /** + * Get Display Ink Annotations + * + * @return bool True if ink annotations are shown + */ + public function hasInkAnnotations() + { + return $this->inkAnnotations; + } + + /** + * Set Display Ink Annotations + * + * @param bool $inkAnnotations + * Set to true to show ink annotations + */ + public function setInkAnnotations($inkAnnotations) + { + $this->inkAnnotations = $inkAnnotations === null ? true : $inkAnnotations; + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php index a3872e0b941ba5fc343028ceccec06106e0ebb8d..e3022b50f2ac240e9b787392525eb315ca23e487 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -23,7 +23,7 @@ namespace PhpOffice\PhpWord\Element; * @method Text addText(string $text, mixed $fStyle = null, mixed $pStyle = null) * @method TextRun addTextRun(mixed $pStyle = null) * @method Bookmark addBookmark(string $name) - * @method Link addLink(string $target, string $text = null, mixed $fStyle = null, mixed $pStyle = null) + * @method Link addLink(string $target, string $text = null, mixed $fStyle = null, mixed $pStyle = null, boolean $internal = false) * @method PreserveText addPreserveText(string $text, mixed $fStyle = null, mixed $pStyle = null) * @method void addTextBreak(int $count = 1, mixed $fStyle = null, mixed $pStyle = null) * @method ListItem addListItem(string $txt, int $depth = 0, mixed $font = null, mixed $list = null, mixed $para = null) @@ -37,9 +37,9 @@ namespace PhpOffice\PhpWord\Element; * @method PageBreak addPageBreak() * @method Table addTable(mixed $style = null) * @method Image addImage(string $source, mixed $style = null, bool $isWatermark = false) - * @method Object addObject(string $source, mixed $style = null) + * @method \PhpOffice\PhpWord\Element\Object addObject(string $source, mixed $style = null) * @method TextBox addTextBox(mixed $style = null) - * @method Field addField(string $type = null, array $properties = array(), array $options = array()) + * @method Field addField(string $type = null, array $properties = array(), array $options = array(), mixed $text = null) * @method Line addLine(mixed $lineStyle = null) * @method Shape addShape(string $type, mixed $style = null) * @method Chart addChart(string $type, array $categories, array $values, array $style = null) @@ -58,7 +58,7 @@ abstract class AbstractContainer extends AbstractElement protected $elements = array(); /** - * Container type Section|Header|Footer|Footnote|Endnote|Cell|TextRun|TextBox|ListItemRun + * Container type Section|Header|Footer|Footnote|Endnote|Cell|TextRun|TextBox|ListItemRun|TrackChange * * @var string */ @@ -83,7 +83,7 @@ abstract class AbstractContainer extends AbstractElement 'ListItem', 'ListItemRun', 'Table', 'Image', 'Object', 'Footnote', 'Endnote', 'CheckBox', 'TextBox', 'Field', 'Line', 'Shape', 'Title', 'TOC', 'PageBreak', - 'Chart', 'FormField', 'SDT' + 'Chart', 'FormField', 'SDT', 'Comment', ); $functions = array(); foreach ($elements as $element) { @@ -98,16 +98,15 @@ abstract class AbstractContainer extends AbstractElement // Special case for TextBreak // @todo Remove the `$count` parameter in 1.0.0 to make this element similiar to other elements? if ($element == 'TextBreak') { - @list($count, $fontStyle, $paragraphStyle) = $args; // Suppress error + list($count, $fontStyle, $paragraphStyle) = array_pad($args, 3, null); if ($count === null) { $count = 1; } for ($i = 1; $i <= $count; $i++) { $this->addElement($element, $fontStyle, $paragraphStyle); } - - // All other elements } else { + // All other elements array_unshift($args, $element); // Prepend element name to the beginning of args array return call_user_func_array(array($this, 'addElement'), $args); } @@ -158,8 +157,6 @@ abstract class AbstractContainer extends AbstractElement * Get all elements * * @return array - * - * @codeCoverageIgnore */ public function getElements() { @@ -181,14 +178,13 @@ abstract class AbstractContainer extends AbstractElement * * @param string $method * - * @return bool - * * @throws \BadMethodCallException + * @return bool */ private function checkValidity($method) { $generalContainers = array( - 'Section', 'Header', 'Footer', 'Footnote', 'Endnote', 'Cell', 'TextRun', 'TextBox', 'ListItemRun', + 'Section', 'Header', 'Footer', 'Footnote', 'Endnote', 'Cell', 'TextRun', 'TextBox', 'ListItemRun', 'TrackChange', ); $validContainers = array( @@ -203,19 +199,20 @@ abstract class AbstractContainer extends AbstractElement 'Shape' => $generalContainers, 'FormField' => $generalContainers, 'SDT' => $generalContainers, - 'TextRun' => array('Section', 'Header', 'Footer', 'Cell', 'TextBox'), + 'TrackChange' => $generalContainers, + 'TextRun' => array('Section', 'Header', 'Footer', 'Cell', 'TextBox', 'TrackChange'), 'ListItem' => array('Section', 'Header', 'Footer', 'Cell', 'TextBox'), 'ListItemRun' => array('Section', 'Header', 'Footer', 'Cell', 'TextBox'), 'Table' => array('Section', 'Header', 'Footer', 'Cell', 'TextBox'), - 'CheckBox' => array('Section', 'Header', 'Footer', 'Cell'), + 'CheckBox' => array('Section', 'Header', 'Footer', 'Cell', 'TextRun'), 'TextBox' => array('Section', 'Header', 'Footer', 'Cell'), 'Footnote' => array('Section', 'TextRun', 'Cell'), 'Endnote' => array('Section', 'TextRun', 'Cell'), - 'PreserveText' => array('Header', 'Footer', 'Cell'), - 'Title' => array('Section'), + 'PreserveText' => array('Section', 'Header', 'Footer', 'Cell'), + 'Title' => array('Section', 'Cell'), 'TOC' => array('Section'), 'PageBreak' => array('Section'), - 'Chart' => array('Section'), + 'Chart' => array('Section', 'Cell'), ); // Special condition, e.g. preservetext can only exists in cell when diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractElement.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractElement.php index b0ed8ae27a4e7d639e59c44acc9a6861305b164a..a65c50f4d2c0720e84b0ef3bcf6cb4b7fc2879b9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractElement.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractElement.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -73,7 +73,7 @@ abstract class AbstractElement /** * Unique Id for element * - * @var int + * @var string */ protected $elementId; @@ -108,12 +108,26 @@ abstract class AbstractElement protected $mediaRelation = false; /** - * Is part of collection; true for Title, Footnote, Endnote, and Chart + * Is part of collection; true for Title, Footnote, Endnote, Chart, and Comment * * @var bool */ protected $collectionRelation = false; + /** + * The start position for the linked comment + * + * @var Comment + */ + protected $commentRangeStart; + + /** + * The end position for the linked comment + * + * @var Comment + */ + protected $commentRangeEnd; + /** * Get PhpWord * @@ -128,7 +142,6 @@ abstract class AbstractElement * Set PhpWord as reference. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ public function setPhpWord(PhpWord $phpWord = null) { @@ -150,7 +163,6 @@ abstract class AbstractElement * * @param string $docPart * @param int $docPartId - * @return void */ public function setDocPart($docPart, $docPartId = 1) { @@ -207,7 +219,6 @@ abstract class AbstractElement * Set element index. * * @param int $value - * @return void */ public function setElementIndex($value) { @@ -226,8 +237,6 @@ abstract class AbstractElement /** * Set element unique ID from 6 first digit of md5. - * - * @return void */ public function setElementId() { @@ -248,7 +257,6 @@ abstract class AbstractElement * Set relation Id. * * @param int $value - * @return void */ public function setRelationId($value) { @@ -265,13 +273,60 @@ abstract class AbstractElement return $this->nestedLevel; } + /** + * Get comment start + * + * @return Comment + */ + public function getCommentRangeStart() + { + return $this->commentRangeStart; + } + + /** + * Set comment start + * + * @param Comment $value + */ + public function setCommentRangeStart(Comment $value) + { + if ($this instanceof Comment) { + throw new \InvalidArgumentException('Cannot set a Comment on a Comment'); + } + $this->commentRangeStart = $value; + $this->commentRangeStart->setStartElement($this); + } + + /** + * Get comment end + * + * @return Comment + */ + public function getCommentRangeEnd() + { + return $this->commentRangeEnd; + } + + /** + * Set comment end + * + * @param Comment $value + */ + public function setCommentRangeEnd(Comment $value) + { + if ($this instanceof Comment) { + throw new \InvalidArgumentException('Cannot set a Comment on a Comment'); + } + $this->commentRangeEnd = $value; + $this->commentRangeEnd->setEndElement($this); + } + /** * Set parent container * * Passed parameter should be a container, except for Table (contain Row) and Row (contain Cell) * * @param \PhpOffice\PhpWord\Element\AbstractElement $container - * @return void */ public function setParentContainer(AbstractElement $container) { @@ -300,8 +355,6 @@ abstract class AbstractElement * * - Image element needs to be passed to Media object * - Icon needs to be set for Object element - * - * @return void */ private function setMediaRelation() { @@ -328,8 +381,6 @@ abstract class AbstractElement /** * Set relation Id for elements that will be registered in the Collection subnamespaces. - * - * @return void */ private function setCollectionRelation() { @@ -348,7 +399,7 @@ abstract class AbstractElement */ public function isInSection() { - return ($this->docPart == 'Section'); + return $this->docPart == 'Section'; } /** @@ -374,19 +425,18 @@ abstract class AbstractElement /** * Set enum value * - * @param mixed $value - * @param array $enum - * @param mixed $default - * - * @return mixed + * @param string|null $value + * @param string[] $enum + * @param string|null $default * * @throws \InvalidArgumentException + * @return string|null * * @todo Merge with the same method in AbstractStyle */ protected function setEnumVal($value = null, $enum = array(), $default = null) { - if ($value != null && trim($value) != '' && !empty($enum) && !in_array($value, $enum)) { + if ($value !== null && trim($value) != '' && !empty($enum) && !in_array($value, $enum)) { throw new \InvalidArgumentException("Invalid style value: {$value}"); } elseif ($value === null || trim($value) == '') { $value = $default; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Bookmark.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Bookmark.php index c865893fad4807df4e8d691205b6e1346621bcab..2eceb5ed893e5621d9eb4e6405be5de1b8d67dbd 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Bookmark.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Bookmark.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -45,9 +45,7 @@ class Bookmark extends AbstractElement */ public function __construct($name) { - $this->name = CommonText::toUTF8($name); - return $this; } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Cell.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Cell.php index 28e517fd835e5e796f5ea91a432a9c2a428cf278..b5250cd6c39cc234d08c9a52888af262790e905a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Cell.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Cell.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Chart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Chart.php index f98c1d742688ae075cd2f3f42bba04cec4c22753..c340da405865645bd43d79afa6557f9ca08a5150 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Chart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Chart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -83,7 +83,6 @@ class Chart extends AbstractElement * Set type. * * @param string $value - * @return void */ public function setType($value) { @@ -96,7 +95,6 @@ class Chart extends AbstractElement * * @param array $categories * @param array $values - * @return void */ public function addSeries($categories, $values) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/CheckBox.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/CheckBox.php index 3fc578ef376d526ae40f590966d092be89f7c108..e0a94fdfcd7562328d6b130148dd3723c5b943eb 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/CheckBox.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/CheckBox.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -40,7 +40,6 @@ class CheckBox extends Text * @param string $text * @param mixed $fontStyle * @param mixed $paragraphStyle - * @return self */ public function __construct($name = null, $text = null, $fontStyle = null, $paragraphStyle = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Comment.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Comment.php new file mode 100644 index 0000000000000000000000000000000000000000..188369292c7d17989644a46fd0b9b29d2a137f39 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Comment.php @@ -0,0 +1,122 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Element; + +/** + * Comment element + * @see http://datypic.com/sc/ooxml/t-w_CT_Comment.html + */ +class Comment extends TrackChange +{ + /** + * Initials + * + * @var string + */ + private $initials; + + /** + * The Element where this comment starts + * + * @var AbstractElement + */ + private $startElement; + + /** + * The Element where this comment ends + * + * @var AbstractElement + */ + private $endElement; + + /** + * Is part of collection + * + * @var bool + */ + protected $collectionRelation = true; + + /** + * Create a new Comment Element + * + * @param string $author + * @param \DateTime $date + * @param string $initials + */ + public function __construct($author, $date = null, $initials = null) + { + parent::__construct($author, $date); + $this->initials = $initials; + } + + /** + * Get Initials + * + * @return string + */ + public function getInitials() + { + return $this->initials; + } + + /** + * Sets the element where this comment starts + * + * @param \PhpOffice\PhpWord\Element\AbstractElement $value + */ + public function setStartElement(AbstractElement $value) + { + $this->startElement = $value; + if ($value->getCommentRangeStart() == null) { + $value->setCommentRangeStart($this); + } + } + + /** + * Get the element where this comment starts + * + * @return \PhpOffice\PhpWord\Element\AbstractElement + */ + public function getStartElement() + { + return $this->startElement; + } + + /** + * Sets the element where this comment ends + * + * @param \PhpOffice\PhpWord\Element\AbstractElement $value + */ + public function setEndElement(AbstractElement $value) + { + $this->endElement = $value; + if ($value->getCommentRangeEnd() == null) { + $value->setCommentRangeEnd($this); + } + } + + /** + * Get the element where this comment ends + * + * @return \PhpOffice\PhpWord\Element\AbstractElement + */ + public function getEndElement() + { + return $this->endElement; + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Endnote.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Endnote.php index 2d8e47317966f6be0b5fee9abd0bf4c1f87eec61..b6e94fba146fb24d1826052323462b8326ba6f7a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Endnote.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Endnote.php @@ -10,15 +10,13 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Element; -use PhpOffice\PhpWord\Style\Paragraph; - /** * Endnote element * @@ -38,6 +36,6 @@ class Endnote extends Footnote */ public function __construct($paragraphStyle = null) { - $this->paragraphStyle = $this->setNewStyle(new Paragraph(), $paragraphStyle); + parent::__construct($paragraphStyle); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Field.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Field.php index 48dc1d2eba1fdd69140de0a529adaf2dad555d3d..7b33a4799d4821147dde13f453b17e02cd3af261 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Field.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Field.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -21,7 +21,7 @@ namespace PhpOffice\PhpWord\Element; * Field element * * @since 0.11.0 - * @link http://www.schemacentral.com/sc/ooxml/t-w_CT_SimpleField.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_CT_SimpleField.html */ class Field extends AbstractElement { @@ -32,27 +32,36 @@ class Field extends AbstractElement * @var array */ protected $fieldsArray = array( - 'PAGE'=>array( - 'properties'=>array( + 'PAGE' => array( + 'properties' => array( 'format' => array('Arabic', 'ArabicDash', 'alphabetic', 'ALPHABETIC', 'roman', 'ROMAN'), ), - 'options'=>array('PreserveFormat') + 'options' => array('PreserveFormat'), ), - 'NUMPAGES'=>array( - 'properties'=>array( - 'format' => array('Arabic', 'ArabicDash', 'alphabetic', 'ALPHABETIC', 'roman', 'ROMAN'), - 'numformat' => array('0', '0,00', '#.##0', '#.##0,00', '€ #.##0,00(€ #.##0,00)', '0%', '0,00%') + 'NUMPAGES' => array( + 'properties' => array( + 'format' => array('Arabic', 'ArabicDash', 'CardText', 'DollarText', 'Ordinal', 'OrdText', + 'alphabetic', 'ALPHABETIC', 'roman', 'ROMAN', 'Caps', 'FirstCap', 'Lower', 'Upper', ), + 'numformat' => array('0', '0,00', '#.##0', '#.##0,00', '€ #.##0,00(€ #.##0,00)', '0%', '0,00%'), ), - 'options'=>array('PreserveFormat') + 'options' => array('PreserveFormat'), ), - 'DATE'=>array( - 'properties'=> array( - 'dateformat' =>array('d-M-yyyy', 'dddd d MMMM yyyy', 'd MMMM yyyy', 'd-M-yy', 'yyyy-MM-dd', + 'DATE' => array( + 'properties' => array( + 'dateformat' => array('d-M-yyyy', 'dddd d MMMM yyyy', 'd MMMM yyyy', 'd-M-yy', 'yyyy-MM-dd', 'd-MMM-yy', 'd/M/yyyy', 'd MMM. yy', 'd/M/yy', 'MMM-yy', 'd-M-yyy H:mm', 'd-M-yyyy H:mm:ss', - 'h:mm am/pm', 'h:mm:ss am/pm', 'HH:mm', 'HH:mm:ss') + 'h:mm am/pm', 'h:mm:ss am/pm', 'HH:mm', 'HH:mm:ss', ), ), - 'options'=>array('PreserveFormat', 'LunarCalendar', 'SakaEraCalendar', 'LastUsedFormat') - ) + 'options' => array('PreserveFormat', 'LunarCalendar', 'SakaEraCalendar', 'LastUsedFormat'), + ), + 'XE' => array( + 'properties' => array(), + 'options' => array('Bold', 'Italic'), + ), + 'INDEX' => array( + 'properties' => array(), + 'options' => array('PreserveFormat'), + ), ); /** @@ -62,6 +71,13 @@ class Field extends AbstractElement */ protected $type; + /** + * Field text + * + * @var TextRun|string + */ + protected $text; + /** * Field properties * @@ -82,12 +98,14 @@ class Field extends AbstractElement * @param string $type * @param array $properties * @param array $options + * @param TextRun|string|null $text */ - public function __construct($type = null, $properties = array(), $options = array()) + public function __construct($type = null, $properties = array(), $options = array(), $text = null) { $this->setType($type); $this->setProperties($properties); $this->setOptions($options); + $this->setText($text); } /** @@ -95,9 +113,8 @@ class Field extends AbstractElement * * @param string $type * - * @return string - * * @throws \InvalidArgumentException + * @return string */ public function setType($type = null) { @@ -105,9 +122,10 @@ class Field extends AbstractElement if (isset($this->fieldsArray[$type])) { $this->type = $type; } else { - throw new \InvalidArgumentException("Invalid type"); + throw new \InvalidArgumentException("Invalid type '$type'"); } } + return $this->type; } @@ -126,20 +144,20 @@ class Field extends AbstractElement * * @param array $properties * - * @return self - * * @throws \InvalidArgumentException + * @return self */ public function setProperties($properties = array()) { if (is_array($properties)) { foreach (array_keys($properties) as $propkey) { if (!(isset($this->fieldsArray[$this->type]['properties'][$propkey]))) { - throw new \InvalidArgumentException("Invalid property"); + throw new \InvalidArgumentException("Invalid property '$propkey'"); } } $this->properties = array_merge($this->properties, $properties); } + return $this->properties; } @@ -158,20 +176,20 @@ class Field extends AbstractElement * * @param array $options * - * @return self - * * @throws \InvalidArgumentException + * @return self */ public function setOptions($options = array()) { if (is_array($options)) { foreach (array_keys($options) as $optionkey) { - if (!(isset($this->fieldsArray[$this->type]['options'][$optionkey]))) { - throw new \InvalidArgumentException("Invalid option"); + if (!(isset($this->fieldsArray[$this->type]['options'][$optionkey])) && substr($optionkey, 0, 1) !== '\\') { + throw new \InvalidArgumentException("Invalid option '$optionkey', possible values are " . implode(', ', $this->fieldsArray[$this->type]['options'])); } } $this->options = array_merge($this->options, $options); } + return $this->options; } @@ -184,4 +202,35 @@ class Field extends AbstractElement { return $this->options; } + + /** + * Set Field text + * + * @param string|TextRun $text + * + * @throws \InvalidArgumentException + * @return null|string|TextRun + */ + public function setText($text = null) + { + if (isset($text)) { + if (is_string($text) || $text instanceof TextRun) { + $this->text = $text; + } else { + throw new \InvalidArgumentException('Invalid text'); + } + } + + return $this->text; + } + + /** + * Get Field text + * + * @return string|TextRun + */ + public function getText() + { + return $this->text; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Footer.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Footer.php index 01c6d25c9e4829f086b62f570915e84cfda4297a..08ff525a1f95008553a004137d438c708fa4fb1f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Footer.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Footer.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,11 +26,11 @@ class Footer extends AbstractContainer * Header/footer types constants * * @var string - * @link http://www.schemacentral.com/sc/ooxml/a-wtype-4.html Header or Footer Type + * @see http://www.datypic.com/sc/ooxml/t-w_ST_HdrFtr.html Header or Footer Type */ - const AUTO = 'default'; // default and odd pages + const AUTO = 'default'; // default and odd pages const FIRST = 'first'; - const EVEN = 'even'; + const EVEN = 'even'; /** * @var string Container type @@ -64,7 +64,6 @@ class Footer extends AbstractContainer * @since 0.10.0 * * @param string $value - * @return void */ public function setType($value = self::AUTO) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Footnote.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Footnote.php index 73350bb7855a4cbca8ba74a20f50e98bb6770cff..e9a1bfc2667f8c88892fef14ebf4c24269adc289 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Footnote.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Footnote.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -19,9 +19,6 @@ namespace PhpOffice\PhpWord\Element; use PhpOffice\PhpWord\Style\Paragraph; -/** - * @codeCoverageIgnore - */ class Footnote extends AbstractContainer { /** @@ -68,6 +65,7 @@ class Footnote extends AbstractContainer * Get Footnote Reference ID * * @deprecated 0.10.0 + * @codeCoverageIgnore * * @return int */ @@ -80,6 +78,7 @@ class Footnote extends AbstractContainer * Set Footnote Reference ID * * @deprecated 0.10.0 + * @codeCoverageIgnore * * @param int $rId */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/FormField.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/FormField.php index c7cb44d24070143042abc38d638dfd418f2530f3..598d61dc2f8fa6bea7ac3016805d201c48713caf 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/FormField.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/FormField.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -21,7 +21,7 @@ namespace PhpOffice\PhpWord\Element; * Form field element * * @since 0.12.0 - * @link http://www.datypic.com/sc/ooxml/t-w_CT_FFData.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_FFData.html */ class FormField extends Text { @@ -35,7 +35,7 @@ class FormField extends Text /** * Form field name * - * @var string + * @var string|bool|int */ private $name; @@ -70,10 +70,10 @@ class FormField extends Text * @param string $type * @param mixed $fontStyle * @param mixed $paragraphStyle - * @return self */ public function __construct($type, $fontStyle = null, $paragraphStyle = null) { + parent::__construct(null, $fontStyle, $paragraphStyle); $this->setType($type); } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Header.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Header.php index d4afdb867f28928e98e332038ef1a33d9a3a9524..ee8208773a965f40e5f6cd8154f06390f066ac6c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Header.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Header.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Image.php index 2cce610d9442a6447f8c6b9199d86d5c859577d9..f1f6bab5420ae8a117e1759e872126134fbe48ca 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Image.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -35,6 +35,7 @@ class Image extends AbstractElement const SOURCE_LOCAL = 'local'; // Local images const SOURCE_GD = 'gd'; // Generated using GD const SOURCE_ARCHIVE = 'archive'; // Image in archives zip://$archive#$image + const SOURCE_STRING = 'string'; // Image from string /** * Image source @@ -60,7 +61,7 @@ class Image extends AbstractElement /** * Is watermark * - * @var boolean + * @var bool */ private $watermark; @@ -95,7 +96,7 @@ class Image extends AbstractElement /** * Is memory image * - * @var boolean + * @var bool */ private $memoryImage; @@ -109,7 +110,7 @@ class Image extends AbstractElement /** * Image media index * - * @var integer + * @var int */ private $mediaIndex; @@ -125,7 +126,7 @@ class Image extends AbstractElement * * @param string $source * @param mixed $style - * @param boolean $watermark + * @param bool $watermark * * @throws \PhpOffice\PhpWord\Exception\InvalidImageException * @throws \PhpOffice\PhpWord\Exception\UnsupportedImageTypeException @@ -136,7 +137,7 @@ class Image extends AbstractElement $this->setIsWatermark($watermark); $this->style = $this->setNewStyle(new ImageStyle(), $style, true); - $this->checkImage($source); + $this->checkImage(); } /** @@ -182,7 +183,7 @@ class Image extends AbstractElement /** * Get is watermark * - * @return boolean + * @return bool */ public function isWatermark() { @@ -192,7 +193,7 @@ class Image extends AbstractElement /** * Set is watermark * - * @param boolean $value + * @param bool $value */ public function setIsWatermark($value) { @@ -242,7 +243,7 @@ class Image extends AbstractElement /** * Get is memory image * - * @return boolean + * @return bool */ public function isMemImage() { @@ -263,7 +264,6 @@ class Image extends AbstractElement * Set target file name. * * @param string $value - * @return void */ public function setTarget($value) { @@ -273,7 +273,7 @@ class Image extends AbstractElement /** * Get media index * - * @return integer + * @return int */ public function getMediaIndex() { @@ -283,8 +283,7 @@ class Image extends AbstractElement /** * Set media index. * - * @param integer $value - * @return void + * @param int $value */ public function setMediaIndex($value) { @@ -339,6 +338,8 @@ class Image extends AbstractElement call_user_func($this->imageFunc, $imageResource); $imageBinary = ob_get_contents(); ob_end_clean(); + } elseif ($this->sourceType == self::SOURCE_STRING) { + $imageBinary = $this->source; } else { $fileHandle = fopen($actualSource, 'rb', false); if ($fileHandle !== false) { @@ -365,31 +366,29 @@ class Image extends AbstractElement /** * Check memory image, supported type, image functions, and proportional width/height. * - * @param string $source - * - * @return void - * * @throws \PhpOffice\PhpWord\Exception\InvalidImageException * @throws \PhpOffice\PhpWord\Exception\UnsupportedImageTypeException */ - private function checkImage($source) + private function checkImage() { - $this->setSourceType($source); + $this->setSourceType(); // Check image data if ($this->sourceType == self::SOURCE_ARCHIVE) { - $imageData = $this->getArchiveImageSize($source); + $imageData = $this->getArchiveImageSize($this->source); + } elseif ($this->sourceType == self::SOURCE_STRING) { + $imageData = $this->getStringImageSize($this->source); } else { - $imageData = @getimagesize($source); + $imageData = @getimagesize($this->source); } if (!is_array($imageData)) { - throw new InvalidImageException(); + throw new InvalidImageException(sprintf('Invalid image: %s', $this->source)); } list($actualWidth, $actualHeight, $imageType) = $imageData; // Check image type support $supportedTypes = array(IMAGETYPE_JPEG, IMAGETYPE_GIF, IMAGETYPE_PNG); - if ($this->sourceType != self::SOURCE_GD) { + if ($this->sourceType != self::SOURCE_GD && $this->sourceType != self::SOURCE_STRING) { $supportedTypes = array_merge($supportedTypes, array(IMAGETYPE_BMP, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM)); } if (!in_array($imageType, $supportedTypes)) { @@ -404,21 +403,30 @@ class Image extends AbstractElement /** * Set source type. - * - * @param string $source - * @return void */ - private function setSourceType($source) + private function setSourceType() { - if (stripos(strrev($source), strrev('.php')) === 0) { + if (stripos(strrev($this->source), strrev('.php')) === 0) { $this->memoryImage = true; $this->sourceType = self::SOURCE_GD; - } elseif (strpos($source, 'zip://') !== false) { + } elseif (strpos($this->source, 'zip://') !== false) { $this->memoryImage = false; $this->sourceType = self::SOURCE_ARCHIVE; + } elseif (filter_var($this->source, FILTER_VALIDATE_URL) !== false) { + $this->memoryImage = true; + if (strpos($this->source, 'https') === 0) { + $fileContent = file_get_contents($this->source); + $this->source = $fileContent; + $this->sourceType = self::SOURCE_STRING; + } else { + $this->sourceType = self::SOURCE_GD; + } + } elseif (@file_exists($this->source)) { + $this->memoryImage = false; + $this->sourceType = self::SOURCE_LOCAL; } else { - $this->memoryImage = (filter_var($source, FILTER_VALIDATE_URL) !== false); - $this->sourceType = $this->memoryImage ? self::SOURCE_GD : self::SOURCE_LOCAL; + $this->memoryImage = true; + $this->sourceType = self::SOURCE_STRING; } } @@ -429,9 +437,9 @@ class Image extends AbstractElement * * @param string $source * - * @return array|null - * * @throws \PhpOffice\PhpWord\Exception\CreateTemporaryFileException + * + * @return array|null */ private function getArchiveImageSize($source) { @@ -441,7 +449,7 @@ class Image extends AbstractElement $tempFilename = tempnam(Settings::getTempDir(), 'PHPWordImage'); if (false === $tempFilename) { - throw new CreateTemporaryFileException(); + throw new CreateTemporaryFileException(); // @codeCoverageIgnore } $zip = new ZipArchive(); @@ -461,26 +469,44 @@ class Image extends AbstractElement } /** - * Set image functions and extensions. + * get image size from string * - * @return void + * @param string $source + * + * @codeCoverageIgnore this method is just a replacement for getimagesizefromstring which exists only as of PHP 5.4 + */ + private function getStringImageSize($source) + { + $result = false; + if (!function_exists('getimagesizefromstring')) { + $uri = 'data://application/octet-stream;base64,' . base64_encode($source); + $result = @getimagesize($uri); + } else { + $result = @getimagesizefromstring($source); + } + + return $result; + } + + /** + * Set image functions and extensions. */ private function setFunctions() { switch ($this->imageType) { case 'image/png': - $this->imageCreateFunc = 'imagecreatefrompng'; + $this->imageCreateFunc = $this->sourceType == self::SOURCE_STRING ? 'imagecreatefromstring' : 'imagecreatefrompng'; $this->imageFunc = 'imagepng'; $this->imageExtension = 'png'; break; case 'image/gif': - $this->imageCreateFunc = 'imagecreatefromgif'; + $this->imageCreateFunc = $this->sourceType == self::SOURCE_STRING ? 'imagecreatefromstring' : 'imagecreatefromgif'; $this->imageFunc = 'imagegif'; $this->imageExtension = 'gif'; break; case 'image/jpeg': case 'image/jpg': - $this->imageCreateFunc = 'imagecreatefromjpeg'; + $this->imageCreateFunc = $this->sourceType == self::SOURCE_STRING ? 'imagecreatefromstring' : 'imagecreatefromjpeg'; $this->imageFunc = 'imagejpeg'; $this->imageExtension = 'jpg'; break; @@ -498,9 +524,8 @@ class Image extends AbstractElement /** * Set proportional width/height if one dimension not available. * - * @param integer $actualWidth - * @param integer $actualHeight - * @return void + * @param int $actualWidth + * @param int $actualHeight */ private function setProportionalSize($actualWidth, $actualHeight) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Line.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Line.php index 3e94a3a6bf545878aaf3160c5cbe46b6553c6c23..eba664730f57aa09338a6825320b5b71902e1b60 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Line.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Line.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Link.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Link.php index 4a72e167f0beba3a8b4b5d7228b29cbfcb1c0967..4637120ab58e588f587ac4f1a39fec2249ebf593 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Link.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Link.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -75,6 +75,7 @@ class Link extends AbstractElement * @param string $text * @param mixed $fontStyle * @param mixed $paragraphStyle + * @param bool $internal */ public function __construct($source, $text = null, $fontStyle = null, $paragraphStyle = null, $internal = false) { @@ -83,7 +84,6 @@ class Link extends AbstractElement $this->fontStyle = $this->setNewStyle(new Font('text'), $fontStyle); $this->paragraphStyle = $this->setNewStyle(new Paragraph(), $paragraphStyle); $this->internal = $internal; - return $this; } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItem.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItem.php index 25ace0905bcbfd4445dfa20d9323d13c9fcd75b6..7f665b1b9f394bc1fcc5878d7a1a090831d2ec07 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItem.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItem.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItemRun.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItemRun.php index 53440db617fa6ba1bc5bb441af62188eb6da35e1..e311dc2470fd2c8cb513ff0f336a843eb2f410bc 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItemRun.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/ListItemRun.php @@ -10,15 +10,14 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * -* @link https://github.com/PHPOffice/PHPWord -* @copyright 2010-2016 PHPWord contributors +* @see https://github.com/PHPOffice/PHPWord +* @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Element; use PhpOffice\PhpWord\Style\ListItem as ListItemStyle; -use PhpOffice\PhpWord\Style\Paragraph; /** * List item element @@ -61,7 +60,7 @@ class ListItemRun extends TextRun } else { $this->style = $this->setNewStyle(new ListItemStyle(), $listStyle, true); } - $this->paragraphStyle = $this->setNewStyle(new Paragraph(), $paragraphStyle); + parent::__construct($paragraphStyle); } /** @@ -74,10 +73,10 @@ class ListItemRun extends TextRun return $this->style; } - /** + /** * Get ListItem depth. - * - * @return int + * + * @return int */ public function getDepth() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Object.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Object.php index 7285030c0c81358ed1b78df74785a40fa298e68e..8fe83224bbdc733934fdbe3aee76ea109e66ec1f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Object.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Object.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -84,9 +84,9 @@ class Object extends AbstractElement $this->icon = realpath(__DIR__ . "/../resources/{$ext}.png"); return $this; - } else { - throw new InvalidObjectException(); } + + throw new InvalidObjectException(); } /** @@ -133,7 +133,6 @@ class Object extends AbstractElement * Set Image Relation ID. * * @param int $rId - * @return void */ public function setImageRelationId($rId) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PageBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PageBreak.php index d9d4bc641b0632ba58fe87aca8896f72f71121b6..e41e807bef7cb5fc47e9c09fc23dddaff2bded8e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PageBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PageBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PreserveText.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PreserveText.php index 65e17e35b56f2c769e5084077a1801f6dac050cd..ad20d7a30e19a8f5827a568536e3a02ecca3878d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PreserveText.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/PreserveText.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -47,14 +47,12 @@ class PreserveText extends AbstractElement */ private $paragraphStyle; - /** * Create a new Preserve Text Element * * @param string $text * @param mixed $fontStyle * @param mixed $paragraphStyle - * @return self */ public function __construct($text = null, $fontStyle = null, $paragraphStyle = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Row.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Row.php index 05fde7e43d84fc7a3cfec9e92d25dd4e8eaf840f..2e89b35495a57fe07a8b581c3417c39472ee30a1 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Row.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Row.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/SDT.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/SDT.php index 58a477d92be846f0451e8c3d33b8b31527406f4b..86f445cc46992676bb68f9a282c917bc7df3a479 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/SDT.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/SDT.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -45,16 +45,30 @@ class SDT extends Text */ private $listItems = array(); + /** + * Alias + * + * @var string + */ + private $alias; + + /** + * Tag + * + * @var string + */ + private $tag; + /** * Create new instance * * @param string $type * @param mixed $fontStyle * @param mixed $paragraphStyle - * @return self */ public function __construct($type, $fontStyle = null, $paragraphStyle = null) { + parent::__construct(null, $fontStyle, $paragraphStyle); $this->setType($type); } @@ -127,4 +141,50 @@ class SDT extends Text return $this; } + + /** + * Get tag + * + * @return string + */ + public function getTag() + { + return $this->tag; + } + + /** + * Set tag + * + * @param string $tag + * @return self + */ + public function setTag($tag) + { + $this->tag = $tag; + + return $this; + } + + /** + * Get alias + * + * @return string + */ + public function getAlias() + { + return $this->alias; + } + + /** + * Set alias + * + * @param string $alias + * @return self + */ + public function setAlias($alias) + { + $this->alias = $alias; + + return $this; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Section.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Section.php index 1e926d2f57a201022cbaea3ac4332f84966f2fe8..06acf1f9b2300cc98dff74455bc59c3cea997c59 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Section.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Section.php @@ -10,13 +10,14 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Element; +use PhpOffice\PhpWord\ComplexType\FootnoteProperties; use PhpOffice\PhpWord\Style\Section as SectionStyle; class Section extends AbstractContainer @@ -47,6 +48,13 @@ class Section extends AbstractContainer */ private $footers = array(); + /** + * The properties for the footnote of this section + * + * @var FootnoteProperties + */ + private $footnoteProperties; + /** * Create new instance * @@ -65,7 +73,6 @@ class Section extends AbstractContainer * Set section style. * * @param array $style - * @return void */ public function setStyle($style = null) { @@ -78,8 +85,6 @@ class Section extends AbstractContainer * Get section style * * @return \PhpOffice\PhpWord\Style\Section - * - * @codeCoverageIgnore */ public function getStyle() { @@ -118,8 +123,6 @@ class Section extends AbstractContainer * Get header elements * * @return Header[] - * - * @codeCoverageIgnore */ public function getHeaders() { @@ -130,21 +133,39 @@ class Section extends AbstractContainer * Get footer elements * * @return Footer[] - * - * @codeCoverageIgnore */ public function getFooters() { return $this->footers; } + /** + * Get the footnote properties + * + * @return FootnoteProperties + */ + public function getFootnotePropoperties() + { + return $this->footnoteProperties; + } + + /** + * Set the footnote properties + * + * @param FootnoteProperties $footnoteProperties + */ + public function setFootnoteProperties(FootnoteProperties $footnoteProperties = null) + { + $this->footnoteProperties = $footnoteProperties; + } + /** * Is there a header for this section that is for the first page only? * * If any of the Header instances have a type of Header::FIRST then this method returns true. * False otherwise. * - * @return boolean + * @return bool */ public function hasDifferentFirstPage() { @@ -153,6 +174,12 @@ class Section extends AbstractContainer return true; } } + foreach ($this->footers as $footer) { + if ($footer->getType() == Header::FIRST) { + return true; + } + } + return false; } @@ -162,11 +189,11 @@ class Section extends AbstractContainer * @since 0.10.0 * * @param string $type - * @param boolean $header - * - * @return Header|Footer + * @param bool $header * * @throws \Exception + * + * @return Header|Footer */ private function addHeaderFooter($type = Header::AUTO, $header = true) { @@ -182,11 +209,10 @@ class Section extends AbstractContainer $container->setPhpWord($this->phpWord); $collection[$index] = $container; + return $container; - } else { - throw new \Exception('Invalid header/footer type.'); } - + throw new \Exception('Invalid header/footer type.'); } /** @@ -258,8 +284,8 @@ class Section extends AbstractContainer { if (empty($this->footers)) { return null; - } else { - return $this->footers[1]; } + + return $this->footers[1]; } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Shape.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Shape.php index 4717afb8f8772ebaeef5abb4cdbc4631bc2334f6..b553a4ac5ea7e392de8fc913cbdc3c79cbf4544e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Shape.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Shape.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TOC.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TOC.php index 54ae3844330e5bc619ba212d51b485ae71790ab8..e3ca0a08c21e01c46d7a9c01c86f06cb762f1507 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TOC.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TOC.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -36,7 +36,7 @@ class TOC extends AbstractElement /** * Font style * - * @var \PhpOffice\PhpWord\Style\Font|array|string + * @var \PhpOffice\PhpWord\Style\Font|string */ private $fontStyle; @@ -54,14 +54,13 @@ class TOC extends AbstractElement */ private $maxDepth = 9; - /** * Create a new Table-of-Contents Element * * @param mixed $fontStyle * @param array $tocStyle - * @param integer $minDepth - * @param integer $maxDepth + * @param int $minDepth + * @param int $maxDepth */ public function __construct($fontStyle = null, $tocStyle = null, $minDepth = 1, $maxDepth = 9) { @@ -121,7 +120,7 @@ class TOC extends AbstractElement /** * Get Font Style * - * @return \PhpOffice\PhpWord\Style\Font + * @return \PhpOffice\PhpWord\Style\Font|string */ public function getStyleFont() { @@ -132,7 +131,6 @@ class TOC extends AbstractElement * Set max depth. * * @param int $value - * @return void */ public function setMaxDepth($value) { @@ -153,7 +151,6 @@ class TOC extends AbstractElement * Set min depth. * * @param int $value - * @return void */ public function setMinDepth($value) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Table.php index 357af37ae5cb98fd478b54e5f7c9be132efe380f..3a045031aaa7298cc47f06d13ab60ae8a4463844 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Table.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -121,7 +121,6 @@ class Table extends AbstractElement * Set table width. * * @param int $width - * @return void */ public function setWidth($width) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Text.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Text.php index 0de9cdeaf262530ed53ca4b468862d8e5572ed10..4de12176caeb9f9eb6459d224769f87697a2b7bb 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Text.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Text.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -105,12 +105,12 @@ class Text extends AbstractElement public function setParagraphStyle($style = null) { if (is_array($style)) { - $this->paragraphStyle = new Paragraph; + $this->paragraphStyle = new Paragraph(); $this->paragraphStyle->setStyleByArray($style); } elseif ($style instanceof Paragraph) { $this->paragraphStyle = $style; } elseif (null === $style) { - $this->paragraphStyle = new Paragraph; + $this->paragraphStyle = new Paragraph(); } else { $this->paragraphStyle = $style; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextBox.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextBox.php index 4a1e51310b2c201444a7f33d152b3a9e1c84f6f3..8058d0c9835d0ab7c5160d058d4fa3504460af8c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextBox.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextBox.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextBreak.php index 893fa87531d53da788263ba9c4296e1fbb7f61b8..4cf65f35c1e6cedb70a16daa911b169cf53416a9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -74,6 +74,7 @@ class TextBreak extends AbstractElement $this->fontStyle = $style; $this->setParagraphStyle($paragraphStyle); } + return $this->fontStyle; } @@ -96,13 +97,14 @@ class TextBreak extends AbstractElement public function setParagraphStyle($style = null) { if (is_array($style)) { - $this->paragraphStyle = new Paragraph; + $this->paragraphStyle = new Paragraph(); $this->paragraphStyle->setStyleByArray($style); } elseif ($style instanceof Paragraph) { $this->paragraphStyle = $style; } else { $this->paragraphStyle = $style; } + return $this->paragraphStyle; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextRun.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextRun.php index c2ce4f99817fc16a156faabc61e8742653683500..6d9ae9f4a1d734426d7c5a91fe36ecea844c1f4c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextRun.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TextRun.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -43,7 +43,7 @@ class TextRun extends AbstractContainer */ public function __construct($paragraphStyle = null) { - $this->paragraphStyle = $this->setNewStyle(new Paragraph(), $paragraphStyle); + $this->paragraphStyle = $this->setParagraphStyle($paragraphStyle); } /** @@ -55,4 +55,26 @@ class TextRun extends AbstractContainer { return $this->paragraphStyle; } + + /** + * Set Paragraph style + * + * @param string|array|\PhpOffice\PhpWord\Style\Paragraph $style + * @return string|\PhpOffice\PhpWord\Style\Paragraph + */ + public function setParagraphStyle($style = null) + { + if (is_array($style)) { + $this->paragraphStyle = new Paragraph(); + $this->paragraphStyle->setStyleByArray($style); + } elseif ($style instanceof Paragraph) { + $this->paragraphStyle = $style; + } elseif (null === $style) { + $this->paragraphStyle = new Paragraph(); + } else { + $this->paragraphStyle = $style; + } + + return $this->paragraphStyle; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Title.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Title.php index eabb1feb82f67d9cdbc48876230deb5287de02a4..808af55ebb681b449bdd6b14593690a7e16f245d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Title.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/Title.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -83,7 +83,7 @@ class Title extends AbstractElement /** * Get depth * - * @return integer + * @return int */ public function getDepth() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TrackChange.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TrackChange.php new file mode 100644 index 0000000000000000000000000000000000000000..44327f263f4efdf374387f49cbbb319754ca8871 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Element/TrackChange.php @@ -0,0 +1,76 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Element; + +/** + * TrackChange element + * @see http://datypic.com/sc/ooxml/t-w_CT_TrackChange.html + */ +class TrackChange extends AbstractContainer +{ + /** + * @var string Container type + */ + protected $container = 'TrackChange'; + + /** + * Author + * + * @var string + */ + private $author; + + /** + * Date + * + * @var \DateTime + */ + private $date; + + /** + * Create a new TrackChange Element + * + * @param string $author + * @param \DateTime $date + */ + public function __construct($author, \DateTime $date = null) + { + $this->author = $author; + $this->date = $date; + } + + /** + * Get TrackChange Author + * + * @return string + */ + public function getAuthor() + { + return $this->author; + } + + /** + * Get TrackChange Date + * + * @return \DateTime + */ + public function getDate() + { + return $this->date; + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/AbstractEscaper.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/AbstractEscaper.php index 6ddcbb51b2623322198c6504623a34a279a9dcde..8207e2c67f2c0b6e2f761566981881d16f251728 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/AbstractEscaper.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/AbstractEscaper.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -19,7 +19,7 @@ namespace PhpOffice\PhpWord\Escaper; /** * @since 0.13.0 - * + * * @codeCoverageIgnore */ abstract class AbstractEscaper implements EscaperInterface diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/EscaperInterface.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/EscaperInterface.php index c34cf370afbc967b94232fb37137d8554e4813e6..1ef35c1b06ab12f6409fb53d0710914432398a5c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/EscaperInterface.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/EscaperInterface.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -19,7 +19,7 @@ namespace PhpOffice\PhpWord\Escaper; /** * @since 0.13.0 - * + * * @codeCoverageIgnore */ interface EscaperInterface diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/RegExp.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/RegExp.php index de510bcf017e9bd391fdde4fa70bb13913e7678e..2f4e12ecde1447a9817050df9c10fea9db734ca0 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/RegExp.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/RegExp.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -19,7 +19,7 @@ namespace PhpOffice\PhpWord\Escaper; /** * @since 0.13.0 - * + * * @codeCoverageIgnore */ class RegExp extends AbstractEscaper diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Rtf.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Rtf.php index 6f83604d3892b8e77ceea16a1984a5c1ad52dbe9..35f91ada5bca5853fa539ca598dc6a90a952bfe6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Rtf.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Rtf.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -19,7 +19,7 @@ namespace PhpOffice\PhpWord\Escaper; /** * @since 0.13.0 - * + * * @codeCoverageIgnore */ class Rtf extends AbstractEscaper @@ -28,9 +28,9 @@ class Rtf extends AbstractEscaper { if (20 > $code || $code >= 80) { return '{\u' . $code . '}'; - } else { - return chr($code); } + + return chr($code); } protected function escapeMultibyteCharacter($code) @@ -40,6 +40,7 @@ class Rtf extends AbstractEscaper /** * @see http://www.randomchaos.com/documents/?source=php_and_unicode + * @param string $input */ protected function escapeSingleValue($input) { @@ -57,9 +58,9 @@ class Rtf extends AbstractEscaper if (0 == count($bytes)) { if ($asciiCode < 224) { $numberOfBytes = 2; - } else if ($asciiCode < 240) { + } elseif ($asciiCode < 240) { $numberOfBytes = 3; - } else if ($asciiCode < 248) { + } elseif ($asciiCode < 248) { $numberOfBytes = 4; } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Xml.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Xml.php index 274cade5b031d63fc7b9e3a6568c451b1dd65071..81cedaa956660382fd3a1c2ffca34f0ef01c87d9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Xml.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Escaper/Xml.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -19,7 +19,7 @@ namespace PhpOffice\PhpWord\Escaper; /** * @since 0.13.0 - * + * * @codeCoverageIgnore */ class Xml extends AbstractEscaper diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/CopyFileException.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/CopyFileException.php index c172657f4d20abb19d24eec9596df55de927960f..a5c1da6a84490af7987b06d46d9a9732bc45e67a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/CopyFileException.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/CopyFileException.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -23,10 +23,10 @@ namespace PhpOffice\PhpWord\Exception; final class CopyFileException extends Exception { /** - * @param string $source The fully qualified source file name. - * @param string $destination The fully qualified destination file name. - * @param integer $code The user defined exception code. - * @param \Exception $previous The previous exception used for the exception chaining. + * @param string $source The fully qualified source file name + * @param string $destination The fully qualified destination file name + * @param int $code The user defined exception code + * @param \Exception $previous The previous exception used for the exception chaining */ final public function __construct($source, $destination, $code = 0, \Exception $previous = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/CreateTemporaryFileException.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/CreateTemporaryFileException.php index 67d969baaddb788517cd77c355081495a20fa767..fafc8dac5a4ba701cad66dd6dbd654212443b7f0 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/CreateTemporaryFileException.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/CreateTemporaryFileException.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -23,8 +23,8 @@ namespace PhpOffice\PhpWord\Exception; final class CreateTemporaryFileException extends Exception { /** - * @param integer $code The user defined exception code. - * @param \Exception $previous The previous exception used for the exception chaining. + * @param int $code The user defined exception code + * @param \Exception $previous The previous exception used for the exception chaining */ final public function __construct($code = 0, \Exception $previous = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/Exception.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/Exception.php index a9c49f7fd6b34a4dbf9e1ccfb5f0c66e26537e74..b94ed1befb76e750201ebfb55e67d58e8493e2db 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/Exception.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/Exception.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidImageException.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidImageException.php index 21c885eebca8c15e54052096c7f40db82016e0c4..0a7b8fedd45e87bd08d33f966dfe5dff0c50569c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidImageException.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidImageException.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidObjectException.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidObjectException.php index ad564d479906e1112cc8b1a980ec8125929b7234..540155065dca9ac872cfdcd7fb167679a293813f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidObjectException.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidObjectException.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidStyleException.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidStyleException.php index 44980842ea26d11c4bb1bbeb7b078888574467b3..e697f6cff6c5a5f756535ea089f1b8720ce9fe74 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidStyleException.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/InvalidStyleException.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/UnsupportedImageTypeException.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/UnsupportedImageTypeException.php index 1b09bc8f69b7e509262eba70556791ab523ce53d..73b41d049c401fcde1010fede4b14325bf0754a9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/UnsupportedImageTypeException.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Exception/UnsupportedImageTypeException.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/IOFactory.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/IOFactory.php index c868841a126e60415cca90812807343ff14730c6..eed1f1630fa2faf63883b51b9fb700567a43a73e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/IOFactory.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/IOFactory.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -29,9 +29,9 @@ abstract class IOFactory * @param PhpWord $phpWord * @param string $name * - * @return WriterInterface - * * @throws \PhpOffice\PhpWord\Exception\Exception + * + * @return WriterInterface */ public static function createWriter(PhpWord $phpWord, $name = 'Word2007') { @@ -49,9 +49,9 @@ abstract class IOFactory * * @param string $name * - * @return ReaderInterface - * * @throws Exception + * + * @return ReaderInterface */ public static function createReader($name = 'Word2007') { @@ -65,19 +65,19 @@ abstract class IOFactory * @param string $name * @param \PhpOffice\PhpWord\PhpWord $phpWord * - * @return \PhpOffice\PhpWord\Writer\WriterInterface|\PhpOffice\PhpWord\Reader\ReaderInterface - * * @throws \PhpOffice\PhpWord\Exception\Exception + * + * @return \PhpOffice\PhpWord\Writer\WriterInterface|\PhpOffice\PhpWord\Reader\ReaderInterface */ private static function createObject($type, $name, $phpWord = null) { $class = "PhpOffice\\PhpWord\\{$type}\\{$name}"; if (class_exists($class) && self::isConcreteClass($class)) { return new $class($phpWord); - } else { - throw new Exception("\"{$name}\" is not a valid {$type}."); } + throw new Exception("\"{$name}\" is not a valid {$type}."); } + /** * Loads PhpWord from file * @@ -89,8 +89,10 @@ abstract class IOFactory { /** @var \PhpOffice\PhpWord\Reader\ReaderInterface $reader */ $reader = self::createReader($readerName); + return $reader->load($filename); } + /** * Check if it's a concrete class (not abstract nor interface) * @@ -100,6 +102,7 @@ abstract class IOFactory private static function isConcreteClass($class) { $reflection = new \ReflectionClass($class); + return !$reflection->isAbstract() && !$reflection->isInterface(); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Media.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Media.php index df3378545edc91bc35214d14470033ebcae65798..d98790105436ada051abfbfbf139067b97e4823b 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Media.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Media.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -43,9 +43,9 @@ class Media * @param string $source * @param \PhpOffice\PhpWord\Element\Image $image * - * @return integer - * * @throws \PhpOffice\PhpWord\Exception\Exception + * + * @return int */ public static function addElement($container, $mediaType, $source, Image $image = null) { @@ -83,12 +83,10 @@ class Media $image->setTarget($target); $image->setMediaIndex($mediaTypeCount); break; - // Objects case 'object': $target = "{$container}_oleObject{$mediaTypeCount}.bin"; break; - // Links case 'link': $target = $source; @@ -100,15 +98,17 @@ class Media $mediaData['type'] = $mediaType; $mediaData['rID'] = $rId; self::$elements[$container][$mediaId] = $mediaData; + return $rId; - } else { - $mediaData = self::$elements[$container][$mediaId]; - if (!is_null($image)) { - $image->setTarget($mediaData['target']); - $image->setMediaIndex($mediaData['mediaIndex']); - } - return $mediaData['rID']; } + + $mediaData = self::$elements[$container][$mediaId]; + if (!is_null($image)) { + $image->setTarget($mediaData['target']); + $image->setMediaIndex($mediaData['mediaIndex']); + } + + return $mediaData['rID']; } /** @@ -116,7 +116,7 @@ class Media * * @param string $container section|headerx|footerx|footnote|endnote * @param string $mediaType image|object|link - * @return integer + * @return int * @since 0.10.0 */ public static function countElements($container, $mediaType = null) @@ -157,13 +157,15 @@ class Media $elements[$key] = $val; } } + + return $elements; + } + + if (!isset(self::$elements[$container])) { return $elements; - } else { - if (!isset(self::$elements[$container])) { - return $elements; - } - return self::getElementsByType($container, $type); } + + return self::getElementsByType($container, $type); } /** @@ -208,7 +210,7 @@ class Media * @param string $type * @param \PhpOffice\PhpWord\Element\Image $image * - * @return integer + * @return int * * @codeCoverageIgnore */ @@ -224,7 +226,7 @@ class Media * * @param string $linkSrc * - * @return integer + * @return int * * @codeCoverageIgnore */ @@ -256,7 +258,7 @@ class Media * * @param string $key * - * @return integer + * @return int * * @codeCoverageIgnore */ @@ -270,11 +272,11 @@ class Media * * @deprecated 0.10.0 * - * @param integer $headerCount + * @param int $headerCount * @param string $src * @param \PhpOffice\PhpWord\Element\Image $image * - * @return integer + * @return int * * @codeCoverageIgnore */ @@ -290,7 +292,7 @@ class Media * * @param string $key * - * @return integer + * @return int * * @codeCoverageIgnore */ @@ -318,11 +320,11 @@ class Media * * @deprecated 0.10.0 * - * @param integer $footerCount + * @param int $footerCount * @param string $src * @param \PhpOffice\PhpWord\Element\Image $image * - * @return integer + * @return int * * @codeCoverageIgnore */ @@ -338,7 +340,7 @@ class Media * * @param string $key * - * @return integer + * @return int * * @codeCoverageIgnore */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Compatibility.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Compatibility.php index eb93274dd39f13fa80752e71d9954eb7061c14f7..69f6f98a70db308e0a3994bbdf10f19573094dc4 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Compatibility.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Compatibility.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -21,7 +21,7 @@ namespace PhpOffice\PhpWord\Metadata; * Compatibility setting class * * @since 0.12.0 - * @link http://www.datypic.com/sc/ooxml/t-w_CT_Compat.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_Compat.html */ class Compatibility { @@ -33,7 +33,7 @@ class Compatibility * 15 = 2013 * * @var int - * @link http://msdn.microsoft.com/en-us/library/dd909048%28v=office.12%29.aspx + * @see http://msdn.microsoft.com/en-us/library/dd909048%28v=office.12%29.aspx */ private $ooxmlVersion = 12; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/DocInfo.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/DocInfo.php index 63a7d51539f4fec2f8a6af0aa6cf8ba0961bd331..09714f9e0c24856df07a24b57d419eb2f02688d7 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/DocInfo.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/DocInfo.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -119,17 +119,17 @@ class DocInfo */ public function __construct() { - $this->creator = ''; + $this->creator = ''; $this->lastModifiedBy = $this->creator; - $this->created = time(); - $this->modified = time(); - $this->title = ''; - $this->subject = ''; - $this->description = ''; - $this->keywords = ''; - $this->category = ''; - $this->company = ''; - $this->manager = ''; + $this->created = time(); + $this->modified = time(); + $this->title = ''; + $this->subject = ''; + $this->description = ''; + $this->keywords = ''; + $this->category = ''; + $this->company = ''; + $this->manager = ''; } /** @@ -399,7 +399,7 @@ class DocInfo * Check if a Custom Property is defined * * @param string $propertyName - * @return boolean + * @return bool */ public function isCustomPropertySet($propertyName) { @@ -410,15 +410,15 @@ class DocInfo * Get a Custom Property Value * * @param string $propertyName - * @return string + * @return mixed */ public function getCustomPropertyValue($propertyName) { if ($this->isCustomPropertySet($propertyName)) { return $this->customProperties[$propertyName]['value']; - } else { - return null; } + + return null; } /** @@ -431,9 +431,9 @@ class DocInfo { if ($this->isCustomPropertySet($propertyName)) { return $this->customProperties[$propertyName]['type']; - } else { - return null; } + + return null; } /** @@ -456,7 +456,7 @@ class DocInfo self::PROPERTY_TYPE_FLOAT, self::PROPERTY_TYPE_STRING, self::PROPERTY_TYPE_DATE, - self::PROPERTY_TYPE_BOOLEAN + self::PROPERTY_TYPE_BOOLEAN, ); if (($propertyType === null) || (!in_array($propertyType, $propertyTypes))) { if ($propertyValue === null) { @@ -467,6 +467,8 @@ class DocInfo $propertyType = self::PROPERTY_TYPE_INTEGER; } elseif (is_bool($propertyValue)) { $propertyType = self::PROPERTY_TYPE_BOOLEAN; + } elseif ($propertyValue instanceof \DateTime) { + $propertyType = self::PROPERTY_TYPE_DATE; } else { $propertyType = self::PROPERTY_TYPE_STRING; } @@ -474,8 +476,9 @@ class DocInfo $this->customProperties[$propertyName] = array( 'value' => $propertyValue, - 'type' => $propertyType + 'type' => $propertyType, ); + return $this; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Protection.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Protection.php index 0e2ee7c140b863d9d1e63406c1f2bd50ba6fa66d..39ebc3dead0746fa8643724e26bec0adb4f6e19b 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Protection.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Protection.php @@ -10,30 +10,60 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Metadata; +use PhpOffice\PhpWord\Shared\Microsoft\PasswordEncoder; +use PhpOffice\PhpWord\SimpleType\DocProtect; + /** * Document protection class * * @since 0.12.0 - * @link http://www.datypic.com/sc/ooxml/t-w_CT_DocProtect.html - * @todo Password! + * @see http://www.datypic.com/sc/ooxml/t-w_CT_DocProtect.html */ class Protection { /** - * Editing restriction readOnly|comments|trackedChanges|forms + * Editing restriction none|readOnly|comments|trackedChanges|forms * * @var string - * @link http://www.datypic.com/sc/ooxml/a-w_edit-1.html + * @see http://www.datypic.com/sc/ooxml/a-w_edit-1.html */ private $editing; + /** + * password + * + * @var string + */ + private $password; + + /** + * Iterations to Run Hashing Algorithm + * + * @var int + */ + private $spinCount = 100000; + + /** + * Cryptographic Hashing Algorithm (see constants defined in \PhpOffice\PhpWord\Shared\Microsoft\PasswordEncoder) + * + * @var string + */ + private $algorithm = PasswordEncoder::ALGORITHM_SHA_1; + + /** + * Salt for Password Verifier + * + * @var string + */ + private $salt; + /** * Create a new instance * @@ -41,7 +71,9 @@ class Protection */ public function __construct($editing = null) { - $this->setEditing($editing); + if ($editing != null) { + $this->setEditing($editing); + } } /** @@ -57,13 +89,111 @@ class Protection /** * Set editing protection * - * @param string $editing + * @param string $editing Any value of \PhpOffice\PhpWord\SimpleType\DocProtect * @return self */ public function setEditing($editing = null) { + DocProtect::validate($editing); $this->editing = $editing; return $this; } + + /** + * Get password + * + * @return string + */ + public function getPassword() + { + return $this->password; + } + + /** + * Set password + * + * @param $password + * @return self + */ + public function setPassword($password) + { + $this->password = $password; + + return $this; + } + + /** + * Get count for hash iterations + * + * @return int + */ + public function getSpinCount() + { + return $this->spinCount; + } + + /** + * Set count for hash iterations + * + * @param $spinCount + * @return self + */ + public function setSpinCount($spinCount) + { + $this->spinCount = $spinCount; + + return $this; + } + + /** + * Get algorithm + * + * @return string + */ + public function getAlgorithm() + { + return $this->algorithm; + } + + /** + * Set algorithm + * + * @param $algorithm + * @return self + */ + public function setAlgorithm($algorithm) + { + $this->algorithm = $algorithm; + + return $this; + } + + /** + * Get salt + * + * @return string + */ + public function getSalt() + { + return $this->salt; + } + + /** + * Set salt. Salt HAS to be 16 characters, or an exception will be thrown. + * + * @param string $salt + * @throws \InvalidArgumentException + * @return self + */ + public function setSalt($salt) + { + if ($salt !== null && strlen($salt) !== 16) { + throw new \InvalidArgumentException('salt has to be of exactly 16 bytes length'); + } + + $this->salt = $salt; + + return $this; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Settings.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Settings.php new file mode 100644 index 0000000000000000000000000000000000000000..728cc823fd79792aa2d6a27091de9621b2d2413d --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Metadata/Settings.php @@ -0,0 +1,390 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Metadata; + +use PhpOffice\PhpWord\ComplexType\ProofState; +use PhpOffice\PhpWord\ComplexType\TrackChangesView; +use PhpOffice\PhpWord\SimpleType\Zoom; +use PhpOffice\PhpWord\Style\Language; + +/** + * Setting class + * + * @since 0.14.0 + * @see http://www.datypic.com/sc/ooxml/t-w_CT_Settings.html + */ +class Settings +{ + /** + * Magnification Setting + * + * @see http://www.datypic.com/sc/ooxml/e-w_zoom-1.html + * @var mixed either integer, in which case it treated as a percent, or one of PhpOffice\PhpWord\SimpleType\Zoom + */ + private $zoom = 100; + + /** + * Mirror Page Margins + * + * @see http://www.datypic.com/sc/ooxml/e-w_mirrorMargins-1.html + * @var bool + */ + private $mirrorMargins; + + /** + * Hide spelling errors + * + * @var bool + */ + private $hideSpellingErrors = false; + + /** + * Hide grammatical errors + * + * @var bool + */ + private $hideGrammaticalErrors = false; + + /** + * Visibility of Annotation Types + * + * @var TrackChangesView + */ + private $revisionView; + + /** + * Track Revisions to Document + * + * @var bool + */ + private $trackRevisions = false; + + /** + * Do Not Use Move Syntax When Tracking Revisions + * + * @var bool + */ + private $doNotTrackMoves = false; + + /** + * Do Not Track Formatting Revisions When Tracking Revisions + * + * @var bool + */ + private $doNotTrackFormatting = false; + + /** + * Spelling and Grammatical Checking State + * + * @var \PhpOffice\PhpWord\ComplexType\ProofState + */ + private $proofState; + + /** + * Document Editing Restrictions + * + * @var \PhpOffice\PhpWord\Metadata\Protection + */ + private $documentProtection; + + /** + * Enables different header for odd and even pages. + * + * @var bool + */ + private $evenAndOddHeaders = false; + + /** + * Theme Font Languages + * + * @var Language + */ + private $themeFontLang; + + /** + * Automatically Recalculate Fields on Open + * + * @var bool + */ + private $updateFields = false; + + /** + * Radix Point for Field Code Evaluation + * + * @var string + */ + private $decimalSymbol = '.'; + + /** + * @return Protection + */ + public function getDocumentProtection() + { + if ($this->documentProtection == null) { + $this->documentProtection = new Protection(); + } + + return $this->documentProtection; + } + + /** + * @param Protection $documentProtection + */ + public function setDocumentProtection($documentProtection) + { + $this->documentProtection = $documentProtection; + } + + /** + * @return ProofState + */ + public function getProofState() + { + if ($this->proofState == null) { + $this->proofState = new ProofState(); + } + + return $this->proofState; + } + + /** + * @param ProofState $proofState + */ + public function setProofState($proofState) + { + $this->proofState = $proofState; + } + + /** + * Are spelling errors hidden + * + * @return bool + */ + public function hasHideSpellingErrors() + { + return $this->hideSpellingErrors; + } + + /** + * Hide spelling errors + * + * @param bool $hideSpellingErrors + */ + public function setHideSpellingErrors($hideSpellingErrors) + { + $this->hideSpellingErrors = $hideSpellingErrors === null ? true : $hideSpellingErrors; + } + + /** + * Are grammatical errors hidden + * + * @return bool + */ + public function hasHideGrammaticalErrors() + { + return $this->hideGrammaticalErrors; + } + + /** + * Hide grammatical errors + * + * @param bool $hideGrammaticalErrors + */ + public function setHideGrammaticalErrors($hideGrammaticalErrors) + { + $this->hideGrammaticalErrors = $hideGrammaticalErrors === null ? true : $hideGrammaticalErrors; + } + + /** + * @return bool + */ + public function hasEvenAndOddHeaders() + { + return $this->evenAndOddHeaders; + } + + /** + * @param bool $evenAndOddHeaders + */ + public function setEvenAndOddHeaders($evenAndOddHeaders) + { + $this->evenAndOddHeaders = $evenAndOddHeaders === null ? true : $evenAndOddHeaders; + } + + /** + * Get the Visibility of Annotation Types + * + * @return \PhpOffice\PhpWord\ComplexType\TrackChangesView + */ + public function getRevisionView() + { + return $this->revisionView; + } + + /** + * Set the Visibility of Annotation Types + * + * @param TrackChangesView $trackChangesView + */ + public function setRevisionView(TrackChangesView $trackChangesView = null) + { + $this->revisionView = $trackChangesView; + } + + /** + * @return bool + */ + public function hasTrackRevisions() + { + return $this->trackRevisions; + } + + /** + * @param bool $trackRevisions + */ + public function setTrackRevisions($trackRevisions) + { + $this->trackRevisions = $trackRevisions === null ? true : $trackRevisions; + } + + /** + * @return bool + */ + public function hasDoNotTrackMoves() + { + return $this->doNotTrackMoves; + } + + /** + * @param bool $doNotTrackMoves + */ + public function setDoNotTrackMoves($doNotTrackMoves) + { + $this->doNotTrackMoves = $doNotTrackMoves === null ? true : $doNotTrackMoves; + } + + /** + * @return bool + */ + public function hasDoNotTrackFormatting() + { + return $this->doNotTrackFormatting; + } + + /** + * @param bool $doNotTrackFormatting + */ + public function setDoNotTrackFormatting($doNotTrackFormatting) + { + $this->doNotTrackFormatting = $doNotTrackFormatting === null ? true : $doNotTrackFormatting; + } + + /** + * @return mixed + */ + public function getZoom() + { + return $this->zoom; + } + + /** + * @param mixed $zoom + */ + public function setZoom($zoom) + { + if (is_numeric($zoom)) { + // zoom is a percentage + $this->zoom = $zoom; + } else { + Zoom::validate($zoom); + $this->zoom = $zoom; + } + } + + /** + * @return bool + */ + public function hasMirrorMargins() + { + return $this->mirrorMargins; + } + + /** + * @param bool $mirrorMargins + */ + public function setMirrorMargins($mirrorMargins) + { + $this->mirrorMargins = $mirrorMargins; + } + + /** + * Returns the Language + * + * @return Language + */ + public function getThemeFontLang() + { + return $this->themeFontLang; + } + + /** + * sets the Language for this document + * + * @param Language $themeFontLang + */ + public function setThemeFontLang($themeFontLang) + { + $this->themeFontLang = $themeFontLang; + } + + /** + * @return bool + */ + public function hasUpdateFields() + { + return $this->updateFields; + } + + /** + * @param bool $updateFields + */ + public function setUpdateFields($updateFields) + { + $this->updateFields = $updateFields === null ? false : $updateFields; + } + + /** + * Returns the Radix Point for Field Code Evaluation + * + * @return string + */ + public function getDecimalSymbol() + { + return $this->decimalSymbol; + } + + /** + * sets the Radix Point for Field Code Evaluation + * + * @param string $decimalSymbol + */ + public function setDecimalSymbol($decimalSymbol) + { + $this->decimalSymbol = $decimalSymbol; + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/PhpWord.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/PhpWord.php index 0fa76b2fc691f7395366beae0c5a637d6101da86..d7c2348a63740089ca1220cf708d428dc49e6a1d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/PhpWord.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/PhpWord.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -27,11 +27,13 @@ use PhpOffice\PhpWord\Exception\Exception; * @method Collection\Footnotes getFootnotes() * @method Collection\Endnotes getEndnotes() * @method Collection\Charts getCharts() + * @method Collection\Comments getComments() * @method int addBookmark(Element\Bookmark $bookmark) * @method int addTitle(Element\Title $title) * @method int addFootnote(Element\Footnote $footnote) * @method int addEndnote(Element\Endnote $endnote) * @method int addChart(Element\Chart $chart) + * @method int addComment(Element\Comment $comment) * * @method Style\Paragraph addParagraphStyle(string $styleName, array $styles) * @method Style\Font addFontStyle(string $styleName, mixed $fontStyle, mixed $paragraphStyle = null) @@ -84,14 +86,14 @@ class PhpWord public function __construct() { // Collection - $collections = array('Bookmarks', 'Titles', 'Footnotes', 'Endnotes', 'Charts'); + $collections = array('Bookmarks', 'Titles', 'Footnotes', 'Endnotes', 'Charts', 'Comments'); foreach ($collections as $collection) { $class = 'PhpOffice\\PhpWord\\Collection\\' . $collection; $this->collections[$collection] = new $class(); } // Metadata - $metadata = array('DocInfo', 'Protection', 'Compatibility'); + $metadata = array('DocInfo', 'Settings', 'Compatibility'); foreach ($metadata as $meta) { $class = 'PhpOffice\\PhpWord\\Metadata\\' . $meta; $this->metadata[$meta] = new $class(); @@ -106,9 +108,9 @@ class PhpWord * @param mixed $function * @param mixed $args * - * @return mixed - * * @throws \BadMethodCallException + * + * @return mixed */ public function __call($function, $args) { @@ -118,7 +120,7 @@ class PhpWord $addCollection = array(); $addStyle = array(); - $collections = array('Bookmark', 'Title', 'Footnote', 'Endnote', 'Chart'); + $collections = array('Bookmark', 'Title', 'Footnote', 'Endnote', 'Chart', 'Comment'); foreach ($collections as $collection) { $getCollection[] = strtolower("get{$collection}s"); $addCollection[] = strtolower("add{$collection}"); @@ -170,10 +172,12 @@ class PhpWord * * @return \PhpOffice\PhpWord\Metadata\Protection * @since 0.12.0 + * @deprecated Get the Document protection from PhpWord->getSettings()->getDocumentProtection(); + * @codeCoverageIgnore */ public function getProtection() { - return $this->metadata['Protection']; + return $this->getSettings()->getDocumentProtection(); } /** @@ -187,6 +191,17 @@ class PhpWord return $this->metadata['Compatibility']; } + /** + * Get compatibility + * + * @return \PhpOffice\PhpWord\Metadata\Settings + * @since 0.14.0 + */ + public function getSettings() + { + return $this->metadata['Settings']; + } + /** * Get all sections * @@ -226,7 +241,6 @@ class PhpWord * Set default font name. * * @param string $fontName - * @return void */ public function setDefaultFontName($fontName) { @@ -236,7 +250,7 @@ class PhpWord /** * Get default font size * - * @return integer + * @return int */ public function getDefaultFontSize() { @@ -247,7 +261,6 @@ class PhpWord * Set default font size. * * @param int $fontSize - * @return void */ public function setDefaultFontSize($fontSize) { @@ -270,21 +283,20 @@ class PhpWord * * @deprecated 0.12.0 Use `new TemplateProcessor($documentTemplate)` instead. * - * @param string $filename Fully qualified filename. - * - * @return TemplateProcessor + * @param string $filename Fully qualified filename * * @throws \PhpOffice\PhpWord\Exception\Exception * + * @return TemplateProcessor + * * @codeCoverageIgnore */ public function loadTemplate($filename) { if (file_exists($filename)) { return new TemplateProcessor($filename); - } else { - throw new Exception("Template file {$filename} not found."); } + throw new Exception("Template file {$filename} not found."); } /** @@ -310,7 +322,7 @@ class PhpWord $writer = IOFactory::createWriter($this, $format); if ($download === true) { - header("Content-Description: File Transfer"); + header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Type: ' . $mime[$format]); header('Content-Transfer-Encoding: binary'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/AbstractReader.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/AbstractReader.php index 93288c3b05fd430ec5118658afa30b5c5d234b7e..f59a9556838429849fdf52d15d82241f4117f9a2 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/AbstractReader.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/AbstractReader.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -62,6 +62,7 @@ abstract class AbstractReader implements ReaderInterface public function setReadDataOnly($value = true) { $this->readDataOnly = $value; + return $this; } @@ -70,21 +71,21 @@ abstract class AbstractReader implements ReaderInterface * * @param string $filename * - * @return resource - * * @throws \PhpOffice\PhpWord\Exception\Exception + * + * @return resource */ protected function openFile($filename) { // Check if file exists if (!file_exists($filename) || !is_readable($filename)) { - throw new Exception("Could not open " . $filename . " for reading! File does not exist."); + throw new Exception("Could not open $filename for reading! File does not exist."); } // Open file $this->fileHandle = fopen($filename, 'r'); if ($this->fileHandle === false) { - throw new Exception("Could not open file " . $filename . " for reading."); + throw new Exception("Could not open file $filename for reading."); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/HTML.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/HTML.php index 824573e905a5fed85861d51e0850284f9459ea51..4e8b5e8227cf17fdc5405b99678193c1290b5978 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/HTML.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/HTML.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/MsDoc.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/MsDoc.php index 2f8c7e1a55d5c91ac463740199cbd44f4e26beed..c134377ad761337894fb2ea5cf2e8ebfe481a50f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/MsDoc.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/MsDoc.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,6 +20,7 @@ namespace PhpOffice\PhpWord\Reader; use PhpOffice\Common\Drawing; use PhpOffice\PhpWord\PhpWord; use PhpOffice\PhpWord\Shared\OLERead; +use PhpOffice\PhpWord\Style; /** * Reader for Word97 @@ -163,13 +164,14 @@ class MsDoc extends AbstractReader implements ReaderInterface $arrayCP[$inc] = self::getInt4d($data, $posMem); $posMem += 4; } + return $arrayCP; } /** - * - * @link http://msdn.microsoft.com/en-us/library/dd949344%28v=office.12%29.aspx - * @link https://igor.io/2012/09/24/binary-parsing.html + * @see http://msdn.microsoft.com/en-us/library/dd949344%28v=office.12%29.aspx + * @see https://igor.io/2012/09/24/binary-parsing.html + * @param string $data */ private function readFib($data) { @@ -1094,6 +1096,7 @@ class MsDoc extends AbstractReader implements ReaderInterface $this->arrayFib['lcbColorSchemeMapping'] = self::getInt4d($data, $pos); $pos += 4; } + return $pos; } @@ -1106,11 +1109,11 @@ class MsDoc extends AbstractReader implements ReaderInterface $this->readRecordPlcfSed(); // reading paragraphs - //@link https://github.com/notmasteryet/CompoundFile/blob/ec118f354efebdee9102e41b5b7084fce81125b0/WordFileReader/WordDocument.cs#L86 + //@see https://github.com/notmasteryet/CompoundFile/blob/ec118f354efebdee9102e41b5b7084fce81125b0/WordFileReader/WordDocument.cs#L86 $this->readRecordPlcfBtePapx(); // reading character formattings - //@link https://github.com/notmasteryet/CompoundFile/blob/ec118f354efebdee9102e41b5b7084fce81125b0/WordFileReader/WordDocument.cs#L94 + //@see https://github.com/notmasteryet/CompoundFile/blob/ec118f354efebdee9102e41b5b7084fce81125b0/WordFileReader/WordDocument.cs#L94 $this->readRecordPlcfBteChpx(); $this->generatePhpWord(); @@ -1118,7 +1121,7 @@ class MsDoc extends AbstractReader implements ReaderInterface /** * Section and information about them - * @link : http://msdn.microsoft.com/en-us/library/dd924458%28v=office.12%29.aspx + * @see : http://msdn.microsoft.com/en-us/library/dd924458%28v=office.12%29.aspx */ private function readRecordPlcfSed() { @@ -1132,7 +1135,7 @@ class MsDoc extends AbstractReader implements ReaderInterface $posMem += 4; // PlcfSed : aSed - //@link : http://msdn.microsoft.com/en-us/library/dd950194%28v=office.12%29.aspx + //@see : http://msdn.microsoft.com/en-us/library/dd950194%28v=office.12%29.aspx $numSed = $this->getNumInLcb($this->arrayFib['lcbPlcfSed'], 12); $aSed = array(); @@ -1163,7 +1166,7 @@ class MsDoc extends AbstractReader implements ReaderInterface /** * Specifies the fonts that are used in the document - * @link : http://msdn.microsoft.com/en-us/library/dd943880%28v=office.12%29.aspx + * @see : http://msdn.microsoft.com/en-us/library/dd943880%28v=office.12%29.aspx */ private function readRecordSttbfFfn() { @@ -1214,7 +1217,7 @@ class MsDoc extends AbstractReader implements ReaderInterface } $this->arrayFonts[] = array( 'main' => $xszFfn, - 'alt' => $xszAlt, + 'alt' => $xszAlt, ); } } @@ -1222,7 +1225,7 @@ class MsDoc extends AbstractReader implements ReaderInterface /** * Paragraph and information about them - * @link http://msdn.microsoft.com/en-us/library/dd908569%28v=office.12%29.aspx + * @see http://msdn.microsoft.com/en-us/library/dd908569%28v=office.12%29.aspx */ private function readRecordPlcfBtePapx() { @@ -1246,7 +1249,7 @@ class MsDoc extends AbstractReader implements ReaderInterface } $arrayRGB = array(); for ($inc = 1; $inc <= $numRun; $inc++) { - // @link http://msdn.microsoft.com/en-us/library/dd925804(v=office.12).aspx + // @see http://msdn.microsoft.com/en-us/library/dd925804(v=office.12).aspx $arrayRGB[$inc] = self::getInt1d($this->dataWorkDocument, $offset); $offset += 1; // reserved @@ -1302,7 +1305,7 @@ class MsDoc extends AbstractReader implements ReaderInterface print_r('$sprm.ispmd : 0x'.dechex($sprm_IsPmd).PHP_EOL); print_r('$sprm.f : 0x'.dechex($sprm_F).PHP_EOL); print_r('$sprm.sgc : 0x'.dechex($sprm_Sgc)); - switch(dechex($sprm_Sgc)) { + switch (dechex($sprm_Sgc)) { case 0x01: print_r(' (Paragraph property)'); break; @@ -1321,12 +1324,12 @@ class MsDoc extends AbstractReader implements ReaderInterface } print_r(PHP_EOL); print_r('$sprm.spra : 0x'.dechex($sprm_Spra).PHP_EOL); - switch(dechex($sprm_Spra)) { + switch (dechex($sprm_Spra)) { case 0x0: $operand = self::getInt1d($this->dataWorkDocument, $offset); $offset += 1; $cb -= 1; - switch(dechex($operand)) { + switch (dechex($operand)) { case 0x00: $operand = 'OFF'; break; @@ -1375,9 +1378,9 @@ class MsDoc extends AbstractReader implements ReaderInterface } // - switch(dechex($sprm_Sgc)) { + switch (dechex($sprm_Sgc)) { case 0x01: // Sprm is modifying a paragraph property. - switch($sprm_IsPmd) { + switch ($sprm_IsPmd) { case 0x0A: // sprmPIlvl print_r('sprmPIlvl : '.$operand.PHP_EOL.PHP_EOL); break; @@ -1390,28 +1393,28 @@ class MsDoc extends AbstractReader implements ReaderInterface } break; case 0x02: // Sprm is modifying a character property. - switch($sprm_IsPmd) { + switch ($sprm_IsPmd) { default: print_r('$sprm_IsPmd(2) : '.$sprm_IsPmd.PHP_EOL.PHP_EOL); break; } break; case 0x03: // Sprm is modifying a picture property. - switch($sprm_IsPmd) { + switch ($sprm_IsPmd) { default: print_r('$sprm_IsPmd(3) : '.$sprm_IsPmd.PHP_EOL.PHP_EOL); break; } break; case 0x04: // Sprm is modifying a section property. - switch($sprm_IsPmd) { + switch ($sprm_IsPmd) { default: print_r('$sprm_IsPmd(4) : '.$sprm_IsPmd.PHP_EOL.PHP_EOL); break; } break; case 0x05: // Sprm is modifying a table property. - switch($sprm_IsPmd) { + switch ($sprm_IsPmd) { default: print_r('$sprm_IsPmd(4) : '.$sprm_IsPmd.PHP_EOL.PHP_EOL); break; @@ -1425,7 +1428,7 @@ class MsDoc extends AbstractReader implements ReaderInterface } else { if ($istd > 0) { // @todo : Determining Properties of a Paragraph Style - # @link http://msdn.microsoft.com/en-us/library/dd948631%28v=office.12%29.aspx + # @see http://msdn.microsoft.com/en-us/library/dd948631%28v=office.12%29.aspx } } }*/ @@ -1434,7 +1437,7 @@ class MsDoc extends AbstractReader implements ReaderInterface /** * Character formatting properties to text in a document - * @link http://msdn.microsoft.com/en-us/library/dd907108%28v=office.12%29.aspx + * @see http://msdn.microsoft.com/en-us/library/dd907108%28v=office.12%29.aspx */ private function readRecordPlcfBteChpx() { @@ -1452,7 +1455,7 @@ class MsDoc extends AbstractReader implements ReaderInterface $offset = $offsetBase; // ChpxFkp - // @link : http://msdn.microsoft.com/en-us/library/dd910989%28v=office.12%29.aspx + // @see : http://msdn.microsoft.com/en-us/library/dd910989%28v=office.12%29.aspx $numRGFC = self::getInt1d($this->dataWorkDocument, $offset + 511); $arrayRGFC = array(); for ($inc = 0; $inc <= $numRGFC; $inc++) { @@ -1470,12 +1473,12 @@ class MsDoc extends AbstractReader implements ReaderInterface foreach ($arrayRGB as $keyRGB => $rgb) { $oStyle = new \stdClass(); $oStyle->pos_start = $start; - $oStyle->pos_len = (int)ceil((($arrayRGFC[$keyRGB] -1) - $arrayRGFC[$keyRGB -1]) / 2); + $oStyle->pos_len = (int) ceil((($arrayRGFC[$keyRGB] - 1) - $arrayRGFC[$keyRGB - 1]) / 2); $start += $oStyle->pos_len; if ($rgb > 0) { // Chp Structure - // @link : http://msdn.microsoft.com/en-us/library/dd772849%28v=office.12%29.aspx + // @see : http://msdn.microsoft.com/en-us/library/dd772849%28v=office.12%29.aspx $posRGB = $offsetBase + $rgb * 2; $cb = self::getInt1d($this->dataWorkDocument, $posRGB); @@ -1499,12 +1502,13 @@ class MsDoc extends AbstractReader implements ReaderInterface $oSprm->f = ($sprm / 512) & 0x0001; $oSprm->sgc = ($sprm / 1024) & 0x0007; $oSprm->spra = ($sprm / 8192); + return $oSprm; } /** * @param string $data - * @param integer $pos + * @param int $pos * @param \stdClass $oSprm * @return array */ @@ -1513,11 +1517,11 @@ class MsDoc extends AbstractReader implements ReaderInterface $length = 0; $operand = null; - switch(dechex($oSprm->spra)) { + switch (dechex($oSprm->spra)) { case 0x0: $operand = self::getInt1d($data, $pos); $length = 1; - switch(dechex($operand)) { + switch (dechex($operand)) { case 0x00: $operand = false; break; @@ -1557,16 +1561,17 @@ class MsDoc extends AbstractReader implements ReaderInterface } return array( - 'length' => $length, + 'length' => $length, 'operand' => $operand, ); } /** - * @param $data integer - * @param $pos integer + * @param $data int + * @param $pos int + * @param $cbNum int * @return \stdClass - * @link http://msdn.microsoft.com/en-us/library/dd772849%28v=office.12%29.aspx + * @see http://msdn.microsoft.com/en-us/library/dd772849%28v=office.12%29.aspx */ private function readPrl($data, $pos, $cbNum) { @@ -1592,7 +1597,7 @@ class MsDoc extends AbstractReader implements ReaderInterface $cbNum -= $arrayReturn['length']; $operand = $arrayReturn['operand']; - switch(dechex($oSprm->sgc)) { + switch (dechex($oSprm->sgc)) { // Paragraph property case 0x01: break; @@ -1601,7 +1606,7 @@ class MsDoc extends AbstractReader implements ReaderInterface if (!isset($oStylePrl->styleFont)) { $oStylePrl->styleFont = array(); } - switch($oSprm->isPmd) { + switch ($oSprm->isPmd) { // sprmCFRMarkIns case 0x01: break; @@ -1619,7 +1624,7 @@ class MsDoc extends AbstractReader implements ReaderInterface // sprmCFItalic case 0x36: // By default, text is not italicized. - switch($operand) { + switch ($operand) { case false: case true: $oStylePrl->styleFont['italic'] = $operand; @@ -1639,7 +1644,7 @@ class MsDoc extends AbstractReader implements ReaderInterface // sprmCFBold case 0x35: // By default, text is not bold. - switch($operand) { + switch ($operand) { case false: case true: $oStylePrl->styleFont['bold'] = $operand; @@ -1655,7 +1660,7 @@ class MsDoc extends AbstractReader implements ReaderInterface // sprmCFStrike case 0x37: // By default, text is not struck through. - switch($operand) { + switch ($operand) { case false: case true: $oStylePrl->styleFont['strikethrough'] = $operand; @@ -1670,7 +1675,7 @@ class MsDoc extends AbstractReader implements ReaderInterface break; // sprmCKul case 0x3E: - switch(dechex($operand)) { + switch (dechex($operand)) { case 0x00: $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_NONE; break; @@ -1693,7 +1698,7 @@ class MsDoc extends AbstractReader implements ReaderInterface $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_DASH; break; case 0x09: - $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_DOTHASH; + $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_DOTDASH; break; case 0x0A: $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_DOTDOTDASH; @@ -1708,7 +1713,7 @@ class MsDoc extends AbstractReader implements ReaderInterface $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_DASHHEAVY; break; case 0x19: - $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_DOTHASHHEAVY; + $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_DOTDASHHEAVY; break; case 0x1A: $oStylePrl->styleFont['underline'] = Style\Font::UNDERLINE_DOTDOTDASHHEAVY; @@ -1731,9 +1736,9 @@ class MsDoc extends AbstractReader implements ReaderInterface } break; // sprmCIco - //@link http://msdn.microsoft.com/en-us/library/dd773060%28v=office.12%29.aspx + //@see http://msdn.microsoft.com/en-us/library/dd773060%28v=office.12%29.aspx case 0x42: - switch(dechex($operand)) { + switch (dechex($operand)) { case 0x00: case 0x01: $oStylePrl->styleFont['color'] = '000000'; @@ -1786,7 +1791,7 @@ class MsDoc extends AbstractReader implements ReaderInterface break; // sprmCHps case 0x43: - $oStylePrl->styleFont['size'] = dechex($operand/2); + $oStylePrl->styleFont['size'] = dechex($operand / 2); break; // sprmCIss case 0x48: @@ -1837,7 +1842,7 @@ class MsDoc extends AbstractReader implements ReaderInterface case 0x61: break; // sprmCShd80 - //@link http://msdn.microsoft.com/en-us/library/dd923447%28v=office.12%29.aspx + //@see http://msdn.microsoft.com/en-us/library/dd923447%28v=office.12%29.aspx case 0x66: // $operand = self::getInt2d($data, $pos); $pos += 2; @@ -1847,7 +1852,7 @@ class MsDoc extends AbstractReader implements ReaderInterface // $icoFore = ($operand >> 11) && bindec('11111'); break; // sprmCCv - //@link : http://msdn.microsoft.com/en-us/library/dd952824%28v=office.12%29.aspx + //@see : http://msdn.microsoft.com/en-us/library/dd952824%28v=office.12%29.aspx case 0x70: $red = str_pad(dechex(self::getInt1d($this->dataWorkDocument, $pos)), 2, '0', STR_PAD_LEFT); $pos += 1; @@ -1856,7 +1861,7 @@ class MsDoc extends AbstractReader implements ReaderInterface $blue = str_pad(dechex(self::getInt1d($this->dataWorkDocument, $pos)), 2, '0', STR_PAD_LEFT); $pos += 1; $pos += 1; - $oStylePrl->styleFont['color'] = $red.$green.$blue; + $oStylePrl->styleFont['color'] = $red . $green . $blue; $cbNum -= 4; break; default: @@ -1872,7 +1877,7 @@ class MsDoc extends AbstractReader implements ReaderInterface if (!isset($oStylePrl->styleSection)) { $oStylePrl->styleSection = array(); } - switch($oSprm->isPmd) { + switch ($oSprm->isPmd) { // sprmSNfcPgn case 0x0E: // numbering format used for page numbers @@ -1924,7 +1929,6 @@ class MsDoc extends AbstractReader implements ReaderInterface default: // print_r('@todo Section : 0x'.dechex($oSprm->isPmd)); // print_r(PHP_EOL); - } break; // Table property @@ -1950,7 +1954,7 @@ class MsDoc extends AbstractReader implements ReaderInterface // HFD > clsid $sprmCPicLocation += 16; // HFD > hyperlink - //@link : http://msdn.microsoft.com/en-us/library/dd909835%28v=office.12%29.aspx + //@see : http://msdn.microsoft.com/en-us/library/dd909835%28v=office.12%29.aspx $streamVersion = self::getInt4d($this->dataData, $sprmCPicLocation); $sprmCPicLocation += 4; $data = self::getInt4d($this->dataData, $sprmCPicLocation); @@ -2018,8 +2022,8 @@ class MsDoc extends AbstractReader implements ReaderInterface }*/ } else { // Pictures - //@link : http://msdn.microsoft.com/en-us/library/dd925458%28v=office.12%29.aspx - //@link : http://msdn.microsoft.com/en-us/library/dd926136%28v=office.12%29.aspx + //@see : http://msdn.microsoft.com/en-us/library/dd925458%28v=office.12%29.aspx + //@see : http://msdn.microsoft.com/en-us/library/dd926136%28v=office.12%29.aspx // PICF : lcb $sprmCPicLocation += 4; // PICF : cbHeader @@ -2106,13 +2110,13 @@ class MsDoc extends AbstractReader implements ReaderInterface $sprmCPicLocation += $shapeRH['recLen']; } // picture : rgfb - //@link : http://msdn.microsoft.com/en-us/library/dd950560%28v=office.12%29.aspx + //@see : http://msdn.microsoft.com/en-us/library/dd950560%28v=office.12%29.aspx $fileBlockRH = $this->loadRecordHeader($this->dataData, $sprmCPicLocation); while ($fileBlockRH['recType'] == 0xF007 || ($fileBlockRH['recType'] >= 0xF018 && $fileBlockRH['recType'] <= 0xF117)) { $sprmCPicLocation += 8; switch ($fileBlockRH['recType']) { // OfficeArtFBSE - //@link : http://msdn.microsoft.com/en-us/library/dd944923%28v=office.12%29.aspx + //@see : http://msdn.microsoft.com/en-us/library/dd944923%28v=office.12%29.aspx case 0xF007: // btWin32 $sprmCPicLocation += 1; @@ -2147,7 +2151,7 @@ class MsDoc extends AbstractReader implements ReaderInterface } } // embeddedBlip - //@link : http://msdn.microsoft.com/en-us/library/dd910081%28v=office.12%29.aspx + //@see : http://msdn.microsoft.com/en-us/library/dd910081%28v=office.12%29.aspx $embeddedBlipRH = $this->loadRecordHeader($this->dataData, $sprmCPicLocation); switch ($embeddedBlipRH['recType']) { case self::OFFICEARTBLIPJPG: @@ -2192,13 +2196,14 @@ class MsDoc extends AbstractReader implements ReaderInterface } $oStylePrl->length = $pos - $posStart; + return $oStylePrl; } /** * Read a record header * @param string $stream - * @param integer $pos + * @param int $pos * @return array */ private function loadRecordHeader($stream, $pos) @@ -2206,11 +2211,12 @@ class MsDoc extends AbstractReader implements ReaderInterface $rec = self::getInt2d($stream, $pos); $recType = self::getInt2d($stream, $pos + 2); $recLen = self::getInt4d($stream, $pos + 4); + return array( - 'recVer' => ($rec >> 0) & bindec('1111'), + 'recVer' => ($rec >> 0) & bindec('1111'), 'recInstance' => ($rec >> 4) & bindec('111111111111'), - 'recType' => $recType, - 'recLen' => $recLen, + 'recType' => $recType, + 'recLen' => $recLen, ); } @@ -2218,7 +2224,7 @@ class MsDoc extends AbstractReader implements ReaderInterface { foreach ($this->arraySections as $itmSection) { $oSection = $this->phpWord->addSection(); - $oSection->setSettings($itmSection->styleSection); + $oSection->setStyle($itmSection->styleSection); $sHYPERLINK = ''; foreach ($this->arrayParagraphs as $itmParagraph) { @@ -2273,7 +2279,7 @@ class MsDoc extends AbstractReader implements ReaderInterface } if (ord($sText[0]) == 1) { if (isset($oCharacters->style->image)) { - $fileImage = tempnam(sys_get_temp_dir(), 'PHPWord_MsDoc').'.'.$oCharacters->style->image['format']; + $fileImage = tempnam(sys_get_temp_dir(), 'PHPWord_MsDoc') . '.' . $oCharacters->style->image['format']; file_put_contents($fileImage, $oCharacters->style->image['data']); $oSection->addImage($fileImage, array('width' => $oCharacters->style->image['width'], 'height' => $oCharacters->style->image['height'])); // print_r('>addImage<'.$fileImage.'>'.EOL); @@ -2284,7 +2290,6 @@ class MsDoc extends AbstractReader implements ReaderInterface } } } - } } @@ -2309,7 +2314,7 @@ class MsDoc extends AbstractReader implements ReaderInterface */ public static function getInt2d($data, $pos) { - return ord($data[$pos]) | (ord($data[$pos+1]) << 8); + return ord($data[$pos]) | (ord($data[$pos + 1]) << 8); } /** @@ -2321,7 +2326,7 @@ class MsDoc extends AbstractReader implements ReaderInterface */ public static function getInt3d($data, $pos) { - return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16); + return ord($data[$pos]) | (ord($data[$pos + 1]) << 8) | (ord($data[$pos + 2]) << 16); } /** @@ -2343,6 +2348,7 @@ class MsDoc extends AbstractReader implements ReaderInterface } else { $ord24 = ($or24 & 127) << 24; } - return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | $ord24; + + return ord($data[$pos]) | (ord($data[$pos + 1]) << 8) | (ord($data[$pos + 2]) << 16) | $ord24; } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText.php index e8c868861cc12409be41b093f85d4e0dc1aaeb77..5a22b4bac0adcb75f068b5bec338763f5dc2c50a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -40,7 +40,7 @@ class ODText extends AbstractReader implements ReaderInterface $readerParts = array( 'content.xml' => 'Content', - 'meta.xml' => 'Meta', + 'meta.xml' => 'Meta', ); foreach ($readerParts as $xmlFile => $partName) { @@ -58,7 +58,6 @@ class ODText extends AbstractReader implements ReaderInterface * @param string $partName * @param string $docFile * @param string $xmlFile - * @return void */ private function readPart(PhpWord $phpWord, $relationships, $partName, $docFile, $xmlFile) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/AbstractPart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/AbstractPart.php index 5ec2f22d7af536832328c7e88059d3b3d4a2abcb..bdac3b6fdb74ab33c3370de857db86828334b1c9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/AbstractPart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/AbstractPart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Content.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Content.php index 7362b02ca24a024e87a50e888a427982d94a48a1..8843d8a2769f1570d95a67bf12cb6d8553f75e61 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Content.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Content.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -31,7 +31,6 @@ class Content extends AbstractPart * Read content.xml. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ public function read(PhpWord $phpWord) { @@ -44,16 +43,13 @@ class Content extends AbstractPart foreach ($nodes as $node) { // $styleName = $xmlReader->getAttribute('text:style-name', $node); switch ($node->nodeName) { - case 'text:h': // Heading $depth = $xmlReader->getAttribute('text:outline-level', $node); $section->addTitle($node->nodeValue, $depth); break; - case 'text:p': // Paragraph $section->addText($node->nodeValue); break; - case 'text:list': // List $listItems = $xmlReader->getElements('text:list-item/text:p', $node); foreach ($listItems as $listItem) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Meta.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Meta.php index 9533c38bd8806a7a5f517550895880e7bb0f2512..98832d175ccc7f04b1c0c30ab7660cfa9336fd44 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Meta.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ODText/Meta.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -31,7 +31,6 @@ class Meta extends AbstractPart * Read meta.xml. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void * @todo Process property type */ public function read(PhpWord $phpWord) @@ -70,9 +69,8 @@ class Meta extends AbstractPart if (in_array($property, array('Category', 'Company', 'Manager'))) { $method = "set{$property}"; $docProps->$method($propertyNode->nodeValue); - - // Set other custom properties } else { + // Set other custom properties $docProps->setCustomProperty($property, $propertyNode->nodeValue); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/RTF.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/RTF.php index b6d2e21eeb1e1fcc046f2cdfebd39de1f7de9ab6..2d09a04d2cb53ee71d2bc1b02076038161236510 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/RTF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/RTF.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/RTF/Document.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/RTF/Document.php index 4e0f2c3559b5b14e4a5b1c2d33c9e678ad8d8e9b..be16d707bae15169e5bc1a1ebb6ab0823fd98a35 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/RTF/Document.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/RTF/Document.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -131,7 +131,6 @@ class Document * - Pushes every other character into the text queue * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void * @todo Use `fread` stream for scalability */ public function read(PhpWord $phpWord) @@ -153,7 +152,7 @@ class Document // Walk each characters while ($this->offset < $this->length) { - $char = $this->rtf[$this->offset]; + $char = $this->rtf[$this->offset]; $ascii = ord($char); if (isset($markers[$ascii])) { // Marker found: {, }, \, LF, or CR @@ -163,7 +162,7 @@ class Document if (false === $this->isControl) { // Non control word: Push character $this->pushText($char); } else { - if (preg_match("/^[a-zA-Z0-9-]?$/", $char)) { // No delimiter: Buffer control + if (preg_match('/^[a-zA-Z0-9-]?$/', $char)) { // No delimiter: Buffer control $this->control .= $char; $this->isFirst = false; } else { // Delimiter found: Parse buffered control @@ -184,8 +183,6 @@ class Document /** * Mark opening braket `{` character. - * - * @return void */ private function markOpening() { @@ -195,8 +192,6 @@ class Document /** * Mark closing braket `}` character. - * - * @return void */ private function markClosing() { @@ -206,8 +201,6 @@ class Document /** * Mark backslash `\` character. - * - * @return void */ private function markBackslash() { @@ -223,8 +216,6 @@ class Document /** * Mark newline character: Flush control word because it's not possible to span multiline. - * - * @return void */ private function markNewline() { @@ -237,7 +228,6 @@ class Document * Flush control word or text. * * @param bool $isControl - * @return void */ private function flush($isControl = false) { @@ -252,11 +242,10 @@ class Document * Flush control word. * * @param bool $isControl - * @return void */ private function flushControl($isControl = false) { - if (1 === preg_match("/^([A-Za-z]+)(-?[0-9]*) ?$/", $this->control, $match)) { + if (1 === preg_match('/^([A-Za-z]+)(-?[0-9]*) ?$/', $this->control, $match)) { list(, $control, $parameter) = $match; $this->parseControl($control, $parameter); } @@ -268,8 +257,6 @@ class Document /** * Flush text in queue. - * - * @return void */ private function flushText() { @@ -296,7 +283,6 @@ class Document * Reset control word and first char state. * * @param bool $value - * @return void */ private function setControl($value) { @@ -308,14 +294,13 @@ class Document * Push text into queue. * * @param string $char - * @return void */ private function pushText($char) { if ('<' == $char) { - $this->text .= "<"; + $this->text .= '<'; } elseif ('>' == $char) { - $this->text .= ">"; + $this->text .= '>'; } else { $this->text .= $char; } @@ -326,19 +311,18 @@ class Document * * @param string $control * @param string $parameter - * @return void */ private function parseControl($control, $parameter) { $controls = array( 'par' => array(self::PARA, 'paragraph', true), - 'b' => array(self::STYL, 'font', 'bold', true), - 'i' => array(self::STYL, 'font', 'italic', true), - 'u' => array(self::STYL, 'font', 'underline', true), - 'strike' => array(self::STYL, 'font', 'strikethrough',true), - 'fs' => array(self::STYL, 'font', 'size', $parameter), - 'qc' => array(self::STYL, 'paragraph', 'alignment', Jc::CENTER), - 'sa' => array(self::STYL, 'paragraph', 'spaceAfter', $parameter), + 'b' => array(self::STYL, 'font', 'bold', true), + 'i' => array(self::STYL, 'font', 'italic', true), + 'u' => array(self::STYL, 'font', 'underline', true), + 'strike' => array(self::STYL, 'font', 'strikethrough', true), + 'fs' => array(self::STYL, 'font', 'size', $parameter), + 'qc' => array(self::STYL, 'paragraph', 'alignment', Jc::CENTER), + 'sa' => array(self::STYL, 'paragraph', 'spaceAfter', $parameter), 'fonttbl' => array(self::SKIP, 'fonttbl', null), 'colortbl' => array(self::SKIP, 'colortbl', null), 'info' => array(self::SKIP, 'info', null), @@ -366,7 +350,6 @@ class Document * Read paragraph. * * @param array $directives - * @return void */ private function readParagraph($directives) { @@ -379,7 +362,6 @@ class Document * Read style. * * @param array $directives - * @return void */ private function readStyle($directives) { @@ -391,7 +373,6 @@ class Document * Read skip. * * @param array $directives - * @return void */ private function readSkip($directives) { @@ -402,8 +383,6 @@ class Document /** * Read text. - * - * @return void */ private function readText() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ReaderInterface.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ReaderInterface.php index 4f5231a7678c6d29f1b62a4aadb6319966415d87..3b2e357b71cf5d90f30e473eed3f6a179cf73962 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ReaderInterface.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/ReaderInterface.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,7 +28,7 @@ interface ReaderInterface * Can the current ReaderInterface read the file? * * @param string $filename - * @return boolean + * @return bool */ public function canRead($filename); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007.php index da20eb87636ab14b225c51420a9e3644d4e32205..6c2178ad9a342b82f55cdf680070424ce51bc3ab 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -55,6 +55,7 @@ class Word2007 extends AbstractReader implements ReaderInterface array('stepPart' => 'document', 'stepItems' => array( 'endnotes' => 'Endnotes', 'footnotes' => 'Footnotes', + 'settings' => 'Settings', )), ); @@ -82,7 +83,6 @@ class Word2007 extends AbstractReader implements ReaderInterface * @param string $partName * @param string $docFile * @param string $xmlFile - * @return void */ private function readPart(PhpWord $phpWord, $relationships, $partName, $docFile, $xmlFile) { @@ -93,7 +93,6 @@ class Word2007 extends AbstractReader implements ReaderInterface $part->setRels($relationships); $part->read($phpWord); } - } /** @@ -148,6 +147,7 @@ class Word2007 extends AbstractReader implements ReaderInterface $rId = $xmlReader->getAttribute('Id', $node); $type = $xmlReader->getAttribute('Type', $node); $target = $xmlReader->getAttribute('Target', $node); + $mode = $xmlReader->getAttribute('TargetMode', $node); // Remove URL prefixes from $type to make it easier to read $type = str_replace($metaPrefix, '', $type); @@ -155,12 +155,12 @@ class Word2007 extends AbstractReader implements ReaderInterface $docPart = str_replace('.xml', '', $target); // Do not add prefix to link source - if (!in_array($type, array('hyperlink'))) { + if ($type != 'hyperlink' && $mode != 'External') { $target = $targetPrefix . $target; } // Push to return array - $rels[$rId] = array('type' => $type, 'target' => $target, 'docPart' => $docPart); + $rels[$rId] = array('type' => $type, 'target' => $target, 'docPart' => $docPart, 'targetMode' => $mode); } ksort($rels); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/AbstractPart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/AbstractPart.php index f429ff75198bddb0c371c59b217c118b44e7b16d..6a48fd4681459a4386c1db1d3798f89da6e11c03 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/AbstractPart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/AbstractPart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -36,9 +36,9 @@ abstract class AbstractPart */ const READ_VALUE = 'attributeValue'; // Read attribute value const READ_EQUAL = 'attributeEquals'; // Read `true` when attribute value equals specified value - const READ_TRUE = 'attributeTrue'; // Read `true` when element exists + const READ_TRUE = 'attributeTrue'; // Read `true` when element exists const READ_FALSE = 'attributeFalse'; // Read `false` when element exists - const READ_SIZE = 'attributeMultiplyByTwo'; // Read special attribute value for Font::$size + const READ_SIZE = 'attributeMultiplyByTwo'; // Read special attribute value for Font::$size /** * Document file @@ -82,7 +82,6 @@ abstract class AbstractPart * Set relationships. * * @param array $value - * @return void */ public function setRels($value) { @@ -96,7 +95,6 @@ abstract class AbstractPart * @param \DOMElement $domNode * @param mixed $parent * @param string $docPart - * @return void * * @todo Get font style for preserve text */ @@ -137,9 +135,8 @@ abstract class AbstractPart } } $parent->addPreserveText($textContent, $fontStyle, $paragraphStyle); - - // List item } elseif ($xmlReader->elementExists('w:pPr/w:numPr', $domNode)) { + // List item $textContent = ''; $numId = $xmlReader->getAttribute('w:val', $domNode, 'w:pPr/w:numPr/w:numId'); $levelId = $xmlReader->getAttribute('w:val', $domNode, 'w:pPr/w:numPr/w:ilvl'); @@ -148,18 +145,16 @@ abstract class AbstractPart $textContent .= $xmlReader->getValue('w:t', $node); } $parent->addListItem($textContent, $levelId, null, "PHPWordList{$numId}", $paragraphStyle); - - // Heading } elseif (!empty($headingMatches)) { + // Heading $textContent = ''; $nodes = $xmlReader->getElements('w:r', $domNode); foreach ($nodes as $node) { $textContent .= $xmlReader->getValue('w:t', $node); } $parent->addTitle($textContent, $headingMatches[1]); - - // Text and TextRun } else { + // Text and TextRun $runCount = $xmlReader->countElements('w:r', $domNode); $linkCount = $xmlReader->countElements('w:hyperlink', $domNode); $runLinkCount = $runCount + $linkCount; @@ -167,14 +162,11 @@ abstract class AbstractPart $parent->addTextBreak(null, $paragraphStyle); } else { $nodes = $xmlReader->getElements('*', $domNode); + if ($runLinkCount > 1) { + $parent = $parent->addTextRun($paragraphStyle); + } foreach ($nodes as $node) { - $this->readRun( - $xmlReader, - $node, - ($runLinkCount > 1) ? $parent->addTextRun($paragraphStyle) : $parent, - $docPart, - $paragraphStyle - ); + $this->readRun($xmlReader, $node, $parent, $docPart, $paragraphStyle); } } } @@ -188,7 +180,6 @@ abstract class AbstractPart * @param mixed $parent * @param string $docPart * @param mixed $paragraphStyle - * @return void * * @todo Footnote paragraph style */ @@ -208,35 +199,35 @@ abstract class AbstractPart $parent->addLink($target, $textContent, $fontStyle, $paragraphStyle); } } else { - // Footnote if ($xmlReader->elementExists('w:footnoteReference', $domNode)) { + // Footnote $parent->addFootnote(); - - // Endnote } elseif ($xmlReader->elementExists('w:endnoteReference', $domNode)) { + // Endnote $parent->addEndnote(); - - // Image } elseif ($xmlReader->elementExists('w:pict', $domNode)) { + // Image $rId = $xmlReader->getAttribute('r:id', $domNode, 'w:pict/v:shape/v:imagedata'); $target = $this->getMediaTarget($docPart, $rId); if (!is_null($target)) { - $imageSource = "zip://{$this->docFile}#{$target}"; + if ('External' == $this->getTargetMode($docPart, $rId)) { + $imageSource = $target; + } else { + $imageSource = "zip://{$this->docFile}#{$target}"; + } $parent->addImage($imageSource); } - - // Object } elseif ($xmlReader->elementExists('w:object', $domNode)) { + // Object $rId = $xmlReader->getAttribute('r:id', $domNode, 'w:object/o:OLEObject'); // $rIdIcon = $xmlReader->getAttribute('r:id', $domNode, 'w:object/v:shape/v:imagedata'); $target = $this->getMediaTarget($docPart, $rId); if (!is_null($target)) { - $textContent = "<Object: {$target}>"; + $textContent = "<Object: {$target}>"; $parent->addText($textContent, $fontStyle, $paragraphStyle); } - - // TextRun } else { + // TextRun $textContent = $xmlReader->getValue('w:t', $domNode); $parent->addText($textContent, $fontStyle, $paragraphStyle); } @@ -250,7 +241,6 @@ abstract class AbstractPart * @param \DOMElement $domNode * @param mixed $parent * @param string $docPart - * @return void */ protected function readTable(XMLReader $xmlReader, \DOMElement $domNode, $parent, $docPart = 'document') { @@ -266,7 +256,6 @@ abstract class AbstractPart foreach ($tblNodes as $tblNode) { if ('w:tblGrid' == $tblNode->nodeName) { // Column // @todo Do something with table columns - } elseif ('w:tr' == $tblNode->nodeName) { // Row $rowHeight = $xmlReader->getAttribute('w:val', $tblNode, 'w:trPr/w:trHeight'); $rowHRule = $xmlReader->getAttribute('w:hRule', $tblNode, 'w:trPr/w:trHeight'); @@ -282,7 +271,6 @@ abstract class AbstractPart foreach ($rowNodes as $rowNode) { if ('w:trPr' == $rowNode->nodeName) { // Row style // @todo Do something with row style - } elseif ('w:tc' == $rowNode->nodeName) { // Cell $cellWidth = $xmlReader->getAttribute('w:w', $rowNode, 'w:tcPr/w:tcW'); $cellStyle = null; @@ -319,18 +307,20 @@ abstract class AbstractPart $styleNode = $xmlReader->getElement('w:pPr', $domNode); $styleDefs = array( - 'styleName' => array(self::READ_VALUE, 'w:pStyle'), - 'alignment' => array(self::READ_VALUE, 'w:jc'), - 'basedOn' => array(self::READ_VALUE, 'w:basedOn'), - 'next' => array(self::READ_VALUE, 'w:next'), - 'indent' => array(self::READ_VALUE, 'w:ind', 'w:left'), - 'hanging' => array(self::READ_VALUE, 'w:ind', 'w:hanging'), - 'spaceAfter' => array(self::READ_VALUE, 'w:spacing', 'w:after'), - 'spaceBefore' => array(self::READ_VALUE, 'w:spacing', 'w:before'), - 'widowControl' => array(self::READ_FALSE, 'w:widowControl'), - 'keepNext' => array(self::READ_TRUE, 'w:keepNext'), - 'keepLines' => array(self::READ_TRUE, 'w:keepLines'), - 'pageBreakBefore' => array(self::READ_TRUE, 'w:pageBreakBefore'), + 'styleName' => array(self::READ_VALUE, 'w:pStyle'), + 'alignment' => array(self::READ_VALUE, 'w:jc'), + 'basedOn' => array(self::READ_VALUE, 'w:basedOn'), + 'next' => array(self::READ_VALUE, 'w:next'), + 'indent' => array(self::READ_VALUE, 'w:ind', 'w:left'), + 'hanging' => array(self::READ_VALUE, 'w:ind', 'w:hanging'), + 'spaceAfter' => array(self::READ_VALUE, 'w:spacing', 'w:after'), + 'spaceBefore' => array(self::READ_VALUE, 'w:spacing', 'w:before'), + 'widowControl' => array(self::READ_FALSE, 'w:widowControl'), + 'keepNext' => array(self::READ_TRUE, 'w:keepNext'), + 'keepLines' => array(self::READ_TRUE, 'w:keepLines'), + 'pageBreakBefore' => array(self::READ_TRUE, 'w:pageBreakBefore'), + 'contextualSpacing' => array(self::READ_TRUE, 'w:contextualSpacing'), + 'bidi' => array(self::READ_TRUE, 'w:bidi'), ); return $this->readStyleDefs($xmlReader, $styleNode, $styleDefs); @@ -374,6 +364,9 @@ abstract class AbstractPart 'subScript' => array(self::READ_EQUAL, 'w:vertAlign', 'w:val', 'subscript'), 'fgColor' => array(self::READ_VALUE, 'w:highlight'), 'rtl' => array(self::READ_TRUE, 'w:rtl'), + 'font-latin' => array(self::READ_VALUE, 'w:font', 'w:val'), + 'font-eastAsia' => array(self::READ_VALUE, 'w:font', 'w:eastAsia'), + 'font-bidi' => array(self::READ_VALUE, 'w:font', 'w:bidi'), ); return $this->readStyleDefs($xmlReader, $styleNode, $styleDefs); @@ -391,7 +384,7 @@ abstract class AbstractPart { $style = null; $margins = array('top', 'left', 'bottom', 'right'); - $borders = $margins + array('insideH', 'insideV'); + $borders = array_merge($margins, array('insideH', 'insideV')); if ($xmlReader->elementExists('w:tblPr', $domNode)) { if ($xmlReader->elementExists('w:tblPr/w:tblStyle', $domNode)) { @@ -429,7 +422,7 @@ abstract class AbstractPart 'textDirection' => array(self::READ_VALUE, 'w:textDirection'), 'gridSpan' => array(self::READ_VALUE, 'w:gridSpan'), 'vMerge' => array(self::READ_VALUE, 'w:vMerge'), - 'bgColor' => array(self::READ_VALUE, 'w:shd/w:fill'), + 'bgColor' => array(self::READ_VALUE, 'w:shd', 'w:fill'), ); return $this->readStyleDefs($xmlReader, $domNode, $styleDefs); @@ -484,9 +477,9 @@ abstract class AbstractPart if (self::READ_SIZE == $method) { $style = $attributeValue / 2; } elseif (self::READ_TRUE == $method) { - $style = true; + $style = $this->isOn($attributeValue); } elseif (self::READ_FALSE == $method) { - $style = false; + $style = !$this->isOn($attributeValue); } elseif (self::READ_EQUAL == $method) { $style = $attributeValue == $expected; } @@ -494,6 +487,18 @@ abstract class AbstractPart return $style; } + /** + * Parses the value of the on/off value, null is considered true as it means the w:val attribute was not present + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_OnOff.html + * @param string $value + * @return bool + */ + private function isOn($value = null) + { + return $value == null || $value == '1' || $value == 'true' || $value == 'on'; + } + /** * Returns the target of image, object, or link as stored in ::readMainRels * @@ -511,4 +516,22 @@ abstract class AbstractPart return $target; } + + /** + * Returns the target mode + * + * @param string $docPart + * @param string $rId + * @return string|null + */ + private function getTargetMode($docPart, $rId) + { + $mode = null; + + if (isset($this->rels[$docPart]) && isset($this->rels[$docPart][$rId])) { + $mode = $this->rels[$docPart][$rId]['targetMode']; + } + + return $mode; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsApp.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsApp.php index 6b1410a56a898c9791789b6cbcdca9de639c3fcf..df34c9c37b0a956c58a9753bad74bf54ec1770ba 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsApp.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsApp.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCore.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCore.php index 417a93bd3f42b601c75058fa4890ac7787ccd706..f82c6b4bf5b41aba9acfd84aed27e09b1f022003 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCore.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCore.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -33,15 +33,15 @@ class DocPropsCore extends AbstractPart * @var array */ protected $mapping = array( - 'dc:creator' => 'setCreator', - 'dc:title' => 'setTitle', - 'dc:description' => 'setDescription', - 'dc:subject' => 'setSubject', - 'cp:keywords' => 'setKeywords', - 'cp:category' => 'setCategory', + 'dc:creator' => 'setCreator', + 'dc:title' => 'setTitle', + 'dc:description' => 'setDescription', + 'dc:subject' => 'setSubject', + 'cp:keywords' => 'setKeywords', + 'cp:category' => 'setCategory', 'cp:lastModifiedBy' => 'setLastModifiedBy', - 'dcterms:created' => 'setCreated', - 'dcterms:modified' => 'setModified', + 'dcterms:created' => 'setCreated', + 'dcterms:modified' => 'setModified', ); /** @@ -55,7 +55,6 @@ class DocPropsCore extends AbstractPart * Read core/extended document properties. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ public function read(PhpWord $phpWord) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCustom.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCustom.php index 979a244197f0e4a7a954e2a1abc6195ab9ea9fd0..a3d6b90bd224353fd59f340db53893cc89858233 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCustom.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/DocPropsCustom.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -32,7 +32,6 @@ class DocPropsCustom extends AbstractPart * Read custom document properties. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ public function read(PhpWord $phpWord) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Document.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Document.php index b89a99ad14db3c2215b631630b4886d62551ea01..ff094bcc29dbf69c90c4a89017b857c2eee7fead 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Document.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Document.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -40,7 +40,6 @@ class Document extends AbstractPart * Read document.xml. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ public function read(PhpWord $phpWord) { @@ -66,7 +65,6 @@ class Document extends AbstractPart * * @param array $settings * @param \PhpOffice\PhpWord\Element\Section &$section - * @return void */ private function readHeaderFooter($settings, Section &$section) { @@ -113,10 +111,10 @@ class Document extends AbstractPart 'orientation' => array(self::READ_VALUE, 'w:pgSz', 'w:orient'), 'colsNum' => array(self::READ_VALUE, 'w:cols', 'w:num'), 'colsSpace' => array(self::READ_VALUE, 'w:cols', 'w:space'), - 'topMargin' => array(self::READ_VALUE, 'w:pgMar', 'w:top'), - 'leftMargin' => array(self::READ_VALUE, 'w:pgMar', 'w:left'), - 'bottomMargin' => array(self::READ_VALUE, 'w:pgMar', 'w:bottom'), - 'rightMargin' => array(self::READ_VALUE, 'w:pgMar', 'w:right'), + 'marginTop' => array(self::READ_VALUE, 'w:pgMar', 'w:top'), + 'marginLeft' => array(self::READ_VALUE, 'w:pgMar', 'w:left'), + 'marginBottom' => array(self::READ_VALUE, 'w:pgMar', 'w:bottom'), + 'marginRight' => array(self::READ_VALUE, 'w:pgMar', 'w:right'), 'headerHeight' => array(self::READ_VALUE, 'w:pgMar', 'w:header'), 'footerHeight' => array(self::READ_VALUE, 'w:pgMar', 'w:footer'), 'gutter' => array(self::READ_VALUE, 'w:pgMar', 'w:gutter'), @@ -131,7 +129,7 @@ class Document extends AbstractPart $id = $xmlReader->getAttribute('r:id', $node); $styles['hf'][$id] = array( 'method' => str_replace('w:', '', str_replace('Reference', '', $node->nodeName)), - 'type' => $xmlReader->getAttribute('w:type', $node), + 'type' => $xmlReader->getAttribute('w:type', $node), ); } } @@ -145,7 +143,6 @@ class Document extends AbstractPart * @param \PhpOffice\Common\XMLReader $xmlReader * @param \DOMElement $node * @param \PhpOffice\PhpWord\Element\Section &$section - * @return void * * @todo <w:lastRenderedPageBreak> */ @@ -175,7 +172,6 @@ class Document extends AbstractPart * @param \PhpOffice\Common\XMLReader $xmlReader * @param \DOMElement $node * @param \PhpOffice\PhpWord\Element\Section &$section - * @return void */ private function readWSectPrNode(XMLReader $xmlReader, \DOMElement $node, Section &$section) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Endnotes.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Endnotes.php index 7bcafc6a10fea1df199d7f47152125025d9bdddc..0f46cb2f478cf3c37b1fcf5d2979a58ba4984b3a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Endnotes.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Endnotes.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Footnotes.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Footnotes.php index 3d85af716c0129b3ea69aa72df2622e6e84e0931..61988723d997175e5b1598abc3e5cc8c95d96c08 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Footnotes.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Footnotes.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -45,7 +45,6 @@ class Footnotes extends AbstractPart * Read (footnotes|endnotes).xml. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ public function read(PhpWord $phpWord) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Numbering.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Numbering.php index a00a6307409c336f35248ae3d8304f6bb5e9c7a8..c2a81dd5acfbc49374198eb6b291e5fcd8935805 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Numbering.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Numbering.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -31,7 +31,6 @@ class Numbering extends AbstractPart * Read numbering.xml. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ public function read(PhpWord $phpWord) { @@ -92,7 +91,7 @@ class Numbering extends AbstractPart * * @param \PhpOffice\Common\XMLReader $xmlReader * @param \DOMElement $subnode - * @param integer $levelId + * @param int $levelId * @return array */ private function readLevel(XMLReader $xmlReader, \DOMElement $subnode, $levelId) diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Settings.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Settings.php new file mode 100644 index 0000000000000000000000000000000000000000..ccdbed2542374bf1a3bb6e67e7439ecf7fc689fc --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Settings.php @@ -0,0 +1,160 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Reader\Word2007; + +use PhpOffice\Common\XMLReader; +use PhpOffice\PhpWord\ComplexType\TrackChangesView; +use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Style\Language; + +/** + * Settings reader + * + * @since 0.14.0 + */ +class Settings extends AbstractPart +{ + private static $booleanProperties = array('hideSpellingErrors', 'hideGrammaticalErrors', 'trackRevisions', 'doNotTrackMoves', 'doNotTrackFormatting', 'evenAndOddHeaders'); + + /** + * Read settings.xml. + * + * @param \PhpOffice\PhpWord\PhpWord $phpWord + */ + public function read(PhpWord $phpWord) + { + $xmlReader = new XMLReader(); + $xmlReader->getDomFromZip($this->docFile, $this->xmlFile); + + $docSettings = $phpWord->getSettings(); + + $nodes = $xmlReader->getElements('*'); + if ($nodes->length > 0) { + foreach ($nodes as $node) { + $name = str_replace('w:', '', $node->nodeName); + $value = $xmlReader->getAttribute('w:val', $node); + $method = 'set' . $name; + + if (in_array($name, $this::$booleanProperties)) { + if ($value == 'false') { + $docSettings->$method(false); + } else { + $docSettings->$method(true); + } + } elseif (method_exists($this, $method)) { + $this->$method($xmlReader, $phpWord, $node); + } elseif (method_exists($docSettings, $method)) { + $docSettings->$method($value); + } + } + } + } + + /** + * Sets the document Language + * + * @param XMLReader $xmlReader + * @param PhpWord $phpWord + * @param \DOMNode $node + */ + protected function setThemeFontLang(XMLReader $xmlReader, PhpWord $phpWord, \DOMElement $node) + { + $val = $xmlReader->getAttribute('w:val', $node); + $eastAsia = $xmlReader->getAttribute('w:eastAsia', $node); + $bidi = $xmlReader->getAttribute('w:bidi', $node); + + $themeFontLang = new Language(); + $themeFontLang->setLatin($val); + $themeFontLang->setLatin($eastAsia); + $themeFontLang->setLatin($bidi); + + $phpWord->getSettings()->setThemeFontLang($themeFontLang); + } + + /** + * Sets the document protection + * + * @param XMLReader $xmlReader + * @param PhpWord $phpWord + * @param \DOMNode $node + */ + protected function setDocumentProtection(XMLReader $xmlReader, PhpWord $phpWord, \DOMElement $node) + { + $documentProtection = $phpWord->getSettings()->getDocumentProtection(); + + $edit = $xmlReader->getAttribute('w:edit', $node); + $documentProtection->setEditing($edit); + } + + /** + * Sets the proof state + * + * @param XMLReader $xmlReader + * @param PhpWord $phpWord + * @param \DOMNode $node + */ + protected function setProofState(XMLReader $xmlReader, PhpWord $phpWord, \DOMElement $node) + { + $proofState = $phpWord->getSettings()->getProofState(); + + $spelling = $xmlReader->getAttribute('w:spelling', $node); + $grammar = $xmlReader->getAttribute('w:grammar', $node); + + if ($spelling !== null) { + $proofState->setSpelling($spelling); + } + if ($grammar !== null) { + $proofState->setGrammar($grammar); + } + } + + /** + * Sets the proof state + * + * @param XMLReader $xmlReader + * @param PhpWord $phpWord + * @param \DOMNode $node + */ + protected function setZoom(XMLReader $xmlReader, PhpWord $phpWord, \DOMElement $node) + { + $percent = $xmlReader->getAttribute('w:percent', $node); + $val = $xmlReader->getAttribute('w:val', $node); + + if ($percent !== null || $val !== null) { + $phpWord->getSettings()->setZoom($percent === null ? $val : $percent); + } + } + + /** + * Set the Revision view + * + * @param XMLReader $xmlReader + * @param PhpWord $phpWord + * @param \DOMNode $node + */ + protected function setRevisionView(XMLReader $xmlReader, PhpWord $phpWord, \DOMElement $node) + { + $revisionView = new TrackChangesView(); + $revisionView->setMarkup(filter_var($xmlReader->getAttribute('w:markup', $node), FILTER_VALIDATE_BOOLEAN)); + $revisionView->setComments($xmlReader->getAttribute('w:comments', $node)); + $revisionView->setInsDel(filter_var($xmlReader->getAttribute('w:insDel', $node), FILTER_VALIDATE_BOOLEAN)); + $revisionView->setFormatting(filter_var($xmlReader->getAttribute('w:formatting', $node), FILTER_VALIDATE_BOOLEAN)); + $revisionView->setInkAnnotations(filter_var($xmlReader->getAttribute('w:inkAnnotations', $node), FILTER_VALIDATE_BOOLEAN)); + $phpWord->getSettings()->setRevisionView($revisionView); + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Styles.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Styles.php index 645c9830c22aa97173bd31edd9c99d53551f81e4..b8e6f22bfa1c4438bc086162f75d4accdee450e0 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Styles.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Reader/Word2007/Styles.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -31,7 +31,6 @@ class Styles extends AbstractPart * Read styles.xml. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ public function read(PhpWord $phpWord) { @@ -49,7 +48,6 @@ class Styles extends AbstractPart preg_match('/Heading(\d)/', $name, $headingMatches); // $default = ($xmlReader->getAttribute('w:default', $node) == 1); switch ($type) { - case 'paragraph': $paragraphStyle = $this->readParagraphStyle($xmlReader, $node); $fontStyle = $this->readFontStyle($xmlReader, $node); @@ -65,14 +63,12 @@ class Styles extends AbstractPart } } break; - case 'character': $fontStyle = $this->readFontStyle($xmlReader, $node); if (!empty($fontStyle)) { $phpWord->addFontStyle($name, $fontStyle); } break; - case 'table': $tStyle = $this->readTableStyle($xmlReader, $node); if (!empty($tStyle)) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Settings.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Settings.php index e049c46ed12d4aab10516edaaa27566ee41fa041..22b8ba1f5ec1706bda62d8a9fa7ba534f175b8e8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Settings.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Settings.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -30,8 +30,8 @@ class Settings * @const string */ const ZIPARCHIVE = 'ZipArchive'; - const PCLZIP = 'PclZip'; - const OLD_LIB = 'PhpOffice\\PhpWord\\Shared\\ZipArchive'; // @deprecated 0.11 + const PCLZIP = 'PclZip'; + const OLD_LIB = 'PhpOffice\\PhpWord\\Shared\\ZipArchive'; // @deprecated 0.11 /** * PDF rendering libraries @@ -39,8 +39,8 @@ class Settings * @const string */ const PDF_RENDERER_DOMPDF = 'DomPDF'; - const PDF_RENDERER_TCPDF = 'TCPDF'; - const PDF_RENDERER_MPDF = 'MPDF'; + const PDF_RENDERER_TCPDF = 'TCPDF'; + const PDF_RENDERER_MPDF = 'MPDF'; /** * Measurement units multiplication factor @@ -53,12 +53,12 @@ class Settings * * @const string */ - const UNIT_TWIP = 'twip'; // = 1/20 point - const UNIT_CM = 'cm'; - const UNIT_MM = 'mm'; - const UNIT_INCH = 'inch'; + const UNIT_TWIP = 'twip'; // = 1/20 point + const UNIT_CM = 'cm'; + const UNIT_MM = 'mm'; + const UNIT_INCH = 'inch'; const UNIT_POINT = 'point'; // = 1/72 inch - const UNIT_PICA = 'pica'; // = 1/6 inch = 12 points + const UNIT_PICA = 'pica'; // = 1/6 inch = 12 points /** * Default font settings @@ -133,7 +133,7 @@ class Settings * @var bool */ private static $outputEscapingEnabled = false; - + /** * Return the compatibility option used by the XMLWriter * @@ -154,7 +154,7 @@ class Settings */ public static function setCompatibility($compatibility) { - $compatibility = (bool)$compatibility; + $compatibility = (bool) $compatibility; self::$xmlWriterCompatibility = $compatibility; return true; @@ -180,6 +180,7 @@ class Settings { if (in_array($zipClass, array(self::PCLZIP, self::ZIPARCHIVE, self::OLD_LIB))) { self::$zipClass = $zipClass; + return true; } @@ -229,7 +230,6 @@ class Settings return true; } - /** * Return the directory path to the PDF Rendering Library. * @@ -275,7 +275,7 @@ class Settings public static function setMeasurementUnit($value) { $units = array(self::UNIT_TWIP, self::UNIT_CM, self::UNIT_MM, self::UNIT_INCH, - self::UNIT_POINT, self::UNIT_PICA); + self::UNIT_POINT, self::UNIT_PICA, ); if (!in_array($value, $units)) { return false; } @@ -289,9 +289,7 @@ class Settings * * @since 0.12.0 * - * @param string $tempDir The user defined path to temporary directory. - * - * @return void + * @param string $tempDir The user defined path to temporary directory */ public static function setTempDir($tempDir) { @@ -307,10 +305,10 @@ class Settings */ public static function getTempDir() { - $tempDir = sys_get_temp_dir(); - if (!empty(self::$tempDir)) { $tempDir = self::$tempDir; + } else { + $tempDir = sys_get_temp_dir(); } return $tempDir; @@ -318,10 +316,8 @@ class Settings /** * @since 0.13.0 - * - * @return boolean * - * @codeCoverageIgnore + * @return bool */ public static function isOutputEscapingEnabled() { @@ -330,10 +326,8 @@ class Settings /** * @since 0.13.0 - * - * @param boolean $outputEscapingEnabled * - * @codeCoverageIgnore + * @param bool $outputEscapingEnabled */ public static function setOutputEscapingEnabled($outputEscapingEnabled) { @@ -360,6 +354,7 @@ class Settings { if (is_string($value) && trim($value) !== '') { self::$defaultFontName = $value; + return true; } @@ -369,7 +364,7 @@ class Settings /** * Get default font size * - * @return integer + * @return int */ public static function getDefaultFontSize() { @@ -384,9 +379,10 @@ class Settings */ public static function setDefaultFontSize($value) { - $value = intval($value); + $value = (int) $value; if ($value > 0) { self::$defaultFontSize = $value; + return true; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/AbstractEnum.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/AbstractEnum.php new file mode 100644 index 0000000000000000000000000000000000000000..442d8251b3bce4e83a4d80e180492b2ff9f274f3 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/AbstractEnum.php @@ -0,0 +1,75 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Shared; + +abstract class AbstractEnum +{ + private static $constCacheArray = null; + + private static function getConstants() + { + if (self::$constCacheArray == null) { + self::$constCacheArray = array(); + } + $calledClass = get_called_class(); + if (!array_key_exists($calledClass, self::$constCacheArray)) { + $reflect = new \ReflectionClass($calledClass); + self::$constCacheArray[$calledClass] = $reflect->getConstants(); + } + + return self::$constCacheArray[$calledClass]; + } + + /** + * Returns all values for this enum + * + * @return array + */ + public static function values() + { + return array_values(self::getConstants()); + } + + /** + * Returns true the value is valid for this enum + * + * @param string $value + * @return bool true if value is valid + */ + public static function isValid($value) + { + $values = array_values(self::getConstants()); + + return in_array($value, $values, true); + } + + /** + * Validates that the value passed is a valid value + * + * @param string $value + * @throws \InvalidArgumentException if the value passed is not valid for this enum + */ + public static function validate($value) + { + if (!self::isValid($value)) { + $calledClass = get_called_class(); + $values = array_values(self::getConstants()); + throw new \InvalidArgumentException("$value is not a valid value for $calledClass, possible values are " . implode(', ', $values)); + } + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Converter.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Converter.php index e5cb5b25f035f2792d37d3238fd01a03f9ac098c..56687c986a1a213f3e0c0b7c66a4ac7ee360371e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Converter.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Converter.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -22,17 +22,18 @@ namespace PhpOffice\PhpWord\Shared; */ class Converter { - const INCH_TO_CM = 2.54; - const INCH_TO_TWIP = 1440; - const INCH_TO_PIXEL = 96; - const INCH_TO_POINT = 72; - const PIXEL_TO_EMU = 9525; - const DEGREE_TO_ANGLE = 60000; + const INCH_TO_CM = 2.54; + const INCH_TO_TWIP = 1440; + const INCH_TO_PIXEL = 96; + const INCH_TO_POINT = 72; + const INCH_TO_PICA = 6; + const PIXEL_TO_EMU = 9525; + const DEGREE_TO_ANGLE = 60000; /** * Convert centimeter to twip * - * @param int $centimeter + * @param float $centimeter * @return float */ public static function cmToTwip($centimeter = 1) @@ -43,7 +44,7 @@ class Converter /** * Convert centimeter to inch * - * @param int $centimeter + * @param float $centimeter * @return float */ public static function cmToInch($centimeter = 1) @@ -54,7 +55,7 @@ class Converter /** * Convert centimeter to pixel * - * @param int $centimeter + * @param float $centimeter * @return float */ public static function cmToPixel($centimeter = 1) @@ -65,7 +66,7 @@ class Converter /** * Convert centimeter to point * - * @param int $centimeter + * @param float $centimeter * @return float */ public static function cmToPoint($centimeter = 1) @@ -76,8 +77,8 @@ class Converter /** * Convert centimeter to EMU * - * @param int $centimeter - * @return int + * @param float $centimeter + * @return float */ public static function cmToEmu($centimeter = 1) { @@ -87,8 +88,8 @@ class Converter /** * Convert inch to twip * - * @param int $inch - * @return int + * @param float $inch + * @return float */ public static function inchToTwip($inch = 1) { @@ -98,7 +99,7 @@ class Converter /** * Convert inch to centimeter * - * @param int $inch + * @param float $inch * @return float */ public static function inchToCm($inch = 1) @@ -109,8 +110,8 @@ class Converter /** * Convert inch to pixel * - * @param int $inch - * @return int + * @param float $inch + * @return float */ public static function inchToPixel($inch = 1) { @@ -120,8 +121,8 @@ class Converter /** * Convert inch to point * - * @param int $inch - * @return int + * @param float $inch + * @return float */ public static function inchToPoint($inch = 1) { @@ -131,8 +132,8 @@ class Converter /** * Convert inch to EMU * - * @param int $inch - * @return int + * @param float $inch + * @return float */ public static function inchToEmu($inch = 1) { @@ -143,7 +144,7 @@ class Converter * Convert pixel to twip * * @param int $pixel - * @return int + * @return float */ public static function pixelToTwip($pixel = 1) { @@ -187,7 +188,7 @@ class Converter * Convert point to twip unit * * @param int $point - * @return int + * @return float */ public static function pointToTwip($point = 1) { @@ -209,7 +210,7 @@ class Converter * Convert point to EMU * * @param int $point - * @return int + * @return float */ public static function pointToEmu($point = 1) { @@ -220,13 +221,24 @@ class Converter * Convert EMU to pixel * * @param int $emu - * @return int + * @return float */ public static function emuToPixel($emu = 1) { return round($emu / self::PIXEL_TO_EMU); } + /** + * Convert pica to point + * + * @param int $pica + * @return float + */ + public static function picaToPoint($pica = 1) + { + return $pica / self::INCH_TO_PICA * self::INCH_TO_POINT; + } + /** * Convert degree to angle * @@ -235,7 +247,7 @@ class Converter */ public static function degreeToAngle($degree = 1) { - return (int)round($degree * self::DEGREE_TO_ANGLE); + return (int) round($degree * self::DEGREE_TO_ANGLE); } /** @@ -275,4 +287,49 @@ class Converter return array($red, $green, $blue); } + + /** + * Transforms a size in CSS format (eg. 10px, 10px, ...) to points + * + * @param string $value + * @return float + */ + public static function cssToPoint($value) + { + if ($value == '0') { + return 0; + } + if (preg_match('/^[+-]?([0-9]+\.?[0-9]*)?(px|em|ex|%|in|cm|mm|pt|pc)$/i', $value, $matches)) { + $size = $matches[1]; + $unit = $matches[2]; + + switch ($unit) { + case 'pt': + return $size; + case 'px': + return self::pixelToPoint($size); + case 'cm': + return self::cmToPoint($size); + case 'mm': + return self::cmToPoint($size / 10); + case 'in': + return self::inchToPoint($size); + case 'pc': + return self::picaToPoint($size); + } + } + + return null; + } + + /** + * Transforms a size in CSS format (eg. 10px, 10px, ...) to twips + * + * @param string $value + * @return float + */ + public static function cssToTwip($value) + { + return self::pointToTwip(self::cssToPoint($value)); + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php index d03d0adf0d607306b0520eecd80600d6211797bd..d8a10b5702bb969ce317521a30ecaa57cc3db9bb 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php @@ -10,14 +10,18 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Shared; use PhpOffice\PhpWord\Element\AbstractContainer; +use PhpOffice\PhpWord\Element\Cell; +use PhpOffice\PhpWord\Element\Row; +use PhpOffice\PhpWord\Element\Table; +use PhpOffice\PhpWord\SimpleType\Jc; /** * Common Html functions @@ -34,9 +38,9 @@ class Html * @param \PhpOffice\PhpWord\Element\AbstractContainer $element Where the parts need to be added * @param string $html The code to parse * @param bool $fullHTML If it's a full HTML, no need to add 'body' tag - * @return void + * @param bool $preserveWhiteSpace If false, the whitespaces between nodes will be removed */ - public static function addHtml($element, $html, $fullHTML = false) + public static function addHtml($element, $html, $fullHTML = false, $preserveWhiteSpace = true) { /* * @todo parse $stylesheet for default styles. Should result in an array based on id, class and element, @@ -57,7 +61,7 @@ class Html // Load DOM $dom = new \DOMDocument(); - $dom->preserveWhiteSpace = true; + $dom->preserveWhiteSpace = $preserveWhiteSpace; $dom->loadXML($html); $node = $dom->getElementsByTagName('body'); @@ -95,12 +99,11 @@ class Html * @param \PhpOffice\PhpWord\Element\AbstractContainer $element object to add an element corresponding with the node * @param array $styles Array with all styles * @param array $data Array to transport data to a next level in the DOM tree, for example level of listitems - * @return void */ protected static function parseNode($node, $element, $styles = array(), $data = array()) { // Populate styles array - $styleTypes = array('font', 'paragraph', 'list'); + $styleTypes = array('font', 'paragraph', 'list', 'table', 'row', 'cell'); foreach ($styleTypes as $styleType) { if (!isset($styles[$styleType])) { $styles[$styleType] = array(); @@ -119,15 +122,22 @@ class Html 'h6' => array('Heading', null, $element, $styles, null, 'Heading6', null), '#text' => array('Text', $node, $element, $styles, null, null, null), 'strong' => array('Property', null, null, $styles, null, 'bold', true), + 'b' => array('Property', null, null, $styles, null, 'bold', true), 'em' => array('Property', null, null, $styles, null, 'italic', true), + 'i' => array('Property', null, null, $styles, null, 'italic', true), + 'u' => array('Property', null, null, $styles, null, 'underline', 'single'), 'sup' => array('Property', null, null, $styles, null, 'superScript', true), 'sub' => array('Property', null, null, $styles, null, 'subScript', true), - 'table' => array('Table', $node, $element, $styles, null, 'addTable', true), - 'tr' => array('Table', $node, $element, $styles, null, 'addRow', true), - 'td' => array('Table', $node, $element, $styles, null, 'addCell', true), + 'span' => array('Span', $node, null, $styles, null, null, null), + 'table' => array('Table', $node, $element, $styles, null, null, null), + 'tr' => array('Row', $node, $element, $styles, null, null, null), + 'td' => array('Cell', $node, $element, $styles, null, null, null), + 'th' => array('Cell', $node, $element, $styles, null, null, null), 'ul' => array('List', null, null, $styles, $data, 3, null), 'ol' => array('List', null, null, $styles, $data, 7, null), 'li' => array('ListItem', $node, $element, $styles, $data, null, null), + 'img' => array('Image', $node, $element, $styles, null, null, null), + 'br' => array('LineBreak', null, $element, $styles, null, null, null), ); $newElement = null; @@ -169,15 +179,14 @@ class Html * @param \PhpOffice\PhpWord\Element\AbstractContainer $element * @param array $styles * @param array $data - * @return void */ private static function parseChildNodes($node, $element, $styles, $data) { if ('li' != $node->nodeName) { $cNodes = $node->childNodes; - if (count($cNodes) > 0) { + if (!empty($cNodes)) { foreach ($cNodes as $cNode) { - if ($element instanceof AbstractContainer) { + if ($element instanceof AbstractContainer || $element instanceof Table || $element instanceof Row) { self::parseNode($cNode, $element, $styles, $data); } } @@ -195,7 +204,7 @@ class Html */ private static function parseParagraph($node, $element, &$styles) { - $styles['paragraph'] = self::parseInlineStyle($node, $styles['paragraph']); + $styles['paragraph'] = self::recursiveParseStylesInHierarchy($node, $styles['paragraph']); $newElement = $element->addTextRun($styles['paragraph']); return $newElement; @@ -226,19 +235,19 @@ class Html * @param \DOMNode $node * @param \PhpOffice\PhpWord\Element\AbstractContainer $element * @param array &$styles - * @return null */ private static function parseText($node, $element, &$styles) { - $styles['font'] = self::parseInlineStyle($node, $styles['font']); + $styles['font'] = self::recursiveParseStylesInHierarchy($node, $styles['font']); - // Commented as source of bug #257. `method_exists` doesn't seems to work properly in this case. - // @todo Find better error checking for this one - // if (method_exists($element, 'addText')) { - $element->addText($node->nodeValue, $styles['font'], $styles['paragraph']); - // } + //alignment applies on paragraph, not on font. Let's copy it there + if (isset($styles['font']['alignment'])) { + $styles['paragraph']['alignment'] = $styles['font']['alignment']; + } - return null; + if (is_callable(array($element, 'addText'))) { + $element->addText($node->nodeValue, $styles['font'], $styles['paragraph']); + } } /** @@ -247,13 +256,21 @@ class Html * @param array &$styles * @param string $argument1 Style name * @param string $argument2 Style value - * @return null */ private static function parseProperty(&$styles, $argument1, $argument2) { $styles['font'][$argument1] = $argument2; + } - return null; + /** + * Parse span node + * + * @param \DOMNode $node + * @param array &$styles + */ + private static function parseSpan($node, &$styles) + { + self::parseInlineStyle($node, $styles['font']); } /** @@ -262,39 +279,93 @@ class Html * @param \DOMNode $node * @param \PhpOffice\PhpWord\Element\AbstractContainer $element * @param array &$styles - * @param string $argument1 Method name - * @return \PhpOffice\PhpWord\Element\AbstractContainer $element + * @return Table $element * * @todo As soon as TableItem, RowItem and CellItem support relative width and height */ - private static function parseTable($node, $element, &$styles, $argument1) + private static function parseTable($node, $element, &$styles) { - $styles['paragraph'] = self::parseInlineStyle($node, $styles['paragraph']); + $elementStyles = self::parseInlineStyle($node, $styles['table']); - $newElement = $element->$argument1(); + $newElement = $element->addTable($elementStyles); // $attributes = $node->attributes; // if ($attributes->getNamedItem('width') !== null) { - // $newElement->setWidth($attributes->getNamedItem('width')->value); + // $newElement->setWidth($attributes->getNamedItem('width')->value); // } // if ($attributes->getNamedItem('height') !== null) { - // $newElement->setHeight($attributes->getNamedItem('height')->value); + // $newElement->setHeight($attributes->getNamedItem('height')->value); // } // if ($attributes->getNamedItem('width') !== null) { - // $newElement=$element->addCell($width=$attributes->getNamedItem('width')->value); + // $newElement=$element->addCell($width=$attributes->getNamedItem('width')->value); // } return $newElement; } + /** + * Parse a table row + * + * @param \DOMNode $node + * @param \PhpOffice\PhpWord\Element\Table $element + * @param array &$styles + * @return Row $element + */ + private static function parseRow($node, $element, &$styles) + { + $rowStyles = self::parseInlineStyle($node, $styles['row']); + if ($node->parentNode->nodeName == 'thead') { + $rowStyles['tblHeader'] = true; + } + + return $element->addRow(null, $rowStyles); + } + + /** + * Parse table cell + * + * @param \DOMNode $node + * @param \PhpOffice\PhpWord\Element\Table $element + * @param array &$styles + * @return Cell $element + */ + private static function parseCell($node, $element, &$styles) + { + $cellStyles = self::recursiveParseStylesInHierarchy($node, $styles['cell']); + + $colspan = $node->getAttribute('colspan'); + if (!empty($colspan)) { + $cellStyles['gridSpan'] = $colspan - 0; + } + + return $element->addCell(null, $cellStyles); + } + + /** + * Recursively parses styles on parent nodes + * TODO if too slow, add caching of parent nodes, !! everything is static here so watch out for concurrency !! + * + * @param \DOMNode $node + * @param array &$styles + */ + private static function recursiveParseStylesInHierarchy(\DOMNode $node, array $style) + { + $parentStyle = self::parseInlineStyle($node, array()); + $style = array_merge($parentStyle, $style); + if ($node->parentNode != null && XML_ELEMENT_NODE == $node->parentNode->nodeType) { + $style = self::recursiveParseStylesInHierarchy($node->parentNode, $style); + } + + return $style; + } + /** * Parse list node * * @param array &$styles * @param array &$data * @param string $argument1 List type - * @return null */ private static function parseList(&$styles, &$data, $argument1) { @@ -304,8 +375,6 @@ class Html $data['listdepth'] = 0; } $styles['list']['listType'] = $argument1; - - return null; } /** @@ -315,7 +384,6 @@ class Html * @param \PhpOffice\PhpWord\Element\AbstractContainer $element * @param array &$styles * @param array $data - * @return null * * @todo This function is almost the same like `parseChildNodes`. Merged? * @todo As soon as ListItem inherits from AbstractContainer or TextRun delete parsing part of childNodes @@ -323,17 +391,19 @@ class Html private static function parseListItem($node, $element, &$styles, $data) { $cNodes = $node->childNodes; - if (count($cNodes) > 0) { + if (!empty($cNodes)) { $text = ''; foreach ($cNodes as $cNode) { if ($cNode->nodeName == '#text') { $text = $cNode->nodeValue; } } + //ideally we should be parsing child nodes for any style, for now just take the text + if ('' == trim($text) && '' != trim($node->textContent)) { + $text = trim($node->textContent); + } $element->addListItem($text, $data['listdepth'], $styles['font'], $styles['list'], $styles['paragraph']); } - - return null; } /** @@ -361,17 +431,166 @@ class Html } break; case 'text-align': - $styles['alignment'] = $cValue; // todo: any mapping? + switch ($cValue) { + case 'left': + $styles['alignment'] = Jc::START; + break; + case 'right': + $styles['alignment'] = Jc::END; + break; + case 'center': + $styles['alignment'] = Jc::CENTER; + break; + case 'justify': + $styles['alignment'] = Jc::BOTH; + break; + } + break; + case 'font-size': + $styles['size'] = Converter::cssToPoint($cValue); + break; + case 'font-family': + $cValue = array_map('trim', explode(',', $cValue)); + $styles['name'] = ucwords($cValue[0]); break; case 'color': - $styles['color'] = trim($cValue, "#"); + $styles['color'] = trim($cValue, '#'); break; case 'background-color': - $styles['bgColor'] = trim($cValue, "#"); + $styles['bgColor'] = trim($cValue, '#'); + break; + case 'font-weight': + $tValue = false; + if (preg_match('#bold#', $cValue)) { + $tValue = true; // also match bolder + } + $styles['bold'] = $tValue; + break; + case 'font-style': + $tValue = false; + if (preg_match('#(?:italic|oblique)#', $cValue)) { + $tValue = true; + } + $styles['italic'] = $tValue; + break; + case 'border-color': + $styles['color'] = trim($cValue, '#'); + break; + case 'border-width': + $styles['borderSize'] = Converter::cssToPoint($cValue); + break; + case 'border-style': + $styles['borderStyle'] = self::mapBorderStyle($cValue); + break; + case 'width': + if (preg_match('/([0-9]+[a-z]+)/', $cValue, $matches)) { + $styles['width'] = Converter::cssToTwip($matches[1]); + $styles['unit'] = \PhpOffice\PhpWord\Style\Table::WIDTH_TWIP; + } elseif (preg_match('/([0-9]+)%/', $cValue, $matches)) { + $styles['width'] = $matches[1] * 50; + $styles['unit'] = \PhpOffice\PhpWord\Style\Table::WIDTH_PERCENT; + } elseif (preg_match('/([0-9]+)/', $cValue, $matches)) { + $styles['width'] = $matches[1]; + $styles['unit'] = \PhpOffice\PhpWord\Style\Table::WIDTH_AUTO; + } + break; + case 'border': + if (preg_match('/([0-9]+[^0-9]*)\s+(\#[a-fA-F0-9]+)\s+([a-z]+)/', $cValue, $matches)) { + $styles['borderSize'] = Converter::cssToPoint($matches[1]); + $styles['borderColor'] = trim($matches[2], '#'); + $styles['borderStyle'] = self::mapBorderStyle($matches[3]); + } break; } } return $styles; } + + /** + * Parse image node + * + * @param \DOMNode $node + * @param \PhpOffice\PhpWord\Element\AbstractContainer $element + * + * @return \PhpOffice\PhpWord\Element\Image + **/ + private static function parseImage($node, $element) + { + $style = array(); + $src = null; + foreach ($node->attributes as $attribute) { + switch ($attribute->name) { + case 'src': + $src = $attribute->value; + break; + case 'width': + $width = $attribute->value; + $style['width'] = $width; + break; + case 'height': + $height = $attribute->value; + $style['height'] = $height; + break; + case 'style': + $styleattr = explode(';', $attribute->value); + foreach ($styleattr as $attr) { + if (strpos($attr, ':')) { + list($k, $v) = explode(':', $attr); + switch ($k) { + case 'float': + if (trim($v) == 'right') { + $style['hPos'] = \PhpOffice\PhpWord\Style\Image::POS_RIGHT; + $style['hPosRelTo'] = \PhpOffice\PhpWord\Style\Image::POS_RELTO_PAGE; + $style['pos'] = \PhpOffice\PhpWord\Style\Image::POS_RELATIVE; + $style['wrap'] = \PhpOffice\PhpWord\Style\Image::WRAP_TIGHT; + $style['overlap'] = true; + } + if (trim($v) == 'left') { + $style['hPos'] = \PhpOffice\PhpWord\Style\Image::POS_LEFT; + $style['hPosRelTo'] = \PhpOffice\PhpWord\Style\Image::POS_RELTO_PAGE; + $style['pos'] = \PhpOffice\PhpWord\Style\Image::POS_RELATIVE; + $style['wrap'] = \PhpOffice\PhpWord\Style\Image::WRAP_TIGHT; + $style['overlap'] = true; + } + break; + } + } + } + break; + } + } + $newElement = $element->addImage($src, $style); + + return $newElement; + } + + /** + * Transforms a CSS border style into a word border style + * + * @param string $cssBorderStyle + * @return null|string + */ + private static function mapBorderStyle($cssBorderStyle) + { + switch ($cssBorderStyle) { + case 'none': + case 'dashed': + case 'dotted': + case 'double': + return $cssBorderStyle; + default: + return 'single'; + } + } + + /** + * Parse line break + * + * @param \PhpOffice\PhpWord\Element\AbstractContainer $element + */ + private static function parseLineBreak($element) + { + $element->addTextBreak(); + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Microsoft/PasswordEncoder.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Microsoft/PasswordEncoder.php new file mode 100644 index 0000000000000000000000000000000000000000..1c7b4c6c8e6612cd5543474bfd1897cc830ffdb3 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/Microsoft/PasswordEncoder.php @@ -0,0 +1,235 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Shared\Microsoft; + +/** + * Password encoder for microsoft office applications + */ +class PasswordEncoder +{ + const ALGORITHM_MD2 = 'MD2'; + const ALGORITHM_MD4 = 'MD4'; + const ALGORITHM_MD5 = 'MD5'; + const ALGORITHM_SHA_1 = 'SHA-1'; + const ALGORITHM_SHA_256 = 'SHA-256'; + const ALGORITHM_SHA_384 = 'SHA-384'; + const ALGORITHM_SHA_512 = 'SHA-512'; + const ALGORITHM_RIPEMD = 'RIPEMD'; + const ALGORITHM_RIPEMD_160 = 'RIPEMD-160'; + const ALGORITHM_MAC = 'MAC'; + const ALGORITHM_HMAC = 'HMAC'; + + /** + * Mapping between algorithm name and algorithm ID + * + * @var array + * @see https://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.writeprotection.cryptographicalgorithmsid(v=office.14).aspx + */ + private static $algorithmMapping = array( + self::ALGORITHM_MD2 => array(1, 'md2'), + self::ALGORITHM_MD4 => array(2, 'md4'), + self::ALGORITHM_MD5 => array(3, 'md5'), + self::ALGORITHM_SHA_1 => array(4, 'sha1'), + self::ALGORITHM_MAC => array(5, ''), // 'mac' -> not possible with hash() + self::ALGORITHM_RIPEMD => array(6, 'ripemd'), + self::ALGORITHM_RIPEMD_160 => array(7, 'ripemd160'), + self::ALGORITHM_HMAC => array(9, ''), //'hmac' -> not possible with hash() + self::ALGORITHM_SHA_256 => array(12, 'sha256'), + self::ALGORITHM_SHA_384 => array(13, 'sha384'), + self::ALGORITHM_SHA_512 => array(14, 'sha512'), + ); + + private static $initialCodeArray = array( + 0xE1F0, + 0x1D0F, + 0xCC9C, + 0x84C0, + 0x110C, + 0x0E10, + 0xF1CE, + 0x313E, + 0x1872, + 0xE139, + 0xD40F, + 0x84F9, + 0x280C, + 0xA96A, + 0x4EC3, + ); + + private static $encryptionMatrix = array( + array(0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09), + array(0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF), + array(0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0), + array(0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40), + array(0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5), + array(0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A), + array(0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9), + array(0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0), + array(0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC), + array(0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10), + array(0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168), + array(0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C), + array(0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD), + array(0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC), + array(0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4), + ); + + private static $passwordMaxLength = 15; + + /** + * Create a hashed password that MS Word will be able to work with + * @see https://blogs.msdn.microsoft.com/vsod/2010/04/05/how-to-set-the-editing-restrictions-in-word-using-open-xml-sdk-2-0/ + * + * @param string $password + * @param string $algorithmName + * @param string $salt + * @param int $spinCount + * @return string + */ + public static function hashPassword($password, $algorithmName = self::ALGORITHM_SHA_1, $salt = null, $spinCount = 10000) + { + $origEncoding = mb_internal_encoding(); + mb_internal_encoding('UTF-8'); + + $password = mb_substr($password, 0, min(self::$passwordMaxLength, mb_strlen($password))); + + // Get the single-byte values by iterating through the Unicode characters of the truncated password. + // For each character, if the low byte is not equal to 0, take it. Otherwise, take the high byte. + $passUtf8 = mb_convert_encoding($password, 'UCS-2LE', 'UTF-8'); + $byteChars = array(); + + for ($i = 0; $i < mb_strlen($password); $i++) { + $byteChars[$i] = ord(substr($passUtf8, $i * 2, 1)); + + if ($byteChars[$i] == 0) { + $byteChars[$i] = ord(substr($passUtf8, $i * 2 + 1, 1)); + } + } + + // build low-order word and hig-order word and combine them + $combinedKey = self::buildCombinedKey($byteChars); + // build reversed hexadecimal string + $hex = str_pad(strtoupper(dechex($combinedKey & 0xFFFFFFFF)), 8, '0', \STR_PAD_LEFT); + $reversedHex = $hex[6] . $hex[7] . $hex[4] . $hex[5] . $hex[2] . $hex[3] . $hex[0] . $hex[1]; + + $generatedKey = mb_convert_encoding($reversedHex, 'UCS-2LE', 'UTF-8'); + + // Implementation Notes List: + // Word requires that the initial hash of the password with the salt not be considered in the count. + // The initial hash of salt + key is not included in the iteration count. + $algorithm = self::getAlgorithm($algorithmName); + $generatedKey = hash($algorithm, $salt . $generatedKey, true); + + for ($i = 0; $i < $spinCount; $i++) { + $generatedKey = hash($algorithm, $generatedKey . pack('CCCC', $i, $i >> 8, $i >> 16, $i >> 24), true); + } + $generatedKey = base64_encode($generatedKey); + + mb_internal_encoding($origEncoding); + + return $generatedKey; + } + + /** + * Get algorithm from self::$algorithmMapping + * + * @param string $algorithmName + * @return string + */ + private static function getAlgorithm($algorithmName) + { + $algorithm = self::$algorithmMapping[$algorithmName][1]; + if ($algorithm == '') { + $algorithm = 'sha1'; + } + + return $algorithm; + } + + /** + * Returns the algorithm ID + * + * @param string $algorithmName + * @return int + */ + public static function getAlgorithmId($algorithmName) + { + return self::$algorithmMapping[$algorithmName][0]; + } + + /** + * Build combined key from low-order word and high-order word + * + * @param array $byteChars byte array representation of password + * @return int + */ + private static function buildCombinedKey($byteChars) + { + $byteCharsLength = count($byteChars); + // Compute the high-order word + // Initialize from the initial code array (see above), depending on the passwords length. + $highOrderWord = self::$initialCodeArray[$byteCharsLength - 1]; + + // For each character in the password: + // For every bit in the character, starting with the least significant and progressing to (but excluding) + // the most significant, if the bit is set, XOR the key’s high-order word with the corresponding word from + // the Encryption Matrix + for ($i = 0; $i < $byteCharsLength; $i++) { + $tmp = self::$passwordMaxLength - $byteCharsLength + $i; + $matrixRow = self::$encryptionMatrix[$tmp]; + for ($intBit = 0; $intBit < 7; $intBit++) { + if (($byteChars[$i] & (0x0001 << $intBit)) != 0) { + $highOrderWord = ($highOrderWord ^ $matrixRow[$intBit]); + } + } + } + + // Compute low-order word + // Initialize with 0 + $lowOrderWord = 0; + // For each character in the password, going backwards + for ($i = $byteCharsLength - 1; $i >= 0; $i--) { + // low-order word = (((low-order word SHR 14) AND 0x0001) OR (low-order word SHL 1) AND 0x7FFF)) XOR character + $lowOrderWord = (((($lowOrderWord >> 14) & 0x0001) | (($lowOrderWord << 1) & 0x7FFF)) ^ $byteChars[$i]); + } + // Lastly, low-order word = (((low-order word SHR 14) AND 0x0001) OR (low-order word SHL 1) AND 0x7FFF)) XOR strPassword length XOR 0xCE4B. + $lowOrderWord = (((($lowOrderWord >> 14) & 0x0001) | (($lowOrderWord << 1) & 0x7FFF)) ^ $byteCharsLength ^ 0xCE4B); + + // Combine the Low and High Order Word + return self::int32(($highOrderWord << 16) + $lowOrderWord); + } + + /** + * Simulate behaviour of (signed) int32 + * + * @codeCoverageIgnore + * @param int $value + * @return int + */ + private static function int32($value) + { + $value = ($value & 0xFFFFFFFF); + + if ($value & 0x80000000) { + $value = -((~$value & 0xFFFFFFFF) + 1); + } + + return $value; + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/OLERead.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/OLERead.php index cf9b15d3e6c43a484589d0cf37dd434cd587aae8..bcdda0c379ca8ef01b701ddd0b1385f6a74bf44d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/OLERead.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/OLERead.php @@ -10,11 +10,10 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ - namespace PhpOffice\PhpWord\Shared; use PhpOffice\PhpWord\Exception\Exception; @@ -111,15 +110,18 @@ class OLERead $bbdBlocks = $this->numBigBlockDepotBlocks; + // @codeCoverageIgnoreStart if ($this->numExtensionBlocks != 0) { $bbdBlocks = (self::BIG_BLOCK_SIZE - self::BIG_BLOCK_DEPOT_BLOCKS_POS)/4; } + // @codeCoverageIgnoreEnd for ($i = 0; $i < $bbdBlocks; ++$i) { $bigBlockDepotBlocks[$i] = self::getInt4d($this->data, $pos); $pos += 4; } + // @codeCoverageIgnoreStart for ($j = 0; $j < $this->numExtensionBlocks; ++$j) { $pos = ($this->extensionBlock + 1) * self::BIG_BLOCK_SIZE; $blocksToRead = min($this->numBigBlockDepotBlocks - $bbdBlocks, self::BIG_BLOCK_SIZE / 4 - 1); @@ -134,6 +136,7 @@ class OLERead $this->extensionBlock = self::getInt4d($this->data, $pos); } } + // @codeCoverageIgnoreEnd $pos = 0; $this->bigBlockChain = ''; @@ -190,26 +193,26 @@ class OLERead } return $streamData; - } else { - $numBlocks = $this->props[$stream]['size'] / self::BIG_BLOCK_SIZE; - if ($this->props[$stream]['size'] % self::BIG_BLOCK_SIZE != 0) { - ++$numBlocks; - } + } - if ($numBlocks == 0) { - return ''; - } + $numBlocks = $this->props[$stream]['size'] / self::BIG_BLOCK_SIZE; + if ($this->props[$stream]['size'] % self::BIG_BLOCK_SIZE != 0) { + ++$numBlocks; + } - $block = $this->props[$stream]['startBlock']; + if ($numBlocks == 0) { + return '';// @codeCoverageIgnore + } - while ($block != -2) { - $pos = ($block + 1) * self::BIG_BLOCK_SIZE; - $streamData .= substr($this->data, $pos, self::BIG_BLOCK_SIZE); - $block = self::getInt4d($this->bigBlockChain, $block*4); - } + $block = $this->props[$stream]['startBlock']; - return $streamData; + while ($block != -2) { + $pos = ($block + 1) * self::BIG_BLOCK_SIZE; + $streamData .= substr($this->data, $pos, self::BIG_BLOCK_SIZE); + $block = self::getInt4d($this->bigBlockChain, $block*4); } + + return $streamData; } /** @@ -294,7 +297,6 @@ class OLERead $offset += self::PROPERTY_STORAGE_BLOCK_SIZE; } - } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/PCLZip/pclzip.lib.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/PCLZip/pclzip.lib.php index 4e2a496f20cf5eb210f062490410bafff69ff51c..3fbc9327442109b090c9b91fec42b6548df1a450 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/PCLZip/pclzip.lib.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/PCLZip/pclzip.lib.php @@ -25,5473 +25,5208 @@ // $Id: pclzip.lib.php,v 1.60 2009/09/30 21:01:04 vblavet Exp $ // -------------------------------------------------------------------------------- - // ----- Constants - if (!defined('PCLZIP_READ_BLOCK_SIZE')) { - define( 'PCLZIP_READ_BLOCK_SIZE', 2048 ); - } - - // ----- File list separator - // In version 1.x of PclZip, the separator for file list is a space - // (which is not a very smart choice, specifically for windows paths !). - // A better separator should be a comma (,). This constant gives you the - // abilty to change that. - // However notice that changing this value, may have impact on existing - // scripts, using space separated filenames. - // Recommanded values for compatibility with older versions : - //define( 'PCLZIP_SEPARATOR', ' ' ); - // Recommanded values for smart separation of filenames. - if (!defined('PCLZIP_SEPARATOR')) { - define( 'PCLZIP_SEPARATOR', ',' ); - } - - // ----- Error configuration - // 0 : PclZip Class integrated error handling - // 1 : PclError external library error handling. By enabling this - // you must ensure that you have included PclError library. - // [2,...] : reserved for futur use - if (!defined('PCLZIP_ERROR_EXTERNAL')) { - define( 'PCLZIP_ERROR_EXTERNAL', 0 ); - } - - // ----- Optional static temporary directory - // By default temporary files are generated in the script current - // path. - // If defined : - // - MUST BE terminated by a '/'. - // - MUST be a valid, already created directory - // Samples : - // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' ); - // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' ); - if (!defined('PCLZIP_TEMPORARY_DIR')) { - define( 'PCLZIP_TEMPORARY_DIR', '' ); - } - - // ----- Optional threshold ratio for use of temporary files - // Pclzip sense the size of the file to add/extract and decide to - // use or not temporary file. The algorythm is looking for - // memory_limit of PHP and apply a ratio. - // threshold = memory_limit * ratio. - // Recommended values are under 0.5. Default 0.47. - // Samples : - // define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.5 ); - if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) { - define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 ); - } +// ----- Constants +if (!defined('PCLZIP_READ_BLOCK_SIZE')) { + define('PCLZIP_READ_BLOCK_SIZE', 2048); +} + +// ----- File list separator +// In version 1.x of PclZip, the separator for file list is a space +// (which is not a very smart choice, specifically for windows paths !). +// A better separator should be a comma (,). This constant gives you the +// abilty to change that. +// However notice that changing this value, may have impact on existing +// scripts, using space separated filenames. +// Recommanded values for compatibility with older versions : +//define( 'PCLZIP_SEPARATOR', ' ' ); +// Recommanded values for smart separation of filenames. +if (!defined('PCLZIP_SEPARATOR')) { + define('PCLZIP_SEPARATOR', ','); +} + +// ----- Error configuration +// 0 : PclZip Class integrated error handling +// 1 : PclError external library error handling. By enabling this +// you must ensure that you have included PclError library. +// [2,...] : reserved for futur use +if (!defined('PCLZIP_ERROR_EXTERNAL')) { + define('PCLZIP_ERROR_EXTERNAL', 0); +} + +// ----- Optional static temporary directory +// By default temporary files are generated in the script current +// path. +// If defined : +// - MUST BE terminated by a '/'. +// - MUST be a valid, already created directory +// Samples : +// define( 'PCLZIP_TEMPORARY_DIR', '/temp/' ); +// define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' ); +if (!defined('PCLZIP_TEMPORARY_DIR')) { + define('PCLZIP_TEMPORARY_DIR', ''); +} + +// ----- Optional threshold ratio for use of temporary files +// Pclzip sense the size of the file to add/extract and decide to +// use or not temporary file. The algorythm is looking for +// memory_limit of PHP and apply a ratio. +// threshold = memory_limit * ratio. +// Recommended values are under 0.5. Default 0.47. +// Samples : +// define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.5 ); +if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) { + define('PCLZIP_TEMPORARY_FILE_RATIO', 0.47); +} // -------------------------------------------------------------------------------- // ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED ***** // -------------------------------------------------------------------------------- - // ----- Global variables - $g_pclzip_version = "2.8.2"; - - // ----- Error codes - // -1 : Unable to open file in binary write mode - // -2 : Unable to open file in binary read mode - // -3 : Invalid parameters - // -4 : File does not exist - // -5 : Filename is too long (max. 255) - // -6 : Not a valid zip file - // -7 : Invalid extracted file size - // -8 : Unable to create directory - // -9 : Invalid archive extension - // -10 : Invalid archive format - // -11 : Unable to delete file (unlink) - // -12 : Unable to rename file (rename) - // -13 : Invalid header checksum - // -14 : Invalid archive size - define( 'PCLZIP_ERR_USER_ABORTED', 2 ); - define( 'PCLZIP_ERR_NO_ERROR', 0 ); - define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 ); - define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 ); - define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 ); - define( 'PCLZIP_ERR_MISSING_FILE', -4 ); - define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 ); - define( 'PCLZIP_ERR_INVALID_ZIP', -6 ); - define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 ); - define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 ); - define( 'PCLZIP_ERR_BAD_EXTENSION', -9 ); - define( 'PCLZIP_ERR_BAD_FORMAT', -10 ); - define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 ); - define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 ); - define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 ); - define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 ); - define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 ); - define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 ); - define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 ); - define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 ); - define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 ); - define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 ); - define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 ); - - // ----- Options values - define( 'PCLZIP_OPT_PATH', 77001 ); - define( 'PCLZIP_OPT_ADD_PATH', 77002 ); - define( 'PCLZIP_OPT_REMOVE_PATH', 77003 ); - define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 ); - define( 'PCLZIP_OPT_SET_CHMOD', 77005 ); - define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 ); - define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 ); - define( 'PCLZIP_OPT_BY_NAME', 77008 ); - define( 'PCLZIP_OPT_BY_INDEX', 77009 ); - define( 'PCLZIP_OPT_BY_EREG', 77010 ); - define( 'PCLZIP_OPT_BY_PREG', 77011 ); - define( 'PCLZIP_OPT_COMMENT', 77012 ); - define( 'PCLZIP_OPT_ADD_COMMENT', 77013 ); - define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 ); - define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 ); - define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 ); - define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 ); - // Having big trouble with crypt. Need to multiply 2 long int - // which is not correctly supported by PHP ... - //define( 'PCLZIP_OPT_CRYPT', 77018 ); - define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 ); - define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 ); - define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); // alias - define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 ); - define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); // alias - define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 ); - define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); // alias - - // ----- File description attributes - define( 'PCLZIP_ATT_FILE_NAME', 79001 ); - define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 ); - define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 ); - define( 'PCLZIP_ATT_FILE_MTIME', 79004 ); - define( 'PCLZIP_ATT_FILE_CONTENT', 79005 ); - define( 'PCLZIP_ATT_FILE_COMMENT', 79006 ); - - // ----- Call backs values - define( 'PCLZIP_CB_PRE_EXTRACT', 78001 ); - define( 'PCLZIP_CB_POST_EXTRACT', 78002 ); - define( 'PCLZIP_CB_PRE_ADD', 78003 ); - define( 'PCLZIP_CB_POST_ADD', 78004 ); - /* For futur use - define( 'PCLZIP_CB_PRE_LIST', 78005 ); - define( 'PCLZIP_CB_POST_LIST', 78006 ); - define( 'PCLZIP_CB_PRE_DELETE', 78007 ); - define( 'PCLZIP_CB_POST_DELETE', 78008 ); - */ - - // -------------------------------------------------------------------------------- - // Class : PclZip - // Description : - // PclZip is the class that represent a Zip archive. - // The public methods allow the manipulation of the archive. - // Attributes : - // Attributes must not be accessed directly. - // Methods : - // PclZip() : Object creator - // create() : Creates the Zip archive - // listContent() : List the content of the Zip archive - // extract() : Extract the content of the archive - // properties() : List the properties of the archive - // -------------------------------------------------------------------------------- - class PclZip - { +// ----- Global variables +$g_pclzip_version = "2.8.2"; + +// ----- Error codes +// -1 : Unable to open file in binary write mode +// -2 : Unable to open file in binary read mode +// -3 : Invalid parameters +// -4 : File does not exist +// -5 : Filename is too long (max. 255) +// -6 : Not a valid zip file +// -7 : Invalid extracted file size +// -8 : Unable to create directory +// -9 : Invalid archive extension +// -10 : Invalid archive format +// -11 : Unable to delete file (unlink) +// -12 : Unable to rename file (rename) +// -13 : Invalid header checksum +// -14 : Invalid archive size +define('PCLZIP_ERR_USER_ABORTED', 2); +define('PCLZIP_ERR_NO_ERROR', 0); +define('PCLZIP_ERR_WRITE_OPEN_FAIL', -1); +define('PCLZIP_ERR_READ_OPEN_FAIL', -2); +define('PCLZIP_ERR_INVALID_PARAMETER', -3); +define('PCLZIP_ERR_MISSING_FILE', -4); +define('PCLZIP_ERR_FILENAME_TOO_LONG', -5); +define('PCLZIP_ERR_INVALID_ZIP', -6); +define('PCLZIP_ERR_BAD_EXTRACTED_FILE', -7); +define('PCLZIP_ERR_DIR_CREATE_FAIL', -8); +define('PCLZIP_ERR_BAD_EXTENSION', -9); +define('PCLZIP_ERR_BAD_FORMAT', -10); +define('PCLZIP_ERR_DELETE_FILE_FAIL', -11); +define('PCLZIP_ERR_RENAME_FILE_FAIL', -12); +define('PCLZIP_ERR_BAD_CHECKSUM', -13); +define('PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14); +define('PCLZIP_ERR_MISSING_OPTION_VALUE', -15); +define('PCLZIP_ERR_INVALID_OPTION_VALUE', -16); +define('PCLZIP_ERR_ALREADY_A_DIRECTORY', -17); +define('PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18); +define('PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19); +define('PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20); +define('PCLZIP_ERR_DIRECTORY_RESTRICTION', -21); + +// ----- Options values +define('PCLZIP_OPT_PATH', 77001); +define('PCLZIP_OPT_ADD_PATH', 77002); +define('PCLZIP_OPT_REMOVE_PATH', 77003); +define('PCLZIP_OPT_REMOVE_ALL_PATH', 77004); +define('PCLZIP_OPT_SET_CHMOD', 77005); +define('PCLZIP_OPT_EXTRACT_AS_STRING', 77006); +define('PCLZIP_OPT_NO_COMPRESSION', 77007); +define('PCLZIP_OPT_BY_NAME', 77008); +define('PCLZIP_OPT_BY_INDEX', 77009); +define('PCLZIP_OPT_BY_EREG', 77010); +define('PCLZIP_OPT_BY_PREG', 77011); +define('PCLZIP_OPT_COMMENT', 77012); +define('PCLZIP_OPT_ADD_COMMENT', 77013); +define('PCLZIP_OPT_PREPEND_COMMENT', 77014); +define('PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015); +define('PCLZIP_OPT_REPLACE_NEWER', 77016); +define('PCLZIP_OPT_STOP_ON_ERROR', 77017); +// Having big trouble with crypt. Need to multiply 2 long int +// which is not correctly supported by PHP ... +//define( 'PCLZIP_OPT_CRYPT', 77018 ); +define('PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019); +define('PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020); +define('PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020); // alias +define('PCLZIP_OPT_TEMP_FILE_ON', 77021); +define('PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021); // alias +define('PCLZIP_OPT_TEMP_FILE_OFF', 77022); +define('PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022); // alias + +// ----- File description attributes +define('PCLZIP_ATT_FILE_NAME', 79001); +define('PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002); +define('PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003); +define('PCLZIP_ATT_FILE_MTIME', 79004); +define('PCLZIP_ATT_FILE_CONTENT', 79005); +define('PCLZIP_ATT_FILE_COMMENT', 79006); + +// ----- Call backs values +define('PCLZIP_CB_PRE_EXTRACT', 78001); +define('PCLZIP_CB_POST_EXTRACT', 78002); +define('PCLZIP_CB_PRE_ADD', 78003); +define('PCLZIP_CB_POST_ADD', 78004); +/* For futur use +define( 'PCLZIP_CB_PRE_LIST', 78005 ); +define( 'PCLZIP_CB_POST_LIST', 78006 ); +define( 'PCLZIP_CB_PRE_DELETE', 78007 ); +define( 'PCLZIP_CB_POST_DELETE', 78008 ); +*/ + +// -------------------------------------------------------------------------------- +// Class : PclZip +// Description : +// PclZip is the class that represent a Zip archive. +// The public methods allow the manipulation of the archive. +// Attributes : +// Attributes must not be accessed directly. +// Methods : +// PclZip() : Object creator +// create() : Creates the Zip archive +// listContent() : List the content of the Zip archive +// extract() : Extract the content of the archive +// properties() : List the properties of the archive +// -------------------------------------------------------------------------------- +class PclZip +{ // ----- Filename of the zip file - var $zipname = ''; + public $zipname = ''; // ----- File descriptor of the zip file - var $zip_fd = 0; + public $zip_fd = 0; // ----- Internal error handling - var $error_code = 1; - var $error_string = ''; + public $error_code = 1; + public $error_string = ''; // ----- Current status of the magic_quotes_runtime // This value store the php configuration for magic_quotes // The class can then disable the magic_quotes and reset it after - var $magic_quotes_status; - - // -------------------------------------------------------------------------------- - // Function : PclZip() - // Description : - // Creates a PclZip object and set the name of the associated Zip archive - // filename. - // Note that no real action is taken, if the archive does not exist it is not - // created. Use create() for that. - // -------------------------------------------------------------------------------- - function PclZip($p_zipname) - { - - // ----- Tests the zlib - if (!function_exists('gzopen')) + public $magic_quotes_status; + + // -------------------------------------------------------------------------------- + // Function : PclZip() + // Description : + // Creates a PclZip object and set the name of the associated Zip archive + // filename. + // Note that no real action is taken, if the archive does not exist it is not + // created. Use create() for that. + // -------------------------------------------------------------------------------- + public function __construct($p_zipname) { - die('Abort '.basename(__FILE__).' : Missing zlib extensions'); - } - - // ----- Set the attributes - $this->zipname = $p_zipname; - $this->zip_fd = 0; - $this->magic_quotes_status = -1; - // ----- Return - return; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : - // create($p_filelist, $p_add_dir="", $p_remove_dir="") - // create($p_filelist, $p_option, $p_option_value, ...) - // Description : - // This method supports two different synopsis. The first one is historical. - // This method creates a Zip Archive. The Zip file is created in the - // filesystem. The files and directories indicated in $p_filelist - // are added in the archive. See the parameters description for the - // supported format of $p_filelist. - // When a directory is in the list, the directory and its content is added - // in the archive. - // In this synopsis, the function takes an optional variable list of - // options. See bellow the supported options. - // Parameters : - // $p_filelist : An array containing file or directory names, or - // a string containing one filename or one directory name, or - // a string containing a list of filenames and/or directory - // names separated by spaces. - // $p_add_dir : A path to add before the real path of the archived file, - // in order to have it memorized in the archive. - // $p_remove_dir : A path to remove from the real path of the file to archive, - // in order to have a shorter path memorized in the archive. - // When $p_add_dir and $p_remove_dir are set, $p_remove_dir - // is removed first, before $p_add_dir is added. - // Options : - // PCLZIP_OPT_ADD_PATH : - // PCLZIP_OPT_REMOVE_PATH : - // PCLZIP_OPT_REMOVE_ALL_PATH : - // PCLZIP_OPT_COMMENT : - // PCLZIP_CB_PRE_ADD : - // PCLZIP_CB_POST_ADD : - // Return Values : - // 0 on failure, - // The list of the added files, with a status of the add action. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - function create($p_filelist) - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Set default values - $v_options = array(); - $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Look for arguments - if ($v_size > 1) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Remove from the options list the first argument - array_shift($v_arg_list); - $v_size--; - - // ----- Look for first arg - if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_REMOVE_PATH => 'optional', - PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', - PCLZIP_OPT_ADD_PATH => 'optional', - PCLZIP_CB_PRE_ADD => 'optional', - PCLZIP_CB_POST_ADD => 'optional', - PCLZIP_OPT_NO_COMPRESSION => 'optional', - PCLZIP_OPT_COMMENT => 'optional', - PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', - PCLZIP_OPT_TEMP_FILE_ON => 'optional', - PCLZIP_OPT_TEMP_FILE_OFF => 'optional' - //, PCLZIP_OPT_CRYPT => 'optional' - )); - if ($v_result != 1) { - return 0; + // ----- Tests the zlib + if (!function_exists('gzopen')) { + die('Abort ' . basename(__FILE__) . ' : Missing zlib extensions'); } - } - // ----- Look for 2 args - // Here we need to support the first historic synopsis of the - // method. - else { + // ----- Set the attributes + $this->zipname = $p_zipname; + $this->zip_fd = 0; + $this->magic_quotes_status = -1; - // ----- Get the first argument - $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; + // ----- Return + return; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // create($p_filelist, $p_add_dir="", $p_remove_dir="") + // create($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two different synopsis. The first one is historical. + // This method creates a Zip Archive. The Zip file is created in the + // filesystem. The files and directories indicated in $p_filelist + // are added in the archive. See the parameters description for the + // supported format of $p_filelist. + // When a directory is in the list, the directory and its content is added + // in the archive. + // In this synopsis, the function takes an optional variable list of + // options. See bellow the supported options. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + public function create($p_filelist) + { + $v_result = 1; - // ----- Look for the optional second argument - if ($v_size == 2) { - $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; - } - else if ($v_size > 2) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, - "Invalid number / type of arguments"); - return 0; + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove from the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array( + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + } else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } elseif ($v_size > 2) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + return 0; + } + } } - } - } - // ----- Look for default option values - $this->privOptionDefaultThreshold($v_options); + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); - // ----- Init - $v_string_list = array(); - $v_att_list = array(); - $v_filedescr_list = array(); - $p_result_list = array(); + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); - // ----- Look if the $p_filelist is really an array - if (is_array($p_filelist)) { + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { - // ----- Look if the first element is also an array - // This will mean that this is a file description entry - if (isset($p_filelist[0]) && is_array($p_filelist[0])) { - $v_att_list = $p_filelist; - } + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; - // ----- The list is a list of string names - else { - $v_string_list = $p_filelist; - } - } + // ----- The list is a list of string names + } else { + $v_string_list = $p_filelist; + } - // ----- Look if the $p_filelist is a string - else if (is_string($p_filelist)) { - // ----- Create a list from the string - $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); - } + // ----- Look if the $p_filelist is a string + } elseif (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); - // ----- Invalid variable type for $p_filelist - else { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); - return 0; - } + // ----- Invalid variable type for $p_filelist + } else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist"); - // ----- Reformat the string list - if (sizeof($v_string_list) != 0) { - foreach ($v_string_list as $v_string) { - if ($v_string != '') { - $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + return 0; } - else { - } - } - } - // ----- For each file in the list check the attributes - $v_supported_attributes - = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' - ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' - ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' - ,PCLZIP_ATT_FILE_MTIME => 'optional' - ,PCLZIP_ATT_FILE_CONTENT => 'optional' - ,PCLZIP_ATT_FILE_COMMENT => 'optional' - ); - foreach ($v_att_list as $v_entry) { - $v_result = $this->privFileDescrParseAtt($v_entry, - $v_filedescr_list[], - $v_options, - $v_supported_attributes); - if ($v_result != 1) { - return 0; - } - } - - // ----- Expand the filelist (expand directories) - $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); - if ($v_result != 1) { - return 0; - } + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + if ($v_string != '') { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } else { + } + } + } - // ----- Call the create fct - $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); - if ($v_result != 1) { - return 0; - } + // ----- For each file in the list check the attributes + $v_supported_attributes = array( + PCLZIP_ATT_FILE_NAME => 'mandatory', + PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional', + PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional', + PCLZIP_ATT_FILE_MTIME => 'optional', + PCLZIP_ATT_FILE_CONTENT => 'optional', + PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, $v_filedescr_list[], $v_options, $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } - // ----- Return - return $p_result_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : - // add($p_filelist, $p_add_dir="", $p_remove_dir="") - // add($p_filelist, $p_option, $p_option_value, ...) - // Description : - // This method supports two synopsis. The first one is historical. - // This methods add the list of files in an existing archive. - // If a file with the same name already exists, it is added at the end of the - // archive, the first one is still present. - // If the archive does not exist, it is created. - // Parameters : - // $p_filelist : An array containing file or directory names, or - // a string containing one filename or one directory name, or - // a string containing a list of filenames and/or directory - // names separated by spaces. - // $p_add_dir : A path to add before the real path of the archived file, - // in order to have it memorized in the archive. - // $p_remove_dir : A path to remove from the real path of the file to archive, - // in order to have a shorter path memorized in the archive. - // When $p_add_dir and $p_remove_dir are set, $p_remove_dir - // is removed first, before $p_add_dir is added. - // Options : - // PCLZIP_OPT_ADD_PATH : - // PCLZIP_OPT_REMOVE_PATH : - // PCLZIP_OPT_REMOVE_ALL_PATH : - // PCLZIP_OPT_COMMENT : - // PCLZIP_OPT_ADD_COMMENT : - // PCLZIP_OPT_PREPEND_COMMENT : - // PCLZIP_CB_PRE_ADD : - // PCLZIP_CB_POST_ADD : - // Return Values : - // 0 on failure, - // The list of the added files, with a status of the add action. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - function add($p_filelist) - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Set default values - $v_options = array(); - $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE; - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Look for arguments - if ($v_size > 1) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Remove form the options list the first argument - array_shift($v_arg_list); - $v_size--; - - // ----- Look for first arg - if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_REMOVE_PATH => 'optional', - PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', - PCLZIP_OPT_ADD_PATH => 'optional', - PCLZIP_CB_PRE_ADD => 'optional', - PCLZIP_CB_POST_ADD => 'optional', - PCLZIP_OPT_NO_COMPRESSION => 'optional', - PCLZIP_OPT_COMMENT => 'optional', - PCLZIP_OPT_ADD_COMMENT => 'optional', - PCLZIP_OPT_PREPEND_COMMENT => 'optional', - PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', - PCLZIP_OPT_TEMP_FILE_ON => 'optional', - PCLZIP_OPT_TEMP_FILE_OFF => 'optional' - //, PCLZIP_OPT_CRYPT => 'optional' - )); + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); if ($v_result != 1) { - return 0; + return 0; } - } - - // ----- Look for 2 args - // Here we need to support the first historic synopsis of the - // method. - else { - // ----- Get the first argument - $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; - - // ----- Look for the optional second argument - if ($v_size == 2) { - $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + // ----- Call the create fct + $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; } - else if ($v_size > 2) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); - // ----- Return - return 0; + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // add($p_filelist, $p_add_dir="", $p_remove_dir="") + // add($p_filelist, $p_option, $p_option_value, ...) + // Description : + // This method supports two synopsis. The first one is historical. + // This methods add the list of files in an existing archive. + // If a file with the same name already exists, it is added at the end of the + // archive, the first one is still present. + // If the archive does not exist, it is created. + // Parameters : + // $p_filelist : An array containing file or directory names, or + // a string containing one filename or one directory name, or + // a string containing a list of filenames and/or directory + // names separated by spaces. + // $p_add_dir : A path to add before the real path of the archived file, + // in order to have it memorized in the archive. + // $p_remove_dir : A path to remove from the real path of the file to archive, + // in order to have a shorter path memorized in the archive. + // When $p_add_dir and $p_remove_dir are set, $p_remove_dir + // is removed first, before $p_add_dir is added. + // Options : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_COMMENT : + // PCLZIP_OPT_ADD_COMMENT : + // PCLZIP_OPT_PREPEND_COMMENT : + // PCLZIP_CB_PRE_ADD : + // PCLZIP_CB_POST_ADD : + // Return Values : + // 0 on failure, + // The list of the added files, with a status of the add action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + public function add($p_filelist) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Set default values + $v_options = array(); + $v_options[PCLZIP_OPT_NO_COMPRESSION] = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array( + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_ADD => 'optional', + PCLZIP_CB_POST_ADD => 'optional', + PCLZIP_OPT_NO_COMPRESSION => 'optional', + PCLZIP_OPT_COMMENT => 'optional', + PCLZIP_OPT_ADD_COMMENT => 'optional', + PCLZIP_OPT_PREPEND_COMMENT => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + //, PCLZIP_OPT_CRYPT => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + } else { + + // ----- Get the first argument + $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1]; + } elseif ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } } - } - } - // ----- Look for default option values - $this->privOptionDefaultThreshold($v_options); + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); - // ----- Init - $v_string_list = array(); - $v_att_list = array(); - $v_filedescr_list = array(); - $p_result_list = array(); + // ----- Init + $v_string_list = array(); + $v_att_list = array(); + $v_filedescr_list = array(); + $p_result_list = array(); - // ----- Look if the $p_filelist is really an array - if (is_array($p_filelist)) { + // ----- Look if the $p_filelist is really an array + if (is_array($p_filelist)) { - // ----- Look if the first element is also an array - // This will mean that this is a file description entry - if (isset($p_filelist[0]) && is_array($p_filelist[0])) { - $v_att_list = $p_filelist; - } + // ----- Look if the first element is also an array + // This will mean that this is a file description entry + if (isset($p_filelist[0]) && is_array($p_filelist[0])) { + $v_att_list = $p_filelist; - // ----- The list is a list of string names - else { - $v_string_list = $p_filelist; - } - } + // ----- The list is a list of string names + } else { + $v_string_list = $p_filelist; + } - // ----- Look if the $p_filelist is a string - else if (is_string($p_filelist)) { - // ----- Create a list from the string - $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); - } + // ----- Look if the $p_filelist is a string + } elseif (is_string($p_filelist)) { + // ----- Create a list from the string + $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist); - // ----- Invalid variable type for $p_filelist - else { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist"); - return 0; - } + // ----- Invalid variable type for $p_filelist + } else { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '" . gettype($p_filelist) . "' for p_filelist"); - // ----- Reformat the string list - if (sizeof($v_string_list) != 0) { - foreach ($v_string_list as $v_string) { - $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; - } - } + return 0; + } - // ----- For each file in the list check the attributes - $v_supported_attributes - = array ( PCLZIP_ATT_FILE_NAME => 'mandatory' - ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional' - ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional' - ,PCLZIP_ATT_FILE_MTIME => 'optional' - ,PCLZIP_ATT_FILE_CONTENT => 'optional' - ,PCLZIP_ATT_FILE_COMMENT => 'optional' - ); - foreach ($v_att_list as $v_entry) { - $v_result = $this->privFileDescrParseAtt($v_entry, - $v_filedescr_list[], - $v_options, - $v_supported_attributes); - if ($v_result != 1) { - return 0; - } - } + // ----- Reformat the string list + if (sizeof($v_string_list) != 0) { + foreach ($v_string_list as $v_string) { + $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string; + } + } - // ----- Expand the filelist (expand directories) - $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); - if ($v_result != 1) { - return 0; - } + // ----- For each file in the list check the attributes + $v_supported_attributes = array( + PCLZIP_ATT_FILE_NAME => 'mandatory', + PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional', + PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional', + PCLZIP_ATT_FILE_MTIME => 'optional', + PCLZIP_ATT_FILE_CONTENT => 'optional', + PCLZIP_ATT_FILE_COMMENT => 'optional' + ); + foreach ($v_att_list as $v_entry) { + $v_result = $this->privFileDescrParseAtt($v_entry, $v_filedescr_list[], $v_options, $v_supported_attributes); + if ($v_result != 1) { + return 0; + } + } - // ----- Call the create fct - $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); - if ($v_result != 1) { - return 0; - } + // ----- Expand the filelist (expand directories) + $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options); + if ($v_result != 1) { + return 0; + } - // ----- Return - return $p_result_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : listContent() - // Description : - // This public method, gives the list of the files and directories, with their - // properties. - // The properties of each entries in the list are (used also in other functions) : - // filename : Name of the file. For a create or add action it is the filename - // given by the user. For an extract function it is the filename - // of the extracted file. - // stored_filename : Name of the file / directory stored in the archive. - // size : Size of the stored file. - // compressed_size : Size of the file's data compressed in the archive - // (without the headers overhead) - // mtime : Last known modification date of the file (UNIX timestamp) - // comment : Comment associated with the file - // folder : true | false - // index : index of the file in the archive - // status : status of the action (depending of the action) : - // Values are : - // ok : OK ! - // filtered : the file / dir is not extracted (filtered by user) - // already_a_directory : the file can not be extracted because a - // directory with the same name already exists - // write_protected : the file can not be extracted because a file - // with the same name already exists and is - // write protected - // newer_exist : the file was not extracted because a newer file exists - // path_creation_fail : the file is not extracted because the folder - // does not exist and can not be created - // write_error : the file was not extracted because there was a - // error while writing the file - // read_error : the file was not extracted because there was a error - // while reading the file - // invalid_header : the file was not extracted because of an archive - // format error (bad file header) - // Note that each time a method can continue operating when there - // is an action error on a file, the error is only logged in the file status. - // Return Values : - // 0 on an unrecoverable failure, - // The list of the files in the archive. - // -------------------------------------------------------------------------------- - function listContent() - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } + // ----- Call the create fct + $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options); + if ($v_result != 1) { + return 0; + } - // ----- Call the extracting fct - $p_list = array(); - if (($v_result = $this->privList($p_list)) != 1) + // ----- Return + return $p_result_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : listContent() + // Description : + // This public method, gives the list of the files and directories, with their + // properties. + // The properties of each entries in the list are (used also in other functions) : + // filename : Name of the file. For a create or add action it is the filename + // given by the user. For an extract function it is the filename + // of the extracted file. + // stored_filename : Name of the file / directory stored in the archive. + // size : Size of the stored file. + // compressed_size : Size of the file's data compressed in the archive + // (without the headers overhead) + // mtime : Last known modification date of the file (UNIX timestamp) + // comment : Comment associated with the file + // folder : true | false + // index : index of the file in the archive + // status : status of the action (depending of the action) : + // Values are : + // ok : OK ! + // filtered : the file / dir is not extracted (filtered by user) + // already_a_directory : the file can not be extracted because a + // directory with the same name already exists + // write_protected : the file can not be extracted because a file + // with the same name already exists and is + // write protected + // newer_exist : the file was not extracted because a newer file exists + // path_creation_fail : the file is not extracted because the folder + // does not exist and can not be created + // write_error : the file was not extracted because there was a + // error while writing the file + // read_error : the file was not extracted because there was a error + // while reading the file + // invalid_header : the file was not extracted because of an archive + // format error (bad file header) + // Note that each time a method can continue operating when there + // is an action error on a file, the error is only logged in the file status. + // Return Values : + // 0 on an unrecoverable failure, + // The list of the files in the archive. + // -------------------------------------------------------------------------------- + public function listContent() { - unset($p_list); - return(0); - } + $v_result = 1; - // ----- Return - return $p_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : - // extract($p_path="./", $p_remove_path="") - // extract([$p_option, $p_option_value, ...]) - // Description : - // This method supports two synopsis. The first one is historical. - // This method extract all the files / directories from the archive to the - // folder indicated in $p_path. - // If you want to ignore the 'root' part of path of the memorized files - // you can indicate this in the optional $p_remove_path parameter. - // By default, if a newer file with the same name already exists, the - // file is not extracted. - // - // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions - // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append - // at the end of the path value of PCLZIP_OPT_PATH. - // Parameters : - // $p_path : Path where the files and directories are to be extracted - // $p_remove_path : First part ('root' part) of the memorized path - // (if any similar) to remove while extracting. - // Options : - // PCLZIP_OPT_PATH : - // PCLZIP_OPT_ADD_PATH : - // PCLZIP_OPT_REMOVE_PATH : - // PCLZIP_OPT_REMOVE_ALL_PATH : - // PCLZIP_CB_PRE_EXTRACT : - // PCLZIP_CB_POST_EXTRACT : - // Return Values : - // 0 or a negative value on failure, - // The list of the extracted files, with a status of the action. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - function extract() - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } + // ----- Reset the error handler + $this->privErrorReset(); - // ----- Set default values - $v_options = array(); -// $v_path = "./"; - $v_path = ''; - $v_remove_path = ""; - $v_remove_all_path = false; - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Default values for option - $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; - - // ----- Look for arguments - if ($v_size > 0) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Look for first arg - if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_PATH => 'optional', - PCLZIP_OPT_REMOVE_PATH => 'optional', - PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', - PCLZIP_OPT_ADD_PATH => 'optional', - PCLZIP_CB_PRE_EXTRACT => 'optional', - PCLZIP_CB_POST_EXTRACT => 'optional', - PCLZIP_OPT_SET_CHMOD => 'optional', - PCLZIP_OPT_BY_NAME => 'optional', - PCLZIP_OPT_BY_EREG => 'optional', - PCLZIP_OPT_BY_PREG => 'optional', - PCLZIP_OPT_BY_INDEX => 'optional', - PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', - PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', - PCLZIP_OPT_REPLACE_NEWER => 'optional' - ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' - ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', - PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', - PCLZIP_OPT_TEMP_FILE_ON => 'optional', - PCLZIP_OPT_TEMP_FILE_OFF => 'optional' - )); - if ($v_result != 1) { - return 0; + // ----- Check archive + if (!$this->privCheckFormat()) { + return (0); } - // ----- Set the arguments - if (isset($v_options[PCLZIP_OPT_PATH])) { - $v_path = $v_options[PCLZIP_OPT_PATH]; - } - if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { - $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; - } - if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { - $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; - } - if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { - // ----- Check for '/' in last path char - if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { - $v_path .= '/'; - } - $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + // ----- Call the extracting fct + $p_list = array(); + if (($v_result = $this->privList($p_list)) != 1) { + unset($p_list); + + return (0); } - } - // ----- Look for 2 args - // Here we need to support the first historic synopsis of the - // method. - else { + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // extract($p_path="./", $p_remove_path="") + // extract([$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method extract all the files / directories from the archive to the + // folder indicated in $p_path. + // If you want to ignore the 'root' part of path of the memorized files + // you can indicate this in the optional $p_remove_path parameter. + // By default, if a newer file with the same name already exists, the + // file is not extracted. + // + // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions + // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append + // at the end of the path value of PCLZIP_OPT_PATH. + // Parameters : + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 or a negative value on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + public function extract() + { + $v_result = 1; - // ----- Get the first argument - $v_path = $v_arg_list[0]; + // ----- Reset the error handler + $this->privErrorReset(); - // ----- Look for the optional second argument - if ($v_size == 2) { - $v_remove_path = $v_arg_list[1]; + // ----- Check archive + if (!$this->privCheckFormat()) { + return (0); } - else if ($v_size > 2) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); - // ----- Return - return 0; + // ----- Set default values + $v_options = array(); + // $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = false; + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array( + PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional', + PCLZIP_OPT_STOP_ON_ERROR => 'optional', + PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + } else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } elseif ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } } - } - } - // ----- Look for default option values - $this->privOptionDefaultThreshold($v_options); + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); - // ----- Trace - - // ----- Call the extracting fct - $p_list = array(); - $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, - $v_remove_all_path, $v_options); - if ($v_result < 1) { - unset($p_list); - return(0); - } + // ----- Trace - // ----- Return - return $p_list; - } - // -------------------------------------------------------------------------------- - - - // -------------------------------------------------------------------------------- - // Function : - // extractByIndex($p_index, $p_path="./", $p_remove_path="") - // extractByIndex($p_index, [$p_option, $p_option_value, ...]) - // Description : - // This method supports two synopsis. The first one is historical. - // This method is doing a partial extract of the archive. - // The extracted files or folders are identified by their index in the - // archive (from 0 to n). - // Note that if the index identify a folder, only the folder entry is - // extracted, not all the files included in the archive. - // Parameters : - // $p_index : A single index (integer) or a string of indexes of files to - // extract. The form of the string is "0,4-6,8-12" with only numbers - // and '-' for range or ',' to separate ranges. No spaces or ';' - // are allowed. - // $p_path : Path where the files and directories are to be extracted - // $p_remove_path : First part ('root' part) of the memorized path - // (if any similar) to remove while extracting. - // Options : - // PCLZIP_OPT_PATH : - // PCLZIP_OPT_ADD_PATH : - // PCLZIP_OPT_REMOVE_PATH : - // PCLZIP_OPT_REMOVE_ALL_PATH : - // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and - // not as files. - // The resulting content is in a new field 'content' in the file - // structure. - // This option must be used alone (any other options are ignored). - // PCLZIP_CB_PRE_EXTRACT : - // PCLZIP_CB_POST_EXTRACT : - // Return Values : - // 0 on failure, - // The list of the extracted files, with a status of the action. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - //function extractByIndex($p_index, options...) - function extractByIndex($p_index) - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } + // ----- Call the extracting fct + $p_list = array(); + $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options); + if ($v_result < 1) { + unset($p_list); - // ----- Set default values - $v_options = array(); -// $v_path = "./"; - $v_path = ''; - $v_remove_path = ""; - $v_remove_all_path = false; - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Default values for option - $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; - - // ----- Look for arguments - if ($v_size > 1) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Remove form the options list the first argument - array_shift($v_arg_list); - $v_size--; - - // ----- Look for first arg - if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_PATH => 'optional', - PCLZIP_OPT_REMOVE_PATH => 'optional', - PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', - PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', - PCLZIP_OPT_ADD_PATH => 'optional', - PCLZIP_CB_PRE_EXTRACT => 'optional', - PCLZIP_CB_POST_EXTRACT => 'optional', - PCLZIP_OPT_SET_CHMOD => 'optional', - PCLZIP_OPT_REPLACE_NEWER => 'optional' - ,PCLZIP_OPT_STOP_ON_ERROR => 'optional' - ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', - PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', - PCLZIP_OPT_TEMP_FILE_ON => 'optional', - PCLZIP_OPT_TEMP_FILE_OFF => 'optional' - )); - if ($v_result != 1) { - return 0; + return (0); } - // ----- Set the arguments - if (isset($v_options[PCLZIP_OPT_PATH])) { - $v_path = $v_options[PCLZIP_OPT_PATH]; + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + + // -------------------------------------------------------------------------------- + // Function : + // extractByIndex($p_index, $p_path="./", $p_remove_path="") + // extractByIndex($p_index, [$p_option, $p_option_value, ...]) + // Description : + // This method supports two synopsis. The first one is historical. + // This method is doing a partial extract of the archive. + // The extracted files or folders are identified by their index in the + // archive (from 0 to n). + // Note that if the index identify a folder, only the folder entry is + // extracted, not all the files included in the archive. + // Parameters : + // $p_index : A single index (integer) or a string of indexes of files to + // extract. The form of the string is "0,4-6,8-12" with only numbers + // and '-' for range or ',' to separate ranges. No spaces or ';' + // are allowed. + // $p_path : Path where the files and directories are to be extracted + // $p_remove_path : First part ('root' part) of the memorized path + // (if any similar) to remove while extracting. + // Options : + // PCLZIP_OPT_PATH : + // PCLZIP_OPT_ADD_PATH : + // PCLZIP_OPT_REMOVE_PATH : + // PCLZIP_OPT_REMOVE_ALL_PATH : + // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and + // not as files. + // The resulting content is in a new field 'content' in the file + // structure. + // This option must be used alone (any other options are ignored). + // PCLZIP_CB_PRE_EXTRACT : + // PCLZIP_CB_POST_EXTRACT : + // Return Values : + // 0 on failure, + // The list of the extracted files, with a status of the action. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + //function extractByIndex($p_index, options...) + public function extractByIndex($p_index) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return (0); } - if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { - $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + + // ----- Set default values + $v_options = array(); + // $v_path = "./"; + $v_path = ''; + $v_remove_path = ""; + $v_remove_all_path = false; + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Default values for option + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = false; + + // ----- Look for arguments + if ($v_size > 1) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Remove form the options list the first argument + array_shift($v_arg_list); + $v_size--; + + // ----- Look for first arg + if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) { + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array( + PCLZIP_OPT_PATH => 'optional', + PCLZIP_OPT_REMOVE_PATH => 'optional', + PCLZIP_OPT_REMOVE_ALL_PATH => 'optional', + PCLZIP_OPT_EXTRACT_AS_STRING => 'optional', + PCLZIP_OPT_ADD_PATH => 'optional', + PCLZIP_CB_PRE_EXTRACT => 'optional', + PCLZIP_CB_POST_EXTRACT => 'optional', + PCLZIP_OPT_SET_CHMOD => 'optional', + PCLZIP_OPT_REPLACE_NEWER => 'optional', + PCLZIP_OPT_STOP_ON_ERROR => 'optional', + PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional', + PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional', + PCLZIP_OPT_TEMP_FILE_ON => 'optional', + PCLZIP_OPT_TEMP_FILE_OFF => 'optional' + )); + if ($v_result != 1) { + return 0; + } + + // ----- Set the arguments + if (isset($v_options[PCLZIP_OPT_PATH])) { + $v_path = $v_options[PCLZIP_OPT_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) { + $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH]; + } + if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } + if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { + // ----- Check for '/' in last path char + if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { + $v_path .= '/'; + } + $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + } + if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { + $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = false; + } else { + } + + // ----- Look for 2 args + // Here we need to support the first historic synopsis of the + // method. + } else { + + // ----- Get the first argument + $v_path = $v_arg_list[0]; + + // ----- Look for the optional second argument + if ($v_size == 2) { + $v_remove_path = $v_arg_list[1]; + } elseif ($v_size > 2) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); + + // ----- Return + return 0; + } + } } - if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { - $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + + // ----- Trace + + // ----- Trick + // Here I want to reuse extractByRule(), so I need to parse the $p_index + // with privParseOptions() + $v_arg_trick = array( + PCLZIP_OPT_BY_INDEX, + $p_index + ); + $v_options_trick = array(); + $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, array( + PCLZIP_OPT_BY_INDEX => 'optional' + )); + if ($v_result != 1) { + return 0; } - if (isset($v_options[PCLZIP_OPT_ADD_PATH])) { - // ----- Check for '/' in last path char - if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) { - $v_path .= '/'; - } - $v_path .= $v_options[PCLZIP_OPT_ADD_PATH]; + $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; + + // ----- Look for default option values + $this->privOptionDefaultThreshold($v_options); + + // ----- Call the extracting fct + if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { + return (0); } - if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) { - $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE; + + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : + // delete([$p_option, $p_option_value, ...]) + // Description : + // This method removes files from the archive. + // If no parameters are given, then all the archive is emptied. + // Parameters : + // None or optional arguments. + // Options : + // PCLZIP_OPT_BY_INDEX : + // PCLZIP_OPT_BY_NAME : + // PCLZIP_OPT_BY_EREG : + // PCLZIP_OPT_BY_PREG : + // Return Values : + // 0 on failure, + // The list of the files which are still present in the archive. + // (see PclZip::listContent() for list entry format) + // -------------------------------------------------------------------------------- + public function delete() + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); + + // ----- Check archive + if (!$this->privCheckFormat()) { + return (0); } - else { + + // ----- Set default values + $v_options = array(); + + // ----- Look for variable options arguments + $v_size = func_num_args(); + + // ----- Look for arguments + if ($v_size > 0) { + // ----- Get the arguments + $v_arg_list = func_get_args(); + + // ----- Parse the options + $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, array( + PCLZIP_OPT_BY_NAME => 'optional', + PCLZIP_OPT_BY_EREG => 'optional', + PCLZIP_OPT_BY_PREG => 'optional', + PCLZIP_OPT_BY_INDEX => 'optional' + )); + if ($v_result != 1) { + return 0; + } } - } - // ----- Look for 2 args - // Here we need to support the first historic synopsis of the - // method. - else { + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); - // ----- Get the first argument - $v_path = $v_arg_list[0]; + // ----- Call the delete fct + $v_list = array(); + if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { + $this->privSwapBackMagicQuotes(); + unset($v_list); - // ----- Look for the optional second argument - if ($v_size == 2) { - $v_remove_path = $v_arg_list[1]; + return (0); } - else if ($v_size > 2) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments"); - // ----- Return - return 0; - } - } - } + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); - // ----- Trace - - // ----- Trick - // Here I want to reuse extractByRule(), so I need to parse the $p_index - // with privParseOptions() - $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index); - $v_options_trick = array(); - $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, - array (PCLZIP_OPT_BY_INDEX => 'optional' )); - if ($v_result != 1) { - return 0; + // ----- Return + return $v_list; } - $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX]; + // -------------------------------------------------------------------------------- - // ----- Look for default option values - $this->privOptionDefaultThreshold($v_options); + // -------------------------------------------------------------------------------- + // Function : deleteByIndex() + // Description : + // ***** Deprecated ***** + // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. + // -------------------------------------------------------------------------------- + public function deleteByIndex($p_index) + { - // ----- Call the extracting fct - if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) { - return(0); - } + $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); - // ----- Return - return $p_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : - // delete([$p_option, $p_option_value, ...]) - // Description : - // This method removes files from the archive. - // If no parameters are given, then all the archive is emptied. - // Parameters : - // None or optional arguments. - // Options : - // PCLZIP_OPT_BY_INDEX : - // PCLZIP_OPT_BY_NAME : - // PCLZIP_OPT_BY_EREG : - // PCLZIP_OPT_BY_PREG : - // Return Values : - // 0 on failure, - // The list of the files which are still present in the archive. - // (see PclZip::listContent() for list entry format) - // -------------------------------------------------------------------------------- - function delete() - { - $v_result=1; - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); - } + // ----- Return + return $p_list; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : properties() + // Description : + // This method gives the properties of the archive. + // The properties are : + // nb : Number of files in the archive + // comment : Comment associated with the archive file + // status : not_exist, ok + // Parameters : + // None + // Return Values : + // 0 on failure, + // An array with the archive properties. + // -------------------------------------------------------------------------------- + public function properties() + { - // ----- Set default values - $v_options = array(); - - // ----- Look for variable options arguments - $v_size = func_num_args(); - - // ----- Look for arguments - if ($v_size > 0) { - // ----- Get the arguments - $v_arg_list = func_get_args(); - - // ----- Parse the options - $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options, - array (PCLZIP_OPT_BY_NAME => 'optional', - PCLZIP_OPT_BY_EREG => 'optional', - PCLZIP_OPT_BY_PREG => 'optional', - PCLZIP_OPT_BY_INDEX => 'optional' )); - if ($v_result != 1) { - return 0; - } - } + // ----- Reset the error handler + $this->privErrorReset(); - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); - // ----- Call the delete fct - $v_list = array(); - if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) { - $this->privSwapBackMagicQuotes(); - unset($v_list); - return(0); - } + // ----- Check archive + if (!$this->privCheckFormat()) { + $this->privSwapBackMagicQuotes(); - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); + return (0); + } - // ----- Return - return $v_list; - } - // -------------------------------------------------------------------------------- + // ----- Default properties + $v_prop = array(); + $v_prop['comment'] = ''; + $v_prop['nb'] = 0; + $v_prop['status'] = 'not_exist'; - // -------------------------------------------------------------------------------- - // Function : deleteByIndex() - // Description : - // ***** Deprecated ***** - // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered. - // -------------------------------------------------------------------------------- - function deleteByIndex($p_index) - { + // ----- Look if file exists + if (@is_file($this->zipname)) { + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) { + $this->privSwapBackMagicQuotes(); - $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index); + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \'' . $this->zipname . '\' in binary read mode'); - // ----- Return - return $p_list; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : properties() - // Description : - // This method gives the properties of the archive. - // The properties are : - // nb : Number of files in the archive - // comment : Comment associated with the archive file - // status : not_exist, ok - // Parameters : - // None - // Return Values : - // 0 on failure, - // An array with the archive properties. - // -------------------------------------------------------------------------------- - function properties() - { - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Check archive - if (!$this->privCheckFormat()) { - $this->privSwapBackMagicQuotes(); - return(0); - } + // ----- Return + return 0; + } - // ----- Default properties - $v_prop = array(); - $v_prop['comment'] = ''; - $v_prop['nb'] = 0; - $v_prop['status'] = 'not_exist'; + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privSwapBackMagicQuotes(); - // ----- Look if file exists - if (@is_file($this->zipname)) - { - // ----- Open the zip file - if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) - { - $this->privSwapBackMagicQuotes(); + return 0; + } - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + // ----- Close the zip file + $this->privCloseFd(); - // ----- Return - return 0; - } + // ----- Set the user attributes + $v_prop['comment'] = $v_central_dir['comment']; + $v_prop['nb'] = $v_central_dir['entries']; + $v_prop['status'] = 'ok'; + } - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { + // ----- Magic quotes trick $this->privSwapBackMagicQuotes(); - return 0; - } - // ----- Close the zip file - $this->privCloseFd(); + // ----- Return + return $v_prop; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : duplicate() + // Description : + // This method creates an archive by copying the content of an other one. If + // the archive already exist, it is replaced by the new one without any warning. + // Parameters : + // $p_archive : The filename of a valid archive, or + // a valid PclZip object. + // Return Values : + // 1 on success. + // 0 or a negative value on error (error code). + // -------------------------------------------------------------------------------- + public function duplicate($p_archive) + { + $v_result = 1; + + // ----- Reset the error handler + $this->privErrorReset(); - // ----- Set the user attributes - $v_prop['comment'] = $v_central_dir['comment']; - $v_prop['nb'] = $v_central_dir['entries']; - $v_prop['status'] = 'ok'; - } + // ----- Look if the $p_archive is a PclZip object + if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) { - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive->zipname); - // ----- Return - return $v_prop; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : duplicate() - // Description : - // This method creates an archive by copying the content of an other one. If - // the archive already exist, it is replaced by the new one without any warning. - // Parameters : - // $p_archive : The filename of a valid archive, or - // a valid PclZip object. - // Return Values : - // 1 on success. - // 0 or a negative value on error (error code). - // -------------------------------------------------------------------------------- - function duplicate($p_archive) - { - $v_result = 1; + // ----- Look if the $p_archive is a string (so a filename) + } elseif (is_string($p_archive)) { - // ----- Reset the error handler - $this->privErrorReset(); + // ----- Check that $p_archive is a valid zip file + // TBC : Should also check the archive format + if (!is_file($p_archive)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '" . $p_archive . "'"); + $v_result = PCLZIP_ERR_MISSING_FILE; + } else { + // ----- Duplicate the archive + $v_result = $this->privDuplicate($p_archive); + } - // ----- Look if the $p_archive is a PclZip object - if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip')) - { + // ----- Invalid variable + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } - // ----- Duplicate the archive - $v_result = $this->privDuplicate($p_archive->zipname); + // ----- Return + return $v_result; } - - // ----- Look if the $p_archive is a string (so a filename) - else if (is_string($p_archive)) + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : merge() + // Description : + // This method merge the $p_archive_to_add archive at the end of the current + // one ($this). + // If the archive ($this) does not exist, the merge becomes a duplicate. + // If the $p_archive_to_add archive does not exist, the merge is a success. + // Parameters : + // $p_archive_to_add : It can be directly the filename of a valid zip archive, + // or a PclZip object archive. + // Return Values : + // 1 on success, + // 0 or negative values on error (see below). + // -------------------------------------------------------------------------------- + public function merge($p_archive_to_add) { + $v_result = 1; - // ----- Check that $p_archive is a valid zip file - // TBC : Should also check the archive format - if (!is_file($p_archive)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'"); - $v_result = PCLZIP_ERR_MISSING_FILE; - } - else { - // ----- Duplicate the archive - $v_result = $this->privDuplicate($p_archive); - } - } + // ----- Reset the error handler + $this->privErrorReset(); - // ----- Invalid variable - else - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); - $v_result = PCLZIP_ERR_INVALID_PARAMETER; - } + // ----- Check archive + if (!$this->privCheckFormat()) { + return (0); + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : merge() - // Description : - // This method merge the $p_archive_to_add archive at the end of the current - // one ($this). - // If the archive ($this) does not exist, the merge becomes a duplicate. - // If the $p_archive_to_add archive does not exist, the merge is a success. - // Parameters : - // $p_archive_to_add : It can be directly the filename of a valid zip archive, - // or a PclZip object archive. - // Return Values : - // 1 on success, - // 0 or negative values on error (see below). - // -------------------------------------------------------------------------------- - function merge($p_archive_to_add) - { - $v_result = 1; + // ----- Look if the $p_archive_to_add is a PclZip object + if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) { + + // ----- Merge the archive + $v_result = $this->privMerge($p_archive_to_add); + + // ----- Look if the $p_archive_to_add is a string (so a filename) + } elseif (is_string($p_archive_to_add)) { - // ----- Reset the error handler - $this->privErrorReset(); + // ----- Create a temporary archive + $v_object_archive = new PclZip($p_archive_to_add); - // ----- Check archive - if (!$this->privCheckFormat()) { - return(0); + // ----- Merge the archive + $v_result = $this->privMerge($v_object_archive); + + // ----- Invalid variable + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); + $v_result = PCLZIP_ERR_INVALID_PARAMETER; + } + + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Look if the $p_archive_to_add is a PclZip object - if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip')) + // -------------------------------------------------------------------------------- + // Function : errorCode() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function errorCode() { + if (PCLZIP_ERROR_EXTERNAL == 1) { + return (PclErrorCode()); + } - // ----- Merge the archive - $v_result = $this->privMerge($p_archive_to_add); + return ($this->error_code); } + // -------------------------------------------------------------------------------- - // ----- Look if the $p_archive_to_add is a string (so a filename) - else if (is_string($p_archive_to_add)) + // -------------------------------------------------------------------------------- + // Function : errorName() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function errorName($p_with_code = false) { + $v_name = array( + PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', + PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', + PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', + PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', + PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', + PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', + PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', + PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', + PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', + PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', + PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', + PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', + PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', + PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', + PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', + PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', + PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', + PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', + PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', + PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', + PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION' + ); + + if (isset($v_name[$this->error_code])) { + $v_value = $v_name[$this->error_code]; + } else { + $v_value = 'NoName'; + } - // ----- Create a temporary archive - $v_object_archive = new PclZip($p_archive_to_add); + if ($p_with_code) { + return ($v_value . ' (' . $this->error_code . ')'); + } - // ----- Merge the archive - $v_result = $this->privMerge($v_object_archive); + return ($v_value); } + // -------------------------------------------------------------------------------- - // ----- Invalid variable - else + // -------------------------------------------------------------------------------- + // Function : errorInfo() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function errorInfo($p_full = false) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add"); - $v_result = PCLZIP_ERR_INVALID_PARAMETER; - } + if (PCLZIP_ERROR_EXTERNAL == 1) { + return (PclErrorString()); + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- + if ($p_full) { + return ($this->errorName(true) . " : " . $this->error_string); + } + return ($this->error_string . " [code " . $this->error_code . "]"); + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** + // ***** ***** + // ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCheckFormat() + // Description : + // This method check that the archive exists and is a valid zip archive. + // Several level of check exists. (futur) + // Parameters : + // $p_level : Level of check. Default 0. + // 0 : Check the first bytes (magic codes) (default value)) + // 1 : 0 + Check the central directory (futur) + // 2 : 1 + Check each file header (futur) + // Return Values : + // true on success, + // false on error, the error code is set. + // -------------------------------------------------------------------------------- + public function privCheckFormat($p_level = 0) + { + $v_result = true; + // ----- Reset the file system cache + clearstatcache(); - // -------------------------------------------------------------------------------- - // Function : errorCode() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function errorCode() - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - return(PclErrorCode()); - } - else { - return($this->error_code); - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : errorName() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function errorName($p_with_code=false) - { - $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR', - PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL', - PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL', - PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER', - PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE', - PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG', - PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP', - PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE', - PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL', - PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION', - PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT', - PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL', - PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL', - PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM', - PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', - PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE', - PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE', - PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', - PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION' - ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE' - ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION' - ); - - if (isset($v_name[$this->error_code])) { - $v_value = $v_name[$this->error_code]; - } - else { - $v_value = 'NoName'; - } + // ----- Reset the error handler + $this->privErrorReset(); - if ($p_with_code) { - return($v_value.' ('.$this->error_code.')'); - } - else { - return($v_value); - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : errorInfo() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function errorInfo($p_full=false) - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - return(PclErrorString()); - } - else { - if ($p_full) { - return($this->errorName(true)." : ".$this->error_string); - } - else { - return($this->error_string." [code ".$this->error_code."]"); - } - } - } - // -------------------------------------------------------------------------------- + // ----- Look if the file exits + if (!is_file($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '" . $this->zipname . "'"); + return (false); + } -// -------------------------------------------------------------------------------- -// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS ***** -// ***** ***** -// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY ***** -// -------------------------------------------------------------------------------- + // ----- Check that the file is readeable + if (!is_readable($this->zipname)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '" . $this->zipname . "'"); + return (false); + } + // ----- Check the magic code + // TBC - // -------------------------------------------------------------------------------- - // Function : privCheckFormat() - // Description : - // This method check that the archive exists and is a valid zip archive. - // Several level of check exists. (futur) - // Parameters : - // $p_level : Level of check. Default 0. - // 0 : Check the first bytes (magic codes) (default value)) - // 1 : 0 + Check the central directory (futur) - // 2 : 1 + Check each file header (futur) - // Return Values : - // true on success, - // false on error, the error code is set. - // -------------------------------------------------------------------------------- - function privCheckFormat($p_level=0) - { - $v_result = true; - - // ----- Reset the file system cache - clearstatcache(); - - // ----- Reset the error handler - $this->privErrorReset(); - - // ----- Look if the file exits - if (!is_file($this->zipname)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'"); - return(false); - } + // ----- Check the central header + // TBC - // ----- Check that the file is readeable - if (!is_readable($this->zipname)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'"); - return(false); + // ----- Check each file header + // TBC + + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privParseOptions() + // Description : + // This internal methods reads the variable list of arguments ($p_options_list, + // $p_size) and generate an array with the options and values ($v_result_list). + // $v_requested_options contains the options that can be present and those that + // must be present. + // $v_requested_options is an array, with the option value as key, and 'optional', + // or 'mandatory' as value. + // Parameters : + // See above. + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + public function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options = false) + { + $v_result = 1; - // ----- Check the magic code - // TBC + // ----- Read the options + $i = 0; + while ($i < $p_size) { - // ----- Check the central header - // TBC + // ----- Check if the option is supported + if (!isset($v_requested_options[$p_options_list[$i]])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '" . $p_options_list[$i] . "' for this method"); - // ----- Check each file header - // TBC + // ----- Return + return PclZip::errorCode(); + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privParseOptions() - // Description : - // This internal methods reads the variable list of arguments ($p_options_list, - // $p_size) and generate an array with the options and values ($v_result_list). - // $v_requested_options contains the options that can be present and those that - // must be present. - // $v_requested_options is an array, with the option value as key, and 'optional', - // or 'mandatory' as value. - // Parameters : - // See above. - // Return Values : - // 1 on success. - // 0 on failure. - // -------------------------------------------------------------------------------- - function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false) - { - $v_result=1; - - // ----- Read the options - $i=0; - while ($i<$p_size) { - - // ----- Check if the option is supported - if (!isset($v_requested_options[$p_options_list[$i]])) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method"); + // ----- Look for next option + switch ($p_options_list[$i]) { + // ----- Look for options that request a path value + case PCLZIP_OPT_PATH: + case PCLZIP_OPT_REMOVE_PATH: + case PCLZIP_OPT_ADD_PATH: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i + 1], false); + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_THRESHOLD: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + return PclZip::errorCode(); + } + + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '" . PclZipUtilOptionText($p_options_list[$i]) . "' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + + return PclZip::errorCode(); + } + + // ----- Check the value + $v_value = $p_options_list[$i + 1]; + if ((!is_integer($v_value)) || ($v_value < 0)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + return PclZip::errorCode(); + } + + // ----- Get the value (and convert it in bytes) + $v_result_list[$p_options_list[$i]] = $v_value * 1048576; + $i++; + break; + + case PCLZIP_OPT_TEMP_FILE_ON: + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '" . PclZipUtilOptionText($p_options_list[$i]) . "' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); + + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_TEMP_FILE_OFF: + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '" . PclZipUtilOptionText($p_options_list[$i]) . "' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'"); + + return PclZip::errorCode(); + } + // ----- Check for incompatible options + if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '" . PclZipUtilOptionText($p_options_list[$i]) . "' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'"); + + return PclZip::errorCode(); + } + + $v_result_list[$p_options_list[$i]] = true; + break; + + case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i + 1]) && ($p_options_list[$i + 1] != '')) { + $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i + 1], false); + $i++; + } else { + } + break; + + // ----- Look for options that request an array of string for value + case PCLZIP_OPT_BY_NAME: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i + 1])) { + $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i + 1]; + } elseif (is_array($p_options_list[$i + 1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an EREG or PREG expression + case PCLZIP_OPT_BY_EREG: + $p_options_list[$i] = PCLZIP_OPT_BY_PREG; + // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG + // to PCLZIP_OPT_BY_PREG + case PCLZIP_OPT_BY_PREG: + //case PCLZIP_OPT_CRYPT : + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i + 1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that takes a string + case PCLZIP_OPT_COMMENT: + case PCLZIP_OPT_ADD_COMMENT: + case PCLZIP_OPT_PREPEND_COMMENT: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + if (is_string($p_options_list[$i + 1])) { + $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + $i++; + break; + + // ----- Look for options that request an array of index + case PCLZIP_OPT_BY_INDEX: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_work_list = array(); + if (is_string($p_options_list[$i + 1])) { + + // ----- Remove spaces + $p_options_list[$i + 1] = strtr($p_options_list[$i + 1], ' ', ''); + + // ----- Parse items + $v_work_list = explode(",", $p_options_list[$i + 1]); + } elseif (is_integer($p_options_list[$i + 1])) { + $v_work_list[0] = $p_options_list[$i + 1] . '-' . $p_options_list[$i + 1]; + } elseif (is_array($p_options_list[$i + 1])) { + $v_work_list = $p_options_list[$i + 1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Reduce the index list + // each index item in the list must be a couple with a start and + // an end value : [0,3], [5-5], [8-10], ... + // ----- Check the format of each item + $v_sort_flag = false; + $v_sort_value = 0; + for ($j = 0; $j < sizeof($v_work_list); $j++) { + // ----- Explode the item + $v_item_list = explode("-", $v_work_list[$j]); + $v_size_item_list = sizeof($v_item_list); + + // ----- TBC : Here we might check that each item is a + // real integer ... + + // ----- Look for single value + if ($v_size_item_list == 1) { + // ----- Set the option value + $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0]; + $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0]; + } elseif ($v_size_item_list == 2) { + // ----- Set the option value + $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0]; + $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1]; + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for list sort + if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) { + $v_sort_flag = true; + + // ----- TBC : An automatic sort should be writen ... + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start']; + } + + // ----- Sort the items + if ($v_sort_flag) { + // TBC : To Be Completed + } + + // ----- Next option + $i++; + break; + + // ----- Look for options that request no value + case PCLZIP_OPT_REMOVE_ALL_PATH: + case PCLZIP_OPT_EXTRACT_AS_STRING: + case PCLZIP_OPT_NO_COMPRESSION: + case PCLZIP_OPT_EXTRACT_IN_OUTPUT: + case PCLZIP_OPT_REPLACE_NEWER: + case PCLZIP_OPT_STOP_ON_ERROR: + $v_result_list[$p_options_list[$i]] = true; + break; + + // ----- Look for options that request an octal value + case PCLZIP_OPT_SET_CHMOD: + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1]; + $i++; + break; + + // ----- Look for options that request a call-back + case PCLZIP_CB_PRE_EXTRACT: + case PCLZIP_CB_POST_EXTRACT: + case PCLZIP_CB_PRE_ADD: + case PCLZIP_CB_POST_ADD: + /* for futur use + case PCLZIP_CB_PRE_DELETE : + case PCLZIP_CB_POST_DELETE : + case PCLZIP_CB_PRE_LIST : + case PCLZIP_CB_POST_LIST : + */ + // ----- Check the number of parameters + if (($i + 1) >= $p_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Get the value + $v_function_name = $p_options_list[$i + 1]; + + // ----- Check that the value is a valid existing function + if (!function_exists($v_function_name)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '" . $v_function_name . "()' is not an existing function for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Set the attribute + $v_result_list[$p_options_list[$i]] = $v_function_name; + $i++; + break; + + default: + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Unknown parameter '" . $p_options_list[$i] . "'"); + + // ----- Return + return PclZip::errorCode(); + } - // ----- Return - return PclZip::errorCode(); - } - - // ----- Look for next option - switch ($p_options_list[$i]) { - // ----- Look for options that request a path value - case PCLZIP_OPT_PATH : - case PCLZIP_OPT_REMOVE_PATH : - case PCLZIP_OPT_ADD_PATH : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + // ----- Next options + $i++; + } - // ----- Return - return PclZip::errorCode(); - } + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key = reset($v_requested_options); $key = key($v_requested_options); $key = next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($v_result_list[$key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter " . PclZipUtilOptionText($key) . "(" . $key . ")"); + + // ----- Return + return PclZip::errorCode(); + } + } + } + } - // ----- Get the value - $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); - $i++; - break; + // ----- Look for default values + if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { - case PCLZIP_OPT_TEMP_FILE_THRESHOLD : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - return PclZip::errorCode(); - } + } - // ----- Check for incompatible options - if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); - return PclZip::errorCode(); - } + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Check the value - $v_value = $p_options_list[$i+1]; - if ((!is_integer($v_value)) || ($v_value<0)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - return PclZip::errorCode(); - } + // -------------------------------------------------------------------------------- + // Function : privOptionDefaultThreshold() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privOptionDefaultThreshold(&$p_options) + { + $v_result = 1; - // ----- Get the value (and convert it in bytes) - $v_result_list[$p_options_list[$i]] = $v_value*1048576; - $i++; - break; + if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) { + return $v_result; + } - case PCLZIP_OPT_TEMP_FILE_ON : - // ----- Check for incompatible options - if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'"); - return PclZip::errorCode(); - } + // ----- Get 'memory_limit' configuration value + $v_memory_limit = ini_get('memory_limit'); + $v_memory_limit = trim($v_memory_limit); + $last = strtolower(substr($v_memory_limit, -1)); + $v_memory_limit = preg_replace('/[^0-9,.]/', '', $v_memory_limit); - $v_result_list[$p_options_list[$i]] = true; - break; + if ($last == 'g') { + //$v_memory_limit = $v_memory_limit*1024*1024*1024; + $v_memory_limit = $v_memory_limit * 1073741824; + } + if ($last == 'm') { + //$v_memory_limit = $v_memory_limit*1024*1024; + $v_memory_limit = $v_memory_limit * 1048576; + } + if ($last == 'k') { + $v_memory_limit = $v_memory_limit * 1024; + } - case PCLZIP_OPT_TEMP_FILE_OFF : - // ----- Check for incompatible options - if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'"); - return PclZip::errorCode(); - } - // ----- Check for incompatible options - if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'"); - return PclZip::errorCode(); - } + $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit * PCLZIP_TEMPORARY_FILE_RATIO); - $v_result_list[$p_options_list[$i]] = true; - break; + // ----- Sanity check : No threshold if value lower than 1M + if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) { + unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]); + } - case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrParseAtt() + // Description : + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + public function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options = false) + { + $v_result = 1; - // ----- Return - return PclZip::errorCode(); - } + // ----- For each file in the list check the attributes + foreach ($p_file_list as $v_key => $v_value) { - // ----- Get the value - if ( is_string($p_options_list[$i+1]) - && ($p_options_list[$i+1] != '')) { - $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE); - $i++; - } - else { - } - break; - - // ----- Look for options that request an array of string for value - case PCLZIP_OPT_BY_NAME : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + // ----- Check if the option is supported + if (!isset($v_requested_options[$v_key])) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '" . $v_key . "' for this file"); - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - if (is_string($p_options_list[$i+1])) { - $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1]; - } - else if (is_array($p_options_list[$i+1])) { - $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + // ----- Return + return PclZip::errorCode(); + } - // ----- Return - return PclZip::errorCode(); - } - $i++; - break; - - // ----- Look for options that request an EREG or PREG expression - case PCLZIP_OPT_BY_EREG : - // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG - // to PCLZIP_OPT_BY_PREG - $p_options_list[$i] = PCLZIP_OPT_BY_PREG; - case PCLZIP_OPT_BY_PREG : - //case PCLZIP_OPT_CRYPT : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + // ----- Look for attribute + switch ($v_key) { + case PCLZIP_ATT_FILE_NAME: + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type " . gettype($v_value) . ". String expected for attribute '" . PclZipUtilOptionText($v_key) . "'"); - // ----- Return - return PclZip::errorCode(); - } + return PclZip::errorCode(); + } - // ----- Get the value - if (is_string($p_options_list[$i+1])) { - $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); - // ----- Return - return PclZip::errorCode(); - } - $i++; - break; - - // ----- Look for options that takes a string - case PCLZIP_OPT_COMMENT : - case PCLZIP_OPT_ADD_COMMENT : - case PCLZIP_OPT_PREPEND_COMMENT : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, - "Missing parameter value for option '" - .PclZipUtilOptionText($p_options_list[$i]) - ."'"); + if ($p_filedescr['filename'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '" . PclZipUtilOptionText($v_key) . "'"); - // ----- Return - return PclZip::errorCode(); - } + return PclZip::errorCode(); + } - // ----- Get the value - if (is_string($p_options_list[$i+1])) { - $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, - "Wrong parameter value for option '" - .PclZipUtilOptionText($p_options_list[$i]) - ."'"); + break; - // ----- Return - return PclZip::errorCode(); - } - $i++; - break; - - // ----- Look for options that request an array of index - case PCLZIP_OPT_BY_INDEX : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + case PCLZIP_ATT_FILE_NEW_SHORT_NAME: + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type " . gettype($v_value) . ". String expected for attribute '" . PclZipUtilOptionText($v_key) . "'"); - // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - $v_work_list = array(); - if (is_string($p_options_list[$i+1])) { - - // ----- Remove spaces - $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', ''); - - // ----- Parse items - $v_work_list = explode(",", $p_options_list[$i+1]); - } - else if (is_integer($p_options_list[$i+1])) { - $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1]; - } - else if (is_array($p_options_list[$i+1])) { - $v_work_list = $p_options_list[$i+1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return PclZip::errorCode(); + } + + $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_short_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '" . PclZipUtilOptionText($v_key) . "'"); + + return PclZip::errorCode(); + } + break; + + case PCLZIP_ATT_FILE_NEW_FULL_NAME: + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type " . gettype($v_value) . ". String expected for attribute '" . PclZipUtilOptionText($v_key) . "'"); + + return PclZip::errorCode(); + } + + $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); + + if ($p_filedescr['new_full_name'] == '') { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '" . PclZipUtilOptionText($v_key) . "'"); + + return PclZip::errorCode(); + } + break; + + // ----- Look for options that takes a string + case PCLZIP_ATT_FILE_COMMENT: + if (!is_string($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type " . gettype($v_value) . ". String expected for attribute '" . PclZipUtilOptionText($v_key) . "'"); + + return PclZip::errorCode(); + } + + $p_filedescr['comment'] = $v_value; + break; + + case PCLZIP_ATT_FILE_MTIME: + if (!is_integer($v_value)) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type " . gettype($v_value) . ". Integer expected for attribute '" . PclZipUtilOptionText($v_key) . "'"); + return PclZip::errorCode(); + } + + $p_filedescr['mtime'] = $v_value; + break; + + case PCLZIP_ATT_FILE_CONTENT: + $p_filedescr['content'] = $v_value; + break; + + default: + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Unknown parameter '" . $v_key . "'"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for mandatory options + if ($v_requested_options !== false) { + for ($key = reset($v_requested_options); $key = key($v_requested_options); $key = next($v_requested_options)) { + // ----- Look for mandatory option + if ($v_requested_options[$key] == 'mandatory') { + // ----- Look if present + if (!isset($p_file_list[$key])) { + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter " . PclZipUtilOptionText($key) . "(" . $key . ")"); + + return PclZip::errorCode(); + } + } + } + } + + // end foreach + } + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privFileDescrExpand() + // Description : + // This method look for each item of the list to see if its a file, a folder + // or a string to be added as file. For any other type of files (link, other) + // just ignore the item. + // Then prepare the information that will be stored for that file. + // When its a folder, expand the folder with all the files that are in that + // folder (recursively). + // Parameters : + // Return Values : + // 1 on success. + // 0 on failure. + // -------------------------------------------------------------------------------- + public function privFileDescrExpand(&$p_filedescr_list, &$p_options) + { + $v_result = 1; + + // ----- Create a result list + $v_result_list = array(); + + // ----- Look each entry + for ($i = 0; $i < sizeof($p_filedescr_list); $i++) { + + // ----- Get filedescr + $v_descr = $p_filedescr_list[$i]; + + // ----- Reduce the filename + $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename'], false); + $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']); + + // ----- Look for real file or folder + if (file_exists($v_descr['filename'])) { + if (@is_file($v_descr['filename'])) { + $v_descr['type'] = 'file'; + } elseif (@is_dir($v_descr['filename'])) { + $v_descr['type'] = 'folder'; + } elseif (@is_link($v_descr['filename'])) { + // skip + continue; + } else { + // skip + continue; + } + + // ----- Look for string added as file + } elseif (isset($v_descr['content'])) { + $v_descr['type'] = 'virtual_file'; + + // ----- Missing file + } else { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '" . $v_descr['filename'] . "' does not exist"); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Calculate the stored filename + $this->privCalculateStoredFilename($v_descr, $p_options); + + // ----- Add the descriptor in result list + $v_result_list[sizeof($v_result_list)] = $v_descr; + + // ----- Look for folder + if ($v_descr['type'] == 'folder') { + // ----- List of items in folder + $v_dirlist_descr = array(); + $v_dirlist_nb = 0; + if ($v_folder_handler = @opendir($v_descr['filename'])) { + while (($v_item_handler = @readdir($v_folder_handler)) !== false) { + + // ----- Skip '.' and '..' + if (($v_item_handler == '.') || ($v_item_handler == '..')) { + continue; + } + + // ----- Compose the full filename + $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'] . '/' . $v_item_handler; + + // ----- Look for different stored filename + // Because the name of the folder was changed, the name of the + // files/sub-folders also change + if (($v_descr['stored_filename'] != $v_descr['filename']) && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { + if ($v_descr['stored_filename'] != '') { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'] . '/' . $v_item_handler; + } else { + $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler; + } + } + + $v_dirlist_nb++; + } + + @closedir($v_folder_handler); + } else { + // TBC : unable to open folder in read mode + } + + // ----- Expand each element of the list + if ($v_dirlist_nb != 0) { + // ----- Expand + if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { + return $v_result; + } + + // ----- Concat the resulting list + $v_result_list = array_merge($v_result_list, $v_dirlist_descr); + } else { + } + + // ----- Free local array + unset($v_dirlist_descr); + } + } + + // ----- Get the result list + $p_filedescr_list = $v_result_list; + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCreate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privCreate($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result = 1; + $v_list_detail = array(); + + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the file in write mode + if (($v_result = $this->privOpenFd('wb')) != 1) { // ----- Return - return PclZip::errorCode(); - } - - // ----- Reduce the index list - // each index item in the list must be a couple with a start and - // an end value : [0,3], [5-5], [8-10], ... - // ----- Check the format of each item - $v_sort_flag=false; - $v_sort_value=0; - for ($j=0; $j<sizeof($v_work_list); $j++) { - // ----- Explode the item - $v_item_list = explode("-", $v_work_list[$j]); - $v_size_item_list = sizeof($v_item_list); - - // ----- TBC : Here we might check that each item is a - // real integer ... - - // ----- Look for single value - if ($v_size_item_list == 1) { - // ----- Set the option value - $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0]; - $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0]; - } - elseif ($v_size_item_list == 2) { - // ----- Set the option value - $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0]; - $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1]; - } - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - - - // ----- Look for list sort - if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) { - $v_sort_flag=true; - - // ----- TBC : An automatic sort should be writen ... - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'"); - - // ----- Return - return PclZip::errorCode(); - } - $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start']; - } - - // ----- Sort the items - if ($v_sort_flag) { - // TBC : To Be Completed - } - - // ----- Next option - $i++; - break; - - // ----- Look for options that request no value - case PCLZIP_OPT_REMOVE_ALL_PATH : - case PCLZIP_OPT_EXTRACT_AS_STRING : - case PCLZIP_OPT_NO_COMPRESSION : - case PCLZIP_OPT_EXTRACT_IN_OUTPUT : - case PCLZIP_OPT_REPLACE_NEWER : - case PCLZIP_OPT_STOP_ON_ERROR : - $v_result_list[$p_options_list[$i]] = true; - break; - - // ----- Look for options that request an octal value - case PCLZIP_OPT_SET_CHMOD : - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return $v_result; + } + + // ----- Add the list of files + $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); + + // ----- Close + $this->privCloseFd(); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAdd() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privAdd($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result = 1; + $v_list_detail = array(); + + // ----- Look if the archive exists or is empty + if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) { + + // ----- Do a create + $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); // ----- Return - return PclZip::errorCode(); - } - - // ----- Get the value - $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1]; - $i++; - break; - - // ----- Look for options that request a call-back - case PCLZIP_CB_PRE_EXTRACT : - case PCLZIP_CB_POST_EXTRACT : - case PCLZIP_CB_PRE_ADD : - case PCLZIP_CB_POST_ADD : - /* for futur use - case PCLZIP_CB_PRE_DELETE : - case PCLZIP_CB_POST_DELETE : - case PCLZIP_CB_PRE_LIST : - case PCLZIP_CB_POST_LIST : - */ - // ----- Check the number of parameters - if (($i+1) >= $p_size) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return $v_result; + } + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); + + // ----- Open the zip file + if (($v_result = $this->privOpenFd('rb')) != 1) { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); // ----- Return - return PclZip::errorCode(); - } + return $v_result; + } - // ----- Get the value - $v_function_name = $p_options_list[$i+1]; + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); - // ----- Check that the value is a valid existing function - if (!function_exists($v_function_name)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'"); + return $v_result; + } + + // ----- Go to beginning of File + @rewind($this->zip_fd); + + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.tmp'; + + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \'' . $v_zip_temp_name . '\' in binary write mode'); // ----- Return return PclZip::errorCode(); - } + } + + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } - // ----- Set the attribute - $v_result_list[$p_options_list[$i]] = $v_function_name; - $i++; - break; + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); - default : - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, - "Unknown parameter '" - .$p_options_list[$i]."'"); + // ----- Return + return $v_result; + } + + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); - // ----- Return - return PclZip::errorCode(); - } + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } - // ----- Next options - $i++; + // ----- Create the Central Dir files header + for ($i = 0, $v_count = 0; $i < sizeof($v_header_list); $i++) { + // ----- Create the file header + if ($v_header_list[$i]['status'] == 'ok') { + if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + fclose($v_zip_temp_fd); + $this->privCloseFd(); + @unlink($v_zip_temp_name); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + $v_count++; + } + + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } + + // ----- Zip file comment + $v_comment = $v_central_dir['comment']; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { + $v_comment = $v_comment . $p_options[PCLZIP_OPT_ADD_COMMENT]; + } + if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT] . $v_comment; + } + + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd) - $v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count + $v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + $this->privSwapBackMagicQuotes(); + + // ----- Return + return $v_result; + } + + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; + + // ----- Close + $this->privCloseFd(); + + // ----- Close the temporary file + @fclose($v_zip_temp_fd); + + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); + + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); + + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Look for mandatory options - if ($v_requested_options !== false) { - for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { - // ----- Look for mandatory option - if ($v_requested_options[$key] == 'mandatory') { - // ----- Look if present - if (!isset($v_result_list[$key])) { + // -------------------------------------------------------------------------------- + // Function : privOpenFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function privOpenFd($p_mode) + { + $v_result = 1; + + // ----- Look if already open + if ($this->zip_fd != 0) { // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \'' . $this->zipname . '\' already open'); // ----- Return return PclZip::errorCode(); - } } - } - } - // ----- Look for default values - if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) { + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \'' . $this->zipname . '\' in ' . $p_mode . ' mode'); + // ----- Return + return PclZip::errorCode(); + } + + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privOptionDefaultThreshold() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privOptionDefaultThreshold(&$p_options) - { - $v_result=1; - - if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) - || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) { - return $v_result; + // -------------------------------------------------------------------------------- + // Function : privCloseFd() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function privCloseFd() + { + $v_result = 1; + + if ($this->zip_fd != 0) { + @fclose($this->zip_fd); + } + $this->zip_fd = 0; + + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddList() + // Description : + // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is + // different from the real path of the file. This is usefull if you want to have PclTar + // running in any directory, and memorize relative path from an other directory. + // Parameters : + // $p_list : An array containing the file or directory names to add in the tar + // $p_result_list : list of added files with their properties (specially the status field) + // $p_add_dir : Path to add in the filename path archived + // $p_remove_dir : Path to remove in the filename path archived + // Return Values : + // -------------------------------------------------------------------------------- + // function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options) + public function privAddList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result = 1; - // ----- Get 'memory_limit' configuration value - $v_memory_limit = ini_get('memory_limit'); - $v_memory_limit = trim($v_memory_limit); - $last = strtolower(substr($v_memory_limit, -1)); + // ----- Add the files + $v_header_list = array(); + if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) { + // ----- Return + return $v_result; + } - if($last == 'g') - //$v_memory_limit = $v_memory_limit*1024*1024*1024; - $v_memory_limit = $v_memory_limit*1073741824; - if($last == 'm') - //$v_memory_limit = $v_memory_limit*1024*1024; - $v_memory_limit = $v_memory_limit*1048576; - if($last == 'k') - $v_memory_limit = $v_memory_limit*1024; + // ----- Store the offset of the central dir + $v_offset = @ftell($this->zip_fd); - $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO); + // ----- Create the Central Dir files header + for ($i = 0, $v_count = 0; $i < sizeof($v_header_list); $i++) { + // ----- Create the file header + if ($v_header_list[$i]['status'] == 'ok') { + if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + // ----- Return + return $v_result; + } + $v_count++; + } + // ----- Transform the header to a 'usable' info + $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } - // ----- Sanity check : No threshold if value lower than 1M - if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) { - unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]); - } + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privFileDescrParseAtt() - // Description : - // Parameters : - // Return Values : - // 1 on success. - // 0 on failure. - // -------------------------------------------------------------------------------- - function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false) - { - $v_result=1; - - // ----- For each file in the list check the attributes - foreach ($p_file_list as $v_key => $v_value) { - - // ----- Check if the option is supported - if (!isset($v_requested_options[$v_key])) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file"); + // ----- Calculate the size of the central header + $v_size = @ftell($this->zip_fd) - $v_offset; + + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } // ----- Return - return PclZip::errorCode(); - } - - // ----- Look for attribute - switch ($v_key) { - case PCLZIP_ATT_FILE_NAME : - if (!is_string($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileList() + // Description : + // Parameters : + // $p_filedescr_list : An array containing the file description + // or directory names to add in the zip + // $p_result_list : list of added files with their properties (specially the status field) + // Return Values : + // -------------------------------------------------------------------------------- + public function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) + { + $v_result = 1; + $v_header = array(); - $p_filedescr['filename'] = PclZipUtilPathReduction($v_value); + // ----- Recuperate the current number of elt in list + $v_nb = sizeof($p_result_list); - if ($p_filedescr['filename'] == '') { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } + // ----- Loop on the files + for ($j = 0; ($j < sizeof($p_filedescr_list)) && ($v_result == 1); $j++) { + // ----- Format the filename + $p_filedescr_list[$j]['filename'] = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false); - break; + // ----- Skip empty file names + // TBC : Can this be possible ? not checked in DescrParseAtt ? + if ($p_filedescr_list[$j]['filename'] == "") { + continue; + } - case PCLZIP_ATT_FILE_NEW_SHORT_NAME : - if (!is_string($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } + // ----- Check the filename + if (($p_filedescr_list[$j]['type'] != 'virtual_file') && (!file_exists($p_filedescr_list[$j]['filename']))) { + PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '" . $p_filedescr_list[$j]['filename'] . "' does not exist"); - $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value); + return PclZip::errorCode(); + } - if ($p_filedescr['new_short_name'] == '') { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - break; + // ----- Look if it is a file or a dir with no all path remove option + // or a dir with all its path removed + // if ( (is_file($p_filedescr_list[$j]['filename'])) + // || ( is_dir($p_filedescr_list[$j]['filename']) + if (($p_filedescr_list[$j]['type'] == 'file') || ($p_filedescr_list[$j]['type'] == 'virtual_file') || (($p_filedescr_list[$j]['type'] == 'folder') && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]) || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { - case PCLZIP_ATT_FILE_NEW_FULL_NAME : - if (!is_string($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } + // ----- Add the file + $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header, $p_options); + if ($v_result != 1) { + return $v_result; + } - $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value); + // ----- Store the file infos + $p_result_list[$v_nb++] = $v_header; + } + } - if ($p_filedescr['new_full_name'] == '') { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } - break; + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Look for options that takes a string - case PCLZIP_ATT_FILE_COMMENT : - if (!is_string($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'"); - return PclZip::errorCode(); - } + // -------------------------------------------------------------------------------- + // Function : privAddFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privAddFile($p_filedescr, &$p_header, &$p_options) + { + $v_result = 1; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; - $p_filedescr['comment'] = $v_value; - break; + // TBC : Already done in the fileAtt check ... ? + if ($p_filename == "") { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); - case PCLZIP_ATT_FILE_MTIME : - if (!is_integer($v_value)) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'"); + // ----- Return return PclZip::errorCode(); - } - - $p_filedescr['mtime'] = $v_value; - break; - - case PCLZIP_ATT_FILE_CONTENT : - $p_filedescr['content'] = $v_value; - break; - - default : - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, - "Unknown parameter '".$v_key."'"); - - // ----- Return - return PclZip::errorCode(); - } - - // ----- Look for mandatory options - if ($v_requested_options !== false) { - for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) { - // ----- Look for mandatory option - if ($v_requested_options[$key] == 'mandatory') { - // ----- Look if present - if (!isset($p_file_list[$key])) { - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")"); - return PclZip::errorCode(); - } - } } - } - // end foreach - } + // ----- Look for a stored different filename + /* TBC : Removed + if (isset($p_filedescr['stored_filename'])) { + $v_stored_filename = $p_filedescr['stored_filename']; + } else { + $v_stored_filename = $p_filedescr['stored_filename']; + } + */ - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privFileDescrExpand() - // Description : - // This method look for each item of the list to see if its a file, a folder - // or a string to be added as file. For any other type of files (link, other) - // just ignore the item. - // Then prepare the information that will be stored for that file. - // When its a folder, expand the folder with all the files that are in that - // folder (recursively). - // Parameters : - // Return Values : - // 1 on success. - // 0 on failure. - // -------------------------------------------------------------------------------- - function privFileDescrExpand(&$p_filedescr_list, &$p_options) - { - $v_result=1; - - // ----- Create a result list - $v_result_list = array(); - - // ----- Look each entry - for ($i=0; $i<sizeof($p_filedescr_list); $i++) { - - // ----- Get filedescr - $v_descr = $p_filedescr_list[$i]; - - // ----- Reduce the filename - $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename'], false); - $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']); - - // ----- Look for real file or folder - if (file_exists($v_descr['filename'])) { - if (@is_file($v_descr['filename'])) { - $v_descr['type'] = 'file'; - } - else if (@is_dir($v_descr['filename'])) { - $v_descr['type'] = 'folder'; - } - else if (@is_link($v_descr['filename'])) { - // skip - continue; - } - else { - // skip - continue; - } - } - - // ----- Look for string added as file - else if (isset($v_descr['content'])) { - $v_descr['type'] = 'virtual_file'; - } - - // ----- Missing file - else { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exist"); + // ----- Set the file properties + clearstatcache(); + $p_header['version'] = 20; + $p_header['version_extracted'] = 10; + $p_header['flag'] = 0; + $p_header['compression'] = 0; + $p_header['crc'] = 0; + $p_header['compressed_size'] = 0; + $p_header['filename_len'] = strlen($p_filename); + $p_header['extra_len'] = 0; + $p_header['disk'] = 0; + $p_header['internal'] = 0; + $p_header['offset'] = 0; + $p_header['filename'] = $p_filename; + // TBC : Removed $p_header['stored_filename'] = $v_stored_filename; + $p_header['stored_filename'] = $p_filedescr['stored_filename']; + $p_header['extra'] = ''; + $p_header['status'] = 'ok'; + $p_header['index'] = -1; + + // ----- Look for regular file + if ($p_filedescr['type'] == 'file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = filesize($p_filename); + + // ----- Look for regular folder + } elseif ($p_filedescr['type'] == 'folder') { + $p_header['external'] = 0x00000010; + $p_header['mtime'] = filemtime($p_filename); + $p_header['size'] = filesize($p_filename); + + // ----- Look for virtual file + } elseif ($p_filedescr['type'] == 'virtual_file') { + $p_header['external'] = 0x00000000; + $p_header['size'] = strlen($p_filedescr['content']); + } - // ----- Return - return PclZip::errorCode(); - } + // ----- Look for filetime + if (isset($p_filedescr['mtime'])) { + $p_header['mtime'] = $p_filedescr['mtime']; + } elseif ($p_filedescr['type'] == 'virtual_file') { + $p_header['mtime'] = time(); + } else { + $p_header['mtime'] = filemtime($p_filename); + } - // ----- Calculate the stored filename - $this->privCalculateStoredFilename($v_descr, $p_options); + // ------ Look for file comment + if (isset($p_filedescr['comment'])) { + $p_header['comment_len'] = strlen($p_filedescr['comment']); + $p_header['comment'] = $p_filedescr['comment']; + } else { + $p_header['comment_len'] = 0; + $p_header['comment'] = ''; + } - // ----- Add the descriptor in result list - $v_result_list[sizeof($v_result_list)] = $v_descr; + // ----- Look for pre-add callback + if (isset($p_options[PCLZIP_CB_PRE_ADD])) { - // ----- Look for folder - if ($v_descr['type'] == 'folder') { - // ----- List of items in folder - $v_dirlist_descr = array(); - $v_dirlist_nb = 0; - if ($v_folder_handler = @opendir($v_descr['filename'])) { - while (($v_item_handler = @readdir($v_folder_handler)) !== false) { + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_header['status'] = "skipped"; + $v_result = 1; + } - // ----- Skip '.' and '..' - if (($v_item_handler == '.') || ($v_item_handler == '..')) { - continue; + // ----- Update the informations + // Only some fields can be modified + if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { + $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); } + } + + // ----- Look for empty stored filename + if ($p_header['stored_filename'] == "") { + $p_header['status'] = "filtered"; + } + + // ----- Check the path length + if (strlen($p_header['stored_filename']) > 0xFF) { + $p_header['status'] = 'filename_too_long'; + } + + // ----- Look if no error, or file not skipped + if ($p_header['status'] == 'ok') { + + // ----- Look for a file + if ($p_filedescr['type'] == 'file') { + // ----- Look for using temporary file to zip + if ((!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])))) { + $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } + + // ----- Use "in memory" zip algo + } else { + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + + return PclZip::errorCode(); + } + + // ----- Read the file content + $v_content = @fread($v_file, $p_header['size']); + + // ----- Close the file + @fclose($v_file); + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + + // ----- Look for normal compression + } else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + + } + + // ----- Look for a virtual file (a file from string) + } elseif ($p_filedescr['type'] == 'virtual_file') { + + $v_content = $p_filedescr['content']; + + // ----- Calculate the CRC + $p_header['crc'] = @crc32($v_content); + + // ----- Look for no compression + if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { + // ----- Set header parameters + $p_header['compressed_size'] = $p_header['size']; + $p_header['compression'] = 0; + + // ----- Look for normal compression + } else { + // ----- Compress the content + $v_content = @gzdeflate($v_content); + + // ----- Set header parameters + $p_header['compressed_size'] = strlen($v_content); + $p_header['compression'] = 8; + } + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + @fclose($v_file); + + return $v_result; + } + + // ----- Write the compressed (or not) content + @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + + // ----- Look for a directory + } elseif ($p_filedescr['type'] == 'folder') { + // ----- Look for directory last '/' + if (@substr($p_header['stored_filename'], -1) != '/') { + $p_header['stored_filename'] .= '/'; + } - // ----- Compose the full filename - $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler; - - // ----- Look for different stored filename - // Because the name of the folder was changed, the name of the - // files/sub-folders also change - if (($v_descr['stored_filename'] != $v_descr['filename']) - && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) { - if ($v_descr['stored_filename'] != '') { - $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler; - } - else { - $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler; - } + // ----- Set the file properties + $p_header['size'] = 0; + //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked + $p_header['external'] = 0x00000010; // Value for a folder : to be checked + + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + return $v_result; + } } + } + + // ----- Look for post-add callback + if (isset($p_options[PCLZIP_CB_POST_ADD])) { - $v_dirlist_nb++; - } + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_header, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + // eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header); + if ($v_result == 0) { + // ----- Ignored + $v_result = 1; + } - @closedir($v_folder_handler); + // ----- Update the informations + // Nothing can be modified } - else { - // TBC : unable to open folder in read mode + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privAddFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options) + { + $v_result = PCLZIP_ERR_NO_ERROR; + + // ----- Working variable + $p_filename = $p_filedescr['filename']; + + // ----- Open the source file + if (($v_file = @fopen($p_filename, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); + + return PclZip::errorCode(); } - // ----- Expand each element of the list - if ($v_dirlist_nb != 0) { - // ----- Expand - if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) { - return $v_result; - } + // ----- Creates a compressed temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.gz'; + if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \'' . $v_gzip_temp_name . '\' in binary write mode'); - // ----- Concat the resulting list - $v_result_list = array_merge($v_result_list, $v_dirlist_descr); + return PclZip::errorCode(); } - else { + + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = filesize($p_filename); + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @gzputs($v_file_compressed, $v_buffer, $v_read_size); + $v_size -= $v_read_size; } - // ----- Free local array - unset($v_dirlist_descr); - } - } + // ----- Close the file + @fclose($v_file); + @gzclose($v_file_compressed); - // ----- Get the result list - $p_filedescr_list = $v_result_list; + // ----- Check the minimum file size + if (filesize($v_gzip_temp_name) < 18) { + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \'' . $v_gzip_temp_name . '\' has invalid filesize - should be minimum 18 bytes'); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privCreate() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privCreate($p_filedescr_list, &$p_result_list, &$p_options) - { - $v_result=1; - $v_list_detail = array(); - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Open the file in write mode - if (($v_result = $this->privOpenFd('wb')) != 1) - { - // ----- Return - return $v_result; - } + return PclZip::errorCode(); + } - // ----- Add the list of files - $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options); + // ----- Extract the compressed attributes + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \'' . $v_gzip_temp_name . '\' in binary read mode'); - // ----- Close - $this->privCloseFd(); + return PclZip::errorCode(); + } - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); + // ----- Read the gzip file header + $v_binary_data = @fread($v_file_compressed, 10); + $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAdd() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privAdd($p_filedescr_list, &$p_result_list, &$p_options) - { - $v_result=1; - $v_list_detail = array(); - - // ----- Look if the archive exists or is empty - if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0)) - { + // ----- Check some parameters + $v_data_header['os'] = bin2hex($v_data_header['os']); - // ----- Do a create - $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options); + // ----- Read the gzip file footer + @fseek($v_file_compressed, filesize($v_gzip_temp_name) - 8); + $v_binary_data = @fread($v_file_compressed, 8); + $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data); - // ----- Return - return $v_result; - } - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); + // ----- Set the attributes + $p_header['compression'] = ord($v_data_header['cm']); + //$p_header['mtime'] = $v_data_header['mtime']; + $p_header['crc'] = $v_data_footer['crc']; + $p_header['compressed_size'] = filesize($v_gzip_temp_name) - 18; - // ----- Open the zip file - if (($v_result=$this->privOpenFd('rb')) != 1) - { - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); + // ----- Close the file + @fclose($v_file_compressed); - // ----- Return - return $v_result; - } + // ----- Call the header generation + if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { + return $v_result; + } - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result; - } + // ----- Add the compressed data + if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \'' . $v_gzip_temp_name . '\' in binary read mode'); - // ----- Go to beginning of File - @rewind($this->zip_fd); + return PclZip::errorCode(); + } - // ----- Creates a temporay file - $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + fseek($v_file_compressed, 10); + $v_size = $p_header['compressed_size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($v_file_compressed, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } - // ----- Open the temporary file in write mode - if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) - { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); + // ----- Close the file + @fclose($v_file_compressed); - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + // ----- Unlink the temporary file + @unlink($v_gzip_temp_name); - // ----- Return - return PclZip::errorCode(); + // ----- Return + return $v_result; } - - // ----- Copy the files from the archive to the temporary file - // TBC : Here I should better append the file and go back to erase the central dir - $v_size = $v_central_dir['offset']; - while ($v_size != 0) + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCalculateStoredFilename() + // Description : + // Based on file descriptor properties and global options, this method + // calculate the filename that will be stored in the archive. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privCalculateStoredFilename(&$p_filedescr, &$p_options) { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = fread($this->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } + $v_result = 1; - // ----- Swap the file descriptor - // Here is a trick : I swap the temporary fd with the zip fd, in order to use - // the following methods on the temporary fil and not the real archive - $v_swap = $this->zip_fd; - $this->zip_fd = $v_zip_temp_fd; - $v_zip_temp_fd = $v_swap; + // ----- Working variables + $p_filename = $p_filedescr['filename']; + if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { + $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; + } else { + $p_add_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { + $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; + } else { + $p_remove_dir = ''; + } + if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { + $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; + } else { + $p_remove_all_dir = 0; + } - // ----- Add the files - $v_header_list = array(); - if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) - { - fclose($v_zip_temp_fd); - $this->privCloseFd(); - @unlink($v_zip_temp_name); - $this->privSwapBackMagicQuotes(); + // ----- Look for full name change + if (isset($p_filedescr['new_full_name'])) { + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']); + + // ----- Look for path and/or short name change + } else { + + // ----- Look for short name change + // Its when we cahnge just the filename but not the path + if (isset($p_filedescr['new_short_name'])) { + $v_path_info = pathinfo($p_filename); + $v_dir = ''; + if ($v_path_info['dirname'] != '') { + $v_dir = $v_path_info['dirname'] . '/'; + } + $v_stored_filename = $v_dir . $p_filedescr['new_short_name']; + } else { + // ----- Calculate the stored filename + $v_stored_filename = $p_filename; + } - // ----- Return - return $v_result; - } + // ----- Look for all path to remove + if ($p_remove_all_dir) { + $v_stored_filename = basename($p_filename); + + // ----- Look for partial path remove + } elseif ($p_remove_dir != "") { + if (substr($p_remove_dir, -1) != '/') { + $p_remove_dir .= "/"; + } + + if ((substr($p_filename, 0, 2) == "./") || (substr($p_remove_dir, 0, 2) == "./")) { + + if ((substr($p_filename, 0, 2) == "./") && (substr($p_remove_dir, 0, 2) != "./")) { + $p_remove_dir = "./" . $p_remove_dir; + } + if ((substr($p_filename, 0, 2) != "./") && (substr($p_remove_dir, 0, 2) == "./")) { + $p_remove_dir = substr($p_remove_dir, 2); + } + } + + $v_compare = PclZipUtilPathInclusion($p_remove_dir, $v_stored_filename); + if ($v_compare > 0) { + if ($v_compare == 2) { + $v_stored_filename = ""; + } else { + $v_stored_filename = substr($v_stored_filename, strlen($p_remove_dir)); + } + } + } - // ----- Store the offset of the central dir - $v_offset = @ftell($this->zip_fd); + // ----- Remove drive letter if any + $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename); - // ----- Copy the block of file headers from the old archive - $v_size = $v_central_dir['size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($v_zip_temp_fd, $v_read_size); - @fwrite($this->zip_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; + // ----- Look for path to add + if ($p_add_dir != "") { + if (substr($p_add_dir, -1) == "/") { + $v_stored_filename = $p_add_dir . $v_stored_filename; + } else { + $v_stored_filename = $p_add_dir . "/" . $v_stored_filename; + } + } + } + + // ----- Filename (reduce the path of stored name) + $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); + $p_filedescr['stored_filename'] = $v_stored_filename; + + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Create the Central Dir files header - for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++) + // -------------------------------------------------------------------------------- + // Function : privWriteFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privWriteFileHeader(&$p_header) { - // ----- Create the file header - if ($v_header_list[$i]['status'] == 'ok') { - if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) { - fclose($v_zip_temp_fd); - $this->privCloseFd(); - @unlink($v_zip_temp_name); - $this->privSwapBackMagicQuotes(); - - // ----- Return - return $v_result; - } - $v_count++; - } - - // ----- Transform the header to a 'usable' info - $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); - } + $v_result = 1; - // ----- Zip file comment - $v_comment = $v_central_dir['comment']; - if (isset($p_options[PCLZIP_OPT_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_COMMENT]; - } - if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) { - $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT]; - } - if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment; - } + // ----- Store the offset position of the file + $p_header['offset'] = ftell($this->zip_fd); - // ----- Calculate the size of the central header - $v_size = @ftell($this->zip_fd)-$v_offset; + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours'] << 11) + ($v_date['minutes'] << 5) + $v_date['seconds'] / 2; + $v_mdate = (($v_date['year'] - 1980) << 9) + ($v_date['mon'] << 5) + $v_date['mday']; - // ----- Create the central dir footer - if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1) - { - // ----- Reset the file list - unset($v_header_list); - $this->privSwapBackMagicQuotes(); + // ----- Packed data + $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50, $p_header['version_extracted'], $p_header['flag'], $p_header['compression'], $v_mtime, $v_mdate, $p_header['crc'], $p_header['compressed_size'], $p_header['size'], strlen($p_header['stored_filename']), $p_header['extra_len']); - // ----- Return - return $v_result; - } + // ----- Write the first 148 bytes of the header in the archive + fputs($this->zip_fd, $v_binary_data, 30); - // ----- Swap back the file descriptor - $v_swap = $this->zip_fd; - $this->zip_fd = $v_zip_temp_fd; - $v_zip_temp_fd = $v_swap; + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } - // ----- Close - $this->privCloseFd(); + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Close the temporary file - @fclose($v_zip_temp_fd); + // -------------------------------------------------------------------------------- + // Function : privWriteCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privWriteCentralFileHeader(&$p_header) + { + $v_result = 1; - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); + // TBC + //for (reset($p_header); $key = key($p_header); next($p_header)) { + //} - // ----- Delete the zip file - // TBC : I should test the result ... - @unlink($this->zipname); + // ----- Transform UNIX mtime to DOS format mdate/mtime + $v_date = getdate($p_header['mtime']); + $v_mtime = ($v_date['hours'] << 11) + ($v_date['minutes'] << 5) + $v_date['seconds'] / 2; + $v_mdate = (($v_date['year'] - 1980) << 9) + ($v_date['mon'] << 5) + $v_date['mday']; - // ----- Rename the temporary file - // TBC : I should test the result ... - //@rename($v_zip_temp_name, $this->zipname); - PclZipUtilRename($v_zip_temp_name, $this->zipname); + // ----- Packed data + $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50, $p_header['version'], $p_header['version_extracted'], $p_header['flag'], $p_header['compression'], $v_mtime, $v_mdate, $p_header['crc'], $p_header['compressed_size'], $p_header['size'], strlen($p_header['stored_filename']), $p_header['extra_len'], $p_header['comment_len'], $p_header['disk'], $p_header['internal'], $p_header['external'], $p_header['offset']); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privOpenFd() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function privOpenFd($p_mode) - { - $v_result=1; - - // ----- Look if already open - if ($this->zip_fd != 0) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open'); + // ----- Write the 42 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 46); + + // ----- Write the variable fields + if (strlen($p_header['stored_filename']) != 0) { + fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); + } + if ($p_header['extra_len'] != 0) { + fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + } + if ($p_header['comment_len'] != 0) { + fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); + } - // ----- Return - return PclZip::errorCode(); + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Open the zip file - if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0) + // -------------------------------------------------------------------------------- + // Function : privWriteCentralHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode'); + $v_result = 1; - // ----- Return - return PclZip::errorCode(); - } + // ----- Packed data + $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries, $p_nb_entries, $p_size, $p_offset, strlen($p_comment)); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privCloseFd() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function privCloseFd() - { - $v_result=1; - - if ($this->zip_fd != 0) - @fclose($this->zip_fd); - $this->zip_fd = 0; + // ----- Write the 22 bytes of the header in the zip file + fputs($this->zip_fd, $v_binary_data, 22); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAddList() - // Description : - // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is - // different from the real path of the file. This is usefull if you want to have PclTar - // running in any directory, and memorize relative path from an other directory. - // Parameters : - // $p_list : An array containing the file or directory names to add in the tar - // $p_result_list : list of added files with their properties (specially the status field) - // $p_add_dir : Path to add in the filename path archived - // $p_remove_dir : Path to remove in the filename path archived - // Return Values : - // -------------------------------------------------------------------------------- -// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options) - function privAddList($p_filedescr_list, &$p_result_list, &$p_options) - { - $v_result=1; - - // ----- Add the files - $v_header_list = array(); - if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1) - { - // ----- Return - return $v_result; - } + // ----- Write the variable fields + if (strlen($p_comment) != 0) { + fputs($this->zip_fd, $p_comment, strlen($p_comment)); + } - // ----- Store the offset of the central dir - $v_offset = @ftell($this->zip_fd); + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Create the Central Dir files header - for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++) + // -------------------------------------------------------------------------------- + // Function : privList() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privList(&$p_list) { - // ----- Create the file header - if ($v_header_list[$i]['status'] == 'ok') { - if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) { - // ----- Return - return $v_result; - } - $v_count++; - } + $v_result = 1; - // ----- Transform the header to a 'usable' info - $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); - } + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); - // ----- Zip file comment - $v_comment = ''; - if (isset($p_options[PCLZIP_OPT_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_COMMENT]; - } + // ----- Open the zip file + if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) { + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); - // ----- Calculate the size of the central header - $v_size = @ftell($this->zip_fd)-$v_offset; + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \'' . $this->zipname . '\' in binary read mode'); - // ----- Create the central dir footer - if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1) - { - // ----- Reset the file list - unset($v_header_list); + // ----- Return + return PclZip::errorCode(); + } - // ----- Return - return $v_result; - } + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privSwapBackMagicQuotes(); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAddFileList() - // Description : - // Parameters : - // $p_filedescr_list : An array containing the file description - // or directory names to add in the zip - // $p_result_list : list of added files with their properties (specially the status field) - // Return Values : - // -------------------------------------------------------------------------------- - function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options) - { - $v_result=1; - $v_header = array(); - - // ----- Recuperate the current number of elt in list - $v_nb = sizeof($p_result_list); - - // ----- Loop on the files - for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) { - // ----- Format the filename - $p_filedescr_list[$j]['filename'] - = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false); - - - // ----- Skip empty file names - // TBC : Can this be possible ? not checked in DescrParseAtt ? - if ($p_filedescr_list[$j]['filename'] == "") { - continue; - } - - // ----- Check the filename - if ( ($p_filedescr_list[$j]['type'] != 'virtual_file') - && (!file_exists($p_filedescr_list[$j]['filename']))) { - PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exist"); - return PclZip::errorCode(); - } - - // ----- Look if it is a file or a dir with no all path remove option - // or a dir with all its path removed -// if ( (is_file($p_filedescr_list[$j]['filename'])) -// || ( is_dir($p_filedescr_list[$j]['filename']) - if ( ($p_filedescr_list[$j]['type'] == 'file') - || ($p_filedescr_list[$j]['type'] == 'virtual_file') - || ( ($p_filedescr_list[$j]['type'] == 'folder') - && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]) - || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) - ) { - - // ----- Add the file - $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header, - $p_options); - if ($v_result != 1) { - return $v_result; + return $v_result; } - // ----- Store the file infos - $p_result_list[$v_nb++] = $v_header; - } - } + // ----- Go to beginning of Central Dir + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_central_dir['offset'])) { + $this->privSwapBackMagicQuotes(); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAddFile() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privAddFile($p_filedescr, &$p_header, &$p_options) - { - $v_result=1; - - // ----- Working variable - $p_filename = $p_filedescr['filename']; - - // TBC : Already done in the fileAtt check ... ? - if ($p_filename == "") { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)"); - - // ----- Return - return PclZip::errorCode(); - } + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - // ----- Look for a stored different filename - /* TBC : Removed - if (isset($p_filedescr['stored_filename'])) { - $v_stored_filename = $p_filedescr['stored_filename']; - } - else { - $v_stored_filename = $p_filedescr['stored_filename']; - } - */ - - // ----- Set the file properties - clearstatcache(); - $p_header['version'] = 20; - $p_header['version_extracted'] = 10; - $p_header['flag'] = 0; - $p_header['compression'] = 0; - $p_header['crc'] = 0; - $p_header['compressed_size'] = 0; - $p_header['filename_len'] = strlen($p_filename); - $p_header['extra_len'] = 0; - $p_header['disk'] = 0; - $p_header['internal'] = 0; - $p_header['offset'] = 0; - $p_header['filename'] = $p_filename; -// TBC : Removed $p_header['stored_filename'] = $v_stored_filename; - $p_header['stored_filename'] = $p_filedescr['stored_filename']; - $p_header['extra'] = ''; - $p_header['status'] = 'ok'; - $p_header['index'] = -1; - - // ----- Look for regular file - if ($p_filedescr['type']=='file') { - $p_header['external'] = 0x00000000; - $p_header['size'] = filesize($p_filename); - } + // ----- Return + return PclZip::errorCode(); + } - // ----- Look for regular folder - else if ($p_filedescr['type']=='folder') { - $p_header['external'] = 0x00000010; - $p_header['mtime'] = filemtime($p_filename); - $p_header['size'] = filesize($p_filename); - } + // ----- Read each entry + for ($i = 0; $i < $v_central_dir['entries']; $i++) { + // ----- Read the file header + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) { + $this->privSwapBackMagicQuotes(); - // ----- Look for virtual file - else if ($p_filedescr['type'] == 'virtual_file') { - $p_header['external'] = 0x00000000; - $p_header['size'] = strlen($p_filedescr['content']); - } + return $v_result; + } + $v_header['index'] = $i; + // ----- Get the only interesting attributes + $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); + unset($v_header); + } - // ----- Look for filetime - if (isset($p_filedescr['mtime'])) { - $p_header['mtime'] = $p_filedescr['mtime']; - } - else if ($p_filedescr['type'] == 'virtual_file') { - $p_header['mtime'] = time(); - } - else { - $p_header['mtime'] = filemtime($p_filename); - } + // ----- Close the zip file + $this->privCloseFd(); - // ------ Look for file comment - if (isset($p_filedescr['comment'])) { - $p_header['comment_len'] = strlen($p_filedescr['comment']); - $p_header['comment'] = $p_filedescr['comment']; - } - else { - $p_header['comment_len'] = 0; - $p_header['comment'] = ''; - } + // ----- Magic quotes trick + $this->privSwapBackMagicQuotes(); - // ----- Look for pre-add callback - if (isset($p_options[PCLZIP_CB_PRE_ADD])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_header, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header); - if ($v_result == 0) { - // ----- Change the file status - $p_header['status'] = "skipped"; + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privConvertHeader2FileInfo() + // Description : + // This function takes the file informations from the central directory + // entries and extract the interesting parameters that will be given back. + // The resulting file infos are set in the array $p_info + // $p_info['filename'] : Filename with full path. Given by user (add), + // extracted in the filesystem (extract). + // $p_info['stored_filename'] : Stored filename in the archive. + // $p_info['size'] = Size of the file. + // $p_info['compressed_size'] = Compressed size of the file. + // $p_info['mtime'] = Last modification date of the file. + // $p_info['comment'] = Comment associated with the file. + // $p_info['folder'] = true/false : indicates if the entry is a folder or not. + // $p_info['status'] = status of the action on the file. + // $p_info['crc'] = CRC of the file content. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privConvertHeader2FileInfo($p_header, &$p_info) + { $v_result = 1; - } - // ----- Update the informations - // Only some fields can be modified - if ($p_header['stored_filename'] != $v_local_header['stored_filename']) { - $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']); - } - } + // ----- Get the interesting attributes + $v_temp_path = PclZipUtilPathReduction($p_header['filename']); + $p_info['filename'] = $v_temp_path; + $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']); + $p_info['stored_filename'] = $v_temp_path; + $p_info['size'] = $p_header['size']; + $p_info['compressed_size'] = $p_header['compressed_size']; + $p_info['mtime'] = $p_header['mtime']; + $p_info['comment'] = $p_header['comment']; + $p_info['folder'] = (($p_header['external'] & 0x00000010) == 0x00000010); + $p_info['index'] = $p_header['index']; + $p_info['status'] = $p_header['status']; + $p_info['crc'] = $p_header['crc']; - // ----- Look for empty stored filename - if ($p_header['stored_filename'] == "") { - $p_header['status'] = "filtered"; + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractByRule() + // Description : + // Extract a file or directory depending of rules (by index, by name, ...) + // Parameters : + // $p_file_list : An array where will be placed the properties of each + // extracted file + // $p_path : Path to add while writing the extracted files + // $p_remove_path : Path to remove (from the file memorized path) while writing the + // extracted files. If the path does not match the file path, + // the file is extracted with its memorized path. + // $p_remove_path does not apply to 'list' mode. + // $p_path and $p_remove_path are commulative. + // Return Values : + // 1 on success,0 or less on error (see error code list) + // -------------------------------------------------------------------------------- + public function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) + { + $v_result = 1; - // ----- Check the path length - if (strlen($p_header['stored_filename']) > 0xFF) { - $p_header['status'] = 'filename_too_long'; - } + // ----- Magic quotes trick + $this->privDisableMagicQuotes(); - // ----- Look if no error, or file not skipped - if ($p_header['status'] == 'ok') { - - // ----- Look for a file - if ($p_filedescr['type'] == 'file') { - // ----- Look for using temporary file to zip - if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) - && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) - || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) - && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) { - $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options); - if ($v_result < PCLZIP_ERR_NO_ERROR) { - return $v_result; - } + // ----- Check the path + if (($p_path == "") || ((substr($p_path, 0, 1) != "/") && (substr($p_path, 0, 3) != "../") && (substr($p_path, 1, 2) != ":/"))) { + $p_path = "./" . $p_path; } - // ----- Use "in memory" zip algo - else { - - // ----- Open the source file - if (($v_file = @fopen($p_filename, "rb")) == 0) { - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); - return PclZip::errorCode(); + // ----- Reduce the path last (and duplicated) '/' + if (($p_path != "./") && ($p_path != "/")) { + // ----- Look for the path end '/' + while (substr($p_path, -1) == "/") { + $p_path = substr($p_path, 0, strlen($p_path) - 1); + } } - // ----- Read the file content - $v_content = @fread($v_file, $p_header['size']); - - // ----- Close the file - @fclose($v_file); - - // ----- Calculate the CRC - $p_header['crc'] = @crc32($v_content); - - // ----- Look for no compression - if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { - // ----- Set header parameters - $p_header['compressed_size'] = $p_header['size']; - $p_header['compression'] = 0; + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) { + $p_remove_path .= '/'; } + $p_remove_path_size = strlen($p_remove_path); - // ----- Look for normal compression - else { - // ----- Compress the content - $v_content = @gzdeflate($v_content); - - // ----- Set header parameters - $p_header['compressed_size'] = strlen($v_content); - $p_header['compression'] = 8; - } + // ----- Open the zip file + if (($v_result = $this->privOpenFd('rb')) != 1) { + $this->privSwapBackMagicQuotes(); - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { - @fclose($v_file); - return $v_result; + return $v_result; } - // ----- Write the compressed (or not) content - @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + return $v_result; } - } + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; - // ----- Look for a virtual file (a file from string) - else if ($p_filedescr['type'] == 'virtual_file') { + // ----- Read each entry + $j_start = 0; + for ($i = 0, $v_nb_extracted = 0; $i < $v_central_dir['entries']; $i++) { - $v_content = $p_filedescr['content']; + // ----- Read next Central dir entry + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); - // ----- Calculate the CRC - $p_header['crc'] = @crc32($v_content); + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - // ----- Look for no compression - if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) { - // ----- Set header parameters - $p_header['compressed_size'] = $p_header['size']; - $p_header['compression'] = 0; - } + // ----- Return + return PclZip::errorCode(); + } - // ----- Look for normal compression - else { - // ----- Compress the content - $v_content = @gzdeflate($v_content); + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); - // ----- Set header parameters - $p_header['compressed_size'] = strlen($v_content); - $p_header['compression'] = 8; - } + return $v_result; + } - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { - @fclose($v_file); - return $v_result; - } + // ----- Store the index + $v_header['index'] = $i; - // ----- Write the compressed (or not) content - @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']); - } + // ----- Store the file position + $v_pos_entry = ftell($this->zip_fd); - // ----- Look for a directory - else if ($p_filedescr['type'] == 'folder') { - // ----- Look for directory last '/' - if (@substr($p_header['stored_filename'], -1) != '/') { - $p_header['stored_filename'] .= '/'; - } + // ----- Look for the specific extract rules + $v_extract = false; - // ----- Set the file properties - $p_header['size'] = 0; - //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked - $p_header['external'] = 0x00000010; // Value for a folder : to be checked + // ----- Look for extract by name rule + if ((isset($p_options[PCLZIP_OPT_BY_NAME])) && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) - { - return $v_result; - } - } - } + // ----- Look if the filename is in the list + for ($j = 0; ($j < sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) { - // ----- Look for post-add callback - if (isset($p_options[PCLZIP_CB_POST_ADD])) { + // ----- Look for a directory + if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") { - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_header, $v_local_header); + // ----- Look if the directory is in the filename path + if ((strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_extract = true; + } - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header); - if ($v_result == 0) { - // ----- Ignored - $v_result = 1; - } + // ----- Look for a filename + } elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_extract = true; + } + } + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + elseif ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { - // ----- Update the informations - // Nothing can be modified - } + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { + $v_extract = true; + } + } + */ - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privAddFileUsingTempFile() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options) - { - $v_result=PCLZIP_ERR_NO_ERROR; - - // ----- Working variable - $p_filename = $p_filedescr['filename']; - - - // ----- Open the source file - if (($v_file = @fopen($p_filename, "rb")) == 0) { - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode"); - return PclZip::errorCode(); - } + // ----- Look for extract by preg rule + } elseif ((isset($p_options[PCLZIP_OPT_BY_PREG])) && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { - // ----- Creates a compressed temporary file - $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; - if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) { - fclose($v_file); - PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); - return PclZip::errorCode(); - } + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { + $v_extract = true; + } - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - $v_size = filesize($p_filename); - while ($v_size != 0) { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($v_file, $v_read_size); - //$v_binary_data = pack('a'.$v_read_size, $v_buffer); - @gzputs($v_file_compressed, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } + // ----- Look for extract by index rule + } elseif ((isset($p_options[PCLZIP_OPT_BY_INDEX])) && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { - // ----- Close the file - @fclose($v_file); - @gzclose($v_file_compressed); + // ----- Look if the index is in the list + for ($j = $j_start; ($j < sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) { - // ----- Check the minimum file size - if (filesize($v_gzip_temp_name) < 18) { - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes'); - return PclZip::errorCode(); - } + if (($i >= $p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i <= $p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_extract = true; + } + if ($i >= $p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j + 1; + } - // ----- Extract the compressed attributes - if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) { - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); - return PclZip::errorCode(); - } + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start'] > $i) { + break; + } + } - // ----- Read the gzip file header - $v_binary_data = @fread($v_file_compressed, 10); - $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data); + // ----- Look for no rule, which means extract all the archive + } else { + $v_extract = true; + } - // ----- Check some parameters - $v_data_header['os'] = bin2hex($v_data_header['os']); + // ----- Check compression method + if (($v_extract) && (($v_header['compression'] != 8) && ($v_header['compression'] != 0))) { + $v_header['status'] = 'unsupported_compression'; - // ----- Read the gzip file footer - @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8); - $v_binary_data = @fread($v_file_compressed, 8); - $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data); + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ((isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true)) { - // ----- Set the attributes - $p_header['compression'] = ord($v_data_header['cm']); - //$p_header['mtime'] = $v_data_header['mtime']; - $p_header['crc'] = $v_data_footer['crc']; - $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18; + $this->privSwapBackMagicQuotes(); - // ----- Close the file - @fclose($v_file_compressed); + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, "Filename '" . $v_header['stored_filename'] . "' is " . "compressed by an unsupported compression " . "method (" . $v_header['compression'] . ") "); - // ----- Call the header generation - if (($v_result = $this->privWriteFileHeader($p_header)) != 1) { - return $v_result; - } + return PclZip::errorCode(); + } + } - // ----- Add the compressed data - if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) - { - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); - return PclZip::errorCode(); - } + // ----- Check encrypted files + if (($v_extract) && (($v_header['flag'] & 1) == 1)) { + $v_header['status'] = 'unsupported_encryption'; - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - fseek($v_file_compressed, 10); - $v_size = $p_header['compressed_size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($v_file_compressed, $v_read_size); - //$v_binary_data = pack('a'.$v_read_size, $v_buffer); - @fwrite($this->zip_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + if ((isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true)) { - // ----- Close the file - @fclose($v_file_compressed); + $this->privSwapBackMagicQuotes(); - // ----- Unlink the temporary file - @unlink($v_gzip_temp_name); + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, "Unsupported encryption for " . " filename '" . $v_header['stored_filename'] . "'"); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privCalculateStoredFilename() - // Description : - // Based on file descriptor properties and global options, this method - // calculate the filename that will be stored in the archive. - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privCalculateStoredFilename(&$p_filedescr, &$p_options) - { - $v_result=1; - - // ----- Working variables - $p_filename = $p_filedescr['filename']; - if (isset($p_options[PCLZIP_OPT_ADD_PATH])) { - $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH]; - } - else { - $p_add_dir = ''; - } - if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) { - $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH]; - } - else { - $p_remove_dir = ''; - } - if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) { - $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH]; - } - else { - $p_remove_all_dir = 0; - } + return PclZip::errorCode(); + } + } + // ----- Look for real extraction + if (($v_extract) && ($v_header['status'] != 'ok')) { + $v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++]); + if ($v_result != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); - // ----- Look for full name change - if (isset($p_filedescr['new_full_name'])) { - // ----- Remove drive letter if any - $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']); - } + return $v_result; + } - // ----- Look for path and/or short name change - else { - - // ----- Look for short name change - // Its when we cahnge just the filename but not the path - if (isset($p_filedescr['new_short_name'])) { - $v_path_info = pathinfo($p_filename); - $v_dir = ''; - if ($v_path_info['dirname'] != '') { - $v_dir = $v_path_info['dirname'].'/'; - } - $v_stored_filename = $v_dir.$p_filedescr['new_short_name']; - } - else { - // ----- Calculate the stored filename - $v_stored_filename = $p_filename; - } - - // ----- Look for all path to remove - if ($p_remove_all_dir) { - $v_stored_filename = basename($p_filename); - } - // ----- Look for partial path remove - else if ($p_remove_dir != "") { - if (substr($p_remove_dir, -1) != '/') - $p_remove_dir .= "/"; - - if ( (substr($p_filename, 0, 2) == "./") - || (substr($p_remove_dir, 0, 2) == "./")) { - - if ( (substr($p_filename, 0, 2) == "./") - && (substr($p_remove_dir, 0, 2) != "./")) { - $p_remove_dir = "./".$p_remove_dir; - } - if ( (substr($p_filename, 0, 2) != "./") - && (substr($p_remove_dir, 0, 2) == "./")) { - $p_remove_dir = substr($p_remove_dir, 2); - } - } - - $v_compare = PclZipUtilPathInclusion($p_remove_dir, - $v_stored_filename); - if ($v_compare > 0) { - if ($v_compare == 2) { - $v_stored_filename = ""; - } - else { - $v_stored_filename = substr($v_stored_filename, - strlen($p_remove_dir)); - } - } - } - - // ----- Remove drive letter if any - $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename); - - // ----- Look for path to add - if ($p_add_dir != "") { - if (substr($p_add_dir, -1) == "/") - $v_stored_filename = $p_add_dir.$v_stored_filename; - else - $v_stored_filename = $p_add_dir."/".$v_stored_filename; - } - } + $v_extract = false; + } - // ----- Filename (reduce the path of stored name) - $v_stored_filename = PclZipUtilPathReduction($v_stored_filename); - $p_filedescr['stored_filename'] = $v_stored_filename; + // ----- Look for real extraction + if ($v_extract) { + + // ----- Go to the file position + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_header['offset'])) { + // ----- Close the zip file + $this->privCloseFd(); + + $this->privSwapBackMagicQuotes(); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Look for extraction as string + if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { + + $v_string = ''; + + // ----- Extracting the file + $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Set the file content + $p_file_list[$v_nb_extracted]['content'] = $v_string; + + // ----- Next extracted file + $v_nb_extracted++; + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + + // ----- Look for extraction in standard output + } elseif ((isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { + // ----- Extracting the file in standard output + $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + + // ----- Look for normal extraction + } else { + // ----- Extracting the file + $v_result1 = $this->privExtractFile($v_header, $p_path, $p_remove_path, $p_remove_all_path, $p_options); + if ($v_result1 < 1) { + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result1; + } + + // ----- Get the only interesting attributes + if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); + + return $v_result; + } + + // ----- Look for user callback abort + if ($v_result1 == 2) { + break; + } + } + } + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privWriteFileHeader(&$p_header) - { - $v_result=1; - - // ----- Store the offset position of the file - $p_header['offset'] = ftell($this->zip_fd); - - // ----- Transform UNIX mtime to DOS format mdate/mtime - $v_date = getdate($p_header['mtime']); - $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; - $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; - - // ----- Packed data - $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50, - $p_header['version_extracted'], $p_header['flag'], - $p_header['compression'], $v_mtime, $v_mdate, - $p_header['crc'], $p_header['compressed_size'], - $p_header['size'], - strlen($p_header['stored_filename']), - $p_header['extra_len']); - - // ----- Write the first 148 bytes of the header in the archive - fputs($this->zip_fd, $v_binary_data, 30); - - // ----- Write the variable fields - if (strlen($p_header['stored_filename']) != 0) - { - fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); - } - if ($p_header['extra_len'] != 0) - { - fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); - } + // ----- Close the zip file + $this->privCloseFd(); + $this->privSwapBackMagicQuotes(); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteCentralFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privWriteCentralFileHeader(&$p_header) - { - $v_result=1; - - // TBC - //for(reset($p_header); $key = key($p_header); next($p_header)) { - //} - - // ----- Transform UNIX mtime to DOS format mdate/mtime - $v_date = getdate($p_header['mtime']); - $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2; - $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday']; - - - // ----- Packed data - $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50, - $p_header['version'], $p_header['version_extracted'], - $p_header['flag'], $p_header['compression'], - $v_mtime, $v_mdate, $p_header['crc'], - $p_header['compressed_size'], $p_header['size'], - strlen($p_header['stored_filename']), - $p_header['extra_len'], $p_header['comment_len'], - $p_header['disk'], $p_header['internal'], - $p_header['external'], $p_header['offset']); - - // ----- Write the 42 bytes of the header in the zip file - fputs($this->zip_fd, $v_binary_data, 46); - - // ----- Write the variable fields - if (strlen($p_header['stored_filename']) != 0) - { - fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename'])); - } - if ($p_header['extra_len'] != 0) - { - fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']); + // ----- Return + return $v_result; } - if ($p_header['comment_len'] != 0) + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privExtractFile() + // Description : + // Parameters : + // Return Values : + // + // 1 : ... ? + // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback + // -------------------------------------------------------------------------------- + public function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) { - fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']); - } + $v_result = 1; - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privWriteCentralHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment) - { - $v_result=1; - - // ----- Packed data - $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries, - $p_nb_entries, $p_size, - $p_offset, strlen($p_comment)); - - // ----- Write the 22 bytes of the header in the zip file - fputs($this->zip_fd, $v_binary_data, 22); - - // ----- Write the variable fields - if (strlen($p_comment) != 0) - { - fputs($this->zip_fd, $p_comment, strlen($p_comment)); - } + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + // ----- Return + return $v_result; + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privList() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privList(&$p_list) - { - $v_result=1; - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Open the zip file - if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0) - { - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC + } - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode'); + // ----- Look for all path to remove + if ($p_remove_all_path == true) { + // ----- Look for folder entry that not need to be extracted + if (($p_entry['external'] & 0x00000010) == 0x00000010) { - // ----- Return - return PclZip::errorCode(); - } + $p_entry['status'] = "filtered"; - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privSwapBackMagicQuotes(); - return $v_result; - } + return $v_result; + } - // ----- Go to beginning of Central Dir - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_central_dir['offset'])) - { - $this->privSwapBackMagicQuotes(); + // ----- Get the basename of the path + $p_entry['filename'] = basename($p_entry['filename']); - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + // ----- Look for path to remove + } elseif ($p_remove_path != "") { + if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) { - // ----- Return - return PclZip::errorCode(); - } + // ----- Change the file status + $p_entry['status'] = "filtered"; - // ----- Read each entry - for ($i=0; $i<$v_central_dir['entries']; $i++) - { - // ----- Read the file header - if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) - { - $this->privSwapBackMagicQuotes(); - return $v_result; - } - $v_header['index'] = $i; + // ----- Return + return $v_result; + } - // ----- Get the only interesting attributes - $this->privConvertHeader2FileInfo($v_header, $p_list[$i]); - unset($v_header); - } + $p_remove_path_size = strlen($p_remove_path); + if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) { - // ----- Close the zip file - $this->privCloseFd(); + // ----- Remove the path + $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); - // ----- Magic quotes trick - $this->privSwapBackMagicQuotes(); + } + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privConvertHeader2FileInfo() - // Description : - // This function takes the file informations from the central directory - // entries and extract the interesting parameters that will be given back. - // The resulting file infos are set in the array $p_info - // $p_info['filename'] : Filename with full path. Given by user (add), - // extracted in the filesystem (extract). - // $p_info['stored_filename'] : Stored filename in the archive. - // $p_info['size'] = Size of the file. - // $p_info['compressed_size'] = Compressed size of the file. - // $p_info['mtime'] = Last modification date of the file. - // $p_info['comment'] = Comment associated with the file. - // $p_info['folder'] = true/false : indicates if the entry is a folder or not. - // $p_info['status'] = status of the action on the file. - // $p_info['crc'] = CRC of the file content. - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privConvertHeader2FileInfo($p_header, &$p_info) - { - $v_result=1; - - // ----- Get the interesting attributes - $v_temp_path = PclZipUtilPathReduction($p_header['filename']); - $p_info['filename'] = $v_temp_path; - $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']); - $p_info['stored_filename'] = $v_temp_path; - $p_info['size'] = $p_header['size']; - $p_info['compressed_size'] = $p_header['compressed_size']; - $p_info['mtime'] = $p_header['mtime']; - $p_info['comment'] = $p_header['comment']; - $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010); - $p_info['index'] = $p_header['index']; - $p_info['status'] = $p_header['status']; - $p_info['crc'] = $p_header['crc']; + // ----- Add the path + if ($p_path != '') { + $p_entry['filename'] = $p_path . "/" . $p_entry['filename']; + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractByRule() - // Description : - // Extract a file or directory depending of rules (by index, by name, ...) - // Parameters : - // $p_file_list : An array where will be placed the properties of each - // extracted file - // $p_path : Path to add while writing the extracted files - // $p_remove_path : Path to remove (from the file memorized path) while writing the - // extracted files. If the path does not match the file path, - // the file is extracted with its memorized path. - // $p_remove_path does not apply to 'list' mode. - // $p_path and $p_remove_path are commulative. - // Return Values : - // 1 on success,0 or less on error (see error code list) - // -------------------------------------------------------------------------------- - function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) - { - $v_result=1; - - // ----- Magic quotes trick - $this->privDisableMagicQuotes(); - - // ----- Check the path - if ( ($p_path == "") - || ( (substr($p_path, 0, 1) != "/") - && (substr($p_path, 0, 3) != "../") - && (substr($p_path,1,2)!=":/"))) - $p_path = "./".$p_path; - - // ----- Reduce the path last (and duplicated) '/' - if (($p_path != "./") && ($p_path != "/")) - { - // ----- Look for the path end '/' - while (substr($p_path, -1) == "/") - { - $p_path = substr($p_path, 0, strlen($p_path)-1); - } - } + // ----- Check a base_dir_restriction + if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { + $v_inclusion = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], $p_entry['filename']); + if ($v_inclusion == 0) { - // ----- Look for path to remove format (should end by /) - if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/')) - { - $p_remove_path .= '/'; - } - $p_remove_path_size = strlen($p_remove_path); + PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, "Filename '" . $p_entry['filename'] . "' is " . "outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); - // ----- Open the zip file - if (($v_result = $this->privOpenFd('rb')) != 1) - { - $this->privSwapBackMagicQuotes(); - return $v_result; - } + return PclZip::errorCode(); + } + } - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - return $v_result; - } + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } - // ----- Start at beginning of Central Dir - $v_pos_entry = $v_central_dir['offset']; + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } - // ----- Read each entry - $j_start = 0; - for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) - { + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } - // ----- Read next Central dir entry - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_pos_entry)) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + // ----- Look for specific actions while the file exist + if (file_exists($p_entry['filename'])) { - // ----- Return - return PclZip::errorCode(); - } + // ----- Look if file is a directory + if (is_dir($p_entry['filename'])) { - // ----- Read the file header - $v_header = array(); - if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); + // ----- Change the file status + $p_entry['status'] = "already_a_directory"; - return $v_result; - } - - // ----- Store the index - $v_header['index'] = $i; - - // ----- Store the file position - $v_pos_entry = ftell($this->zip_fd); - - // ----- Look for the specific extract rules - $v_extract = false; - - // ----- Look for extract by name rule - if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) - && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { - - // ----- Look if the filename is in the list - for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) { - - // ----- Look for a directory - if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") { - - // ----- Look if the directory is in the filename path - if ( (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) - && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { - $v_extract = true; - } - } - // ----- Look for a filename - elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { - $v_extract = true; - } - } - } - - // ----- Look for extract by ereg rule - // ereg() is deprecated with PHP 5.3 - /* - else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) - && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { - - if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) { - $v_extract = true; - } - } - */ - - // ----- Look for extract by preg rule - else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) - && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { - - if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) { - $v_extract = true; - } - } - - // ----- Look for extract by index rule - else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) - && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { - - // ----- Look if the index is in the list - for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) { - - if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { - $v_extract = true; - } - if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { - $j_start = $j+1; - } - - if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { - break; - } - } - } - - // ----- Look for no rule, which means extract all the archive - else { - $v_extract = true; - } - - // ----- Check compression method - if ( ($v_extract) - && ( ($v_header['compression'] != 8) - && ($v_header['compression'] != 0))) { - $v_header['status'] = 'unsupported_compression'; - - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { - - $this->privSwapBackMagicQuotes(); - - PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION, - "Filename '".$v_header['stored_filename']."' is " - ."compressed by an unsupported compression " - ."method (".$v_header['compression'].") "); - - return PclZip::errorCode(); - } - } - - // ----- Check encrypted files - if (($v_extract) && (($v_header['flag'] & 1) == 1)) { - $v_header['status'] = 'unsupported_encryption'; - - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { - - $this->privSwapBackMagicQuotes(); - - PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, - "Unsupported encryption for " - ." filename '".$v_header['stored_filename'] - ."'"); - - return PclZip::errorCode(); - } - } + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ((isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true)) { - // ----- Look for real extraction - if (($v_extract) && ($v_header['status'] != 'ok')) { - $v_result = $this->privConvertHeader2FileInfo($v_header, - $p_file_list[$v_nb_extracted++]); - if ($v_result != 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result; - } + PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, "Filename '" . $p_entry['filename'] . "' is " . "already used by an existing directory"); - $v_extract = false; - } + return PclZip::errorCode(); + } - // ----- Look for real extraction - if ($v_extract) - { + // ----- Look if file is write protected + } elseif (!is_writeable($p_entry['filename'])) { - // ----- Go to the file position - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_header['offset'])) - { - // ----- Close the zip file - $this->privCloseFd(); + // ----- Change the file status + $p_entry['status'] = "write_protected"; - $this->privSwapBackMagicQuotes(); + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ((isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, "Filename '" . $p_entry['filename'] . "' exists " . "and is write protected"); - // ----- Return - return PclZip::errorCode(); - } + return PclZip::errorCode(); + } - // ----- Look for extraction as string - if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) { + // ----- Look if the extracted file is older + } elseif (filemtime($p_entry['filename']) > $p_entry['mtime']) { + // ----- Change the file status + if ((isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) && ($p_options[PCLZIP_OPT_REPLACE_NEWER] === true)) { + } else { + $p_entry['status'] = "newer_exist"; - $v_string = ''; + // ----- Look for PCLZIP_OPT_STOP_ON_ERROR + // For historical reason first PclZip implementation does not stop + // when this kind of error occurs. + if ((isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) && ($p_options[PCLZIP_OPT_STOP_ON_ERROR] === true)) { - // ----- Extracting the file - $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options); - if ($v_result1 < 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result1; - } + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, "Newer version of '" . $p_entry['filename'] . "' exists " . "and option PCLZIP_OPT_REPLACE_NEWER is not selected"); - // ----- Get the only interesting attributes - if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); + return PclZip::errorCode(); + } + } + } else { + } - return $v_result; - } + // ----- Check the directory availability and create it if necessary + } else { + if ((($p_entry['external'] & 0x00000010) == 0x00000010) || (substr($p_entry['filename'], -1) == '/')) { + $v_dir_to_check = $p_entry['filename']; + } elseif (!strstr($p_entry['filename'], "/")) { + $v_dir_to_check = ""; + } else { + $v_dir_to_check = dirname($p_entry['filename']); + } - // ----- Set the file content - $p_file_list[$v_nb_extracted]['content'] = $v_string; + if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external'] & 0x00000010) == 0x00000010))) != 1) { - // ----- Next extracted file - $v_nb_extracted++; + // ----- Change the file status + $p_entry['status'] = "path_creation_fail"; - // ----- Look for user callback abort - if ($v_result1 == 2) { - break; - } + // ----- Return + //return $v_result; + $v_result = 1; + } + } } - // ----- Look for extraction in standard output - elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) - && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) { - // ----- Extracting the file in standard output - $v_result1 = $this->privExtractFileInOutput($v_header, $p_options); - if ($v_result1 < 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result1; - } - // ----- Get the only interesting attributes - if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result; - } - - // ----- Look for user callback abort - if ($v_result1 == 2) { - break; - } - } - // ----- Look for normal extraction - else { - // ----- Extracting the file - $v_result1 = $this->privExtractFile($v_header, - $p_path, $p_remove_path, - $p_remove_all_path, - $p_options); - if ($v_result1 < 1) { - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); - return $v_result1; - } + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { - // ----- Get the only interesting attributes - if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external'] & 0x00000010) == 0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compression'] == 0) { - return $v_result; - } + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { - // ----- Look for user callback abort - if ($v_result1 == 2) { - break; - } - } - } - } + // ----- Change the file status + $p_entry['status'] = "write_error"; - // ----- Close the zip file - $this->privCloseFd(); - $this->privSwapBackMagicQuotes(); + // ----- Return + return $v_result; + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFile() - // Description : - // Parameters : - // Return Values : - // - // 1 : ... ? - // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback - // -------------------------------------------------------------------------------- - function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options) - { - $v_result=1; - - // ----- Read the file header - if (($v_result = $this->privReadFileHeader($v_header)) != 1) - { - // ----- Return - return $v_result; - } + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + /* Try to speed up the code + $v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_binary_data, $v_read_size); + */ + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } + // ----- Closing the destination file + fclose($v_dest_file); - // ----- Check that the file header is coherent with $p_entry info - if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { - // TBC - } + // ----- Change the file mtime + touch($p_entry['filename'], $p_entry['mtime']); - // ----- Look for all path to remove - if ($p_remove_all_path == true) { - // ----- Look for folder entry that not need to be extracted - if (($p_entry['external']&0x00000010)==0x00000010) { + } else { + // ----- TBC + // Need to be finished + if (($p_entry['flag'] & 1) == 1) { + PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \'' . $p_entry['filename'] . '\' is encrypted. Encrypted files are not supported.'); - $p_entry['status'] = "filtered"; + return PclZip::errorCode(); + } - return $v_result; - } + // ----- Look for using temporary file to unzip + if ((!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])))) { + $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options); + if ($v_result < PCLZIP_ERR_NO_ERROR) { + return $v_result; + } - // ----- Get the basename of the path - $p_entry['filename'] = basename($p_entry['filename']); - } + // ----- Look for extract in memory + } else { - // ----- Look for path to remove - else if ($p_remove_path != "") - { - if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2) - { + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - // ----- Change the file status - $p_entry['status'] = "filtered"; + // ----- Decompress the file + $v_file_content = @gzinflate($v_buffer); + unset($v_buffer); + if ($v_file_content === false) { - // ----- Return - return $v_result; - } + // ----- Change the file status + // TBC + $p_entry['status'] = "error"; - $p_remove_path_size = strlen($p_remove_path); - if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path) - { + return $v_result; + } - // ----- Remove the path - $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size); + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { - } - } + // ----- Change the file status + $p_entry['status'] = "write_error"; - // ----- Add the path - if ($p_path != '') { - $p_entry['filename'] = $p_path."/".$p_entry['filename']; - } + return $v_result; + } - // ----- Check a base_dir_restriction - if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) { - $v_inclusion - = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION], - $p_entry['filename']); - if ($v_inclusion == 0) { + // ----- Write the uncompressed data + @fwrite($v_dest_file, $v_file_content, $p_entry['size']); + unset($v_file_content); - PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION, - "Filename '".$p_entry['filename']."' is " - ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION"); + // ----- Closing the destination file + @fclose($v_dest_file); - return PclZip::errorCode(); - } - } + } - // ----- Look for pre-extract callback - if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); - if ($v_result == 0) { - // ----- Change the file status - $p_entry['status'] = "skipped"; - $v_result = 1; - } - - // ----- Look for abort result - if ($v_result == 2) { - // ----- This status is internal and will be changed in 'skipped' - $p_entry['status'] = "aborted"; - $v_result = PCLZIP_ERR_USER_ABORTED; - } - - // ----- Update the informations - // Only some fields can be modified - $p_entry['filename'] = $v_local_header['filename']; - } + // ----- Change the file mtime + @touch($p_entry['filename'], $p_entry['mtime']); + } + // ----- Look for chmod option + if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { + // ----- Change the mode of the file + @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); + } - // ----- Look for specific actions while the file exist - if (file_exists($p_entry['filename'])) - { + } + } - // ----- Look if file is a directory - if (is_dir($p_entry['filename'])) - { + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; - // ----- Change the file status - $p_entry['status'] = "already_a_directory"; + // ----- Look for post-extract callback + } elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - // For historical reason first PclZip implementation does not stop - // when this kind of error occurs. - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY, - "Filename '".$p_entry['filename']."' is " - ."already used by an existing directory"); + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); - return PclZip::errorCode(); + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; } - } - // ----- Look if file is write protected - else if (!is_writeable($p_entry['filename'])) - { + } - // ----- Change the file status - $p_entry['status'] = "write_protected"; + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - // For historical reason first PclZip implementation does not stop - // when this kind of error occurs. - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { + // -------------------------------------------------------------------------------- + // Function : privExtractFileUsingTempFile() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privExtractFileUsingTempFile(&$p_entry, &$p_options) + { + $v_result = 1; - PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, - "Filename '".$p_entry['filename']."' exists " - ."and is write protected"); + // ----- Creates a temporary file + $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.gz'; + if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) { + fclose($v_file); + PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \'' . $v_gzip_temp_name . '\' in binary write mode'); return PclZip::errorCode(); - } - } - - // ----- Look if the extracted file is older - else if (filemtime($p_entry['filename']) > $p_entry['mtime']) - { - // ----- Change the file status - if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER])) - && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) { - } - else { - $p_entry['status'] = "newer_exist"; - - // ----- Look for PCLZIP_OPT_STOP_ON_ERROR - // For historical reason first PclZip implementation does not stop - // when this kind of error occurs. - if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR])) - && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) { - - PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, - "Newer version of '".$p_entry['filename']."' exists " - ."and option PCLZIP_OPT_REPLACE_NEWER is not selected"); - - return PclZip::errorCode(); - } - } - } - else { - } - } - - // ----- Check the directory availability and create it if necessary - else { - if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/')) - $v_dir_to_check = $p_entry['filename']; - else if (!strstr($p_entry['filename'], "/")) - $v_dir_to_check = ""; - else - $v_dir_to_check = dirname($p_entry['filename']); - - if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) { + } - // ----- Change the file status - $p_entry['status'] = "path_creation_fail"; + // ----- Write gz file format header + $v_binary_data = pack('va1a1Va1a1', 0x8b1f, chr($p_entry['compression']), chr(0x00), time(), chr(0x00), chr(3)); + @fwrite($v_dest_file, $v_binary_data, 10); - // ----- Return - //return $v_result; - $v_result = 1; + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['compressed_size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); + @fwrite($v_dest_file, $v_buffer, $v_read_size); + $v_size -= $v_read_size; } - } - } - - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { - // ----- Do the extraction (if not a folder) - if (!(($p_entry['external']&0x00000010)==0x00000010)) - { - // ----- Look for not compressed file - if ($p_entry['compression'] == 0) { + // ----- Write gz file format footer + $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); + @fwrite($v_dest_file, $v_binary_data, 8); - // ----- Opening destination file - if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) - { + // ----- Close the temporary file + @fclose($v_dest_file); - // ----- Change the file status + // ----- Opening destination file + if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { $p_entry['status'] = "write_error"; - // ----- Return return $v_result; - } + } + // ----- Open the temporary gz file + if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) { + @fclose($v_dest_file); + $p_entry['status'] = "read_error"; + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \'' . $v_gzip_temp_name . '\' in binary read mode'); + + return PclZip::errorCode(); + } - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - $v_size = $p_entry['compressed_size']; - while ($v_size != 0) - { + // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks + $v_size = $p_entry['size']; + while ($v_size != 0) { $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($this->zip_fd, $v_read_size); - /* Try to speed up the code - $v_binary_data = pack('a'.$v_read_size, $v_buffer); - @fwrite($v_dest_file, $v_binary_data, $v_read_size); - */ + $v_buffer = @gzread($v_src_file, $v_read_size); + //$v_binary_data = pack('a'.$v_read_size, $v_buffer); @fwrite($v_dest_file, $v_buffer, $v_read_size); $v_size -= $v_read_size; - } + } + @fclose($v_dest_file); + @gzclose($v_src_file); - // ----- Closing the destination file - fclose($v_dest_file); + // ----- Delete the temporary file + @unlink($v_gzip_temp_name); + + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Change the file mtime - touch($p_entry['filename'], $p_entry['mtime']); + // -------------------------------------------------------------------------------- + // Function : privExtractFileInOutput() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privExtractFileInOutput(&$p_entry, &$p_options) + { + $v_result = 1; + // ----- Read the file header + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + return $v_result; + } + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC } - else { - // ----- TBC - // Need to be finished - if (($p_entry['flag'] & 1) == 1) { - PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.'); - return PclZip::errorCode(); - } + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - // ----- Look for using temporary file to unzip - if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) - && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON]) - || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]) - && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) { - $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options); - if ($v_result < PCLZIP_ERR_NO_ERROR) { - return $v_result; + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; } - } - // ----- Look for extract in memory - else { + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } - // ----- Read the compressed file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + // ----- Trace - // ----- Decompress the file - $v_file_content = @gzinflate($v_buffer); - unset($v_buffer); - if ($v_file_content === FALSE) { + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { - // ----- Change the file status - // TBC - $p_entry['status'] = "error"; + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external'] & 0x00000010) == 0x00000010)) { + // ----- Look for not compressed file + if ($p_entry['compressed_size'] == $p_entry['size']) { - return $v_result; - } + // ----- Read the file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - // ----- Opening destination file - if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { + // ----- Send the file to the output + echo $v_buffer; + unset($v_buffer); + } else { - // ----- Change the file status - $p_entry['status'] = "write_error"; + // ----- Read the compressed file in a buffer (one shot) + $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); - return $v_result; + // ----- Decompress the file + $v_file_content = gzinflate($v_buffer); + unset($v_buffer); + + // ----- Send the file to the output + echo $v_file_content; + unset($v_file_content); + } } + } - // ----- Write the uncompressed data - @fwrite($v_dest_file, $v_file_content, $p_entry['size']); - unset($v_file_content); + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; - // ----- Closing the destination file - @fclose($v_dest_file); + // ----- Look for post-extract callback + } elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } + + return $v_result; + } + // -------------------------------------------------------------------------------- - } + // -------------------------------------------------------------------------------- + // Function : privExtractFileAsString() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privExtractFileAsString(&$p_entry, &$p_string, &$p_options) + { + $v_result = 1; - // ----- Change the file mtime - @touch($p_entry['filename'], $p_entry['mtime']); + // ----- Read the file header + $v_header = array(); + if (($v_result = $this->privReadFileHeader($v_header)) != 1) { + // ----- Return + return $v_result; } - // ----- Look for chmod option - if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) { - - // ----- Change the mode of the file - @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]); + // ----- Check that the file header is coherent with $p_entry info + if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { + // TBC } - } - } - - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - } + // ----- Look for pre-extract callback + if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - // ----- Look for post-extract callback - elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + // eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); + if ($v_result == 0) { + // ----- Change the file status + $p_entry['status'] = "skipped"; + $v_result = 1; + } - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + // ----- Look for abort result + if ($v_result == 2) { + // ----- This status is internal and will be changed in 'skipped' + $p_entry['status'] = "aborted"; + $v_result = PCLZIP_ERR_USER_ABORTED; + } - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + // ----- Update the informations + // Only some fields can be modified + $p_entry['filename'] = $v_local_header['filename']; + } - // ----- Look for abort result - if ($v_result == 2) { - $v_result = PCLZIP_ERR_USER_ABORTED; - } - } + // ----- Look if extraction should be done + if ($p_entry['status'] == 'ok') { - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFileUsingTempFile() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privExtractFileUsingTempFile(&$p_entry, &$p_options) - { - $v_result=1; - - // ----- Creates a temporary file - $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz'; - if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) { - fclose($v_file); - PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode'); - return PclZip::errorCode(); - } + // ----- Do the extraction (if not a folder) + if (!(($p_entry['external'] & 0x00000010) == 0x00000010)) { + // ----- Look for not compressed file + // if ($p_entry['compressed_size'] == $p_entry['size']) + if ($p_entry['compression'] == 0) { + // ----- Reading the file + $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); + } else { - // ----- Write gz file format header - $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3)); - @fwrite($v_dest_file, $v_binary_data, 10); + // ----- Reading the file + $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - $v_size = $p_entry['compressed_size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($this->zip_fd, $v_read_size); - //$v_binary_data = pack('a'.$v_read_size, $v_buffer); - @fwrite($v_dest_file, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } + // ----- Decompress the file + if (($p_string = @gzinflate($v_data)) === false) { + // TBC + } + } - // ----- Write gz file format footer - $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']); - @fwrite($v_dest_file, $v_binary_data, 8); + // ----- Trace + } else { + // TBC : error : can not extract a folder in a string + } - // ----- Close the temporary file - @fclose($v_dest_file); + } - // ----- Opening destination file - if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) { - $p_entry['status'] = "write_error"; - return $v_result; - } + // ----- Change abort status + if ($p_entry['status'] == "aborted") { + $p_entry['status'] = "skipped"; - // ----- Open the temporary gz file - if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) { - @fclose($v_dest_file); - $p_entry['status'] = "read_error"; - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode'); - return PclZip::errorCode(); - } + // ----- Look for post-extract callback + } elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + // ----- Generate a local information + $v_local_header = array(); + $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks - $v_size = $p_entry['size']; - while ($v_size != 0) { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @gzread($v_src_file, $v_read_size); - //$v_binary_data = pack('a'.$v_read_size, $v_buffer); - @fwrite($v_dest_file, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } - @fclose($v_dest_file); - @gzclose($v_src_file); + // ----- Swap the content to header + $v_local_header['content'] = $p_string; + $p_string = ''; - // ----- Delete the temporary file - @unlink($v_gzip_temp_name); + // ----- Call the callback + // Here I do not use call_user_func() because I need to send a reference to the + // header. + // eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); + $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFileInOutput() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privExtractFileInOutput(&$p_entry, &$p_options) - { - $v_result=1; - - // ----- Read the file header - if (($v_result = $this->privReadFileHeader($v_header)) != 1) { - return $v_result; - } + // ----- Swap back the content to header + $p_string = $v_local_header['content']; + unset($v_local_header['content']); + // ----- Look for abort result + if ($v_result == 2) { + $v_result = PCLZIP_ERR_USER_ABORTED; + } + } - // ----- Check that the file header is coherent with $p_entry info - if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { - // TBC + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Look for pre-extract callback - if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); - if ($v_result == 0) { - // ----- Change the file status - $p_entry['status'] = "skipped"; + // -------------------------------------------------------------------------------- + // Function : privReadFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privReadFileHeader(&$p_header) + { $v_result = 1; - } - - // ----- Look for abort result - if ($v_result == 2) { - // ----- This status is internal and will be changed in 'skipped' - $p_entry['status'] = "aborted"; - $v_result = PCLZIP_ERR_USER_ABORTED; - } - - // ----- Update the informations - // Only some fields can be modified - $p_entry['filename'] = $v_local_header['filename']; - } - // ----- Trace + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { + // ----- Check signature + if ($v_data['id'] != 0x04034b50) { - // ----- Do the extraction (if not a folder) - if (!(($p_entry['external']&0x00000010)==0x00000010)) { - // ----- Look for not compressed file - if ($p_entry['compressed_size'] == $p_entry['size']) { - - // ----- Read the file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); - // ----- Send the file to the output - echo $v_buffer; - unset($v_buffer); + // ----- Return + return PclZip::errorCode(); } - else { - // ----- Read the compressed file in a buffer (one shot) - $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']); + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 26); - // ----- Decompress the file - $v_file_content = gzinflate($v_buffer); - unset($v_buffer); + // ----- Look for invalid block size + if (strlen($v_binary_data) != 26) { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : " . strlen($v_binary_data)); - // ----- Send the file to the output - echo $v_file_content; - unset($v_file_content); + // ----- Return + return PclZip::errorCode(); } - } - } - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - } + // ----- Extract the values + $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); - // ----- Look for post-extract callback - elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + // ----- Get filename + $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + // ----- Get extra_fields + if ($v_data['extra_len'] != 0) { + $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); + } else { + $p_header['extra'] = ''; + } - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + // ----- Extract properties + $p_header['version_extracted'] = $v_data['version']; + $p_header['compression'] = $v_data['compression']; + $p_header['size'] = $v_data['size']; + $p_header['compressed_size'] = $v_data['compressed_size']; + $p_header['crc'] = $v_data['crc']; + $p_header['flag'] = $v_data['flag']; + $p_header['filename_len'] = $v_data['filename_len']; + + // ----- Recuperate date in UNIX format + $p_header['mdate'] = $v_data['mdate']; + $p_header['mtime'] = $v_data['mtime']; + if ($p_header['mdate'] && $p_header['mtime']) { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F) * 2; + + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; + + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + + } else { + $p_header['mtime'] = time(); + } - // ----- Look for abort result - if ($v_result == 2) { - $v_result = PCLZIP_ERR_USER_ABORTED; - } - } + // TBC + //for (reset($v_data); $key = key($v_data); next($v_data)) { + //} - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privExtractFileAsString() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privExtractFileAsString(&$p_entry, &$p_string, &$p_options) - { - $v_result=1; - - // ----- Read the file header - $v_header = array(); - if (($v_result = $this->privReadFileHeader($v_header)) != 1) - { - // ----- Return - return $v_result; - } + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; + // ----- Set the status field + $p_header['status'] = "ok"; - // ----- Check that the file header is coherent with $p_entry info - if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) { - // TBC + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Look for pre-extract callback - if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) { - - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); - - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header); - if ($v_result == 0) { - // ----- Change the file status - $p_entry['status'] = "skipped"; + // -------------------------------------------------------------------------------- + // Function : privReadCentralFileHeader() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privReadCentralFileHeader(&$p_header) + { $v_result = 1; - } - - // ----- Look for abort result - if ($v_result == 2) { - // ----- This status is internal and will be changed in 'skipped' - $p_entry['status'] = "aborted"; - $v_result = PCLZIP_ERR_USER_ABORTED; - } - - // ----- Update the informations - // Only some fields can be modified - $p_entry['filename'] = $v_local_header['filename']; - } + // ----- Read the 4 bytes signature + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = unpack('Vid', $v_binary_data); - // ----- Look if extraction should be done - if ($p_entry['status'] == 'ok') { + // ----- Check signature + if ($v_data['id'] != 0x02014b50) { - // ----- Do the extraction (if not a folder) - if (!(($p_entry['external']&0x00000010)==0x00000010)) { - // ----- Look for not compressed file - // if ($p_entry['compressed_size'] == $p_entry['size']) - if ($p_entry['compression'] == 0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); - // ----- Reading the file - $p_string = @fread($this->zip_fd, $p_entry['compressed_size']); + // ----- Return + return PclZip::errorCode(); } - else { - - // ----- Reading the file - $v_data = @fread($this->zip_fd, $p_entry['compressed_size']); - // ----- Decompress the file - if (($p_string = @gzinflate($v_data)) === FALSE) { - // TBC - } - } + // ----- Read the first 42 bytes of the header + $v_binary_data = fread($this->zip_fd, 42); - // ----- Trace - } - else { - // TBC : error : can not extract a folder in a string - } + // ----- Look for invalid block size + if (strlen($v_binary_data) != 42) { + $p_header['filename'] = ""; + $p_header['status'] = "invalid_header"; - } + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : " . strlen($v_binary_data)); - // ----- Change abort status - if ($p_entry['status'] == "aborted") { - $p_entry['status'] = "skipped"; - } + // ----- Return + return PclZip::errorCode(); + } - // ----- Look for post-extract callback - elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) { + // ----- Extract the values + $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); - // ----- Generate a local information - $v_local_header = array(); - $this->privConvertHeader2FileInfo($p_entry, $v_local_header); + // ----- Get filename + if ($p_header['filename_len'] != 0) { + $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); + } else { + $p_header['filename'] = ''; + } - // ----- Swap the content to header - $v_local_header['content'] = $p_string; - $p_string = ''; + // ----- Get extra + if ($p_header['extra_len'] != 0) { + $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); + } else { + $p_header['extra'] = ''; + } - // ----- Call the callback - // Here I do not use call_user_func() because I need to send a reference to the - // header. -// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);'); - $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header); + // ----- Get comment + if ($p_header['comment_len'] != 0) { + $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); + } else { + $p_header['comment'] = ''; + } - // ----- Swap back the content to header - $p_string = $v_local_header['content']; - unset($v_local_header['content']); + // ----- Extract properties - // ----- Look for abort result - if ($v_result == 2) { - $v_result = PCLZIP_ERR_USER_ABORTED; - } - } + // ----- Recuperate date in UNIX format + //if ($p_header['mdate'] && $p_header['mtime']) + // TBC : bug : this was ignoring time with 0/0/0 + if (1) { + // ----- Extract time + $v_hour = ($p_header['mtime'] & 0xF800) >> 11; + $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; + $v_seconde = ($p_header['mtime'] & 0x001F) * 2; - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privReadFileHeader(&$p_header) - { - $v_result=1; - - // ----- Read the 4 bytes signature - $v_binary_data = @fread($this->zip_fd, 4); - $v_data = unpack('Vid', $v_binary_data); - - // ----- Check signature - if ($v_data['id'] != 0x04034b50) - { + // ----- Extract date + $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; + $v_month = ($p_header['mdate'] & 0x01E0) >> 5; + $v_day = $p_header['mdate'] & 0x001F; - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + // ----- Get UNIX date format + $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); - // ----- Return - return PclZip::errorCode(); - } + } else { + $p_header['mtime'] = time(); + } - // ----- Read the first 42 bytes of the header - $v_binary_data = fread($this->zip_fd, 26); + // ----- Set the stored filename + $p_header['stored_filename'] = $p_header['filename']; - // ----- Look for invalid block size - if (strlen($v_binary_data) != 26) - { - $p_header['filename'] = ""; - $p_header['status'] = "invalid_header"; + // ----- Set default status to ok + $p_header['status'] = 'ok'; - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + // ----- Look if it is a directory + if (substr($p_header['filename'], -1) == '/') { + //$p_header['external'] = 0x41FF0010; + $p_header['external'] = 0x00000010; + } - // ----- Return - return PclZip::errorCode(); + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privCheckFileHeaders() + // Description : + // Parameters : + // Return Values : + // 1 on success, + // 0 on error; + // -------------------------------------------------------------------------------- + public function privCheckFileHeaders(&$p_local_header, &$p_central_header) + { + $v_result = 1; - // ----- Extract the values - $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data); + // ----- Check the static values + // TBC + if ($p_local_header['filename'] != $p_central_header['filename']) { + } + if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { + } + if ($p_local_header['flag'] != $p_central_header['flag']) { + } + if ($p_local_header['compression'] != $p_central_header['compression']) { + } + if ($p_local_header['mtime'] != $p_central_header['mtime']) { + } + if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { + } - // ----- Get filename - $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']); + // ----- Look for flag bit 3 + if (($p_local_header['flag'] & 8) == 8) { + $p_local_header['size'] = $p_central_header['size']; + $p_local_header['compressed_size'] = $p_central_header['compressed_size']; + $p_local_header['crc'] = $p_central_header['crc']; + } - // ----- Get extra_fields - if ($v_data['extra_len'] != 0) { - $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']); - } - else { - $p_header['extra'] = ''; + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Extract properties - $p_header['version_extracted'] = $v_data['version']; - $p_header['compression'] = $v_data['compression']; - $p_header['size'] = $v_data['size']; - $p_header['compressed_size'] = $v_data['compressed_size']; - $p_header['crc'] = $v_data['crc']; - $p_header['flag'] = $v_data['flag']; - $p_header['filename_len'] = $v_data['filename_len']; - - // ----- Recuperate date in UNIX format - $p_header['mdate'] = $v_data['mdate']; - $p_header['mtime'] = $v_data['mtime']; - if ($p_header['mdate'] && $p_header['mtime']) + // -------------------------------------------------------------------------------- + // Function : privReadEndCentralDir() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privReadEndCentralDir(&$p_central_dir) { - // ----- Extract time - $v_hour = ($p_header['mtime'] & 0xF800) >> 11; - $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; - $v_seconde = ($p_header['mtime'] & 0x001F)*2; - - // ----- Extract date - $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; - $v_month = ($p_header['mdate'] & 0x01E0) >> 5; - $v_day = $p_header['mdate'] & 0x001F; - - // ----- Get UNIX date format - $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + $v_result = 1; - } - else - { - $p_header['mtime'] = time(); - } + // ----- Go to the end of the zip file + $v_size = filesize($this->zipname); + @fseek($this->zip_fd, $v_size); + if (@ftell($this->zip_fd) != $v_size) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \'' . $this->zipname . '\''); - // TBC - //for(reset($v_data); $key = key($v_data); next($v_data)) { - //} + // ----- Return + return PclZip::errorCode(); + } - // ----- Set the stored filename - $p_header['stored_filename'] = $p_header['filename']; + // ----- First try : look if this is an archive with no commentaries (most of the time) + // in this case the end of central dir is at 22 bytes of the file end + $v_found = 0; + if ($v_size > 26) { + @fseek($this->zip_fd, $v_size - 22); + if (($v_pos = @ftell($this->zip_fd)) != ($v_size - 22)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \'' . $this->zipname . '\''); - // ----- Set the status field - $p_header['status'] = "ok"; + // ----- Return + return PclZip::errorCode(); + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadCentralFileHeader() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privReadCentralFileHeader(&$p_header) - { - $v_result=1; - - // ----- Read the 4 bytes signature - $v_binary_data = @fread($this->zip_fd, 4); - $v_data = unpack('Vid', $v_binary_data); - - // ----- Check signature - if ($v_data['id'] != 0x02014b50) - { + // ----- Read for bytes + $v_binary_data = @fread($this->zip_fd, 4); + $v_data = @unpack('Vid', $v_binary_data); - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure'); + // ----- Check signature + if ($v_data['id'] == 0x06054b50) { + $v_found = 1; + } - // ----- Return - return PclZip::errorCode(); - } + $v_pos = ftell($this->zip_fd); + } - // ----- Read the first 42 bytes of the header - $v_binary_data = fread($this->zip_fd, 42); + // ----- Go back to the maximum possible size of the Central Dir End Record + if (!$v_found) { + $v_maximum_size = 65557; // 0xFFFF + 22; + if ($v_maximum_size > $v_size) { + $v_maximum_size = $v_size; + } + @fseek($this->zip_fd, $v_size - $v_maximum_size); + if (@ftell($this->zip_fd) != ($v_size - $v_maximum_size)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \'' . $this->zipname . '\''); - // ----- Look for invalid block size - if (strlen($v_binary_data) != 42) - { - $p_header['filename'] = ""; - $p_header['status'] = "invalid_header"; + // ----- Return + return PclZip::errorCode(); + } - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data)); + // ----- Read byte per byte in order to find the signature + $v_pos = ftell($this->zip_fd); + $v_bytes = 0x00000000; + while ($v_pos < $v_size) { + // ----- Read a byte + $v_byte = @fread($this->zip_fd, 1); + + // ----- Add the byte + //$v_bytes = ($v_bytes << 8) | Ord($v_byte); + // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number + // Otherwise on systems where we have 64bit integers the check below for the magic number will fail. + $v_bytes = (($v_bytes & 0xFFFFFF) << 8) | ord($v_byte); + + // ----- Compare the bytes + if ($v_bytes == 0x504b0506) { + $v_pos++; + break; + } + + $v_pos++; + } - // ----- Return - return PclZip::errorCode(); - } + // ----- Look if not found end of central dir + if ($v_pos == $v_size) { - // ----- Extract the values - $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data); - - // ----- Get filename - if ($p_header['filename_len'] != 0) - $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']); - else - $p_header['filename'] = ''; - - // ----- Get extra - if ($p_header['extra_len'] != 0) - $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']); - else - $p_header['extra'] = ''; - - // ----- Get comment - if ($p_header['comment_len'] != 0) - $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']); - else - $p_header['comment'] = ''; - - // ----- Extract properties - - // ----- Recuperate date in UNIX format - //if ($p_header['mdate'] && $p_header['mtime']) - // TBC : bug : this was ignoring time with 0/0/0 - if (1) - { - // ----- Extract time - $v_hour = ($p_header['mtime'] & 0xF800) >> 11; - $v_minute = ($p_header['mtime'] & 0x07E0) >> 5; - $v_seconde = ($p_header['mtime'] & 0x001F)*2; + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); - // ----- Extract date - $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980; - $v_month = ($p_header['mdate'] & 0x01E0) >> 5; - $v_day = $p_header['mdate'] & 0x001F; + // ----- Return + return PclZip::errorCode(); + } + } - // ----- Get UNIX date format - $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year); + // ----- Read the first 18 bytes of the header + $v_binary_data = fread($this->zip_fd, 18); - } - else - { - $p_header['mtime'] = time(); - } + // ----- Look for invalid block size + if (strlen($v_binary_data) != 18) { - // ----- Set the stored filename - $p_header['stored_filename'] = $p_header['filename']; + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : " . strlen($v_binary_data)); - // ----- Set default status to ok - $p_header['status'] = 'ok'; + // ----- Return + return PclZip::errorCode(); + } - // ----- Look if it is a directory - if (substr($p_header['filename'], -1) == '/') { - //$p_header['external'] = 0x41FF0010; - $p_header['external'] = 0x00000010; - } + // ----- Extract the values + $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); + // ----- Check the global size + if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privCheckFileHeaders() - // Description : - // Parameters : - // Return Values : - // 1 on success, - // 0 on error; - // -------------------------------------------------------------------------------- - function privCheckFileHeaders(&$p_local_header, &$p_central_header) - { - $v_result=1; - - // ----- Check the static values - // TBC - if ($p_local_header['filename'] != $p_central_header['filename']) { - } - if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) { - } - if ($p_local_header['flag'] != $p_central_header['flag']) { - } - if ($p_local_header['compression'] != $p_central_header['compression']) { - } - if ($p_local_header['mtime'] != $p_central_header['mtime']) { - } - if ($p_local_header['filename_len'] != $p_central_header['filename_len']) { - } + // ----- Removed in release 2.2 see readme file + // The check of the file size is a little too strict. + // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. + // While decrypted, zip has training 0 bytes + if (0) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'The central dir is not at the end of the archive.' . ' Some trailing bytes exists after the archive.'); - // ----- Look for flag bit 3 - if (($p_local_header['flag'] & 8) == 8) { - $p_local_header['size'] = $p_central_header['size']; - $p_local_header['compressed_size'] = $p_central_header['compressed_size']; - $p_local_header['crc'] = $p_central_header['crc']; - } + // ----- Return + return PclZip::errorCode(); + } + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privReadEndCentralDir() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privReadEndCentralDir(&$p_central_dir) - { - $v_result=1; - - // ----- Go to the end of the zip file - $v_size = filesize($this->zipname); - @fseek($this->zip_fd, $v_size); - if (@ftell($this->zip_fd) != $v_size) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\''); + // ----- Get comment + if ($v_data['comment_size'] != 0) { + $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); + } else { + $p_central_dir['comment'] = ''; + } - // ----- Return - return PclZip::errorCode(); - } + $p_central_dir['entries'] = $v_data['entries']; + $p_central_dir['disk_entries'] = $v_data['disk_entries']; + $p_central_dir['offset'] = $v_data['offset']; + $p_central_dir['size'] = $v_data['size']; + $p_central_dir['disk'] = $v_data['disk']; + $p_central_dir['disk_start'] = $v_data['disk_start']; - // ----- First try : look if this is an archive with no commentaries (most of the time) - // in this case the end of central dir is at 22 bytes of the file end - $v_found = 0; - if ($v_size > 26) { - @fseek($this->zip_fd, $v_size-22); - if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22)) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + // TBC + //for (reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { + //} // ----- Return - return PclZip::errorCode(); - } + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Read for bytes - $v_binary_data = @fread($this->zip_fd, 4); - $v_data = @unpack('Vid', $v_binary_data); + // -------------------------------------------------------------------------------- + // Function : privDeleteByRule() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privDeleteByRule(&$p_result_list, &$p_options) + { + $v_result = 1; + $v_list_detail = array(); - // ----- Check signature - if ($v_data['id'] == 0x06054b50) { - $v_found = 1; - } + // ----- Open the zip file + if (($v_result = $this->privOpenFd('rb')) != 1) { + // ----- Return + return $v_result; + } - $v_pos = ftell($this->zip_fd); - } + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privCloseFd(); - // ----- Go back to the maximum possible size of the Central Dir End Record - if (!$v_found) { - $v_maximum_size = 65557; // 0xFFFF + 22; - if ($v_maximum_size > $v_size) - $v_maximum_size = $v_size; - @fseek($this->zip_fd, $v_size-$v_maximum_size); - if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size)) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\''); + return $v_result; + } - // ----- Return - return PclZip::errorCode(); - } + // ----- Go to beginning of File + @rewind($this->zip_fd); - // ----- Read byte per byte in order to find the signature - $v_pos = ftell($this->zip_fd); - $v_bytes = 0x00000000; - while ($v_pos < $v_size) - { - // ----- Read a byte - $v_byte = @fread($this->zip_fd, 1); + // ----- Scan all the files + // ----- Start at beginning of Central Dir + $v_pos_entry = $v_central_dir['offset']; + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_pos_entry)) { + // ----- Close the zip file + $this->privCloseFd(); - // ----- Add the byte - //$v_bytes = ($v_bytes << 8) | Ord($v_byte); - // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number - // Otherwise on systems where we have 64bit integers the check below for the magic number will fail. - $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte); + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); - // ----- Compare the bytes - if ($v_bytes == 0x504b0506) - { - $v_pos++; - break; + // ----- Return + return PclZip::errorCode(); } - $v_pos++; - } + // ----- Read each entry + $v_header_list = array(); + $j_start = 0; + for ($i = 0, $v_nb_extracted = 0; $i < $v_central_dir['entries']; $i++) { - // ----- Look if not found end of central dir - if ($v_pos == $v_size) - { + // ----- Read the file header + $v_header_list[$v_nb_extracted] = array(); + if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature"); + return $v_result; + } - // ----- Return - return PclZip::errorCode(); - } - } + // ----- Store the index + $v_header_list[$v_nb_extracted]['index'] = $i; - // ----- Read the first 18 bytes of the header - $v_binary_data = fread($this->zip_fd, 18); + // ----- Look for the specific extract rules + $v_found = false; - // ----- Look for invalid block size - if (strlen($v_binary_data) != 18) - { + // ----- Look for extract by name rule + if ((isset($p_options[PCLZIP_OPT_BY_NAME])) && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data)); + // ----- Look if the filename is in the list + for ($j = 0; ($j < sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) { - // ----- Return - return PclZip::errorCode(); - } + // ----- Look for a directory + if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") { - // ----- Extract the values - $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data); - - // ----- Check the global size - if (($v_pos + $v_data['comment_size'] + 18) != $v_size) { - - // ----- Removed in release 2.2 see readme file - // The check of the file size is a little too strict. - // Some bugs where found when a zip is encrypted/decrypted with 'crypt'. - // While decrypted, zip has training 0 bytes - if (0) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, - 'The central dir is not at the end of the archive.' - .' Some trailing bytes exists after the archive.'); - - // ----- Return - return PclZip::errorCode(); - } - } + // ----- Look if the directory is in the filename path + if ((strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } elseif ((($v_header_list[$v_nb_extracted]['external'] & 0x00000010) == 0x00000010) /* Indicates a folder */ && ($v_header_list[$v_nb_extracted]['stored_filename'] . '/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) { + $v_found = true; + } - // ----- Get comment - if ($v_data['comment_size'] != 0) { - $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']); - } - else - $p_central_dir['comment'] = ''; + // ----- Look for a filename + } elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { + $v_found = true; + } + } - $p_central_dir['entries'] = $v_data['entries']; - $p_central_dir['disk_entries'] = $v_data['disk_entries']; - $p_central_dir['offset'] = $v_data['offset']; - $p_central_dir['size'] = $v_data['size']; - $p_central_dir['disk'] = $v_data['disk']; - $p_central_dir['disk_start'] = $v_data['disk_start']; + // ----- Look for extract by ereg rule + // ereg() is deprecated with PHP 5.3 + /* + elseif ( (isset($p_options[PCLZIP_OPT_BY_EREG])) + && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { - // TBC - //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) { - //} + if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } + } + */ - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDeleteByRule() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privDeleteByRule(&$p_result_list, &$p_options) - { - $v_result=1; - $v_list_detail = array(); - - // ----- Open the zip file - if (($v_result=$this->privOpenFd('rb')) != 1) - { - // ----- Return - return $v_result; - } + // ----- Look for extract by preg rule + } elseif ((isset($p_options[PCLZIP_OPT_BY_PREG])) && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privCloseFd(); - return $v_result; - } + if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { + $v_found = true; + } - // ----- Go to beginning of File - @rewind($this->zip_fd); + // ----- Look for extract by index rule + } elseif ((isset($p_options[PCLZIP_OPT_BY_INDEX])) && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { - // ----- Scan all the files - // ----- Start at beginning of Central Dir - $v_pos_entry = $v_central_dir['offset']; - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_pos_entry)) - { - // ----- Close the zip file - $this->privCloseFd(); + // ----- Look if the index is in the list + for ($j = $j_start; ($j < sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + if (($i >= $p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i <= $p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { + $v_found = true; + } + if ($i >= $p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { + $j_start = $j + 1; + } - // ----- Return - return PclZip::errorCode(); - } + if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start'] > $i) { + break; + } + } + } else { + $v_found = true; + } - // ----- Read each entry - $v_header_list = array(); - $j_start = 0; - for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++) - { + // ----- Look for deletion + if ($v_found) { + unset($v_header_list[$v_nb_extracted]); + } else { + $v_nb_extracted++; + } + } - // ----- Read the file header - $v_header_list[$v_nb_extracted] = array(); - if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1) - { - // ----- Close the zip file - $this->privCloseFd(); + // ----- Look if something need to be deleted + if ($v_nb_extracted > 0) { - return $v_result; - } - - - // ----- Store the index - $v_header_list[$v_nb_extracted]['index'] = $i; - - // ----- Look for the specific extract rules - $v_found = false; - - // ----- Look for extract by name rule - if ( (isset($p_options[PCLZIP_OPT_BY_NAME])) - && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) { - - // ----- Look if the filename is in the list - for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) { - - // ----- Look for a directory - if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") { - - // ----- Look if the directory is in the filename path - if ( (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) - && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) { - $v_found = true; - } - elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */ - && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) { - $v_found = true; - } - } - // ----- Look for a filename - elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) { - $v_found = true; - } - } - } - - // ----- Look for extract by ereg rule - // ereg() is deprecated with PHP 5.3 - /* - else if ( (isset($p_options[PCLZIP_OPT_BY_EREG])) - && ($p_options[PCLZIP_OPT_BY_EREG] != "")) { - - if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { - $v_found = true; - } - } - */ - - // ----- Look for extract by preg rule - else if ( (isset($p_options[PCLZIP_OPT_BY_PREG])) - && ($p_options[PCLZIP_OPT_BY_PREG] != "")) { - - if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) { - $v_found = true; - } - } - - // ----- Look for extract by index rule - else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX])) - && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) { - - // ----- Look if the index is in the list - for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) { - - if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) { - $v_found = true; - } - if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) { - $j_start = $j+1; - } - - if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) { - break; - } - } - } - else { - $v_found = true; - } - - // ----- Look for deletion - if ($v_found) - { - unset($v_header_list[$v_nb_extracted]); - } - else - { - $v_nb_extracted++; - } - } + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.tmp'; - // ----- Look if something need to be deleted - if ($v_nb_extracted > 0) { + // ----- Creates a temporary zip archive + $v_temp_zip = new PclZip($v_zip_temp_name); - // ----- Creates a temporay file - $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + // ----- Open the temporary zip file in write mode + if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { + $this->privCloseFd(); - // ----- Creates a temporary zip archive - $v_temp_zip = new PclZip($v_zip_temp_name); + // ----- Return + return $v_result; + } - // ----- Open the temporary zip file in write mode - if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) { - $this->privCloseFd(); + // ----- Look which file need to be kept + for ($i = 0; $i < sizeof($v_header_list); $i++) { + + // ----- Calculate the position of the header + @rewind($this->zip_fd); + if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + + // ----- Return + return PclZip::errorCode(); + } + + // ----- Read the file header + $v_local_header = array(); + if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Check that local file header is same as central file header + if ($this->privCheckFileHeaders($v_local_header, $v_header_list[$i]) != 1) { + // TBC + } + unset($v_local_header); + + // ----- Write the file header + if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + + // ----- Read/write the data block + if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { + // ----- Close the zip file + $this->privCloseFd(); + $v_temp_zip->privCloseFd(); + @unlink($v_zip_temp_name); + + // ----- Return + return $v_result; + } + } - // ----- Return - return $v_result; - } + // ----- Store the offset of the central dir + $v_offset = @ftell($v_temp_zip->zip_fd); - // ----- Look which file need to be kept - for ($i=0; $i<sizeof($v_header_list); $i++) { + // ----- Re-Create the Central Dir files header + for ($i = 0; $i < sizeof($v_header_list); $i++) { + // ----- Create the file header + if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) { + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); + @unlink($v_zip_temp_name); - // ----- Calculate the position of the header - @rewind($this->zip_fd); - if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) { - // ----- Close the zip file - $this->privCloseFd(); - $v_temp_zip->privCloseFd(); - @unlink($v_zip_temp_name); + // ----- Return + return $v_result; + } - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size'); + // ----- Transform the header to a 'usable' info + $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + } - // ----- Return - return PclZip::errorCode(); + // ----- Zip file comment + $v_comment = ''; + if (isset($p_options[PCLZIP_OPT_COMMENT])) { + $v_comment = $p_options[PCLZIP_OPT_COMMENT]; } - // ----- Read the file header - $v_local_header = array(); - if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) { - // ----- Close the zip file - $this->privCloseFd(); + // ----- Calculate the size of the central header + $v_size = @ftell($v_temp_zip->zip_fd) - $v_offset; + + // ----- Create the central dir footer + if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { + // ----- Reset the file list + unset($v_header_list); $v_temp_zip->privCloseFd(); + $this->privCloseFd(); @unlink($v_zip_temp_name); // ----- Return return $v_result; } - // ----- Check that local file header is same as central file header - if ($this->privCheckFileHeaders($v_local_header, - $v_header_list[$i]) != 1) { - // TBC - } - unset($v_local_header); + // ----- Close + $v_temp_zip->privCloseFd(); + $this->privCloseFd(); - // ----- Write the file header - if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) { - // ----- Close the zip file - $this->privCloseFd(); - $v_temp_zip->privCloseFd(); - @unlink($v_zip_temp_name); + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); - // ----- Return + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); + + // ----- Destroy the temporary archive + unset($v_temp_zip); + + // ----- Remove every files : reset the file + } elseif ($v_central_dir['entries'] != 0) { + $this->privCloseFd(); + + if (($v_result = $this->privOpenFd('wb')) != 1) { return $v_result; } - // ----- Read/write the data block - if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) { - // ----- Close the zip file - $this->privCloseFd(); - $v_temp_zip->privCloseFd(); - @unlink($v_zip_temp_name); - - // ----- Return + if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { return $v_result; } - } - // ----- Store the offset of the central dir - $v_offset = @ftell($v_temp_zip->zip_fd); + $this->privCloseFd(); + } - // ----- Re-Create the Central Dir files header - for ($i=0; $i<sizeof($v_header_list); $i++) { - // ----- Create the file header - if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) { - $v_temp_zip->privCloseFd(); - $this->privCloseFd(); - @unlink($v_zip_temp_name); + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- + + // -------------------------------------------------------------------------------- + // Function : privDirCheck() + // Description : + // Check if a directory exists, if not it creates it and all the parents directory + // which may be useful. + // Parameters : + // $p_dir : Directory path to check. + // Return Values : + // 1 : OK + // -1 : Unable to create directory + // -------------------------------------------------------------------------------- + public function privDirCheck($p_dir, $p_is_dir = false) + { + $v_result = 1; - // ----- Return - return $v_result; - } + // ----- Remove the final '/' + if (($p_is_dir) && (substr($p_dir, -1) == '/')) { + $p_dir = substr($p_dir, 0, strlen($p_dir) - 1); + } - // ----- Transform the header to a 'usable' info - $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]); + // ----- Check the directory availability + if ((is_dir($p_dir)) || ($p_dir == "")) { + return 1; } + // ----- Extract parent directory + $p_parent_dir = dirname($p_dir); - // ----- Zip file comment - $v_comment = ''; - if (isset($p_options[PCLZIP_OPT_COMMENT])) { - $v_comment = $p_options[PCLZIP_OPT_COMMENT]; + // ----- Just a check + if ($p_parent_dir != $p_dir) { + // ----- Look for parent directory + if ($p_parent_dir != "") { + if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) { + return $v_result; + } + } } - // ----- Calculate the size of the central header - $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset; - - // ----- Create the central dir footer - if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) { - // ----- Reset the file list - unset($v_header_list); - $v_temp_zip->privCloseFd(); - $this->privCloseFd(); - @unlink($v_zip_temp_name); + // ----- Create the directory + if (!@mkdir($p_dir, 0777)) { + // ----- Error log + PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); // ----- Return - return $v_result; + return PclZip::errorCode(); } - // ----- Close - $v_temp_zip->privCloseFd(); - $this->privCloseFd(); - - // ----- Delete the zip file - // TBC : I should test the result ... - @unlink($this->zipname); + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Rename the temporary file - // TBC : I should test the result ... - //@rename($v_zip_temp_name, $this->zipname); - PclZipUtilRename($v_zip_temp_name, $this->zipname); + // -------------------------------------------------------------------------------- + // Function : privMerge() + // Description : + // If $p_archive_to_add does not exist, the function exit with a success result. + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privMerge(&$p_archive_to_add) + { + $v_result = 1; - // ----- Destroy the temporary archive - unset($v_temp_zip); - } + // ----- Look if the archive_to_add exists + if (!is_file($p_archive_to_add->zipname)) { - // ----- Remove every files : reset the file - else if ($v_central_dir['entries'] != 0) { - $this->privCloseFd(); + // ----- Nothing to merge, so merge is a success + $v_result = 1; - if (($v_result = $this->privOpenFd('wb')) != 1) { - return $v_result; + // ----- Return + return $v_result; } - if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) { - return $v_result; - } + // ----- Look if the archive exists + if (!is_file($this->zipname)) { - $this->privCloseFd(); - } + // ----- Do a duplicate + $v_result = $this->privDuplicate($p_archive_to_add->zipname); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDirCheck() - // Description : - // Check if a directory exists, if not it creates it and all the parents directory - // which may be useful. - // Parameters : - // $p_dir : Directory path to check. - // Return Values : - // 1 : OK - // -1 : Unable to create directory - // -------------------------------------------------------------------------------- - function privDirCheck($p_dir, $p_is_dir=false) - { - $v_result = 1; + // ----- Return + return $v_result; + } + // ----- Open the zip file + if (($v_result = $this->privOpenFd('rb')) != 1) { + // ----- Return + return $v_result; + } - // ----- Remove the final '/' - if (($p_is_dir) && (substr($p_dir, -1)=='/')) - { - $p_dir = substr($p_dir, 0, strlen($p_dir)-1); - } + // ----- Read the central directory informations + $v_central_dir = array(); + if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) { + $this->privCloseFd(); - // ----- Check the directory availability - if ((is_dir($p_dir)) || ($p_dir == "")) - { - return 1; - } + return $v_result; + } - // ----- Extract parent directory - $p_parent_dir = dirname($p_dir); + // ----- Go to beginning of File + @rewind($this->zip_fd); - // ----- Just a check - if ($p_parent_dir != $p_dir) - { - // ----- Look for parent directory - if ($p_parent_dir != "") - { - if (($v_result = $this->privDirCheck($p_parent_dir)) != 1) - { - return $v_result; - } - } - } + // ----- Open the archive_to_add file + if (($v_result = $p_archive_to_add->privOpenFd('rb')) != 1) { + $this->privCloseFd(); - // ----- Create the directory - if (!@mkdir($p_dir, 0777)) - { - // ----- Error log - PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'"); + // ----- Return + return $v_result; + } - // ----- Return - return PclZip::errorCode(); - } + // ----- Read the central directory informations + $v_central_dir_to_add = array(); + if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privMerge() - // Description : - // If $p_archive_to_add does not exist, the function exit with a success result. - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privMerge(&$p_archive_to_add) - { - $v_result=1; - - // ----- Look if the archive_to_add exists - if (!is_file($p_archive_to_add->zipname)) - { + return $v_result; + } - // ----- Nothing to merge, so merge is a success - $v_result = 1; + // ----- Go to beginning of File + @rewind($p_archive_to_add->zip_fd); - // ----- Return - return $v_result; - } + // ----- Creates a temporay file + $v_zip_temp_name = PCLZIP_TEMPORARY_DIR . uniqid('pclzip-') . '.tmp'; - // ----- Look if the archive exists - if (!is_file($this->zipname)) - { + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); - // ----- Do a duplicate - $v_result = $this->privDuplicate($p_archive_to_add->zipname); + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \'' . $v_zip_temp_name . '\' in binary write mode'); - // ----- Return - return $v_result; - } + // ----- Return + return PclZip::errorCode(); + } - // ----- Open the zip file - if (($v_result=$this->privOpenFd('rb')) != 1) - { - // ----- Return - return $v_result; - } + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = $v_central_dir['offset']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } - // ----- Read the central directory informations - $v_central_dir = array(); - if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1) - { - $this->privCloseFd(); - return $v_result; - } + // ----- Copy the files from the archive_to_add into the temporary file + $v_size = $v_central_dir_to_add['offset']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } - // ----- Go to beginning of File - @rewind($this->zip_fd); + // ----- Store the offset of the central dir + $v_offset = @ftell($v_zip_temp_fd); - // ----- Open the archive_to_add file - if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1) - { - $this->privCloseFd(); + // ----- Copy the block of file headers from the old archive + $v_size = $v_central_dir['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($this->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } - // ----- Return - return $v_result; - } + // ----- Copy the block of file headers from the archive_to_add + $v_size = $v_central_dir_to_add['size']; + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); + @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } - // ----- Read the central directory informations - $v_central_dir_to_add = array(); - if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1) - { - $this->privCloseFd(); - $p_archive_to_add->privCloseFd(); + // ----- Merge the file comments + $v_comment = $v_central_dir['comment'] . ' ' . $v_central_dir_to_add['comment']; - return $v_result; - } + // ----- Calculate the size of the (new) central header + $v_size = @ftell($v_zip_temp_fd) - $v_offset; - // ----- Go to beginning of File - @rewind($p_archive_to_add->zip_fd); + // ----- Swap the file descriptor + // Here is a trick : I swap the temporary fd with the zip fd, in order to use + // the following methods on the temporary fil and not the real archive fd + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; - // ----- Creates a temporay file - $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp'; + // ----- Create the central dir footer + if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries'] + $v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) { + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); + @fclose($v_zip_temp_fd); + $this->zip_fd = null; - // ----- Open the temporary file in write mode - if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0) - { - $this->privCloseFd(); - $p_archive_to_add->privCloseFd(); + // ----- Reset the file list + unset($v_header_list); + + // ----- Return + return $v_result; + } - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode'); + // ----- Swap back the file descriptor + $v_swap = $this->zip_fd; + $this->zip_fd = $v_zip_temp_fd; + $v_zip_temp_fd = $v_swap; - // ----- Return - return PclZip::errorCode(); - } + // ----- Close + $this->privCloseFd(); + $p_archive_to_add->privCloseFd(); - // ----- Copy the files from the archive to the temporary file - // TBC : Here I should better append the file and go back to erase the central dir - $v_size = $v_central_dir['offset']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = fread($this->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } + // ----- Close the temporary file + @fclose($v_zip_temp_fd); - // ----- Copy the files from the archive_to_add into the temporary file - $v_size = $v_central_dir_to_add['offset']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } + // ----- Delete the zip file + // TBC : I should test the result ... + @unlink($this->zipname); - // ----- Store the offset of the central dir - $v_offset = @ftell($v_zip_temp_fd); + // ----- Rename the temporary file + // TBC : I should test the result ... + //@rename($v_zip_temp_name, $this->zipname); + PclZipUtilRename($v_zip_temp_name, $this->zipname); - // ----- Copy the block of file headers from the old archive - $v_size = $v_central_dir['size']; - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($this->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Copy the block of file headers from the archive_to_add - $v_size = $v_central_dir_to_add['size']; - while ($v_size != 0) + // -------------------------------------------------------------------------------- + // Function : privDuplicate() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privDuplicate($p_archive_filename) { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size); - @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } + $v_result = 1; - // ----- Merge the file comments - $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment']; + // ----- Look if the $p_archive_filename exists + if (!is_file($p_archive_filename)) { - // ----- Calculate the size of the (new) central header - $v_size = @ftell($v_zip_temp_fd)-$v_offset; + // ----- Nothing to duplicate, so duplicate is a success. + $v_result = 1; - // ----- Swap the file descriptor - // Here is a trick : I swap the temporary fd with the zip fd, in order to use - // the following methods on the temporary fil and not the real archive fd - $v_swap = $this->zip_fd; - $this->zip_fd = $v_zip_temp_fd; - $v_zip_temp_fd = $v_swap; + // ----- Return + return $v_result; + } - // ----- Create the central dir footer - if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1) - { - $this->privCloseFd(); - $p_archive_to_add->privCloseFd(); - @fclose($v_zip_temp_fd); - $this->zip_fd = null; + // ----- Open the zip file + if (($v_result = $this->privOpenFd('wb')) != 1) { + // ----- Return + return $v_result; + } - // ----- Reset the file list - unset($v_header_list); + // ----- Open the temporary file in write mode + if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) { + $this->privCloseFd(); - // ----- Return - return $v_result; - } + PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \'' . $p_archive_filename . '\' in binary write mode'); - // ----- Swap back the file descriptor - $v_swap = $this->zip_fd; - $this->zip_fd = $v_zip_temp_fd; - $v_zip_temp_fd = $v_swap; + // ----- Return + return PclZip::errorCode(); + } - // ----- Close - $this->privCloseFd(); - $p_archive_to_add->privCloseFd(); + // ----- Copy the files from the archive to the temporary file + // TBC : Here I should better append the file and go back to erase the central dir + $v_size = filesize($p_archive_filename); + while ($v_size != 0) { + $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = fread($v_zip_temp_fd, $v_read_size); + @fwrite($this->zip_fd, $v_buffer, $v_read_size); + $v_size -= $v_read_size; + } - // ----- Close the temporary file - @fclose($v_zip_temp_fd); + // ----- Close + $this->privCloseFd(); - // ----- Delete the zip file - // TBC : I should test the result ... - @unlink($this->zipname); + // ----- Close the temporary file + @fclose($v_zip_temp_fd); - // ----- Rename the temporary file - // TBC : I should test the result ... - //@rename($v_zip_temp_name, $this->zipname); - PclZipUtilRename($v_zip_temp_name, $this->zipname); + // ----- Return + return $v_result; + } + // -------------------------------------------------------------------------------- - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDuplicate() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privDuplicate($p_archive_filename) - { - $v_result=1; - - // ----- Look if the $p_archive_filename exists - if (!is_file($p_archive_filename)) + // -------------------------------------------------------------------------------- + // Function : privErrorLog() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function privErrorLog($p_error_code = 0, $p_error_string = '') { - - // ----- Nothing to duplicate, so duplicate is a success. - $v_result = 1; - - // ----- Return - return $v_result; + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclError($p_error_code, $p_error_string); + } else { + $this->error_code = $p_error_code; + $this->error_string = $p_error_string; + } } + // -------------------------------------------------------------------------------- - // ----- Open the zip file - if (($v_result=$this->privOpenFd('wb')) != 1) + // -------------------------------------------------------------------------------- + // Function : privErrorReset() + // Description : + // Parameters : + // -------------------------------------------------------------------------------- + public function privErrorReset() { - // ----- Return - return $v_result; + if (PCLZIP_ERROR_EXTERNAL == 1) { + PclErrorReset(); + } else { + $this->error_code = 0; + $this->error_string = ''; + } } + // -------------------------------------------------------------------------------- - // ----- Open the temporary file in write mode - if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0) + // -------------------------------------------------------------------------------- + // Function : privDisableMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privDisableMagicQuotes() { - $this->privCloseFd(); - - PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode'); + $v_result = 1; - // ----- Return - return PclZip::errorCode(); - } + // ----- Look if function exists + if ((!function_exists("get_magic_quotes_runtime")) || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } - // ----- Copy the files from the archive to the temporary file - // TBC : Here I should better append the file and go back to erase the central dir - $v_size = filesize($p_archive_filename); - while ($v_size != 0) - { - $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = fread($v_zip_temp_fd, $v_read_size); - @fwrite($this->zip_fd, $v_buffer, $v_read_size); - $v_size -= $v_read_size; - } + // ----- Look if already done + if ($this->magic_quotes_status != -1) { + return $v_result; + } - // ----- Close - $this->privCloseFd(); + // ----- Get and memorize the magic_quote value + $this->magic_quotes_status = @get_magic_quotes_runtime(); - // ----- Close the temporary file - @fclose($v_zip_temp_fd); + // ----- Disable magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime(0); + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privErrorLog() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function privErrorLog($p_error_code=0, $p_error_string='') - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - PclError($p_error_code, $p_error_string); - } - else { - $this->error_code = $p_error_code; - $this->error_string = $p_error_string; - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privErrorReset() - // Description : - // Parameters : - // -------------------------------------------------------------------------------- - function privErrorReset() - { - if (PCLZIP_ERROR_EXTERNAL == 1) { - PclErrorReset(); - } - else { - $this->error_code = 0; - $this->error_string = ''; - } - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privDisableMagicQuotes() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privDisableMagicQuotes() - { - $v_result=1; - - // ----- Look if function exists - if ( (!function_exists("get_magic_quotes_runtime")) - || (!function_exists("set_magic_quotes_runtime"))) { - return $v_result; + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- - // ----- Look if already done - if ($this->magic_quotes_status != -1) { - return $v_result; - } + // -------------------------------------------------------------------------------- + // Function : privSwapBackMagicQuotes() + // Description : + // Parameters : + // Return Values : + // -------------------------------------------------------------------------------- + public function privSwapBackMagicQuotes() + { + $v_result = 1; - // ----- Get and memorize the magic_quote value - $this->magic_quotes_status = @get_magic_quotes_runtime(); + // ----- Look if function exists + if ((!function_exists("get_magic_quotes_runtime")) || (!function_exists("set_magic_quotes_runtime"))) { + return $v_result; + } - // ----- Disable magic_quotes - if ($this->magic_quotes_status == 1) { - @set_magic_quotes_runtime(0); - } + // ----- Look if something to do + if ($this->magic_quotes_status != -1) { + return $v_result; + } - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : privSwapBackMagicQuotes() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function privSwapBackMagicQuotes() - { - $v_result=1; - - // ----- Look if function exists - if ( (!function_exists("get_magic_quotes_runtime")) - || (!function_exists("set_magic_quotes_runtime"))) { - return $v_result; - } + // ----- Swap back magic_quotes + if ($this->magic_quotes_status == 1) { + @set_magic_quotes_runtime($this->magic_quotes_status); + } - // ----- Look if something to do - if ($this->magic_quotes_status != -1) { - return $v_result; + // ----- Return + return $v_result; } + // -------------------------------------------------------------------------------- +} - // ----- Swap back magic_quotes - if ($this->magic_quotes_status == 1) { - @set_magic_quotes_runtime($this->magic_quotes_status); - } +// End of class +// -------------------------------------------------------------------------------- - // ----- Return - return $v_result; - } - // -------------------------------------------------------------------------------- - - } - // End of class - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilPathReduction() - // Description : - // Parameters : - // Return Values : - // -------------------------------------------------------------------------------- - function PclZipUtilPathReduction($p_dir) - { +// -------------------------------------------------------------------------------- +// Function : PclZipUtilPathReduction() +// Description : +// Parameters : +// Return Values : +// -------------------------------------------------------------------------------- +function PclZipUtilPathReduction($p_dir) +{ $v_result = ""; // ----- Look for not empty path if ($p_dir != "") { - // ----- Explode path by directory names - $v_list = explode("/", $p_dir); - - // ----- Study directories from last to first - $v_skip = 0; - for ($i=sizeof($v_list)-1; $i>=0; $i--) { - // ----- Look for current path - if ($v_list[$i] == ".") { - // ----- Ignore this directory - // Should be the first $i=0, but no check is done - } - else if ($v_list[$i] == "..") { - $v_skip++; - } - else if ($v_list[$i] == "") { - // ----- First '/' i.e. root slash - if ($i == 0) { - $v_result = "/".$v_result; - if ($v_skip > 0) { - // ----- It is an invalid path, so the path is not modified - // TBC - $v_result = $p_dir; - $v_skip = 0; + // ----- Explode path by directory names + $v_list = explode("/", $p_dir); + + // ----- Study directories from last to first + $v_skip = 0; + for ($i = sizeof($v_list) - 1; $i >= 0; $i--) { + // ----- Look for current path + if ($v_list[$i] == ".") { + // ----- Ignore this directory + // Should be the first $i=0, but no check is done + } elseif ($v_list[$i] == "..") { + $v_skip++; + } elseif ($v_list[$i] == "") { + // ----- First '/' i.e. root slash + if ($i == 0) { + $v_result = "/" . $v_result; + if ($v_skip > 0) { + // ----- It is an invalid path, so the path is not modified + // TBC + $v_result = $p_dir; + $v_skip = 0; + } + + // ----- Last '/' i.e. indicates a directory + } elseif ($i == (sizeof($v_list) - 1)) { + $v_result = $v_list[$i]; + + // ----- Double '/' inside the path + } else { + // ----- Ignore only the double '//' in path, + // but not the first and last '/' + } + } else { + // ----- Look for item to skip + if ($v_skip > 0) { + $v_skip--; + } else { + $v_result = $v_list[$i] . ($i != (sizeof($v_list) - 1) ? "/" . $v_result : ""); + } + } + } + + // ----- Look for skip + if ($v_skip > 0) { + while ($v_skip > 0) { + $v_result = '../' . $v_result; + $v_skip--; } - } - // ----- Last '/' i.e. indicates a directory - else if ($i == (sizeof($v_list)-1)) { - $v_result = $v_list[$i]; - } - // ----- Double '/' inside the path - else { - // ----- Ignore only the double '//' in path, - // but not the first and last '/' - } - } - else { - // ----- Look for item to skip - if ($v_skip > 0) { - $v_skip--; - } - else { - $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:""); - } - } - } - - // ----- Look for skip - if ($v_skip > 0) { - while ($v_skip > 0) { - $v_result = '../'.$v_result; - $v_skip--; - } - } + } } // ----- Return return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilPathInclusion() - // Description : - // This function indicates if the path $p_path is under the $p_dir tree. Or, - // said in an other way, if the file or sub-dir $p_path is inside the dir - // $p_dir. - // The function indicates also if the path is exactly the same as the dir. - // This function supports path with duplicated '/' like '//', but does not - // support '.' or '..' statements. - // Parameters : - // Return Values : - // 0 if $p_path is not inside directory $p_dir - // 1 if $p_path is inside directory $p_dir - // 2 if $p_path is exactly the same as $p_dir - // -------------------------------------------------------------------------------- - function PclZipUtilPathInclusion($p_dir, $p_path) - { +} +// -------------------------------------------------------------------------------- + +// -------------------------------------------------------------------------------- +// Function : PclZipUtilPathInclusion() +// Description : +// This function indicates if the path $p_path is under the $p_dir tree. Or, +// said in an other way, if the file or sub-dir $p_path is inside the dir +// $p_dir. +// The function indicates also if the path is exactly the same as the dir. +// This function supports path with duplicated '/' like '//', but does not +// support '.' or '..' statements. +// Parameters : +// Return Values : +// 0 if $p_path is not inside directory $p_dir +// 1 if $p_path is inside directory $p_dir +// 2 if $p_path is exactly the same as $p_dir +// -------------------------------------------------------------------------------- +function PclZipUtilPathInclusion($p_dir, $p_path) +{ $v_result = 1; // ----- Look for path beginning by ./ - if ( ($p_dir == '.') - || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) { - $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1); + if (($p_dir == '.') || ((strlen($p_dir) >= 2) && (substr($p_dir, 0, 2) == './'))) { + $p_dir = PclZipUtilTranslateWinPath(getcwd(), false) . '/' . substr($p_dir, 1); } - if ( ($p_path == '.') - || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) { - $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1); + if (($p_path == '.') || ((strlen($p_path) >= 2) && (substr($p_path, 0, 2) == './'))) { + $p_path = PclZipUtilTranslateWinPath(getcwd(), false) . '/' . substr($p_path, 1); } // ----- Explode dir and path by directory separator - $v_list_dir = explode("/", $p_dir); - $v_list_dir_size = sizeof($v_list_dir); - $v_list_path = explode("/", $p_path); + $v_list_dir = explode("/", $p_dir); + $v_list_dir_size = sizeof($v_list_dir); + $v_list_path = explode("/", $p_path); $v_list_path_size = sizeof($v_list_path); // ----- Study directories paths @@ -5499,193 +5234,182 @@ $j = 0; while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) { - // ----- Look for empty dir (path reduction) - if ($v_list_dir[$i] == '') { - $i++; - continue; - } - if ($v_list_path[$j] == '') { - $j++; - continue; - } + // ----- Look for empty dir (path reduction) + if ($v_list_dir[$i] == '') { + $i++; + continue; + } + if ($v_list_path[$j] == '') { + $j++; + continue; + } - // ----- Compare the items - if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) { - $v_result = 0; - } + // ----- Compare the items + if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ($v_list_path[$j] != '')) { + $v_result = 0; + } - // ----- Next items - $i++; - $j++; + // ----- Next items + $i++; + $j++; } // ----- Look if everything seems to be the same if ($v_result) { - // ----- Skip all the empty items - while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++; - while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++; - - if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { - // ----- There are exactly the same - $v_result = 2; - } - else if ($i < $v_list_dir_size) { - // ----- The path is shorter than the dir - $v_result = 0; - } + // ----- Skip all the empty items + while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) { + $j++; + } + while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) { + $i++; + } + + if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) { + // ----- There are exactly the same + $v_result = 2; + } elseif ($i < $v_list_dir_size) { + // ----- The path is shorter than the dir + $v_result = 0; + } } // ----- Return return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilCopyBlock() - // Description : - // Parameters : - // $p_mode : read/write compression mode - // 0 : src & dest normal - // 1 : src gzip, dest normal - // 2 : src normal, dest gzip - // 3 : src & dest gzip - // Return Values : - // -------------------------------------------------------------------------------- - function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0) - { +} +// -------------------------------------------------------------------------------- + +// -------------------------------------------------------------------------------- +// Function : PclZipUtilCopyBlock() +// Description : +// Parameters : +// $p_mode : read/write compression mode +// 0 : src & dest normal +// 1 : src gzip, dest normal +// 2 : src normal, dest gzip +// 3 : src & dest gzip +// Return Values : +// -------------------------------------------------------------------------------- +function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode = 0) +{ $v_result = 1; - if ($p_mode==0) - { - while ($p_size != 0) - { - $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($p_src, $v_read_size); - @fwrite($p_dest, $v_buffer, $v_read_size); - $p_size -= $v_read_size; - } - } - else if ($p_mode==1) - { - while ($p_size != 0) - { - $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @gzread($p_src, $v_read_size); - @fwrite($p_dest, $v_buffer, $v_read_size); - $p_size -= $v_read_size; - } - } - else if ($p_mode==2) - { - while ($p_size != 0) - { - $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @fread($p_src, $v_read_size); - @gzwrite($p_dest, $v_buffer, $v_read_size); - $p_size -= $v_read_size; - } - } - else if ($p_mode==3) - { - while ($p_size != 0) - { - $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); - $v_buffer = @gzread($p_src, $v_read_size); - @gzwrite($p_dest, $v_buffer, $v_read_size); - $p_size -= $v_read_size; - } + if ($p_mode == 0) { + while ($p_size != 0) { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } elseif ($p_mode == 1) { + while ($p_size != 0) { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @fwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } elseif ($p_mode == 2) { + while ($p_size != 0) { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @fread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } + } elseif ($p_mode == 3) { + while ($p_size != 0) { + $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE); + $v_buffer = @gzread($p_src, $v_read_size); + @gzwrite($p_dest, $v_buffer, $v_read_size); + $p_size -= $v_read_size; + } } // ----- Return return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilRename() - // Description : - // This function tries to do a simple rename() function. If it fails, it - // tries to copy the $p_src file in a new $p_dest file and then unlink the - // first one. - // Parameters : - // $p_src : Old filename - // $p_dest : New filename - // Return Values : - // 1 on success, 0 on failure. - // -------------------------------------------------------------------------------- - function PclZipUtilRename($p_src, $p_dest) - { +} +// -------------------------------------------------------------------------------- + +// -------------------------------------------------------------------------------- +// Function : PclZipUtilRename() +// Description : +// This function tries to do a simple rename() function. If it fails, it +// tries to copy the $p_src file in a new $p_dest file and then unlink the +// first one. +// Parameters : +// $p_src : Old filename +// $p_dest : New filename +// Return Values : +// 1 on success, 0 on failure. +// -------------------------------------------------------------------------------- +function PclZipUtilRename($p_src, $p_dest) +{ $v_result = 1; // ----- Try to rename the files if (!@rename($p_src, $p_dest)) { - // ----- Try to copy & unlink the src - if (!@copy($p_src, $p_dest)) { - $v_result = 0; - } - else if (!@unlink($p_src)) { - $v_result = 0; - } + // ----- Try to copy & unlink the src + if (!@copy($p_src, $p_dest)) { + $v_result = 0; + } elseif (!@unlink($p_src)) { + $v_result = 0; + } } // ----- Return return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilOptionText() - // Description : - // Translate option value in text. Mainly for debug purpose. - // Parameters : - // $p_option : the option value. - // Return Values : - // The option text value. - // -------------------------------------------------------------------------------- - function PclZipUtilOptionText($p_option) - { +} +// -------------------------------------------------------------------------------- + +// -------------------------------------------------------------------------------- +// Function : PclZipUtilOptionText() +// Description : +// Translate option value in text. Mainly for debug purpose. +// Parameters : +// $p_option : the option value. +// Return Values : +// The option text value. +// -------------------------------------------------------------------------------- +function PclZipUtilOptionText($p_option) +{ $v_list = get_defined_constants(); for (reset($v_list); $v_key = key($v_list); next($v_list)) { $v_prefix = substr($v_key, 0, 10); - if (( ($v_prefix == 'PCLZIP_OPT') - || ($v_prefix == 'PCLZIP_CB_') - || ($v_prefix == 'PCLZIP_ATT')) - && ($v_list[$v_key] == $p_option)) { - return $v_key; + if ((($v_prefix == 'PCLZIP_OPT') || ($v_prefix == 'PCLZIP_CB_') || ($v_prefix == 'PCLZIP_ATT')) && ($v_list[$v_key] == $p_option)) { + return $v_key; } } $v_result = 'Unknown'; return $v_result; - } - // -------------------------------------------------------------------------------- - - // -------------------------------------------------------------------------------- - // Function : PclZipUtilTranslateWinPath() - // Description : - // Translate windows path by replacing '\' by '/' and optionally removing - // drive letter. - // Parameters : - // $p_path : path to translate. - // $p_remove_disk_letter : true | false - // Return Values : - // The path translated. - // -------------------------------------------------------------------------------- - function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) - { +} +// -------------------------------------------------------------------------------- + +// -------------------------------------------------------------------------------- +// Function : PclZipUtilTranslateWinPath() +// Description : +// Translate windows path by replacing '\' by '/' and optionally removing +// drive letter. +// Parameters : +// $p_path : path to translate. +// $p_remove_disk_letter : true | false +// Return Values : +// The path translated. +// -------------------------------------------------------------------------------- +function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter = true) +{ if (stristr(php_uname(), 'windows')) { - // ----- Look for potential disk letter - if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { - $p_path = substr($p_path, $v_position+1); - } - // ----- Change potential windows directory separator - if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { - $p_path = strtr($p_path, '\\', '/'); - } + // ----- Look for potential disk letter + if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { + $p_path = substr($p_path, $v_position + 1); + } + // ----- Change potential windows directory separator + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0, 1) == '\\')) { + $p_path = strtr($p_path, '\\', '/'); + } } + return $p_path; - } - // -------------------------------------------------------------------------------- +} +// -------------------------------------------------------------------------------- diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/ZipArchive.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/ZipArchive.php index 4dc4af4e14acb5c1f4d808912174f641fa81a5e4..3d8d0a4133f03c0073ddb1b2c1d2f08c17cfb8b1 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/ZipArchive.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Shared/ZipArchive.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -37,7 +37,7 @@ use PhpOffice\PhpWord\Settings; class ZipArchive { /** @const int Flags for open method */ - const CREATE = 1; // Emulate \ZipArchive::CREATE + const CREATE = 1; // Emulate \ZipArchive::CREATE const OVERWRITE = 8; // Emulate \ZipArchive::OVERWRITE /** @@ -140,7 +140,8 @@ class ZipArchive } else { $zip = new \PclZip($this->filename); $this->tempDir = Settings::getTempDir(); - $this->numFiles = count($zip->listContent()); + $zipContent = $zip->listContent(); + $this->numFiles = is_array($zipContent) ? count($zipContent) : 0; } $this->zip = $zip; @@ -150,17 +151,17 @@ class ZipArchive /** * Close the active archive * - * @return bool - * * @throws \PhpOffice\PhpWord\Exception\Exception * + * @return bool + * * @codeCoverageIgnore Can't find any test case. Uncomment when found. */ public function close() { if (!$this->usePclzip) { if ($this->zip->close() === false) { - throw new Exception("Could not close zip file {$this->filename}."); + throw new Exception("Could not close zip file {$this->filename}: "); } } @@ -183,9 +184,9 @@ class ZipArchive if (!$this->usePclzip) { return $this->zip->extractTo($destination, $entries); - } else { - return $this->pclzipExtractTo($destination, $entries); } + + return $this->pclzipExtractTo($destination, $entries); } /** @@ -301,6 +302,7 @@ class ZipArchive // Extract all files if (is_null($entries)) { $result = $zip->extract(PCLZIP_OPT_PATH, $destination); + return ($result > 0) ? true : false; } @@ -350,7 +352,7 @@ class ZipArchive * Returns the name of an entry using its index (emulate \ZipArchive) * * @param int $index - * @return string + * @return string|bool * @since 0.10.0 */ public function pclzipGetNameIndex($index) @@ -360,9 +362,9 @@ class ZipArchive $list = $zip->listContent(); if (isset($list[$index])) { return $list[$index]['filename']; - } else { - return false; } + + return false; } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/DocProtect.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/DocProtect.php new file mode 100644 index 0000000000000000000000000000000000000000..cffa0003ed60a2b725bf705c71b955be6a54753a --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/DocProtect.php @@ -0,0 +1,55 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\SimpleType; + +use PhpOffice\PhpWord\Shared\AbstractEnum; + +/** + * Document Protection Types + * + * @since 0.14.0 + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_DocProtect.html + */ +final class DocProtect extends AbstractEnum +{ + /** + * No Editing Restrictions + */ + const NONE = 'none'; + + /** + * Allow No Editing + */ + const READ_ONLY = 'readOnly'; + + /** + * Allow Editing of Comments + */ + const COMMENTS = 'comments'; + + /** + * Allow Editing With Revision Tracking + */ + const TRACKED_CHANGES = 'trackedChanges'; + + /** + * Allow Editing of Form Fields + */ + const FORMS = 'forms'; +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Jc.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Jc.php index e90674a4490cac2b8f29caa077c7098dca1eabe5..5d0ee33b83c308963f3ee3305123b3f9b3b9c154 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Jc.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Jc.php @@ -10,14 +10,14 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\SimpleType; -use Zend\Validator\InArray; +use PhpOffice\PhpWord\Shared\AbstractEnum; /** * Horizontal Alignment Type. @@ -28,10 +28,9 @@ use Zend\Validator\InArray; * @since 0.13.0 * * @see \PhpOffice\PhpWord\SimpleType\JcTable For table alignment modes available since ISO/IEC-29500:2008. - * - * @codeCoverageIgnore + * @see http://www.datypic.com/sc/ooxml/t-w_ST_Jc.html */ -final class Jc +final class Jc extends AbstractEnum { const START = 'start'; const CENTER = 'center'; @@ -65,34 +64,4 @@ final class Jc * @deprecated 0.13.0 For documents based on ISO/IEC 29500:2008 and later use `BOTH` instead. */ const JUSTIFY = 'justify'; - - /** - * @since 0.13.0 - * - * @return \Zend\Validator\InArray - */ - final public static function getValidator() - { - // todo: consider caching validator instances. - return new InArray( - array ( - 'haystack' => array( - self::START, - self::CENTER, - self::END, - self::BOTH, - self::MEDIUM_KASHIDA, - self::DISTRIBUTE, - self::NUM_TAB, - self::HIGH_KASHIDA, - self::LOW_KASHIDA, - self::THAI_DISTRIBUTE, - self::LEFT, - self::RIGHT, - self::JUSTIFY, - ), - 'strict' => InArray::COMPARE_STRICT, - ) - ); - } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/JcTable.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/JcTable.php index d9648477d3a39b30c96e7110112ab18546dd12f7..71e073977cb141f21b0d6b440316107852b08395 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/JcTable.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/JcTable.php @@ -10,14 +10,14 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\SimpleType; -use Zend\Validator\InArray; +use PhpOffice\PhpWord\Shared\AbstractEnum; /** * Table Alignment Type. @@ -25,28 +25,10 @@ use Zend\Validator\InArray; * Introduced in ISO/IEC-29500:2008. * * @since 0.13.0 - * - * @codeCoverageIgnore */ -final class JcTable +final class JcTable extends AbstractEnum { const START = 'start'; const CENTER = 'center'; const END = 'end'; - - /** - * @since 0.13.0 - * - * @return \Zend\Validator\InArray - */ - final public static function getValidator() - { - // todo: consider caching validator instances. - return new InArray( - array ( - 'haystack' => array(self::START, self::CENTER, self::END), - 'strict' => InArray::COMPARE_STRICT, - ) - ); - } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/LineSpacingRule.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/LineSpacingRule.php new file mode 100644 index 0000000000000000000000000000000000000000..f2cc5e638bf8d5a71f97e25f96de00b06e9379d1 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/LineSpacingRule.php @@ -0,0 +1,45 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\SimpleType; + +use PhpOffice\PhpWord\Shared\AbstractEnum; + +/** + * Line Spacing Rule + * + * @since 0.14.0 + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_LineSpacingRule.html + */ +final class LineSpacingRule extends AbstractEnum +{ + /** + * Automatically Determined Line Height + */ + const AUTO = 'auto'; + + /** + * Exact Line Height + */ + const EXACT = 'exact'; + + /** + * Minimum Line Height + */ + const AT_LEAST = 'atLeast'; +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/NumberFormat.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/NumberFormat.php new file mode 100644 index 0000000000000000000000000000000000000000..480d85399a4d00f12b3ba1ea455ba569e15d0c12 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/NumberFormat.php @@ -0,0 +1,151 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\SimpleType; + +use PhpOffice\PhpWord\Shared\AbstractEnum; + +/** + * Numbering Format. + * + * @since 0.14.0 + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_NumberFormat.html. + */ +final class NumberFormat extends AbstractEnum +{ + //Decimal Numbers + const DECIMAL = 'decimal'; + //Uppercase Roman Numerals + const UPPER_ROMAN = 'upperRoman'; + //Lowercase Roman Numerals + const LOWER_ROMAN = 'lowerRoman'; + //Uppercase Latin Alphabet + const UPPER_LETTER = 'upperLetter'; + //Lowercase Latin Alphabet + const LOWER_LETTER = 'lowerLetter'; + //Ordinal + const ORDINAL = 'ordinal'; + //Cardinal Text + const CARDINAL_TEXT = 'cardinalText'; + //Ordinal Text + const ORDINAL_TEXT = 'ordinalText'; + //Hexadecimal Numbering + const HEX = 'hex'; + //Chicago Manual of Style + const CHICAGO = 'chicago'; + //Ideographs + const IDEOGRAPH_DIGITAL = 'ideographDigital'; + //Japanese Counting System + const JAPANESE_COUNTING = 'japaneseCounting'; + //AIUEO Order Hiragana + const AIUEO = 'aiueo'; + //Iroha Ordered Katakana + const IROHA = 'iroha'; + //Double Byte Arabic Numerals + const DECIMAL_FULL_WIDTH = 'decimalFullWidth'; + //Single Byte Arabic Numerals + const DECIMAL_HALF_WIDTH = 'decimalHalfWidth'; + //Japanese Legal Numbering + const JAPANESE_LEGAL = 'japaneseLegal'; + //Japanese Digital Ten Thousand Counting System + const JAPANESE_DIGITAL_TEN_THOUSAND = 'japaneseDigitalTenThousand'; + //Decimal Numbers Enclosed in a Circle + const DECIMAL_ENCLOSED_CIRCLE = 'decimalEnclosedCircle'; + //Double Byte Arabic Numerals Alternate + const DECIMAL_FULL_WIDTH2 = 'decimalFullWidth2'; + //Full-Width AIUEO Order Hiragana + const AIUEO_FULL_WIDTH = 'aiueoFullWidth'; + //Full-Width Iroha Ordered Katakana + const IROHA_FULL_WIDTH = 'irohaFullWidth'; + //Initial Zero Arabic Numerals + const DECIMAL_ZERO = 'decimalZero'; + //Bullet + const BULLET = 'bullet'; + //Korean Ganada Numbering + const GANADA = 'ganada'; + //Korean Chosung Numbering + const CHOSUNG = 'chosung'; + //Decimal Numbers Followed by a Period + const DECIMAL_ENCLOSED_FULL_STOP = 'decimalEnclosedFullstop'; + //Decimal Numbers Enclosed in Parenthesis + const DECIMAL_ENCLOSED_PAREN = 'decimalEnclosedParen'; + //Decimal Numbers Enclosed in a Circle + const DECIMAL_ENCLOSED_CIRCLE_CHINESE = 'decimalEnclosedCircleChinese'; + //Ideographs Enclosed in a Circle + const IDEOGRAPHENCLOSEDCIRCLE = 'ideographEnclosedCircle'; + //Traditional Ideograph Format + const IDEOGRAPH_TRADITIONAL = 'ideographTraditional'; + //Zodiac Ideograph Format + const IDEOGRAPH_ZODIAC = 'ideographZodiac'; + //Traditional Zodiac Ideograph Format + const IDEOGRAPH_ZODIAC_TRADITIONAL = 'ideographZodiacTraditional'; + //Taiwanese Counting System + const TAIWANESE_COUNTING = 'taiwaneseCounting'; + //Traditional Legal Ideograph Format + const IDEOGRAPH_LEGAL_TRADITIONAL = 'ideographLegalTraditional'; + //Taiwanese Counting Thousand System + const TAIWANESE_COUNTING_THOUSAND = 'taiwaneseCountingThousand'; + //Taiwanese Digital Counting System + const TAIWANESE_DIGITAL = 'taiwaneseDigital'; + //Chinese Counting System + const CHINESE_COUNTING = 'chineseCounting'; + //Chinese Legal Simplified Format + const CHINESE_LEGAL_SIMPLIFIED = 'chineseLegalSimplified'; + //Chinese Counting Thousand System + const CHINESE_COUNTING_THOUSAND = 'chineseCountingThousand'; + //Korean Digital Counting System + const KOREAN_DIGITAL = 'koreanDigital'; + //Korean Counting System + const KOREAN_COUNTING = 'koreanCounting'; + //Korean Legal Numbering + const KOREAN_LEGAL = 'koreanLegal'; + //Korean Digital Counting System Alternate + const KOREAN_DIGITAL2 = 'koreanDigital2'; + //Vietnamese Numerals + const VIETNAMESE_COUNTING = 'vietnameseCounting'; + //Lowercase Russian Alphabet + const RUSSIAN_LOWER = 'russianLower'; + //Uppercase Russian Alphabet + const RUSSIAN_UPPER = 'russianUpper'; + //No Numbering + const NONE = 'none'; + //Number With Dashes + const NUMBER_IN_DASH = 'numberInDash'; + //Hebrew Numerals + const HEBREW1 = 'hebrew1'; + //Hebrew Alphabet + const HEBREW2 = 'hebrew2'; + //Arabic Alphabet + const ARABIC_ALPHA = 'arabicAlpha'; + //Arabic Abjad Numerals + const ARABIC_ABJAD = 'arabicAbjad'; + //Hindi Vowels + const HINDI_VOWELS = 'hindiVowels'; + //Hindi Consonants + const HINDI_CONSONANTS = 'hindiConsonants'; + //Hindi Numbers + const HINDI_NUMBERS = 'hindiNumbers'; + //Hindi Counting System + const HINDI_COUNTING = 'hindiCounting'; + //Thai Letters + const THAI_LETTERS = 'thaiLetters'; + //Thai Numerals + const THAI_NUMBERS = 'thaiNumbers'; + //Thai Counting System + const THAI_COUNTING = 'thaiCounting'; +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/TextAlignment.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/TextAlignment.php new file mode 100644 index 0000000000000000000000000000000000000000..de36b10852c0ab7175b574a8f16160e366044c13 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/TextAlignment.php @@ -0,0 +1,45 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\SimpleType; + +use PhpOffice\PhpWord\Shared\AbstractEnum; + +/** + * Magnification Preset Values + * + * @since 0.14.0 + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_TextAlignment.html + */ +final class TextAlignment extends AbstractEnum +{ + //Align Text at Top + const TOP = 'top'; + + //Align Text at Center + const CENTER = 'center'; + + //Align Text at Baseline + const BASELINE = 'baseline'; + + //Align Text at Bottom + const BOTTOM = 'bottom'; + + //Automatically Determine Alignment + const AUTO = 'auto'; +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Zoom.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Zoom.php new file mode 100644 index 0000000000000000000000000000000000000000..111e4ea16d3f41b45b662604148a1cc363a79221 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/SimpleType/Zoom.php @@ -0,0 +1,42 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\SimpleType; + +use PhpOffice\PhpWord\Shared\AbstractEnum; + +/** + * Magnification Preset Values + * + * @since 0.14.0 + * + * @see http://www.datypic.com/sc/ooxml/t-w_ST_Zoom.html + */ +final class Zoom extends AbstractEnum +{ + //No Preset Magnification + const NONE = 'none'; + + //Display One Full Page + const FULL_PAGE = 'fullPage'; + + //Display Page Width + const BEST_FIT = 'bestFit'; + + //Display Text Width + const TEXT_FIT = 'textFit'; +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style.php index 57d9d69208b618e637bf221ff46c249c751d0119..1939aabac666673d3c198022cdfb84e79212b40d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -126,8 +126,6 @@ class Style * Reset styles. * * @since 0.10.0 - * - * @return void */ public static function resetStyles() { @@ -165,9 +163,9 @@ class Style { if (isset(self::$styles[$styleName])) { return self::$styles[$styleName]; - } else { - return null; } + + return null; } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/AbstractStyle.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/AbstractStyle.php index 05c79ea2dae929c5320b3fb23cc554eb517bd460..76ebd591c58fe4aa31b89b8f72a2dbc9ff4779aa 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/AbstractStyle.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/AbstractStyle.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -138,10 +138,11 @@ abstract class AbstractStyle { if ($substyleObject !== null) { $method = "get{$substyleProperty}"; + return $substyleObject->$method(); - } else { - return null; } + + return null; } /** @@ -242,12 +243,12 @@ abstract class AbstractStyle protected function setIntVal($value, $default = null) { if (is_string($value) && (preg_match('/[^\d]/', $value) == 0)) { - $value = intval($value); + $value = (int) $value; } if (!is_numeric($value)) { $value = $default; } else { - $value = intval($value); + $value = (int) $value; } return $value; @@ -263,7 +264,7 @@ abstract class AbstractStyle protected function setFloatVal($value, $default = null) { if (is_string($value) && (preg_match('/[^\d\.\,]/', $value) == 0)) { - $value = floatval($value); + $value = (float) $value; } if (!is_numeric($value)) { $value = $default; @@ -279,14 +280,13 @@ abstract class AbstractStyle * @param array $enum * @param mixed $default * - * @return mixed - * * @throws \InvalidArgumentException + * @return mixed */ protected function setEnumVal($value = null, $enum = array(), $default = null) { if ($value != null && trim($value) != '' && !empty($enum) && !in_array($value, $enum)) { - throw new \InvalidArgumentException("Invalid style value: {$value} Options:".join(',', $enum)); + throw new \InvalidArgumentException("Invalid style value: {$value} Options:" . implode(',', $enum)); } elseif ($value === null || trim($value) == '') { $value = $default; } @@ -329,7 +329,7 @@ abstract class AbstractStyle protected function setPairedVal(&$property, &$pairProperty, $value) { $property = $this->setBoolVal($value, $property); - if ($value == true) { + if ($value === true) { $pairProperty = false; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Border.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Border.php index d3bc2e571c6087b9e743f754f741c2199b04207f..ab6aef18b9ba7748ccff560a3ead31f298b67809 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Border.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Border.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -36,6 +36,13 @@ class Border extends AbstractStyle */ protected $borderTopColor; + /** + * Border Top Style + * + * @var string + */ + protected $borderTopStyle; + /** * Border Left Size * @@ -50,6 +57,13 @@ class Border extends AbstractStyle */ protected $borderLeftColor; + /** + * Border Left Style + * + * @var string + */ + protected $borderLeftStyle; + /** * Border Right Size * @@ -64,6 +78,13 @@ class Border extends AbstractStyle */ protected $borderRightColor; + /** + * Border Right Style + * + * @var string + */ + protected $borderRightStyle; + /** * Border Bottom Size * @@ -78,10 +99,17 @@ class Border extends AbstractStyle */ protected $borderBottomColor; + /** + * Border Bottom Style + * + * @var string + */ + protected $borderBottomStyle; + /** * Get border size * - * @return integer[] + * @return int[] */ public function getBorderSize() { @@ -140,6 +168,37 @@ class Border extends AbstractStyle return $this; } + /** + * Get border style + * + * @return string[] + */ + public function getBorderStyle() + { + return array( + $this->getBorderTopStyle(), + $this->getBorderLeftStyle(), + $this->getBorderRightStyle(), + $this->getBorderBottomStyle(), + ); + } + + /** + * Set border style + * + * @param string $value + * @return self + */ + public function setBorderStyle($value = null) + { + $this->setBorderTopStyle($value); + $this->setBorderLeftStyle($value); + $this->setBorderRightStyle($value); + $this->setBorderBottomStyle($value); + + return $this; + } + /** * Get border top size * @@ -186,6 +245,29 @@ class Border extends AbstractStyle return $this; } + /** + * Get border top style + * + * @return string + */ + public function getBorderTopStyle() + { + return $this->borderTopStyle; + } + + /** + * Set border top Style + * + * @param string $value + * @return self + */ + public function setBorderTopStyle($value = null) + { + $this->borderTopStyle = $value; + + return $this; + } + /** * Get border left size * @@ -232,6 +314,29 @@ class Border extends AbstractStyle return $this; } + /** + * Get border left style + * + * @return string + */ + public function getBorderLeftStyle() + { + return $this->borderLeftStyle; + } + + /** + * Set border left style + * + * @param string $value + * @return self + */ + public function setBorderLeftStyle($value = null) + { + $this->borderLeftStyle = $value; + + return $this; + } + /** * Get border right size * @@ -278,6 +383,29 @@ class Border extends AbstractStyle return $this; } + /** + * Get border right style + * + * @return string + */ + public function getBorderRightStyle() + { + return $this->borderRightStyle; + } + + /** + * Set border right style + * + * @param string $value + * @return self + */ + public function setBorderRightStyle($value = null) + { + $this->borderRightStyle = $value; + + return $this; + } + /** * Get border bottom size * @@ -324,6 +452,29 @@ class Border extends AbstractStyle return $this; } + /** + * Get border bottom style + * + * @return string + */ + public function getBorderBottomStyle() + { + return $this->borderBottomStyle; + } + + /** + * Set border bottom style + * + * @param string $value + * @return self + */ + public function setBorderBottomStyle($value = null) + { + $this->borderBottomStyle = $value; + + return $this; + } + /** * Check if any of the border is not null * diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Cell.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Cell.php index 7bab8b56c2c186bc6dee49391de18014038818e5..c281f99872c7a54e4baef58b0e9627df06c4e7e9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Cell.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Cell.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -32,13 +32,31 @@ class Cell extends Border const VALIGN_BOTTOM = 'bottom'; const VALIGN_BOTH = 'both'; + //Text direction constants /** - * Text direction constants - * - * @const string + * Left to Right, Top to Bottom + */ + const TEXT_DIR_LRTB = 'lrTb'; + /** + * Top to Bottom, Right to Left */ - const TEXT_DIR_BTLR = 'btLr'; const TEXT_DIR_TBRL = 'tbRl'; + /** + * Bottom to Top, Left to Right + */ + const TEXT_DIR_BTLR = 'btLr'; + /** + * Left to Right, Top to Bottom Rotated + */ + const TEXT_DIR_LRTBV = 'lrTbV'; + /** + * Top to Bottom, Right to Left Rotated + */ + const TEXT_DIR_TBRLV = 'tbRlV'; + /** + * Top to Bottom, Left to Right Rotated + */ + const TEXT_DIR_TBLRV = 'tbLrV'; /** * Vertical merge (rowspan) constants @@ -72,7 +90,7 @@ class Cell extends Border /** * colspan * - * @var integer + * @var int */ private $gridSpan; @@ -93,6 +111,20 @@ class Cell extends Border */ private $shading; + /** + * Width + * + * @var int + */ + private $width; + + /** + * Width unit + * + * @var string + */ + private $unit = Table::WIDTH_TWIP; + /** * Get vertical align. * @@ -150,9 +182,9 @@ class Cell extends Border { if ($this->shading !== null) { return $this->shading->getFill(); - } else { - return null; } + + return null; } /** @@ -169,7 +201,7 @@ class Cell extends Border /** * Get grid span (colspan). * - * @return integer + * @return int */ public function getGridSpan() { @@ -236,6 +268,51 @@ class Cell extends Border return $this; } + /** + * Get cell width + * + * @return int + */ + public function getWidth() + { + return $this->width; + } + + /** + * Set cell width + * + * @param int $value + * @return self + */ + public function setWidth($value) + { + $this->setIntVal($value); + + return $this; + } + + /** + * Get width unit + * + * @return string + */ + public function getUnit() + { + return $this->unit; + } + + /** + * Set width unit + * + * @param string $value + */ + public function setUnit($value) + { + $this->unit = $this->setEnumVal($value, array(Table::WIDTH_AUTO, Table::WIDTH_PERCENT, Table::WIDTH_TWIP), Table::WIDTH_TWIP); + + return $this; + } + /** * Get default border color * diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Chart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Chart.php index 8e1f4b61b55138a2b6bf97079cb2075720615db2..694fcddcccfc0b21c36c0af15556c0865144399f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Chart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Chart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -24,7 +24,6 @@ namespace PhpOffice\PhpWord\Style; */ class Chart extends AbstractStyle { - /** * Width (in EMU) * diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Extrusion.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Extrusion.php index d8c5e65ffc3fd73a89d7d0b8134207e514e0acd3..11c03edadac1cd1f2810b52ac35cdc1ad38727f0 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Extrusion.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Extrusion.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,7 +20,7 @@ namespace PhpOffice\PhpWord\Style; /** * 3D extrusion style * - * @link http://www.schemacentral.com/sc/ooxml/t-o_CT_Extrusion.html + * @see http://www.schemacentral.com/sc/ooxml/t-o_CT_Extrusion.html * @since 0.12.0 */ class Extrusion extends AbstractStyle diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Fill.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Fill.php index cf6ffb4115ac3aa2c5fdf52012d2a34f22e6d8d1..9b4730093bf543bb897544955e123a65ede91f5b 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Fill.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Fill.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,9 +20,9 @@ namespace PhpOffice\PhpWord\Style; /** * Fill style * - * There are still lot of interesting things for this style that can be added, including gradient. See @link. + * There are still lot of interesting things for this style that can be added, including gradient. See @see . * - * @link http://www.schemacentral.com/sc/ooxml/t-v_CT_Fill.html + * @see http://www.schemacentral.com/sc/ooxml/t-v_CT_Fill.html * @since 0.12.0 */ class Fill extends AbstractStyle diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Font.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Font.php index b625e3b8a9d2beb26bc34670585a275c7fa4b1d9..8bfb3ac5d0e715f8966c1ac32d30f9318e8cb10f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Font.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Font.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -33,8 +33,16 @@ class Font extends AbstractStyle const UNDERLINE_DASHLONG = 'dashLong'; const UNDERLINE_DASHLONGHEAVY = 'dashLongHeavy'; const UNDERLINE_DOUBLE = 'dbl'; - const UNDERLINE_DOTHASH = 'dotDash'; - const UNDERLINE_DOTHASHHEAVY = 'dotDashHeavy'; + /** + * @deprecated use UNDERLINE_DOTHASH instead, TODO remove in version 1.0 + */ + const UNDERLINE_DOTHASH = 'dotDash'; // Incorrect spelling, for backwards compatibility + /** + * @deprecated use UNDERLINE_DOTDASHHEAVY instead, TODO remove in version 1.0 + */ + const UNDERLINE_DOTHASHHEAVY = 'dotDashHeavy'; // Incorrect spelling, for backwards compatibility + const UNDERLINE_DOTDASH = 'dotDash'; + const UNDERLINE_DOTDASHHEAVY = 'dotDashHeavy'; const UNDERLINE_DOTDOTDASH = 'dotDotDash'; const UNDERLINE_DOTDOTDASHHEAVY = 'dotDotDashHeavy'; const UNDERLINE_DOTTED = 'dotted'; @@ -162,7 +170,7 @@ class Font extends AbstractStyle * Small caps * * @var bool - * @link http://www.schemacentral.com/sc/ooxml/e-w_smallCaps-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_smallCaps-1.html */ private $smallCaps = false; @@ -170,7 +178,7 @@ class Font extends AbstractStyle * All caps * * @var bool - * @link http://www.schemacentral.com/sc/ooxml/e-w_caps-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_caps-1.html */ private $allCaps = false; @@ -186,7 +194,7 @@ class Font extends AbstractStyle * * @var int * @since 0.12.0 - * @link http://www.schemacentral.com/sc/ooxml/e-w_w-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_w-1.html */ private $scale; @@ -195,7 +203,7 @@ class Font extends AbstractStyle * * @var int|float * @since 0.12.0 - * @link http://www.schemacentral.com/sc/ooxml/e-w_spacing-2.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_spacing-2.html */ private $spacing; @@ -204,7 +212,7 @@ class Font extends AbstractStyle * * @var int|float * @since 0.12.0 - * @link http://www.schemacentral.com/sc/ooxml/e-w_kern-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_kern-1.html */ private $kerning; @@ -223,11 +231,17 @@ class Font extends AbstractStyle private $shading; /** - * Right to left languages - * @var boolean + * Right to left languages + * @var bool */ private $rtl = false; + /** + * Languages + * @var \PhpOffice\PhpWord\Style\Language + */ + private $lang; + /** * Create new font style * @@ -276,6 +290,7 @@ class Font extends AbstractStyle 'paragraph' => $this->getParagraph(), 'rtl' => $this->isRTL(), 'shading' => $this->getShading(), + 'lang' => $this->getLang(), ); return $styles; @@ -725,7 +740,7 @@ class Font extends AbstractStyle } /** - * Set shading + * Set Paragraph * * @param mixed $value * @return self @@ -783,6 +798,32 @@ class Font extends AbstractStyle return $this; } + /** + * Get language + * + * @return \PhpOffice\PhpWord\Style\Language + */ + public function getLang() + { + return $this->lang; + } + + /** + * Set language + * + * @param mixed $value + * @return self + */ + public function setLang($value = null) + { + if (is_string($value) && $value != '') { + $value = new Language($value); + } + $this->setObjectVal($value, 'Language', $this->lang); + + return $this; + } + /** * Get bold * diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Frame.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Frame.php index 97faacfb917cacef268246b214d3c2b5ea89d96e..a8e1c69d20d48807fd98ded292de27c7026cdae1 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Frame.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Frame.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -200,7 +200,7 @@ class Frame extends AbstractStyle */ public function setAlignment($value) { - if (Jc::getValidator()->isValid($value)) { + if (Jc::isValid($value)) { $this->alignment = $value; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Image.php index f2c88b5f0f79f844672e1b08861166446d42cd1e..e0b972158dfd3de8bf44d2583128d5026faf9c81 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Image.php @@ -10,10 +10,11 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ + namespace PhpOffice\PhpWord\Style; /** @@ -60,9 +61,9 @@ class Image extends Frame public function __construct() { parent::__construct(); - $this->setUnit('px'); + $this->setUnit(self::UNIT_PT); - // Backward compatilibity setting + // Backward compatibility setting // @todo Remove on 1.0.0 $this->setWrap(self::WRAPPING_STYLE_INLINE); $this->setHPos(self::POSITION_HORIZONTAL_LEFT); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Indentation.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Indentation.php index 0408929b8f995d9213047e7958ad9e0045d06947..9621714c747e9c245cbb959ecf20db069a667a36 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Indentation.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Indentation.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,7 +20,7 @@ namespace PhpOffice\PhpWord\Style; /** * Paragraph indentation style * - * @link http://www.schemacentral.com/sc/ooxml/t-w_CT_Ind.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_CT_Ind.html * @since 0.10.0 */ class Indentation extends AbstractStyle diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Language.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Language.php new file mode 100644 index 0000000000000000000000000000000000000000..e09421e05ecae869c69989e163a757b0fe816936 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Language.php @@ -0,0 +1,223 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Style; + +/** + * Language + * A couple of predefined values are defined here, see the websites below for more values + * + * @see http://www.datypic.com/sc/ooxml/t-w_CT_Language.html + * @see https://technet.microsoft.com/en-us/library/cc287874(v=office.12).aspx + */ +final class Language extends AbstractStyle +{ + const EN_US = 'en-US'; + const EN_US_ID = 1033; + + const EN_GB = 'en-GB'; + const EN_GB_ID = 2057; + + const FR_FR = 'fr-FR'; + const FR_FR_ID = 1036; + + const FR_BE = 'fr-BE'; + const FR_BE_ID = 2060; + + const ES_ES = 'es-ES'; + const ES_ES_ID = 3082; + + const DE_DE = 'de-DE'; + const DE_DE_ID = 1031; + + const HE_IL = 'he-IL'; + const HE_IL_ID = 1037; + + const JA_JP = 'ja-JP'; + const JA_JP_ID = 1041; + + const KO_KR = 'ko-KR'; + const KO_KR_ID = 1042; + + const ZH_CN = 'zh-CN'; + const ZH_CN_ID = 2052; + + const HI_IN = 'hi-IN'; + const HI_IN_ID = 1081; + + /** + * Language ID, used for RTF document generation + * + * @var int + * @see https://technet.microsoft.com/en-us/library/cc179219.aspx + */ + private $langId; + + /** + * Latin Language + * + * @var string + */ + private $latin; + + /** + * East Asian Language + * + * @var string + */ + private $eastAsia; + + /** + * Complex Script Language + * + * @var string + */ + private $bidirectional; + + /** + * Constructor + * + * @param string|null $latin + * @param string|null $eastAsia + * @param string|null $bidirectional + */ + public function __construct($latin = null, $eastAsia = null, $bidirectional = null) + { + if (!empty($latin)) { + $this->setLatin($latin); + } + if (!empty($eastAsia)) { + $this->setEastAsia($eastAsia); + } + if (!empty($bidirectional)) { + $this->setBidirectional($bidirectional); + } + } + + /** + * Set the Latin Language + * + * @param string $latin + * The value for the latin language + * @return self + */ + public function setLatin($latin) + { + $this->validateLocale($latin); + $this->latin = $latin; + + return $this; + } + + /** + * Get the Latin Language + * + * @return string|null + */ + public function getLatin() + { + return $this->latin; + } + + /** + * Set the Language ID + * + * @param int $langId + * The value for the language ID + * @return self + * @see https://technet.microsoft.com/en-us/library/cc287874(v=office.12).aspx + */ + public function setLangId($langId) + { + $this->langId = $langId; + + return $this; + } + + /** + * Get the Language ID + * + * @return int + */ + public function getLangId() + { + return $this->langId; + } + + /** + * Set the East Asian Language + * + * @param string $eastAsia + * The value for the east asian language + * @return self + */ + public function setEastAsia($eastAsia) + { + $this->validateLocale($eastAsia); + $this->eastAsia = $eastAsia; + + return $this; + } + + /** + * Get the East Asian Language + * + * @return string|null + */ + public function getEastAsia() + { + return $this->eastAsia; + } + + /** + * Set the Complex Script Language + * + * @param string $bidirectional + * The value for the complex script language + * @return self + */ + public function setBidirectional($bidirectional) + { + $this->validateLocale($bidirectional); + $this->bidirectional = $bidirectional; + + return $this; + } + + /** + * Get the Complex Script Language + * + * @return string|null + */ + public function getBidirectional() + { + return $this->bidirectional; + } + + /** + * Validates that the language passed is in the format xx-xx + * + * @param string $locale + * @return bool + */ + private function validateLocale($locale) + { + if ($locale !== null && strstr($locale, '-') === false) { + throw new \InvalidArgumentException($locale . ' is not a valid language code'); + } + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Line.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Line.php index f8cc4026f020047feffa05180d81495971e09686..16d15950a2bf7bba8f8d9d18c0c8db23e637c089 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Line.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Line.php @@ -10,10 +10,11 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ + namespace PhpOffice\PhpWord\Style; /** @@ -55,7 +56,7 @@ class Line extends Image /** * flip Line * - * @var boolean + * @var bool */ private $flip = false; @@ -104,7 +105,7 @@ class Line extends Image /** * Get flip * - * @return boolean + * @return bool */ public function isFlip() { @@ -114,7 +115,7 @@ class Line extends Image /** * Set flip * - * @param boolean $value + * @param bool $value * @return self */ public function setFlip($value = false) @@ -143,7 +144,7 @@ class Line extends Image public function setConnectorType($value = null) { $enum = array( - self::CONNECTOR_TYPE_STRAIGHT + self::CONNECTOR_TYPE_STRAIGHT, ); $this->connectorType = $this->setEnumVal($value, $enum, $this->connectorType); @@ -216,7 +217,7 @@ class Line extends Image { $enum = array( self::ARROW_STYLE_BLOCK, self::ARROW_STYLE_CLASSIC, self::ARROW_STYLE_DIAMOND, - self::ARROW_STYLE_OPEN, self::ARROW_STYLE_OVAL + self::ARROW_STYLE_OPEN, self::ARROW_STYLE_OVAL, ); $this->beginArrow = $this->setEnumVal($value, $enum, $this->beginArrow); @@ -243,7 +244,7 @@ class Line extends Image { $enum = array( self::ARROW_STYLE_BLOCK, self::ARROW_STYLE_CLASSIC, self::ARROW_STYLE_DIAMOND, - self::ARROW_STYLE_OPEN, self::ARROW_STYLE_OVAL + self::ARROW_STYLE_OPEN, self::ARROW_STYLE_OVAL, ); $this->endArrow = $this->setEnumVal($value, $enum, $this->endArrow); @@ -271,7 +272,7 @@ class Line extends Image $enum = array( self::DASH_STYLE_DASH, self::DASH_STYLE_DASH_DOT, self::DASH_STYLE_LONG_DASH, self::DASH_STYLE_LONG_DASH_DOT, self::DASH_STYLE_LONG_DASH_DOT_DOT, self::DASH_STYLE_ROUND_DOT, - self::DASH_STYLE_SQUARE_DOT + self::DASH_STYLE_SQUARE_DOT, ); $this->dash = $this->setEnumVal($value, $enum, $this->dash); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/LineNumbering.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/LineNumbering.php index e125f4771762d5be7c6810b4ae7fc22333daf61d..b5f3c263e726cce3812d41aa0882cf1577ab6e28 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/LineNumbering.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/LineNumbering.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,14 +20,14 @@ namespace PhpOffice\PhpWord\Style; /** * Line numbering style * - * @link http://www.schemacentral.com/sc/ooxml/t-w_CT_LineNumber.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_CT_LineNumber.html * @since 0.10.0 */ class LineNumbering extends AbstractStyle { /** @const string Line numbering restart setting http://www.schemacentral.com/sc/ooxml/a-w_restart-1.html */ - const LINE_NUMBERING_CONTINUOUS = 'continuous'; - const LINE_NUMBERING_NEW_PAGE = 'newPage'; + const LINE_NUMBERING_CONTINUOUS = 'continuous'; + const LINE_NUMBERING_NEW_PAGE = 'newPage'; const LINE_NUMBERING_NEW_SECTION = 'newSection'; /** @@ -55,7 +55,7 @@ class LineNumbering extends AbstractStyle * Line numbering restart setting continuous|newPage|newSection * * @var string - * @link http://www.schemacentral.com/sc/ooxml/a-w_restart-1.html + * @see http://www.schemacentral.com/sc/ooxml/a-w_restart-1.html */ private $restart; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/ListItem.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/ListItem.php index 18ea0bf264c30fbad3fb9a99323996d98f983363..444341dc197e06d0860756d5b4774320f7b154c6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/ListItem.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/ListItem.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -38,7 +38,7 @@ class ListItem extends AbstractStyle /** * Legacy list type * - * @var integer + * @var int */ private $listType; @@ -53,7 +53,7 @@ class ListItem extends AbstractStyle /** * Numbering definition instance ID * - * @var integer + * @var int * @since 0.10.0 */ private $numId; @@ -75,7 +75,7 @@ class ListItem extends AbstractStyle /** * Get List Type * - * @return integer + * @return int */ public function getListType() { @@ -85,7 +85,7 @@ class ListItem extends AbstractStyle /** * Set legacy list type for version < 0.10.0 * - * @param integer $value + * @param int $value * @return self */ public function setListType($value = self::TYPE_BULLET_FILLED) @@ -93,7 +93,7 @@ class ListItem extends AbstractStyle $enum = array( self::TYPE_SQUARE_FILLED, self::TYPE_BULLET_FILLED, self::TYPE_BULLET_EMPTY, self::TYPE_NUMBER, - self::TYPE_NUMBER_NESTED, self::TYPE_ALPHANUM + self::TYPE_NUMBER_NESTED, self::TYPE_ALPHANUM, ); $this->listType = $this->setEnumVal($value, $enum, $this->listType); $this->getListTypeStyle(); @@ -132,7 +132,7 @@ class ListItem extends AbstractStyle /** * Get numbering Id * - * @return integer + * @return int */ public function getNumId() { @@ -151,6 +151,7 @@ class ListItem extends AbstractStyle $numStyle = "PHPWordList{$this->listType}"; if (Style::getStyle($numStyle) !== null) { $this->setNumStyle($numStyle); + return; } @@ -160,7 +161,7 @@ class ListItem extends AbstractStyle // Legacy level information $listTypeStyles = array( self::TYPE_SQUARE_FILLED => array( - 'type' => 'hybridMultilevel', + 'type' => 'hybridMultilevel', 'levels' => array( 0 => '1, bullet, , left, 720, 720, 360, Wingdings, default', 1 => '1, bullet, o, left, 1440, 1440, 360, Courier New, default', @@ -174,7 +175,7 @@ class ListItem extends AbstractStyle ), ), self::TYPE_BULLET_FILLED => array( - 'type' => 'hybridMultilevel', + 'type' => 'hybridMultilevel', 'levels' => array( 0 => '1, bullet, , left, 720, 720, 360, Symbol, default', 1 => '1, bullet, o, left, 1440, 1440, 360, Courier New, default', @@ -188,7 +189,7 @@ class ListItem extends AbstractStyle ), ), self::TYPE_BULLET_EMPTY => array( - 'type' => 'hybridMultilevel', + 'type' => 'hybridMultilevel', 'levels' => array( 0 => '1, bullet, o, left, 720, 720, 360, Courier New, default', 1 => '1, bullet, o, left, 1440, 1440, 360, Courier New, default', @@ -202,7 +203,7 @@ class ListItem extends AbstractStyle ), ), self::TYPE_NUMBER => array( - 'type' => 'hybridMultilevel', + 'type' => 'hybridMultilevel', 'levels' => array( 0 => '1, decimal, %1., left, 720, 720, 360, , default', 1 => '1, bullet, o, left, 1440, 1440, 360, Courier New, default', @@ -216,7 +217,7 @@ class ListItem extends AbstractStyle ), ), self::TYPE_NUMBER_NESTED => array( - 'type' => 'multilevel', + 'type' => 'multilevel', 'levels' => array( 0 => '1, decimal, %1., left, 360, 360, 360, , ', 1 => '1, decimal, %1.%2., left, 792, 792, 432, , ', @@ -230,7 +231,7 @@ class ListItem extends AbstractStyle ), ), self::TYPE_ALPHANUM => array( - 'type' => 'multilevel', + 'type' => 'multilevel', 'levels' => array( 0 => '1, decimal, %1., left, 720, 720, 360, , ', 1 => '1, lowerLetter, %2., left, 1440, 1440, 360, , ', @@ -247,11 +248,12 @@ class ListItem extends AbstractStyle // Populate style and register to global Style register $style = $listTypeStyles[$this->listType]; + $numProperties = count($properties); foreach ($style['levels'] as $key => $value) { $level = array(); $levelProperties = explode(', ', $value); $level['level'] = $key; - for ($i = 0; $i < count($properties); $i++) { + for ($i = 0; $i < $numProperties; $i++) { $property = $properties[$i]; $level[$property] = $levelProperties[$i]; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Numbering.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Numbering.php index 0d4fd85d3e1e742fa9947f063072f76a9d6b42cc..80ed5dca66380136473a5b1c198cd3cafec80b8e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Numbering.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Numbering.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,9 +20,9 @@ namespace PhpOffice\PhpWord\Style; /** * Numbering style * - * @link http://www.schemacentral.com/sc/ooxml/e-w_numbering.html - * @link http://www.schemacentral.com/sc/ooxml/e-w_abstractNum-1.html - * @link http://www.schemacentral.com/sc/ooxml/e-w_num-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_numbering.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_abstractNum-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_num-1.html * @since 0.10.0 */ class Numbering extends AbstractStyle @@ -31,7 +31,7 @@ class Numbering extends AbstractStyle * Numbering definition instance ID * * @var int - * @link http://www.schemacentral.com/sc/ooxml/e-w_num-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_num-1.html */ private $numId; @@ -39,7 +39,7 @@ class Numbering extends AbstractStyle * Multilevel type singleLevel|multilevel|hybridMultilevel * * @var string - * @link http://www.schemacentral.com/sc/ooxml/a-w_val-67.html + * @see http://www.schemacentral.com/sc/ooxml/a-w_val-67.html */ private $type; @@ -53,7 +53,7 @@ class Numbering extends AbstractStyle /** * Get Id * - * @return integer + * @return int */ public function getNumId() { @@ -63,7 +63,7 @@ class Numbering extends AbstractStyle /** * Set Id * - * @param integer $value + * @param int $value * @return self */ public function setNumId($value) diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/NumberingLevel.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/NumberingLevel.php index 51ae61486cc59841238e839e0c81b7ef56a3c01c..33c151e490bd63a94283b52ae3ce465af0c16fff 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/NumberingLevel.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/NumberingLevel.php @@ -10,19 +10,20 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\SimpleType\Jc; +use PhpOffice\PhpWord\SimpleType\NumberFormat; /** * Numbering level definition * - * @link http://www.schemacentral.com/sc/ooxml/e-w_lvl-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_lvl-1.html * @since 0.10.0 */ class NumberingLevel extends AbstractStyle @@ -30,31 +31,31 @@ class NumberingLevel extends AbstractStyle /** * Level number, 0 to 8 (total 9 levels) * - * @var integer + * @var int */ private $level = 0; /** * Starting value w:start * - * @var integer - * @link http://www.schemacentral.com/sc/ooxml/e-w_start-1.html + * @var int + * @see http://www.schemacentral.com/sc/ooxml/e-w_start-1.html */ private $start = 1; /** - * Numbering format bullet|decimal|upperRoman|lowerRoman|upperLetter|lowerLetter + * Numbering format w:numFmt, one of PhpOffice\PhpWord\SimpleType\NumberFormat * * @var string - * @link http://www.schemacentral.com/sc/ooxml/t-w_ST_NumberFormat.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_ST_NumberFormat.html */ private $format; /** * Restart numbering level symbol w:lvlRestart * - * @var integer - * @link http://www.schemacentral.com/sc/ooxml/e-w_lvlRestart-1.html + * @var int + * @see http://www.schemacentral.com/sc/ooxml/e-w_lvlRestart-1.html */ private $restart; @@ -62,15 +63,15 @@ class NumberingLevel extends AbstractStyle * Related paragraph style * * @var string - * @link http://www.schemacentral.com/sc/ooxml/e-w_pStyle-2.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_pStyle-2.html */ private $pStyle; /** - * Content between numbering symbol and paragraph text + * Content between numbering symbol and paragraph text w:suff * * @var string tab|space|nothing - * @link http://www.schemacentral.com/sc/ooxml/e-w_suff-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_suff-1.html */ private $suffix = 'tab'; @@ -78,33 +79,35 @@ class NumberingLevel extends AbstractStyle * Numbering level text e.g. %1 for nonbullet or bullet character * * @var string - * @link http://www.schemacentral.com/sc/ooxml/e-w_lvlText-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_lvlText-1.html */ private $text; /** - * @var string + * Justification, w:lvlJc + * + * @var string, one of PhpOffice\PhpWord\SimpleType\Jc */ private $alignment = ''; /** * Left * - * @var integer + * @var int */ private $left; /** * Hanging * - * @var integer + * @var int */ private $hanging; /** * Tab position * - * @var integer + * @var int */ private $tabPos; @@ -119,14 +122,14 @@ class NumberingLevel extends AbstractStyle * Hint default|eastAsia|cs * * @var string - * @link http://www.schemacentral.com/sc/ooxml/a-w_hint-1.html + * @see http://www.schemacentral.com/sc/ooxml/a-w_hint-1.html */ private $hint; /** * Get level * - * @return integer + * @return int */ public function getLevel() { @@ -136,19 +139,20 @@ class NumberingLevel extends AbstractStyle /** * Set level * - * @param integer $value + * @param int $value * @return self */ public function setLevel($value) { $this->level = $this->setIntVal($value, $this->level); + return $this; } /** * Get start * - * @return integer + * @return int */ public function getStart() { @@ -158,12 +162,13 @@ class NumberingLevel extends AbstractStyle /** * Set start * - * @param integer $value + * @param int $value * @return self */ public function setStart($value) { $this->start = $this->setIntVal($value, $this->start); + return $this; } @@ -185,15 +190,15 @@ class NumberingLevel extends AbstractStyle */ public function setFormat($value) { - $enum = array('bullet', 'decimal', 'upperRoman', 'lowerRoman', 'upperLetter', 'lowerLetter'); - $this->format = $this->setEnumVal($value, $enum, $this->format); + $this->format = $this->setEnumVal($value, NumberFormat::values(), $this->format); + return $this; } /** - * Get start + * Get restart * - * @return integer + * @return int */ public function getRestart() { @@ -201,14 +206,15 @@ class NumberingLevel extends AbstractStyle } /** - * Set start + * Set restart * - * @param integer $value + * @param int $value * @return self */ public function setRestart($value) { $this->restart = $this->setIntVal($value, $this->restart); + return $this; } @@ -231,6 +237,7 @@ class NumberingLevel extends AbstractStyle public function setPStyle($value) { $this->pStyle = $value; + return $this; } @@ -254,6 +261,7 @@ class NumberingLevel extends AbstractStyle { $enum = array('tab', 'space', 'nothing'); $this->suffix = $this->setEnumVal($value, $enum, $this->suffix); + return $this; } @@ -276,6 +284,7 @@ class NumberingLevel extends AbstractStyle public function setText($value) { $this->text = $value; + return $this; } @@ -298,7 +307,7 @@ class NumberingLevel extends AbstractStyle */ public function setAlignment($value) { - if (Jc::getValidator()->isValid($value)) { + if (Jc::isValid($value)) { $this->alignment = $value; } @@ -334,7 +343,7 @@ class NumberingLevel extends AbstractStyle /** * Get left * - * @return integer + * @return int */ public function getLeft() { @@ -344,19 +353,20 @@ class NumberingLevel extends AbstractStyle /** * Set left * - * @param integer $value + * @param int $value * @return self */ public function setLeft($value) { $this->left = $this->setIntVal($value, $this->left); + return $this; } /** * Get hanging * - * @return integer + * @return int */ public function getHanging() { @@ -366,19 +376,20 @@ class NumberingLevel extends AbstractStyle /** * Set hanging * - * @param integer $value + * @param int $value * @return self */ public function setHanging($value) { $this->hanging = $this->setIntVal($value, $this->hanging); + return $this; } /** * Get tab * - * @return integer + * @return int */ public function getTabPos() { @@ -388,12 +399,13 @@ class NumberingLevel extends AbstractStyle /** * Set tab * - * @param integer $value + * @param int $value * @return self */ public function setTabPos($value) { $this->tabPos = $this->setIntVal($value, $this->tabPos); + return $this; } @@ -416,6 +428,7 @@ class NumberingLevel extends AbstractStyle public function setFont($value) { $this->font = $value; + return $this; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Outline.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Outline.php index 8628c4c5fbf5461def55e1f2ca969e067ce195a7..fb7e028a8b0887ae5a7260907ec8ae9125893b45 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Outline.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Outline.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,8 +20,8 @@ namespace PhpOffice\PhpWord\Style; /** * Outline defines the line/border of the object * - * @link http://www.schemacentral.com/sc/ooxml/t-v_CT_Stroke.html - * @link http://www.w3.org/TR/1998/NOTE-VML-19980513#_Toc416858395 + * @see http://www.schemacentral.com/sc/ooxml/t-v_CT_Stroke.html + * @see http://www.w3.org/TR/1998/NOTE-VML-19980513#_Toc416858395 * @since 0.12.0 */ class Outline extends AbstractStyle @@ -29,7 +29,7 @@ class Outline extends AbstractStyle /** * Line style constants * - * @link http://www.schemacentral.com/sc/ooxml/t-v_ST_StrokeLineStyle.html + * @see http://www.schemacentral.com/sc/ooxml/t-v_ST_StrokeLineStyle.html * @const string */ const LINE_SINGLE = 'single'; @@ -41,7 +41,7 @@ class Outline extends AbstractStyle /** * Line style constants * - * @link http://www.schemacentral.com/sc/ooxml/t-v_ST_StrokeEndCap.html + * @see http://www.schemacentral.com/sc/ooxml/t-v_ST_StrokeEndCap.html * @const string */ const ENDCAP_FLAT = 'flat'; @@ -51,7 +51,7 @@ class Outline extends AbstractStyle /** * Arrowhead type constants * - * @link http://www.schemacentral.com/sc/ooxml/t-v_ST_StrokeArrowType.html + * @see http://www.schemacentral.com/sc/ooxml/t-v_ST_StrokeArrowType.html * @const string */ const ARROW_NONE = 'none'; @@ -100,7 +100,7 @@ class Outline extends AbstractStyle * End cap * * @var string - * @link http://www.schemacentral.com/sc/ooxml/t-v_ST_StrokeEndCap.html + * @see http://www.schemacentral.com/sc/ooxml/t-v_ST_StrokeEndCap.html */ private $endCap; @@ -226,7 +226,7 @@ class Outline extends AbstractStyle public function setLine($value = null) { $enum = array(self::LINE_SINGLE, self::LINE_THIN_THIN, self::LINE_THIN_THICK, - self::LINE_THICK_THIN, self::LINE_THICK_BETWEEN_THIN); + self::LINE_THICK_THIN, self::LINE_THICK_BETWEEN_THIN, ); $this->line = $this->setEnumVal($value, $enum, null); return $this; @@ -275,7 +275,7 @@ class Outline extends AbstractStyle public function setStartArrow($value = null) { $enum = array(self::ARROW_NONE, self::ARROW_BLOCK, self::ARROW_CLASSIC, - self::ARROW_OVAL, self::ARROW_DIAMOND, self::ARROW_OPEN); + self::ARROW_OVAL, self::ARROW_DIAMOND, self::ARROW_OPEN, ); $this->startArrow = $this->setEnumVal($value, $enum, null); return $this; @@ -300,7 +300,7 @@ class Outline extends AbstractStyle public function setEndArrow($value = null) { $enum = array(self::ARROW_NONE, self::ARROW_BLOCK, self::ARROW_CLASSIC, - self::ARROW_OVAL, self::ARROW_DIAMOND, self::ARROW_OPEN); + self::ARROW_OVAL, self::ARROW_DIAMOND, self::ARROW_OPEN, ); $this->endArrow = $this->setEnumVal($value, $enum, null); return $this; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paper.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paper.php index ed1c59ebebbf9f76cb87f883e495bb17e06ea2c3..09e4769e90139072f1f6d2481ddeeecd8520e144 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paper.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paper.php @@ -10,13 +10,15 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Style; +use PhpOffice\PhpWord\Shared\Converter; + /** * Paper size from ISO/IEC 29500-1:2012 pg. 1656-1657 * @@ -100,6 +102,7 @@ class Paper extends AbstractStyle 'A3' => array(297, 420, 'mm'), 'A4' => array(210, 297, 'mm'), 'A5' => array(148, 210, 'mm'), + 'B5' => array(176, 250, 'mm'), 'Folio' => array(8.5, 13, 'in'), 'Legal' => array(8.5, 14, 'in'), 'Letter' => array(8.5, 11, 'in'), @@ -115,14 +118,14 @@ class Paper extends AbstractStyle /** * Width * - * @var int (twip) + * @var float (twip) */ private $width; /** * Height * - * @var int (twip) + * @var float (twip) */ private $height; @@ -157,11 +160,14 @@ class Paper extends AbstractStyle $this->size = $this->setEnumVal($size, array_keys($this->sizes), $this->size); list($width, $height, $unit) = $this->sizes[$this->size]; - $multipliers = array('mm' => 56.5217, 'in' => 1440); - $multiplier = $multipliers[$unit]; - $this->width = (int)round($width * $multiplier); - $this->height = (int)round($height * $multiplier); + if ($unit == 'mm') { + $this->width = Converter::cmToTwip($width / 10); + $this->height = Converter::cmToTwip($height / 10); + } else { + $this->width = Converter::inchToTwip($width); + $this->height = Converter::inchToTwip($height); + } return $this; } @@ -169,7 +175,7 @@ class Paper extends AbstractStyle /** * Get width * - * @return int + * @return float */ public function getWidth() { @@ -179,7 +185,7 @@ class Paper extends AbstractStyle /** * Get height * - * @return int + * @return float */ public function getHeight() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paragraph.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paragraph.php index c6e60efb27ea24149b733b3fdef88983f9204268..c00dc97c1c9fc87cd3cd9c39ff237c96735cf5e6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paragraph.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Paragraph.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,6 +20,8 @@ namespace PhpOffice\PhpWord\Style; use PhpOffice\Common\Text; use PhpOffice\PhpWord\Exception\InvalidStyleException; use PhpOffice\PhpWord\SimpleType\Jc; +use PhpOffice\PhpWord\SimpleType\LineSpacingRule; +use PhpOffice\PhpWord\SimpleType\TextAlignment; /** * Paragraph style @@ -46,7 +48,7 @@ use PhpOffice\PhpWord\SimpleType\Jc; * - Borders * - Background * - * @link http://www.schemacentral.com/sc/ooxml/t-w_CT_PPr.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_CT_PPr.html */ class Paragraph extends Border { @@ -158,6 +160,27 @@ class Paragraph extends Border */ private $shading; + /** + * Ignore Spacing Above and Below When Using Identical Styles + * + * @var bool + */ + private $contextualSpacing = false; + + /** + * Right to Left Paragraph Layout + * + * @var bool + */ + private $bidi = false; + + /** + * Vertical Character Alignment on Line + * + * @var string + */ + private $textAlignment; + /** * Set Style value * @@ -208,6 +231,9 @@ class Paragraph extends Border ), 'tabs' => $this->getTabs(), 'shading' => $this->getShading(), + 'contextualSpacing' => $this->hasContextualSpacing(), + 'bidi' => $this->isBidi(), + 'textAlignment' => $this->getTextAlignment(), ); return $styles; @@ -232,7 +258,7 @@ class Paragraph extends Border */ public function setAlignment($value) { - if (Jc::getValidator()->isValid($value)) { + if (Jc::isValid($value)) { $this->alignment = $value; } @@ -404,7 +430,7 @@ class Paragraph extends Border /** * Get space before paragraph * - * @return integer + * @return int */ public function getSpaceBefore() { @@ -425,7 +451,7 @@ class Paragraph extends Border /** * Get space after paragraph * - * @return integer + * @return int */ public function getSpaceAfter() { @@ -464,6 +490,27 @@ class Paragraph extends Border return $this->setSpace(array('line' => $value)); } + /** + * Get spacing line rule + * + * @return string + */ + public function getSpacingLineRule() + { + return $this->getChildStyleValue($this->spacing, 'lineRule'); + } + + /** + * Set the spacing line rule + * + * @param string $value Possible values are defined in LineSpacingRule + * @return \PhpOffice\PhpWord\Style\Paragraph + */ + public function setSpacingLineRule($value) + { + return $this->setSpace(array('lineRule' => $value)); + } + /** * Get line height * @@ -479,22 +526,22 @@ class Paragraph extends Border * * @param int|float|string $lineHeight * - * @return self - * * @throws \PhpOffice\PhpWord\Exception\InvalidStyleException + * @return self */ public function setLineHeight($lineHeight) { if (is_string($lineHeight)) { - $lineHeight = floatval(preg_replace('/[^0-9\.\,]/', '', $lineHeight)); + $lineHeight = (float) (preg_replace('/[^0-9\.\,]/', '', $lineHeight)); } - if ((!is_integer($lineHeight) && !is_float($lineHeight)) || !$lineHeight) { + if ((!is_int($lineHeight) && !is_float($lineHeight)) || !$lineHeight) { throw new InvalidStyleException('Line height must be a valid number'); } $this->lineHeight = $lineHeight; $this->setSpacing($lineHeight * self::LINE_HEIGHT); + return $this; } @@ -731,4 +778,75 @@ class Paragraph extends Border return $this; } + + /** + * Get contextualSpacing + * + * @return bool + */ + public function hasContextualSpacing() + { + return $this->contextualSpacing; + } + + /** + * Set contextualSpacing + * + * @param bool $contextualSpacing + * @return self + */ + public function setContextualSpacing($contextualSpacing) + { + $this->contextualSpacing = $contextualSpacing; + + return $this; + } + + /** + * Get bidirectional + * + * @return bool + */ + public function isBidi() + { + return $this->bidi; + } + + /** + * Set bidi + * + * @param bool $bidi + * Set to true to write from right to left + * @return self + */ + public function setBidi($bidi) + { + $this->bidi = $bidi; + + return $this; + } + + /** + * Get textAlignment + * + * @return string + */ + public function getTextAlignment() + { + return $this->textAlignment; + } + + /** + * Set textAlignment + * + * @param string $textAlignment + * @return self + */ + public function setTextAlignment($textAlignment) + { + TextAlignment::validate($textAlignment); + $this->textAlignment = $textAlignment; + + return $this; + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Row.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Row.php index 5be03b697280ee09bfebf45bf5d49e6b07da565a..b56c6f5fa9236a364f1056686d2f8d89c6d8fe75 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Row.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Row.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Section.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Section.php index 62eb8f11581ca0682f75c73b5b76eb4803774560..476846f5f2871bfa93acc30da8363179970ba5f5 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Section.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Section.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -35,20 +35,20 @@ class Section extends Border * * @const int|float */ - const DEFAULT_WIDTH = 11870; // In twips. - const DEFAULT_HEIGHT = 16787; // In twips. - const DEFAULT_MARGIN = 1440; // In twips. - const DEFAULT_GUTTER = 0; // In twips. - const DEFAULT_HEADER_HEIGHT = 720; // In twips. - const DEFAULT_FOOTER_HEIGHT = 720; // In twips. + const DEFAULT_WIDTH = 11905.511811024; // In twips. + const DEFAULT_HEIGHT = 16837.79527559; // In twips. + const DEFAULT_MARGIN = 1440; // In twips. + const DEFAULT_GUTTER = 0; // In twips. + const DEFAULT_HEADER_HEIGHT = 720; // In twips. + const DEFAULT_FOOTER_HEIGHT = 720; // In twips. const DEFAULT_COLUMN_COUNT = 1; - const DEFAULT_COLUMN_SPACING = 720; // In twips. + const DEFAULT_COLUMN_SPACING = 720; // In twips. /** * Page Orientation * * @var string - * @link http://www.schemacentral.com/sc/ooxml/a-w_orient-1.html + * @see http://www.schemacentral.com/sc/ooxml/a-w_orient-1.html */ private $orientation = self::ORIENTATION_PORTRAIT; @@ -105,7 +105,7 @@ class Section extends Border * Page gutter spacing * * @var int|float - * @link http://www.schemacentral.com/sc/ooxml/e-w_pgMar-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_pgMar-1.html */ private $gutter = self::DEFAULT_GUTTER; @@ -162,7 +162,7 @@ class Section extends Border * Line numbering * * @var \PhpOffice\PhpWord\Style\LineNumbering - * @link http://www.schemacentral.com/sc/ooxml/e-w_lnNumType-1.html + * @see http://www.schemacentral.com/sc/ooxml/e-w_lnNumType-1.html */ private $lineNumbering; @@ -504,6 +504,7 @@ class Section extends Border public function setPageNumberingStart($pageNumberingStart = null) { $this->pageNumberingStart = $pageNumberingStart; + return $this; } @@ -572,6 +573,7 @@ class Section extends Border public function setBreakType($value = null) { $this->breakType = $value; + return $this; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shading.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shading.php index ab4fce821481e8b65685497ff80ae3297397d706..eeb055b2c8ab829e6d04e55b20a6826e8037fcaf 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shading.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shading.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,7 +20,7 @@ namespace PhpOffice\PhpWord\Style; /** * Shading style * - * @link http://www.schemacentral.com/sc/ooxml/t-w_CT_Shd.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_CT_Shd.html * @since 0.10.0 */ class Shading extends AbstractStyle @@ -29,7 +29,7 @@ class Shading extends AbstractStyle * Pattern constants (partly) * * @const string - * @link http://www.schemacentral.com/sc/ooxml/t-w_ST_Shd.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_ST_Shd.html */ const PATTERN_CLEAR = 'clear'; // No pattern const PATTERN_SOLID = 'solid'; // 100% fill pattern @@ -43,7 +43,7 @@ class Shading extends AbstractStyle * Shading pattern * * @var string - * @link http://www.schemacentral.com/sc/ooxml/t-w_ST_Shd.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_ST_Shd.html */ private $pattern = self::PATTERN_CLEAR; @@ -91,7 +91,7 @@ class Shading extends AbstractStyle { $enum = array( self::PATTERN_CLEAR, self::PATTERN_SOLID, self::PATTERN_HSTRIPE, - self::PATTERN_VSTRIPE, self::PATTERN_DSTRIPE, self::PATTERN_HCROSS, self::PATTERN_DCROSS + self::PATTERN_VSTRIPE, self::PATTERN_DSTRIPE, self::PATTERN_HCROSS, self::PATTERN_DCROSS, ); $this->pattern = $this->setEnumVal($value, $enum, $this->pattern); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shadow.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shadow.php index f8f693a97febff5d55f2b0138b9495fb3a8d7031..71d1e3e0092da27a98137577dc9ac9aa928bc794 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shadow.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shadow.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,7 +20,7 @@ namespace PhpOffice\PhpWord\Style; /** * Shadow style * - * @link http://www.schemacentral.com/sc/ooxml/t-v_CT_Shadow.html + * @see http://www.schemacentral.com/sc/ooxml/t-v_CT_Shadow.html * @since 0.12.0 */ class Shadow extends AbstractStyle diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shape.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shape.php index 01b6158873314dbdcd32f6510e55d2a809f0bfde..fc84241d759ce5ff2ed04412dd4c59b62cf89d3e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shape.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Shape.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Spacing.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Spacing.php index 8d7cfeb221abcbbd1f277a1f113eeeefc4d1de6d..489eb5d707f04781356a3864aa861a2327f8c413 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Spacing.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Spacing.php @@ -10,17 +10,19 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Style; +use PhpOffice\PhpWord\SimpleType\LineSpacingRule; + /** * Spacing between lines and above/below paragraph style * - * @link http://www.schemacentral.com/sc/ooxml/t-w_CT_Spacing.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_Spacing.html * @since 0.10.0 */ class Spacing extends AbstractStyle @@ -51,7 +53,7 @@ class Spacing extends AbstractStyle * * @var string */ - private $rule = 'auto'; + private $lineRule = LineSpacingRule::AUTO; /** * Create a new instance @@ -137,9 +139,35 @@ class Spacing extends AbstractStyle * * @return string */ + public function getLineRule() + { + return $this->lineRule; + } + + /** + * Set line rule + * + * @param string $value + * @return self + */ + public function setLineRule($value = null) + { + LineSpacingRule::validate($value); + $this->lineRule = $value; + + return $this; + } + + /** + * Get line rule + * + * @return string + * @deprecated Use getLineRule() instead + * @codeCoverageIgnore + */ public function getRule() { - return $this->rule; + return $this->lineRule; } /** @@ -147,10 +175,12 @@ class Spacing extends AbstractStyle * * @param string $value * @return self + * @deprecated Use setLineRule() instead + * @codeCoverageIgnore */ public function setRule($value = null) { - $this->rule = $value; + $this->lineRule = $value; return $this; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/TOC.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/TOC.php index eb4b2253ff2c216102f40263c8c5514d9203f255..938e6de1661b6132d44db20f523c0314391e8c89 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/TOC.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/TOC.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Tab.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Tab.php index 33e518c8b5f70093766314b62c5204bc296a75af..09e49e02c01dadb2f6d8d1218cedfb33fbddad98 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Tab.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Tab.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -27,25 +27,25 @@ class Tab extends AbstractStyle * * @const string */ - const TAB_STOP_CLEAR = 'clear'; - const TAB_STOP_LEFT = 'left'; - const TAB_STOP_CENTER = 'center'; - const TAB_STOP_RIGHT = 'right'; + const TAB_STOP_CLEAR = 'clear'; + const TAB_STOP_LEFT = 'left'; + const TAB_STOP_CENTER = 'center'; + const TAB_STOP_RIGHT = 'right'; const TAB_STOP_DECIMAL = 'decimal'; - const TAB_STOP_BAR = 'bar'; - const TAB_STOP_NUM = 'num'; + const TAB_STOP_BAR = 'bar'; + const TAB_STOP_NUM = 'num'; /** * Tab leader types * * @const string */ - const TAB_LEADER_NONE = 'none'; - const TAB_LEADER_DOT = 'dot'; - const TAB_LEADER_HYPHEN = 'hyphen'; + const TAB_LEADER_NONE = 'none'; + const TAB_LEADER_DOT = 'dot'; + const TAB_LEADER_HYPHEN = 'hyphen'; const TAB_LEADER_UNDERSCORE = 'underscore'; - const TAB_LEADER_HEAVY = 'heavy'; - const TAB_LEADER_MIDDLEDOT = 'middleDot'; + const TAB_LEADER_HEAVY = 'heavy'; + const TAB_LEADER_MIDDLEDOT = 'middleDot'; /** * Tab stop type @@ -73,19 +73,19 @@ class Tab extends AbstractStyle * must conform to the values put forth in the schema. If they do not * they will be changed to default values. * - * @param string $type Defaults to 'clear' if value is not possible. - * @param int $position Must be numeric; otherwise defaults to 0. - * @param string $leader Defaults to null if value is not possible. + * @param string $type Defaults to 'clear' if value is not possible + * @param int $position Must be numeric; otherwise defaults to 0 + * @param string $leader Defaults to null if value is not possible */ public function __construct($type = null, $position = 0, $leader = null) { $stopTypes = array( - self::TAB_STOP_CLEAR, self::TAB_STOP_LEFT,self::TAB_STOP_CENTER, - self::TAB_STOP_RIGHT, self::TAB_STOP_DECIMAL, self::TAB_STOP_BAR, self::TAB_STOP_NUM + self::TAB_STOP_CLEAR, self::TAB_STOP_LEFT, self::TAB_STOP_CENTER, + self::TAB_STOP_RIGHT, self::TAB_STOP_DECIMAL, self::TAB_STOP_BAR, self::TAB_STOP_NUM, ); $leaderTypes = array( self::TAB_LEADER_NONE, self::TAB_LEADER_DOT, self::TAB_LEADER_HYPHEN, - self::TAB_LEADER_UNDERSCORE, self::TAB_LEADER_HEAVY, self::TAB_LEADER_MIDDLEDOT + self::TAB_LEADER_UNDERSCORE, self::TAB_LEADER_HEAVY, self::TAB_LEADER_MIDDLEDOT, ); $this->type = $this->setEnumVal($type, $stopTypes, $this->type); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Table.php index 91809528a7c9e099ca1a6cd46d802867a2168740..a3d454f3aa231d6eca029e36d25963c1503d7e9a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/Table.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -133,15 +133,7 @@ class Table extends Border if ($firstRowStyle !== null && is_array($firstRowStyle)) { $this->firstRowStyle = clone $this; $this->firstRowStyle->isFirstRow = true; - unset($this->firstRowStyle->firstRowStyle); - unset($this->firstRowStyle->borderInsideHSize); - unset($this->firstRowStyle->borderInsideHColor); - unset($this->firstRowStyle->borderInsideVSize); - unset($this->firstRowStyle->borderInsideVColor); - unset($this->firstRowStyle->cellMarginTop); - unset($this->firstRowStyle->cellMarginLeft); - unset($this->firstRowStyle->cellMarginRight); - unset($this->firstRowStyle->cellMarginBottom); + unset($this->firstRowStyle->firstRowStyle, $this->firstRowStyle->borderInsideHSize, $this->firstRowStyle->borderInsideHColor, $this->firstRowStyle->borderInsideVSize, $this->firstRowStyle->borderInsideVColor, $this->firstRowStyle->cellMarginTop, $this->firstRowStyle->cellMarginLeft, $this->firstRowStyle->cellMarginRight, $this->firstRowStyle->cellMarginBottom); $this->firstRowStyle->setStyleByArray($firstRowStyle); } @@ -190,7 +182,7 @@ class Table extends Border /** * Get TLRBHV Border Size * - * @return integer[] + * @return int[] */ public function getBorderSize() { @@ -428,7 +420,7 @@ class Table extends Border /** * Get cell margin * - * @return integer[] + * @return int[] */ public function getCellMargin() { @@ -436,7 +428,7 @@ class Table extends Border $this->cellMarginTop, $this->cellMarginLeft, $this->cellMarginRight, - $this->cellMarginBottom + $this->cellMarginBottom, ); } @@ -510,7 +502,7 @@ class Table extends Border */ public function setAlignment($value) { - if (JcTable::getValidator()->isValid($value) || Jc::getValidator()->isValid($value)) { + if (JcTable::isValid($value) || Jc::isValid($value)) { $this->alignment = $value; } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/TextBox.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/TextBox.php index 600fb8eabff27bbe9f29bb3771b78f2928017e69..91adc0afd22de983fa3f1698be232f4e0dcac460 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/TextBox.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Style/TextBox.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -70,7 +70,6 @@ class TextBox extends Image * Set margin top. * * @param int $value - * @return void */ public function setInnerMarginTop($value = null) { @@ -91,7 +90,6 @@ class TextBox extends Image * Set margin left. * * @param int $value - * @return void */ public function setInnerMarginLeft($value = null) { @@ -112,7 +110,6 @@ class TextBox extends Image * Set margin right. * * @param int $value - * @return void */ public function setInnerMarginRight($value = null) { @@ -133,7 +130,6 @@ class TextBox extends Image * Set margin bottom. * * @param int $value - * @return void */ public function setInnerMarginBottom($value = null) { @@ -154,7 +150,6 @@ class TextBox extends Image * Set TLRB cell margin. * * @param int $value Margin in twips - * @return void */ public function setInnerMargin($value = null) { @@ -167,7 +162,7 @@ class TextBox extends Image /** * Get cell margin * - * @return integer[] + * @return int[] */ public function getInnerMargin() { @@ -183,7 +178,8 @@ class TextBox extends Image { $hasInnerMargins = false; $margins = $this->getInnerMargin(); - for ($i = 0; $i < count($margins); $i++) { + $numMargins = count($margins); + for ($i = 0; $i < $numMargins; $i++) { if ($margins[$i] !== null) { $hasInnerMargins = true; } @@ -196,7 +192,6 @@ class TextBox extends Image * Set border size. * * @param int $value Size in points - * @return void */ public function setBorderSize($value = null) { @@ -217,7 +212,6 @@ class TextBox extends Image * Set border color. * * @param string $value - * @return void */ public function setBorderColor($value = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Template.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Template.php index 87ccd8ed0bf97fe6b98e906b4f8524014f2f3f08..a4769927a095cf8bd224bbfda4532e46fb818f5b 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Template.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Template.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php index e7a8d039c4d3eccc449f27db8c0025993c4e37a1..c46038ee9ff2b1fa5d283181ebdfcf74c284c2cc 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -37,35 +37,35 @@ class TemplateProcessor protected $zipClass; /** - * @var string Temporary document filename (with path). + * @var string Temporary document filename (with path) */ protected $tempDocumentFilename; /** - * Content of main document part (in XML format) of the temporary document. + * Content of main document part (in XML format) of the temporary document * * @var string */ protected $tempDocumentMainPart; /** - * Content of headers (in XML format) of the temporary document. + * Content of headers (in XML format) of the temporary document * * @var string[] */ protected $tempDocumentHeaders = array(); /** - * Content of footers (in XML format) of the temporary document. + * Content of footers (in XML format) of the temporary document * * @var string[] */ protected $tempDocumentFooters = array(); /** - * @since 0.12.0 Throws CreateTemporaryFileException and CopyFileException instead of Exception. + * @since 0.12.0 Throws CreateTemporaryFileException and CopyFileException instead of Exception * - * @param string $documentTemplate The fully qualified template filename. + * @param string $documentTemplate The fully qualified template filename * * @throws \PhpOffice\PhpWord\Exception\CreateTemporaryFileException * @throws \PhpOffice\PhpWord\Exception\CopyFileException @@ -107,9 +107,9 @@ class TemplateProcessor * @param string $xml * @param \XSLTProcessor $xsltProcessor * - * @return string - * * @throws \PhpOffice\PhpWord\Exception\Exception + * + * @return string */ protected function transformSingleXml($xml, $xsltProcessor) { @@ -147,7 +147,7 @@ class TemplateProcessor /** * Applies XSL style sheet to template's parts. - * + * * Note: since the method doesn't make any guess on logic of the provided XSL style sheet, * make sure that output is correctly escaped. Otherwise you may get broken document. * @@ -155,8 +155,6 @@ class TemplateProcessor * @param array $xslOptions * @param string $xslOptionsUri * - * @return void - * * @throws \PhpOffice\PhpWord\Exception\Exception */ public function applyXslStyleSheet($xslDomDocument, $xslOptions = array(), $xslOptionsUri = '') @@ -204,9 +202,7 @@ class TemplateProcessor /** * @param mixed $search * @param mixed $replace - * @param integer $limit - * - * @return void + * @param int $limit */ public function setValue($search, $replace, $limit = self::MAXIMUM_REPLACEMENTS_DEFAULT) { @@ -260,9 +256,7 @@ class TemplateProcessor * Clone a table row in a template document. * * @param string $search - * @param integer $numberOfClones - * - * @return void + * @param int $numberOfClones * * @throws \PhpOffice\PhpWord\Exception\Exception */ @@ -274,7 +268,7 @@ class TemplateProcessor $tagPos = strpos($this->tempDocumentMainPart, $search); if (!$tagPos) { - throw new Exception("Can not clone row, template variable not found or variable contains markup."); + throw new Exception('Can not clone row, template variable not found or variable contains markup.'); } $rowStart = $this->findRowStart($tagPos); @@ -319,8 +313,8 @@ class TemplateProcessor * Clone a block. * * @param string $blockname - * @param integer $clones - * @param boolean $replace + * @param int $clones + * @param bool $replace * * @return string|null */ @@ -357,8 +351,6 @@ class TemplateProcessor * * @param string $blockname * @param string $replacement - * - * @return void */ public function replaceBlock($blockname, $replacement) { @@ -381,8 +373,6 @@ class TemplateProcessor * Delete a block of text. * * @param string $blockname - * - * @return void */ public function deleteBlock($blockname) { @@ -392,9 +382,9 @@ class TemplateProcessor /** * Saves the result document. * - * @return string - * * @throws \PhpOffice\PhpWord\Exception\Exception + * + * @return string */ public function save() { @@ -422,8 +412,6 @@ class TemplateProcessor * @since 0.8.0 * * @param string $fileName - * - * @return void */ public function saveAs($fileName) { @@ -447,7 +435,7 @@ class TemplateProcessor * Finds parts of broken macros and sticks them together. * Macros, while being edited, could be implicitly broken by some of the word processors. * - * @param string $documentPart The document part in XML representation. + * @param string $documentPart The document part in XML representation * * @return string */ @@ -472,7 +460,7 @@ class TemplateProcessor * @param mixed $search * @param mixed $replace * @param string $documentPartXML - * @param integer $limit + * @param int $limit * * @return string */ @@ -481,10 +469,10 @@ class TemplateProcessor // Note: we can't use the same function for both cases here, because of performance considerations. if (self::MAXIMUM_REPLACEMENTS_DEFAULT === $limit) { return str_replace($search, $replace, $documentPartXML); - } else { - $regExpEscaper = new RegExp(); - return preg_replace($regExpEscaper->escape($search), $replace, $documentPartXML, $limit); } + $regExpEscaper = new RegExp(); + + return preg_replace($regExpEscaper->escape($search), $replace, $documentPartXML, $limit); } /** @@ -504,7 +492,7 @@ class TemplateProcessor /** * Get the name of the header file for $index. * - * @param integer $index + * @param int $index * * @return string */ @@ -524,7 +512,7 @@ class TemplateProcessor /** * Get the name of the footer file for $index. * - * @param integer $index + * @param int $index * * @return string */ @@ -536,11 +524,11 @@ class TemplateProcessor /** * Find the start position of the nearest table row before $offset. * - * @param integer $offset - * - * @return integer + * @param int $offset * * @throws \PhpOffice\PhpWord\Exception\Exception + * + * @return int */ protected function findRowStart($offset) { @@ -559,9 +547,9 @@ class TemplateProcessor /** * Find the end position of the nearest table row after $offset. * - * @param integer $offset + * @param int $offset * - * @return integer + * @return int */ protected function findRowEnd($offset) { @@ -571,8 +559,8 @@ class TemplateProcessor /** * Get a slice of a string. * - * @param integer $startPosition - * @param integer $endPosition + * @param int $startPosition + * @param int $endPosition * * @return string */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/AbstractWriter.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/AbstractWriter.php index 78ec5acd85ee8d22403d5f945d4fcaf886803437..884769d724effc589d2330acb5b620e7aa2579fb 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/AbstractWriter.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/AbstractWriter.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -96,17 +96,15 @@ abstract class AbstractWriter implements WriterInterface /** * Get PhpWord object * - * @return \PhpOffice\PhpWord\PhpWord - * * @throws \PhpOffice\PhpWord\Exception\Exception + * @return \PhpOffice\PhpWord\PhpWord */ public function getPhpWord() { if (!is_null($this->phpWord)) { return $this->phpWord; - } else { - throw new Exception("No PhpWord assigned."); } + throw new Exception('No PhpWord assigned.'); } /** @@ -118,6 +116,7 @@ abstract class AbstractWriter implements WriterInterface public function setPhpWord(PhpWord $phpWord = null) { $this->phpWord = $phpWord; + return $this; } @@ -131,9 +130,9 @@ abstract class AbstractWriter implements WriterInterface { if ($partName != '' && isset($this->writerParts[strtolower($partName)])) { return $this->writerParts[strtolower($partName)]; - } else { - return null; } + + return null; } /** @@ -152,9 +151,8 @@ abstract class AbstractWriter implements WriterInterface * @param bool $value * @param string $directory * - * @return self - * * @throws \PhpOffice\PhpWord\Exception\Exception + * @return self */ public function setUseDiskCaching($value = false, $directory = null) { @@ -218,15 +216,15 @@ abstract class AbstractWriter implements WriterInterface protected function getTempFile($filename) { // Temporary directory - $this->setTempDir(Settings::getTempDir() . '/PHPWordWriter/'); + $this->setTempDir(Settings::getTempDir() . uniqid('/PHPWordWriter_') . '/'); // Temporary file $this->originalFilename = $filename; if (strtolower($filename) == 'php://output' || strtolower($filename) == 'php://stdout') { $filename = tempnam(Settings::getTempDir(), 'PhpWord'); if (false === $filename) { - $filename = $this->originalFilename; - } + $filename = $this->originalFilename; // @codeCoverageIgnore + } // @codeCoverageIgnore } $this->tempFilename = $filename; @@ -236,8 +234,6 @@ abstract class AbstractWriter implements WriterInterface /** * Cleanup temporary file. * - * @return void - * * @throws \PhpOffice\PhpWord\Exception\CopyFileException */ protected function cleanupTempFile() @@ -257,8 +253,6 @@ abstract class AbstractWriter implements WriterInterface /** * Clear temporary directory. - * - * @return void */ protected function clearTempDir() { @@ -272,9 +266,9 @@ abstract class AbstractWriter implements WriterInterface * * @param string $filename * - * @return \PhpOffice\PhpWord\Shared\ZipArchive - * * @throws \Exception + * + * @return \PhpOffice\PhpWord\Shared\ZipArchive */ protected function getZipArchive($filename) { @@ -305,9 +299,9 @@ abstract class AbstractWriter implements WriterInterface * * @param string $filename * - * @return resource - * * @throws \Exception + * + * @return resource */ protected function openFile($filename) { @@ -330,7 +324,6 @@ abstract class AbstractWriter implements WriterInterface * * @param resource $fileHandle * @param string $content - * @return void */ protected function writeFile($fileHandle, $content) { @@ -344,7 +337,6 @@ abstract class AbstractWriter implements WriterInterface * * @param \PhpOffice\PhpWord\Shared\ZipArchive $zip * @param mixed $elements - * @return void */ protected function addFilesToPackage(ZipArchive $zip, $elements) { @@ -380,7 +372,6 @@ abstract class AbstractWriter implements WriterInterface * @param \PhpOffice\PhpWord\Shared\ZipArchive $zipPackage * @param string $source * @param string $target - * @return void */ protected function addFileToPackage($zipPackage, $source, $target) { @@ -390,7 +381,7 @@ abstract class AbstractWriter implements WriterInterface $source = substr($source, 6); list($zipFilename, $imageFilename) = explode('#', $source); - $zip = new ZipArchive; + $zip = new ZipArchive(); if ($zip->open($zipFilename) !== false) { if ($zip->locateName($imageFilename)) { $zip->extractTo($this->getTempDir(), $imageFilename); @@ -411,17 +402,16 @@ abstract class AbstractWriter implements WriterInterface * Delete directory. * * @param string $dir - * @return void */ private function deleteDir($dir) { foreach (scandir($dir) as $file) { if ($file === '.' || $file === '..') { continue; - } elseif (is_file($dir . "/" . $file)) { - unlink($dir . "/" . $file); - } elseif (is_dir($dir . "/" . $file)) { - $this->deleteDir($dir . "/" . $file); + } elseif (is_file($dir . '/' . $file)) { + unlink($dir . '/' . $file); + } elseif (is_dir($dir . '/' . $file)) { + $this->deleteDir($dir . '/' . $file); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML.php index 5668f1843692e5c8e90d37dd6036a7df15c5d5e8..9b098dd8cdba8879d8752f074635536f966187b7 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -30,7 +30,7 @@ class HTML extends AbstractWriter implements WriterInterface /** * Is the current writer creating PDF? * - * @var boolean + * @var bool */ protected $isPdf = false; @@ -65,8 +65,6 @@ class HTML extends AbstractWriter implements WriterInterface * * @param string $filename * - * @return void - * * @throws \PhpOffice\PhpWord\Exception\Exception */ public function save($filename = null) @@ -119,7 +117,6 @@ class HTML extends AbstractWriter implements WriterInterface * * @param int $noteId * @param string $noteMark - * @return void */ public function addNote($noteId, $noteMark) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/AbstractElement.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/AbstractElement.php index 294d6de7f2467673497aa02efd677702ebfd3b04..47f0f93cb9db0262f9cbd59b325031b28805474a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/AbstractElement.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/AbstractElement.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -50,7 +50,7 @@ abstract class AbstractElement protected $withoutP = false; /** - * @var \Zend\Escaper\Escaper + * @var \Zend\Escaper\Escaper|\PhpOffice\PhpWord\Escaper\AbstractEscaper */ protected $escaper; @@ -78,7 +78,6 @@ abstract class AbstractElement * Set without paragraph. * * @param bool $value - * @return void */ public function setWithoutP($value) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Container.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Container.php index 88384a12d49bfa65a06905294b9d9b55d1637af5..677b6173b4c845add5d9a8d12378c9b1ef9be39e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Container.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Container.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Endnote.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Endnote.php index b049e437668921212b764857d89b1b718d453acf..c4a3e4365a09283bfd187e57eea8874067870266 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Endnote.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Endnote.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Footnote.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Footnote.php index b5aa0a0afca3f37aa47c6fd1e35c5d50e3514e27..60b246f8786292dbc32bb2bf28dde03ec9ecf80f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Footnote.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Footnote.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Image.php index 9c69d41f1f60a4c7ceec9fa0935dd46b0fd99b9b..3e516b53a1020412de80744ebe2bce639ca813ca 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Image.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -37,21 +37,16 @@ class Image extends Text if (!$this->element instanceof ImageElement) { return ''; } - /** @var \PhpOffice\PhpWord\Writer\HTML $parentWriter Type hint */ - $parentWriter = $this->parentWriter; - $content = ''; - if (!$parentWriter->isPdf()) { - $imageData = $this->element->getImageStringData(true); - if ($imageData !== null) { - $styleWriter = new ImageStyleWriter($this->element->getStyle()); - $style = $styleWriter->write(); - $imageData = 'data:' . $this->element->getImageType() . ';base64,' . $imageData; + $imageData = $this->element->getImageStringData(true); + if ($imageData !== null) { + $styleWriter = new ImageStyleWriter($this->element->getStyle()); + $style = $styleWriter->write(); + $imageData = 'data:' . $this->element->getImageType() . ';base64,' . $imageData; - $content .= $this->writeOpening(); - $content .= "<img border=\"0\" style=\"{$style}\" src=\"{$imageData}\"/>"; - $content .= $this->writeClosing(); - } + $content .= $this->writeOpening(); + $content .= "<img border=\"0\" style=\"{$style}\" src=\"{$imageData}\"/>"; + $content .= $this->writeClosing(); } return $content; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Link.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Link.php index bff57cfc20f6e7ef41fdf3a36e3e210fe9a9d23e..bdea985a180af0fcc67b7a7622690cde00e32fb2 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Link.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Link.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/ListItem.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/ListItem.php index d8b1e4ed8958f26952078af212adae7f8a63a16a..02b25eb98a5cdb77230e4769619303d1db88bcf8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/ListItem.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/ListItem.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/PageBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/PageBreak.php index 8b332dcfafedac0204f6f76193ef93d8f4948c00..5cab2724792ca1848ad21ba2a41c04bfb6e58e48 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/PageBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/PageBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -39,6 +39,6 @@ class PageBreak extends TextBreak return '<pagebreak style="page-break-before: always;" pagebreak="true"></pagebreak>'; } - return ""; + return ''; } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Table.php index 9025f01aac8967fa324893982ed5577ec7ce0964..c7d8670b168888952db5d8f670ee27bf74a15e77 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Table.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Text.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Text.php index 874515958cacf852870d5cda0cf57d87e57ec3fd..71cb75669a9ebfa9f10b3dc974cd781fa625b335 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Text.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Text.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -89,7 +89,6 @@ class Text extends AbstractElement * Set opening text. * * @param string $value - * @return void */ public function setOpeningText($value) { @@ -100,7 +99,6 @@ class Text extends AbstractElement * Set closing text. * * @param string $value - * @return void */ public function setClosingText($value) { @@ -141,7 +139,7 @@ class Text extends AbstractElement $content .= $this->closingText; } - $content .= "</p>" . PHP_EOL; + $content .= '</p>' . PHP_EOL; } return $content; @@ -166,6 +164,8 @@ class Text extends AbstractElement if ($pStyleIsObject) { $styleWriter = new ParagraphStyleWriter($paragraphStyle); $style = $styleWriter->write(); + } elseif (is_string($paragraphStyle)) { + $style = $paragraphStyle; } if ($style) { $attribute = $pStyleIsObject ? 'style' : 'class'; @@ -177,8 +177,6 @@ class Text extends AbstractElement /** * Get font style. - * - * @return void */ private function getFontStyle() { @@ -190,11 +188,13 @@ class Text extends AbstractElement if ($fStyleIsObject) { $styleWriter = new FontStyleWriter($fontStyle); $style = $styleWriter->write(); + } elseif (is_string($fontStyle)) { + $style = $fontStyle; } if ($style) { $attribute = $fStyleIsObject ? 'style' : 'class'; $this->openingTags = "<span {$attribute}=\"{$style}\">"; - $this->closingTags = "</span>"; + $this->closingTags = '</span>'; } } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/TextBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/TextBreak.php index 9b23d739b83f60fe4672b35e2315763b77ed255a..93ab924a50d181c38f5d479caedd24f3c8a3e39a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/TextBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/TextBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/TextRun.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/TextRun.php index 492f7597e3a7d34d52629c41783ba30f837fd932..d7461539d937e28ca69e462e7ddfc98db31c5c76 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/TextRun.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/TextRun.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Title.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Title.php index 23c2993804c7874b2d536742980ce72ae561e3b4..ee8f271b195322a1596aea71718bc35c5fdf3b12 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Title.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Element/Title.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/AbstractPart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/AbstractPart.php index 638f846b98f5d3321cc2779c5cc1b6d429542572..7b6e0c3ea34168e4ae9f56467609543f95040842 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/AbstractPart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/AbstractPart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -35,12 +35,12 @@ abstract class AbstractPart * @var \Zend\Escaper\Escaper */ protected $escaper; - + public function __construct() { $this->escaper = new Escaper(); } - + /** * @return string */ @@ -48,8 +48,6 @@ abstract class AbstractPart /** * @param \PhpOffice\PhpWord\Writer\AbstractWriter $writer - * - * @return void */ public function setParentWriter(AbstractWriter $writer = null) { @@ -57,16 +55,15 @@ abstract class AbstractPart } /** - * @return \PhpOffice\PhpWord\Writer\AbstractWriter - * * @throws \PhpOffice\PhpWord\Exception\Exception + * + * @return \PhpOffice\PhpWord\Writer\AbstractWriter */ public function getParentWriter() { if ($this->parentWriter !== null) { return $this->parentWriter; - } else { - throw new Exception('No parent WriterInterface assigned.'); } + throw new Exception('No parent WriterInterface assigned.'); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/Body.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/Body.php index 0d852a57fd75965231a1e03bace33b50fc7e69ee..eea173500df22d4d557044d6c16927be602d07e2 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/Body.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/Body.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -66,7 +66,7 @@ class Body extends AbstractPart $content = ''; if (!empty($notes)) { - $content .= "<hr />" . PHP_EOL; + $content .= '<hr />' . PHP_EOL; foreach ($notes as $noteId => $noteMark) { list($noteType, $noteTypeId) = explode('-', $noteMark); $method = 'get' . ($noteType == 'endnote' ? 'Endnotes' : 'Footnotes'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/Head.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/Head.php index fa4c383346adc3f786a3d1a155bae8474daeccf2..f4d630145ff1b42c5ae5d70370ec158a541e4d2f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/Head.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Part/Head.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -48,7 +48,7 @@ class Head extends AbstractPart 'keywords' => '', 'category' => '', 'company' => '', - 'manager' => '' + 'manager' => '', ); $title = $docProps->getTitle(); $title = ($title != '') ? $title : 'PHPWord'; @@ -60,11 +60,11 @@ class Head extends AbstractPart $content .= '<title>' . $title . '</title>' . PHP_EOL; foreach ($propertiesMapping as $key => $value) { $value = ($value == '') ? $key : $value; - $method = "get" . $key; + $method = 'get' . $key; if ($docProps->$method() != '') { $content .= '<meta name="' . $value . '"' . ' content="' . (Settings::isOutputEscapingEnabled() ? $this->escaper->escapeHtmlAttr($docProps->$method()) : $docProps->$method()) . '"' - .' />' . PHP_EOL; + . ' />' . PHP_EOL; } } $content .= $this->writeStyles(); @@ -86,22 +86,22 @@ class Head extends AbstractPart $defaultStyles = array( '*' => array( 'font-family' => Settings::getDefaultFontName(), - 'font-size' => Settings::getDefaultFontSize() . 'pt', + 'font-size' => Settings::getDefaultFontSize() . 'pt', ), 'a.NoteRef' => array( 'text-decoration' => 'none', ), 'hr' => array( - 'height' => '1px', - 'padding' => '0', - 'margin' => '1em 0', - 'border' => '0', + 'height' => '1px', + 'padding' => '0', + 'margin' => '1em 0', + 'border' => '0', 'border-top' => '1px solid #CCC', ), 'table' => array( - 'border' => '1px solid black', + 'border' => '1px solid black', 'border-spacing' => '0px', - 'width' => '100%', + 'width ' => '100%', ), 'td' => array( 'border' => '1px solid black', @@ -123,11 +123,11 @@ class Head extends AbstractPart } else { $name = '.' . $name; } - $css .= "{$name} {" . $styleWriter->write() . '}' . PHP_EOL; + $css .= "{$name} {" . $styleWriter->write() . '}' . PHP_EOL; } elseif ($style instanceof Paragraph) { $styleWriter = new ParagraphStyleWriter($style); $name = '.' . $name; - $css .= "{$name} {" . $styleWriter->write() . '}' . PHP_EOL; + $css .= "{$name} {" . $styleWriter->write() . '}' . PHP_EOL; } } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/AbstractStyle.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/AbstractStyle.php index 10a0a9addf41c640e000894866ffa6d28f6f3265..fa27c085caa2d3bbbc1be34a17692d65be87d288 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/AbstractStyle.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/AbstractStyle.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -59,7 +59,6 @@ abstract class AbstractStyle * Set parent writer. * * @param \PhpOffice\PhpWord\Writer\AbstractWriter $writer - * @return void */ public function setParentWriter($writer) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Font.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Font.php index c202af9397a684dd82f244fbce90e43075bb2088..8daa8823c82d456d7cd4109e60596156c707f53a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Font.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Font.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -52,12 +52,17 @@ class Font extends AbstractStyle $css['background'] = $this->getValueIf($fgColor != '', $fgColor); $css['font-weight'] = $this->getValueIf($style->isBold(), 'bold'); $css['font-style'] = $this->getValueIf($style->isItalic(), 'italic'); - $css['vertical-align'] = $this->getValueIf($style->isSuperScript(), 'italic'); - $css['vertical-align'] = $this->getValueIf($style->isSuperScript(), 'super'); - $css['vertical-align'] = $this->getValueIf($style->isSubScript(), 'sub'); + $css['vertical-align'] = ''; + $css['vertical-align'] .= $this->getValueIf($style->isSuperScript(), 'super'); + $css['vertical-align'] .= $this->getValueIf($style->isSubScript(), 'sub'); $css['text-decoration'] = ''; $css['text-decoration'] .= $this->getValueIf($underline, 'underline '); $css['text-decoration'] .= $this->getValueIf($lineThrough, 'line-through '); + $css['text-transform'] = $this->getValueIf($style->isAllCaps(), 'uppercase'); + $css['font-variant'] = $this->getValueIf($style->isSmallCaps(), 'small-caps'); + + $spacing = $style->getSpacing(); + $css['letter-spacing'] = $this->getValueIf(!is_null($spacing), ($spacing / 20) . 'pt'); return $this->assembleCss($css); } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Generic.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Generic.php index e3d2b3522a7b9e08f967fd08f6bbe260e5da0d8e..73830707b1e7e32b8c2a0c11b9244cdea8fcf2e9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Generic.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Generic.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Image.php index 36a9fecaadd886f5f7255766ad592d0dca16b4a5..178b14348e248752d9eed0483fcba78ebf6026cf 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Image.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Paragraph.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Paragraph.php index 593c6dca933688722bdef0ed713314d1b08f85e0..57e44e859437ff8d32a28fd8c99673c967e8aff1 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Paragraph.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/HTML/Style/Paragraph.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -44,16 +44,9 @@ class Paragraph extends AbstractStyle $textAlign = ''; switch ($style->getAlignment()) { - case Jc::START: - case Jc::NUM_TAB: - case Jc::LEFT: - $textAlign = 'left'; - break; - case Jc::CENTER: $textAlign = 'center'; break; - case Jc::END: case Jc::MEDIUM_KASHIDA: case Jc::HIGH_KASHIDA: @@ -61,15 +54,13 @@ class Paragraph extends AbstractStyle case Jc::RIGHT: $textAlign = 'right'; break; - case Jc::BOTH: case Jc::DISTRIBUTE: case Jc::THAI_DISTRIBUTE: case Jc::JUSTIFY: $textAlign = 'justify'; break; - - default: + default: //all others, align left $textAlign = 'left'; break; } @@ -84,6 +75,9 @@ class Paragraph extends AbstractStyle $after = $spacing->getAfter(); $css['margin-top'] = $this->getValueIf(!is_null($before), ($before / 20) . 'pt'); $css['margin-bottom'] = $this->getValueIf(!is_null($after), ($after / 20) . 'pt'); + } else { + $css['margin-top'] = '0'; + $css['margin-bottom'] = '0'; } return $this->assembleCss($css); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText.php index 40bc6c2fbe9b1cd3cdf06c6ac43e71a62d219b47..7158874c1125a869f7a0ac76cf8c17b436a45b28 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -63,7 +63,6 @@ class ODText extends AbstractWriter implements WriterInterface * Save PhpWord to file. * * @param string $filename - * @return void */ public function save($filename = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/AbstractElement.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/AbstractElement.php index 0ca43e4fc1e9ebbf52e0b8d3a8abbe29379b2237..481995ff806fbd6e83f6710632c1b4514a8e314a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/AbstractElement.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/AbstractElement.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Container.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Container.php index 212cd184b879cae11c06b14aded27847273c3108..112e71e87f3d7d23040d5a6ad5b37329f8981bd7 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Container.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Container.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Image.php index c6b16cfce5b7ecf46a0bf34dfb5ffd1b62bf1928..2c0b4727d284e7526aa630ad0b9ccbb749c859d9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Image.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Link.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Link.php index cb0226a3b08a9ab5304e57a1b7d3c0f7231f7af6..34d72c1ac76a79c78a02f15eb1550e95b8682b48 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Link.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Link.php @@ -10,15 +10,13 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\ODText\Element; -use PhpOffice\PhpWord\Settings; - /** * Text element writer * @@ -44,11 +42,7 @@ class Link extends AbstractElement $xmlWriter->startElement('text:a'); $xmlWriter->writeAttribute('xlink:type', 'simple'); $xmlWriter->writeAttribute('xlink:href', $element->getSource()); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($element->getText()); - } else { - $xmlWriter->writeRaw($element->getText()); - } + $this->writeText($element->getText()); $xmlWriter->endElement(); // text:a if (!$this->withoutP) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/PageBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/PageBreak.php new file mode 100644 index 0000000000000000000000000000000000000000..6eee6cfc94e5b80d40adc64987396c0b03bcea7c --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/PageBreak.php @@ -0,0 +1,36 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Writer\ODText\Element; + +/** + * PageBreak element writer + */ +class PageBreak extends AbstractElement +{ + /** + * Write element + */ + public function write() + { + $xmlWriter = $this->getXmlWriter(); + + $xmlWriter->startElement('text:p'); + $xmlWriter->writeAttribute('text:style-name', 'P1'); + $xmlWriter->endElement(); + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Table.php index f6a2f8456d4160c0f559e82095ad72d62b1fb38d..cdc2a0e3cdfb9e548faf74575ab30dd601043b74 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Table.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Text.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Text.php index cff684812b1ad9f1787d29bfd8f2b6b66ab4bf8c..1fc0b80028ef75572d85c7925d429284ac74aea8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Text.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Text.php @@ -10,15 +10,14 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\ODText\Element; use PhpOffice\PhpWord\Exception\Exception; -use PhpOffice\PhpWord\Settings; /** * Text element writer @@ -47,42 +46,34 @@ class Text extends AbstractElement if ($fStyleIsObject) { // Don't never be the case, because I browse all sections for cleaning all styles not declared throw new Exception('PhpWord : $fStyleIsObject wouldn\'t be an object'); - } else { - if (!$this->withoutP) { - $xmlWriter->startElement('text:p'); // text:p + } + + if (!$this->withoutP) { + $xmlWriter->startElement('text:p'); // text:p + } + if (empty($fontStyle)) { + if (empty($paragraphStyle)) { + $xmlWriter->writeAttribute('text:style-name', 'P1'); + } elseif (is_string($paragraphStyle)) { + $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); } - if (empty($fontStyle)) { - if (empty($paragraphStyle)) { - $xmlWriter->writeAttribute('text:style-name', 'P1'); - } elseif (is_string($paragraphStyle)) { - $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); - } - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($element->getText()); - } else { - $xmlWriter->writeRaw($element->getText()); - } - } else { - if (empty($paragraphStyle)) { - $xmlWriter->writeAttribute('text:style-name', 'Standard'); - } elseif (is_string($paragraphStyle)) { - $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); - } - // text:span - $xmlWriter->startElement('text:span'); - if (is_string($fontStyle)) { - $xmlWriter->writeAttribute('text:style-name', $fontStyle); - } - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($element->getText()); - } else { - $xmlWriter->writeRaw($element->getText()); - } - $xmlWriter->endElement(); + $this->writeText($element->getText()); + } else { + if (empty($paragraphStyle)) { + $xmlWriter->writeAttribute('text:style-name', 'Standard'); + } elseif (is_string($paragraphStyle)) { + $xmlWriter->writeAttribute('text:style-name', $paragraphStyle); } - if (!$this->withoutP) { - $xmlWriter->endElement(); // text:p + // text:span + $xmlWriter->startElement('text:span'); + if (is_string($fontStyle)) { + $xmlWriter->writeAttribute('text:style-name', $fontStyle); } + $this->writeText($element->getText()); + $xmlWriter->endElement(); + } + if (!$this->withoutP) { + $xmlWriter->endElement(); // text:p } } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/TextBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/TextBreak.php index b0f5009e1922866716a3e6e236ab1c9ebdbe2bc8..f7642e3b283612ca9ba8478ac5e8f592987a99ef 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/TextBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/TextBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/TextRun.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/TextRun.php index 037170163ac40cd61cf2ff308d49e30f2af3332c..f5c855fe33698cc7ce429284af0193ea6c6403a5 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/TextRun.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/TextRun.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Title.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Title.php index b20ba9447aa2684103460de37c4aad9e8d5f497f..769d293f5deb3aa38d058928b726fb3cfe6ad882 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Title.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Element/Title.php @@ -10,15 +10,13 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\ODText\Element; -use PhpOffice\PhpWord\Settings; - /** * Title element writer * @@ -39,11 +37,7 @@ class Title extends AbstractElement $xmlWriter->startElement('text:h'); $xmlWriter->writeAttribute('text:outline-level', $element->getDepth()); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($element->getText()); - } else { - $xmlWriter->writeRaw($element->getText()); - } + $this->writeText($element->getText()); $xmlWriter->endElement(); // text:h } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/AbstractPart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/AbstractPart.php index dc377e0f9901e8a9a0498672eef2bec32d342ea4..74412fd42b0445c1bf64ad63e3f635c17a24973f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/AbstractPart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/AbstractPart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -37,7 +37,6 @@ abstract class AbstractPart extends Word2007AbstractPart * Write common root attributes. * * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ protected function writeCommonRootAttributes(XMLWriter $xmlWriter) { @@ -74,7 +73,6 @@ abstract class AbstractPart extends Word2007AbstractPart * Write font faces declaration. * * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ protected function writeFontFaces(XMLWriter $xmlWriter) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Content.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Content.php index 61f8e7e27b4d78ad2f155736f1b2d28f6feeacfb..8ae4dca9c70a09406d4023f810fa6940287abed8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Content.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Content.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -111,7 +111,6 @@ class Content extends AbstractPart * @since 0.11.0 * * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ private function writeAutoStyles(XMLWriter $xmlWriter) { @@ -121,7 +120,6 @@ class Content extends AbstractPart foreach ($this->autoStyles as $element => $styles) { $writerClass = 'PhpOffice\\PhpWord\\Writer\\ODText\\Style\\' . $element; foreach ($styles as $style) { - /** @var \PhpOffice\PhpWord\Writer\ODText\Style\AbstractStyle $styleWriter Type hint */ $styleWriter = new $writerClass($xmlWriter, $style); $styleWriter->write(); @@ -135,7 +133,6 @@ class Content extends AbstractPart * Write automatic styles. * * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ private function writeTextStyles(XMLWriter $xmlWriter) { @@ -169,7 +166,6 @@ class Content extends AbstractPart * Get automatic styles. * * @param \PhpOffice\PhpWord\PhpWord $phpWord - * @return void */ private function getAutoStyles(PhpWord $phpWord) { @@ -192,7 +188,6 @@ class Content extends AbstractPart * @param \PhpOffice\PhpWord\Element\AbstractContainer $container * @param int &$paragraphStyleCount * @param int &$fontStyleCount - * @return void * @todo Simplify the logic */ private function getContainerStyle($container, &$paragraphStyleCount, &$fontStyleCount) @@ -226,7 +221,6 @@ class Content extends AbstractPart * @param \PhpOffice\PhpWord\Element\Text &$element * @param int &$paragraphStyleCount * @param int &$fontStyleCount - * @return void */ private function getElementStyle(&$element, &$paragraphStyleCount, &$fontStyleCount) { @@ -234,15 +228,14 @@ class Content extends AbstractPart $paragraphStyle = $element->getParagraphStyle(); $phpWord = $this->getParentWriter()->getPhpWord(); - // Font if ($fontStyle instanceof Font) { + // Font $fontStyleCount++; $style = $phpWord->addFontStyle("T{$fontStyleCount}", $fontStyle); $style->setAuto(); $element->setFontStyle("T{$fontStyleCount}"); - - // Paragraph } elseif ($paragraphStyle instanceof Paragraph) { + // Paragraph $paragraphStyleCount++; $style = $phpWord->addParagraphStyle("P{$paragraphStyleCount}", array()); $style->setAuto(); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Manifest.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Manifest.php index 237c1a11d55533b70dd8766632297a41dfc0167b..d916ccdfb480c6ebad8e6b11065f34d763f08b66 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Manifest.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Manifest.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Meta.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Meta.php index f16db161eaa7d3db6ac4d5069326bc62eef6c804..f592c5f03468fa29a3cb773213c162e599b271ff 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Meta.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Meta.php @@ -10,15 +10,14 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\ODText\Part; use PhpOffice\Common\XMLWriter; -use PhpOffice\PhpWord\Settings; /** * ODText meta part writer: meta.xml @@ -90,7 +89,6 @@ class Meta extends AbstractPart * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $property * @param string $value - * @return void * * @todo Handle other `$type`: double|date|dateTime|duration|boolean (4th arguments) */ @@ -101,11 +99,7 @@ class Meta extends AbstractPart // if ($type !== null) { // $xmlWriter->writeAttribute('meta:value-type', $type); // } - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($value); - } else { - $xmlWriter->writeRaw($value); - } + $this->writeText($value); $xmlWriter->endElement(); // meta:user-defined } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Mimetype.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Mimetype.php index 7cf78b4b08b9a05c5a90279efa2611b16113b6ed..6e45b8485f8288b0c3cf665905035ff89cdd5f3e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Mimetype.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Mimetype.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Styles.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Styles.php index b50be0e804287d06bdcb56d97662c45cac085489..e49fa25e345499a032d40d7a120581aafb7dea32 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Styles.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Part/Styles.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -52,8 +52,10 @@ class Styles extends AbstractPart // Automatic styles $xmlWriter->startElement('office:automatic-styles'); $this->writePageLayout($xmlWriter); + $xmlWriter->endElement(); // office:automatic-styles + + // Master style $this->writeMaster($xmlWriter); - $xmlWriter->endElement(); $xmlWriter->endElement(); // office:document-styles @@ -64,7 +66,6 @@ class Styles extends AbstractPart * Write default styles. * * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ private function writeDefault(XMLWriter $xmlWriter) { @@ -81,22 +82,27 @@ class Styles extends AbstractPart $xmlWriter->writeAttribute('style:writing-mode', 'page'); $xmlWriter->endElement(); // style:paragraph-properties + $language = $this->getParentWriter()->getPhpWord()->getSettings()->getThemeFontLang(); + $latinLang = $language != null && is_string($language->getLatin()) ? explode('-', $language->getLatin()) : array('fr', 'FR'); + $asianLang = $language != null && is_string($language->getEastAsia()) ? explode('-', $language->getEastAsia()) : array('zh', 'CN'); + $complexLang = $language != null && is_string($language->getBidirectional()) ? explode('-', $language->getBidirectional()) : array('hi', 'IN'); + // Font $xmlWriter->startElement('style:text-properties'); $xmlWriter->writeAttribute('style:use-window-font-color', 'true'); $xmlWriter->writeAttribute('style:font-name', Settings::getDefaultFontName()); $xmlWriter->writeAttribute('fo:font-size', Settings::getDefaultFontSize() . 'pt'); - $xmlWriter->writeAttribute('fo:language', 'fr'); - $xmlWriter->writeAttribute('fo:country', 'FR'); + $xmlWriter->writeAttribute('fo:language', $latinLang[0]); + $xmlWriter->writeAttribute('fo:country', $latinLang[1]); $xmlWriter->writeAttribute('style:letter-kerning', 'true'); $xmlWriter->writeAttribute('style:font-name-asian', Settings::getDefaultFontName() . '2'); $xmlWriter->writeAttribute('style:font-size-asian', Settings::getDefaultFontSize() . 'pt'); - $xmlWriter->writeAttribute('style:language-asian', 'zh'); - $xmlWriter->writeAttribute('style:country-asian', 'CN'); + $xmlWriter->writeAttribute('style:language-asian', $asianLang[0]); + $xmlWriter->writeAttribute('style:country-asian', $asianLang[1]); $xmlWriter->writeAttribute('style:font-name-complex', Settings::getDefaultFontName() . '2'); $xmlWriter->writeAttribute('style:font-size-complex', Settings::getDefaultFontSize() . 'pt'); - $xmlWriter->writeAttribute('style:language-complex', 'hi'); - $xmlWriter->writeAttribute('style:country-complex', 'IN'); + $xmlWriter->writeAttribute('style:language-complex', $complexLang[0]); + $xmlWriter->writeAttribute('style:country-complex', $complexLang[1]); $xmlWriter->writeAttribute('fo:hyphenate', 'false'); $xmlWriter->writeAttribute('fo:hyphenation-remain-char-count', '2'); $xmlWriter->writeAttribute('fo:hyphenation-push-char-count', '2'); @@ -109,7 +115,6 @@ class Styles extends AbstractPart * Write named styles. * * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ private function writeNamed(XMLWriter $xmlWriter) { @@ -127,11 +132,11 @@ class Styles extends AbstractPart } } } + /** * Write page layout styles. * * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ private function writePageLayout(XMLWriter $xmlWriter) { @@ -139,7 +144,7 @@ class Styles extends AbstractPart $xmlWriter->writeAttribute('style:name', 'Mpm1'); $xmlWriter->startElement('style:page-layout-properties'); - $xmlWriter->writeAttribute('fo:page-width', "21.001cm"); + $xmlWriter->writeAttribute('fo:page-width', '21.001cm'); $xmlWriter->writeAttribute('fo:page-height', '29.7cm'); $xmlWriter->writeAttribute('style:num-format', '1'); $xmlWriter->writeAttribute('style:print-orientation', 'portrait'); @@ -170,7 +175,6 @@ class Styles extends AbstractPart $xmlWriter->endElement(); // style:page-layout-properties - $xmlWriter->startElement('style:header-style'); $xmlWriter->endElement(); // style:header-style @@ -184,7 +188,6 @@ class Styles extends AbstractPart * Write master style. * * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ private function writeMaster(XMLWriter $xmlWriter) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/AbstractStyle.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/AbstractStyle.php index 7bc49cb36c948063ccc27b7446af578a9169e404..26b9905bd543ca6f69d2c226253dd8e73bec91a1 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/AbstractStyle.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/AbstractStyle.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Font.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Font.php index 5d8e5753d6cf06d254cbdc49b8d72f20c2830080..50de32adada9f894cfdbae57f39eb5183cb3a26f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Font.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Font.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Font extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Image.php index 447f449ce3422d6b87def1752c714970292c280f..b85d4d70a6129ea802865e558c301c807a1b541b 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Image.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Image extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Paragraph.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Paragraph.php index 1d82181071a095aa8d1c6903f1a055a26aae77be..14a811a52d00e8c9f48be2ead8894520d367f981 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Paragraph.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Paragraph.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Paragraph extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { @@ -37,8 +35,8 @@ class Paragraph extends AbstractStyle } $xmlWriter = $this->getXmlWriter(); - $marginTop = is_null($style->getSpaceBefore()) ? '0' : round(17.6 / $style->getSpaceBefore(), 2); - $marginBottom = is_null($style->getSpaceAfter()) ? '0' : round(17.6 / $style->getSpaceAfter(), 2); + $marginTop = (is_null($style->getSpaceBefore()) || $style->getSpaceBefore() == 0) ? '0' : round(17.6 / $style->getSpaceBefore(), 2); + $marginBottom = (is_null($style->getSpaceAfter()) || $style->getSpaceAfter() == 0) ? '0' : round(17.6 / $style->getSpaceAfter(), 2); $xmlWriter->startElement('style:style'); $xmlWriter->writeAttribute('style:name', $style->getStyleName()); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Section.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Section.php index 79d57adb8bece763bbf7915ed3144131c60f6901..bef023e9f355f4d013cf9681ccab88698fd832e8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Section.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Section.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Section extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { @@ -40,7 +38,7 @@ class Section extends AbstractStyle $xmlWriter->startElement('style:style'); $xmlWriter->writeAttribute('style:name', $style->getStyleName()); - $xmlWriter->writeAttribute('style:family', "section"); + $xmlWriter->writeAttribute('style:family', 'section'); $xmlWriter->startElement('style:section-properties'); $xmlWriter->startElement('style:columns'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Table.php index ff3cc423fe9e710874500593070279653519c076..7d66899ac7f87d9f736e2759c11f8f5baf4cb86c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/ODText/Style/Table.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Table extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF.php index 5e5d9d71cf331f52104d4384d58bfb562b3d1e27..45fe8f3518dce836094b90b7cdefcaefe19dfe72 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PhpWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PhpWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -47,7 +47,7 @@ class PDF $pdfLibraryName = Settings::getPdfRendererName(); $pdfLibraryPath = Settings::getPdfRendererPath(); if (is_null($pdfLibraryName) || is_null($pdfLibraryPath)) { - throw new Exception("PDF rendering library or library path has not been defined."); + throw new Exception('PDF rendering library or library path has not been defined.'); } $includePath = str_replace('\\', '/', get_include_path()); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/AbstractRenderer.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/AbstractRenderer.php index 2778aa52437cbca894fa871dfe99f3278d24801c..7b668e0b891969846b4eebd5e2a90176d3ce0dae 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/AbstractRenderer.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/AbstractRenderer.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PhpWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PhpWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -83,15 +83,17 @@ abstract class AbstractRenderer extends HTML public function __construct(PhpWord $phpWord) { parent::__construct($phpWord); - $includeFile = Settings::getPdfRendererPath() . '/' . $this->includeFile; - if (file_exists($includeFile)) { - /** @noinspection PhpIncludeInspection Dynamic includes */ - require_once $includeFile; - } else { - // @codeCoverageIgnoreStart - // Can't find any test case. Uncomment when found. - throw new Exception('Unable to load PDF Rendering library'); - // @codeCoverageIgnoreEnd + if ($this->includeFile != null) { + $includeFile = Settings::getPdfRendererPath() . '/' . $this->includeFile; + if (file_exists($includeFile)) { + /** @noinspection PhpIncludeInspection Dynamic includes */ + require_once $includeFile; + } else { + // @codeCoverageIgnoreStart + // Can't find any test case. Uncomment when found. + throw new Exception('Unable to load PDF Rendering library'); + // @codeCoverageIgnoreEnd + } } } @@ -141,6 +143,7 @@ abstract class AbstractRenderer extends HTML public function setPaperSize($value = 9) { $this->paperSize = $value; + return $this; } @@ -163,6 +166,7 @@ abstract class AbstractRenderer extends HTML public function setOrientation($value = 'default') { $this->orientation = $value; + return $this; } @@ -171,9 +175,8 @@ abstract class AbstractRenderer extends HTML * * @param string $filename Name of the file to save as * - * @return resource - * * @throws \PhpOffice\PhpWord\Exception\Exception + * @return resource */ protected function prepareForSave($filename = null) { @@ -194,8 +197,6 @@ abstract class AbstractRenderer extends HTML * * @param resource $fileHandle * - * @return void - * * @throws Exception */ protected function restoreStateAfterSave($fileHandle) diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/DomPDF.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/DomPDF.php index e31f3aae958e832cee2aa833cae9b638949de8a2..be282d2026741d1b7bcef0a4b8213f5446fb7602 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/DomPDF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/DomPDF.php @@ -10,19 +10,20 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PhpWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PhpWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\PDF; +use Dompdf\Dompdf as DompdfLib; use PhpOffice\PhpWord\Writer\WriterInterface; /** * DomPDF writer * - * @link https://github.com/dompdf/dompdf + * @see https://github.com/dompdf/dompdf * @since 0.10.0 */ class DomPDF extends AbstractRenderer implements WriterInterface @@ -32,13 +33,12 @@ class DomPDF extends AbstractRenderer implements WriterInterface * * @var string */ - protected $includeFile = 'dompdf_config.inc.php'; + protected $includeFile = null; /** * Save PhpWord to file. * * @param string $filename Name of the file to save as - * @return void */ public function save($filename = null) { @@ -49,9 +49,9 @@ class DomPDF extends AbstractRenderer implements WriterInterface $orientation = 'portrait'; // Create PDF - $pdf = new \DOMPDF(); - $pdf->set_paper(strtolower($paperSize), $orientation); - $pdf->load_html($this->getContent()); + $pdf = new DompdfLib(); + $pdf->setPaper(strtolower($paperSize), $orientation); + $pdf->loadHtml(str_replace(PHP_EOL, '', $this->getContent())); $pdf->render(); // Write to file diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/MPDF.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/MPDF.php index 028ffac7251a102457ed6728e03a51b3df21fa31..e238057b1fe2ad9f17b15ff34d75370fd039c1ec 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/MPDF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/MPDF.php @@ -10,35 +10,38 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PhpWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PhpWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\PDF; +use PhpOffice\PhpWord\PhpWord; +use PhpOffice\PhpWord\Settings; use PhpOffice\PhpWord\Writer\WriterInterface; /** * MPDF writer * - * @link http://www.mpdf1.com/ + * @see http://www.mpdf1.com/ * @since 0.11.0 */ class MPDF extends AbstractRenderer implements WriterInterface { - /** - * Name of renderer include file - * - * @var string - */ - protected $includeFile = 'mpdf.php'; + public function __construct(PhpWord $phpWord) + { + if (file_exists(Settings::getPdfRendererPath() . '/mpdf.php')) { + // MPDF version 5.* needs this file to be included, later versions not + $this->includeFile = 'mpdf.php'; + } + parent::__construct($phpWord); + } /** * Save PhpWord to file. * * @param string $filename Name of the file to save as - * @return void */ public function save($filename = null) { @@ -49,7 +52,13 @@ class MPDF extends AbstractRenderer implements WriterInterface $orientation = strtoupper('portrait'); // Create PDF - $pdf = new \mpdf(); + if ($this->includeFile != null) { + // MPDF version 5.* + $pdf = new \mpdf(); + } else { + // MPDF version > 6.* + $pdf = new \Mpdf\Mpdf(); + } $pdf->_setPageSize($paperSize, $orientation); $pdf->addPage($orientation); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/TCPDF.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/TCPDF.php index e1e190060406e3d988cb03f2f5759c83fcb7308e..85e3614c08f3f02f8ded777c3bacc712be7cf8ef 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/TCPDF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/TCPDF.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PhpWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PhpWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -24,7 +24,7 @@ use PhpOffice\PhpWord\Writer\WriterInterface; * * @deprecated 0.13.0 Use `DomPDF` or `MPDF` instead. * - * @link http://www.tcpdf.org/ + * @see http://www.tcpdf.org/ * @since 0.11.0 */ class TCPDF extends AbstractRenderer implements WriterInterface @@ -40,7 +40,6 @@ class TCPDF extends AbstractRenderer implements WriterInterface * Save PhpWord to file. * * @param string $filename Name of the file to save as - * @return vois */ public function save($filename = null) { @@ -55,21 +54,21 @@ class TCPDF extends AbstractRenderer implements WriterInterface $pdf->setFontSubsetting(false); $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); - $pdf->addPage(); - $pdf->setFont($this->getFont()); + $pdf->AddPage(); + $pdf->SetFont($this->getFont()); $pdf->writeHTML($this->getContent()); // Write document properties $phpWord = $this->getPhpWord(); $docProps = $phpWord->getDocInfo(); - $pdf->setTitle($docProps->getTitle()); - $pdf->setAuthor($docProps->getCreator()); - $pdf->setSubject($docProps->getSubject()); - $pdf->setKeywords($docProps->getKeywords()); - $pdf->setCreator($docProps->getCreator()); + $pdf->SetTitle($docProps->getTitle()); + $pdf->SetAuthor($docProps->getCreator()); + $pdf->SetSubject($docProps->getSubject()); + $pdf->SetKeywords($docProps->getKeywords()); + $pdf->SetCreator($docProps->getCreator()); // Write to file - fwrite($fileHandle, $pdf->output($filename, 'S')); + fwrite($fileHandle, $pdf->Output($filename, 'S')); parent::restoreStateAfterSave($fileHandle); } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF.php index 887b1c67b35d020a6ef65fcee30e21253a362aaf..7756253ab74dd6b69cd7f4ad1a6c9d13649fe39f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -58,9 +58,6 @@ class RTF extends AbstractWriter implements WriterInterface * Save content to file. * * @param string $filename - * - * @return void - * * @throws \PhpOffice\PhpWord\Exception\Exception */ public function save($filename = null) @@ -121,7 +118,6 @@ class RTF extends AbstractWriter implements WriterInterface * Set last paragraph style. * * @param mixed $value - * @return void */ public function setLastParagraphStyle($value = '') { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/AbstractElement.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/AbstractElement.php index 289733dca58042ccf5a3f61b22a5b453d10ef72a..1013ee368571e6ed067396df8d80143a931af1c3 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/AbstractElement.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/AbstractElement.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -59,8 +59,6 @@ abstract class AbstractElement extends HTMLAbstractElement /** * Get font and paragraph styles. - * - * @return void */ protected function getStyles() { @@ -112,6 +110,7 @@ abstract class AbstractElement extends HTMLAbstractElement $styleWriter = new ParagraphStyleWriter($this->paragraphStyle); $styleWriter->setNestedLevel($this->element->getNestedLevel()); + return $styleWriter->write(); } @@ -125,9 +124,9 @@ abstract class AbstractElement extends HTMLAbstractElement { if (Settings::isOutputEscapingEnabled()) { return $this->escaper->escape($text); - } else { - return CommonText::toUnicode($text); // todo: replace with `return $text;` later. } + + return CommonText::toUnicode($text); // todo: replace with `return $text;` later. } /** diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Container.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Container.php index 7a1b0b07f764ca06d3b0953486cdd525cd2b33d9..4850c8bf2d5c748f48ddfd5b902b95b4f1447134 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Container.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Container.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Image.php index e950d30b3970a629d3ee0cdd7bbb9eb045ebf874..fb96baffe500b1c3e72c04a07a4a620da83cf2ce 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Image.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Link.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Link.php index f106d57dd73b5a299accb06d545a26652c15e6ed..91a75720dc7e7c8ccddac57a47c87c4f392e466f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Link.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Link.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/ListItem.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/ListItem.php index b2ba612d4fcde31284d9fa79e4a836803bf017ee..e628bffd360f1e66a85f4cdf0ed8c770fbd180af 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/ListItem.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/ListItem.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/PageBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/PageBreak.php index ac2bb8ecb62d3d681b6184f90626f39e36eb399e..0adbe06e96b9331c1e47c58753d63bf77d6ea0b6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/PageBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/PageBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Table.php index c65d724871e64230daacef1dcd8593ea463190e5..d0bc08457eb1bba18019b694c0ee07a6a20a7965 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Table.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Text.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Text.php index b5a28adf74775c23a3d6e02346c6d5766652c8ca..2fac0520880d21fec471d56792c9220708c27a20 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Text.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Text.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/TextBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/TextBreak.php index 0f76aea2fadf53dae82a56ba24088d6f91e041c4..2009fcfff1699d81a470c60ee134c797753f30aa 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/TextBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/TextBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/TextRun.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/TextRun.php index f63f338ddc622c83a6768dbf9bf0f36905c0ed8b..d4e5676552189a7ab219ff73d3055ddee4bedbd4 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/TextRun.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/TextRun.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Title.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Title.php index 894f52cc2e3ee55e827b4a3ae3b28772aa0512c3..18bad9fd6a4985f00e01b823f6bd3eb862bd0013 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Title.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Element/Title.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/AbstractPart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/AbstractPart.php index 152493db7b60a4078a990ef65b8f7bb15465b621..7569a105aa182a46c2dbf90a69e865969392a76e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/AbstractPart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/AbstractPart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -48,8 +48,6 @@ abstract class AbstractPart /** * @param \PhpOffice\PhpWord\Writer\AbstractWriter $writer - * - * @return void */ public function setParentWriter(AbstractWriter $writer = null) { @@ -57,16 +55,14 @@ abstract class AbstractPart } /** - * @return \PhpOffice\PhpWord\Writer\AbstractWriter - * * @throws \PhpOffice\PhpWord\Exception\Exception + * @return \PhpOffice\PhpWord\Writer\AbstractWriter */ public function getParentWriter() { if ($this->parentWriter !== null) { return $this->parentWriter; - } else { - throw new Exception('No parent WriterInterface assigned.'); } + throw new Exception('No parent WriterInterface assigned.'); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/Document.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/Document.php index 24ee7b0add6f6dac3c3ce4c4deb032042f0660c2..465872eade6400109ff452ec9bb2097ea45c27a1 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/Document.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/Document.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -25,7 +25,7 @@ use PhpOffice\PhpWord\Writer\RTF\Style\Section as SectionStyleWriter; * RTF document part writer * * @since 0.11.0 - * @link http://www.biblioscape.com/rtf15_spec.htm#Heading24 + * @see http://www.biblioscape.com/rtf15_spec.htm#Heading24 */ class Document extends AbstractPart { @@ -54,9 +54,13 @@ class Document extends AbstractPart { $docProps = $this->getParentWriter()->getPhpWord()->getDocInfo(); $properties = array('title', 'subject', 'category', 'keywords', 'comment', - 'author', 'operator', 'creatim', 'revtim', 'company', 'manager'); - $mapping = array('comment' => 'description', 'author' => 'creator', 'operator' => 'lastModifiedBy', - 'creatim' => 'created', 'revtim' => 'modified'); + 'author', 'operator', 'creatim', 'revtim', 'company', 'manager', ); + $mapping = array( + 'comment' => 'description', + 'author' => 'creator', + 'operator' => 'lastModifiedBy', + 'creatim' => 'created', + 'revtim' => 'modified', ); $dateFields = array('creatim', 'revtim'); $content = ''; @@ -86,6 +90,10 @@ class Document extends AbstractPart */ private function writeFormatting() { + $docSettings = $this->getParentWriter()->getPhpWord()->getSettings(); + // Applies a language to a text run (defaults to 1036 : French (France)) + $langId = $docSettings->getThemeFontLang() != null && $docSettings->getThemeFontLang()->getLangId() != null ? $docSettings->getThemeFontLang()->getLangId() : 1036; + $content = ''; $content .= '\deftab720'; // Set the default tab size (720 twips) @@ -94,7 +102,7 @@ class Document extends AbstractPart $content .= '\uc1'; // Set the numberof bytes that follows a unicode character $content .= '\pard'; // Resets to default paragraph properties. $content .= '\nowidctlpar'; // No widow/orphan control - $content .= '\lang1036'; // Applies a language to a text run (1036 : French (France)) + $content .= '\lang' . $langId; $content .= '\kerning1'; // Point size (in half-points) above which to kern character pairs $content .= '\fs' . (Settings::getDefaultFontSize() * 2); // Set the font size in half-points $content .= PHP_EOL; diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/Header.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/Header.php index 56a5034995f157c121354ea1cb96cc8972b00159..73f1351f8a1bc9d089d82527395c90a5fb1fb32a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/Header.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Part/Header.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -33,7 +33,7 @@ use PhpOffice\PhpWord\Style\Font; * - List table (not supported yet) * * @since 0.11.0 - * @link http://www.biblioscape.com/rtf15_spec.htm#Heading6 + * @see http://www.biblioscape.com/rtf15_spec.htm#Heading6 */ class Header extends AbstractPart { @@ -181,8 +181,6 @@ class Header extends AbstractPart /** * Register all fonts and colors in both named and inline styles to appropriate header table. - * - * @return void */ private function registerFont() { @@ -213,7 +211,6 @@ class Header extends AbstractPart * Register border colors. * * @param \PhpOffice\PhpWord\Style\Border $style - * @return void */ private function registerBorderColor($style) { @@ -229,7 +226,6 @@ class Header extends AbstractPart * Register fonts and colors. * * @param \PhpOffice\PhpWord\Style\AbstractStyle $style - * @return void */ private function registerFontItems($style) { @@ -249,7 +245,6 @@ class Header extends AbstractPart * @param array &$table * @param string $value * @param string $default - * @return void */ private function registerTableItem(&$table, $value, $default = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/AbstractStyle.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/AbstractStyle.php index 417be9cff95794ebef894adb9a38e530855cebed..80523610929ec88d51389c0919b99f334e501e43 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/AbstractStyle.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/AbstractStyle.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Border.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Border.php index 9f7ee2c0aea1ce34d624ff1e5d799e64d2159968..0ba9f6025438344378eeacf9753ac9255a5e18f4 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Border.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Border.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -48,7 +48,7 @@ class Border extends AbstractStyle $content = ''; $sides = array('top', 'left', 'right', 'bottom'); - $sizeCount = count($this->sizes) - 1; + $sizeCount = count($this->sizes); // Page border measure // 8 = from text, infront off; 32 = from edge, infront on; 40 = from edge, infront off @@ -103,8 +103,7 @@ class Border extends AbstractStyle /** * Set sizes. * - * @param integer[] $value - * @return void + * @param int[] $value */ public function setSizes($value) { @@ -115,7 +114,6 @@ class Border extends AbstractStyle * Set colors. * * @param string[] $value - * @return void */ public function setColors($value) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Font.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Font.php index 6567ec33bd82629f0a3a6776cd0447423d970332..3338368ad4c84b9f66d6df12ae1e91f30f6123e3 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Font.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Font.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -62,7 +62,7 @@ class Font extends AbstractStyle $content .= $this->getValueIf($style->isSuperScript(), '\super'); $content .= $this->getValueIf($style->isSubScript(), '\sub'); - return $content . ' '; + return $content . ' '; } /** @@ -70,7 +70,6 @@ class Font extends AbstractStyle * * * @param int $value - * @return void */ public function setNameIndex($value = 0) { @@ -81,7 +80,6 @@ class Font extends AbstractStyle * Set font color index. * * @param int $value - * @return void */ public function setColorIndex($value = 0) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Paragraph.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Paragraph.php index 046adc8c67de0ffcd74c756df526bf4f72b1eab4..61b61fd73cbad1611ef2c07939504cf11f67972d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Paragraph.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Paragraph.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -74,7 +74,6 @@ class Paragraph extends AbstractStyle * Set nested level. * * @param int $value - * @return void */ public function setNestedLevel($value) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Section.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Section.php index dcdc0aaf3b1d6485522ed3074025b3744a4d203d..8f073716ba1854323e4b7c53e1e7ce27e00e9753 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Section.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/RTF/Style/Section.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007.php index 8e10f5f60423c6c7a0b1aeb9f560add2665068f3..fcef982fe2f80d6174b5b72051f5fc30328a442d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -60,6 +60,7 @@ class Word2007 extends AbstractWriter implements WriterInterface 'DocPropsCustom' => 'docProps/custom.xml', 'RelsDocument' => 'word/_rels/document.xml.rels', 'Document' => 'word/document.xml', + 'Comments' => 'word/comments.xml', 'Styles' => 'word/styles.xml', 'Numbering' => 'word/numbering.xml', 'Settings' => 'word/settings.xml', @@ -91,7 +92,6 @@ class Word2007 extends AbstractWriter implements WriterInterface * Save document by name. * * @param string $filename - * @return void */ public function save($filename = null) { @@ -129,6 +129,7 @@ class Word2007 extends AbstractWriter implements WriterInterface $this->addNotes($zip, $rId, 'footnote'); $this->addNotes($zip, $rId, 'endnote'); + $this->addComments($zip, $rId); $this->addChart($zip, $rId); // Write parts @@ -168,7 +169,6 @@ class Word2007 extends AbstractWriter implements WriterInterface * * @param \PhpOffice\PhpWord\Shared\ZipArchive $zip * @param string $docPart - * @return void */ private function addHeaderFooterMedia(ZipArchive $zip, $docPart) { @@ -195,16 +195,15 @@ class Word2007 extends AbstractWriter implements WriterInterface * @param \PhpOffice\PhpWord\Element\Section &$section * @param \PhpOffice\PhpWord\Shared\ZipArchive $zip * @param string $elmType header|footer - * @param integer &$rId - * @return void + * @param int &$rId */ private function addHeaderFooterContent(Section &$section, ZipArchive $zip, $elmType, &$rId) { $getFunction = $elmType == 'header' ? 'getHeaders' : 'getFooters'; $elmCount = ($section->getSectionId() - 1) * 3; $elements = $section->$getFunction(); + /** @var \PhpOffice\PhpWord\Element\AbstractElement $element Type hint */ foreach ($elements as &$element) { - /** @var \PhpOffice\PhpWord\Element\AbstractElement $element Type hint */ $elmCount++; $element->setRelationId(++$rId); $elmFile = "{$elmType}{$elmCount}.xml"; // e.g. footer1.xml @@ -221,9 +220,8 @@ class Word2007 extends AbstractWriter implements WriterInterface * Add footnotes/endnotes * * @param \PhpOffice\PhpWord\Shared\ZipArchive $zip - * @param integer &$rId + * @param int &$rId * @param string $noteType - * @return void */ private function addNotes(ZipArchive $zip, &$rId, $noteType = 'footnote') { @@ -255,12 +253,34 @@ class Word2007 extends AbstractWriter implements WriterInterface } } + /** + * Add comments + * + * @param \PhpOffice\PhpWord\Shared\ZipArchive $zip + * @param int &$rId + */ + private function addComments(ZipArchive $zip, &$rId) + { + $phpWord = $this->getPhpWord(); + $collection = $phpWord->getComments(); + $partName = 'comments'; + + // Add comment relations and contents + /** @var \PhpOffice\PhpWord\Collection\AbstractCollection $collection Type hint */ + if ($collection->countItems() > 0) { + $this->relationships[] = array('target' => "{$partName}.xml", 'type' => $partName, 'rID' => ++$rId); + + // Write content file, e.g. word/comments.xml + $writerPart = $this->getWriterPart($partName)->setElements($collection->getItems()); + $zip->addFromString("word/{$partName}.xml", $writerPart->write()); + } + } + /** * Add chart. * * @param \PhpOffice\PhpWord\Shared\ZipArchive $zip - * @param integer &$rId - * @return void + * @param int &$rId */ private function addChart(ZipArchive $zip, &$rId) { @@ -269,6 +289,7 @@ class Word2007 extends AbstractWriter implements WriterInterface $collection = $phpWord->getCharts(); $index = 0; if ($collection->countItems() > 0) { + /** @var \PhpOffice\PhpWord\Element\Chart $chart */ foreach ($collection->getItems() as $chart) { $index++; $rId++; @@ -281,7 +302,6 @@ class Word2007 extends AbstractWriter implements WriterInterface $this->relationships[] = array('target' => $filename, 'type' => 'chart', 'rID' => $rId); // word/charts/chartN.xml - /** @var \PhpOffice\PhpWord\Element\Chart $chart */ $chart->setRelationId($rId); $writerPart = $this->getWriterPart('Chart'); $writerPart->setElement($chart); @@ -294,7 +314,6 @@ class Word2007 extends AbstractWriter implements WriterInterface * Register content types for each media. * * @param array $media - * @return void */ private function registerContentTypes($media) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/AbstractElement.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/AbstractElement.php index f5a454d297202d63b768079caf521471ca4749bd..8c9f0bb7a61e117c8a8a337debcc6ec2e97ced00 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/AbstractElement.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/AbstractElement.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -20,6 +20,7 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; use PhpOffice\Common\Text as CommonText; use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\AbstractElement as Element; +use PhpOffice\PhpWord\Settings; /** * Abstract element writer @@ -92,7 +93,6 @@ abstract class AbstractElement * Start w:p DOM element. * * @uses \PhpOffice\PhpWord\Writer\Word2007\Element\PageBreak::write() - * @return void */ protected function startElementP() { @@ -103,24 +103,68 @@ abstract class AbstractElement $this->writeParagraphStyle(); } } + $this->writeCommentRangeStart(); } /** * End w:p DOM element. - * - * @return void */ protected function endElementP() { + $this->writeCommentRangeEnd(); if (!$this->withoutP) { $this->xmlWriter->endElement(); // w:p } } + /** + * Writes the w:commentRangeStart DOM element + */ + protected function writeCommentRangeStart() + { + if ($this->element->getCommentRangeStart() != null) { + $comment = $this->element->getCommentRangeStart(); + //only set the ID if it is not yet set, otherwise it will overwrite it + if ($comment->getElementId() == null) { + $comment->setElementId(); + } + + $this->xmlWriter->writeElementBlock('w:commentRangeStart', array('w:id' => $comment->getElementId())); + } + } + + /** + * Writes the w:commentRangeEnd DOM element + */ + protected function writeCommentRangeEnd() + { + if ($this->element->getCommentRangeEnd() != null) { + $comment = $this->element->getCommentRangeEnd(); + //only set the ID if it is not yet set, otherwise it will overwrite it, this should normally not happen + if ($comment->getElementId() == null) { + $comment->setElementId(); // @codeCoverageIgnore + } // @codeCoverageIgnore + + $this->xmlWriter->writeElementBlock('w:commentRangeEnd', array('w:id' => $comment->getElementId())); + $this->xmlWriter->startElement('w:r'); + $this->xmlWriter->writeElementBlock('w:commentReference', array('w:id' => $comment->getElementId())); + $this->xmlWriter->endElement(); + } elseif ($this->element->getCommentRangeStart() != null && $this->element->getCommentRangeStart()->getEndElement() == null) { + $comment = $this->element->getCommentRangeStart(); + //only set the ID if it is not yet set, otherwise it will overwrite it, this should normally not happen + if ($comment->getElementId() == null) { + $comment->setElementId(); // @codeCoverageIgnore + } // @codeCoverageIgnore + + $this->xmlWriter->writeElementBlock('w:commentRangeEnd', array('w:id' => $comment->getElementId())); + $this->xmlWriter->startElement('w:r'); + $this->xmlWriter->writeElementBlock('w:commentReference', array('w:id' => $comment->getElementId())); + $this->xmlWriter->endElement(); + } + } + /** * Write ending. - * - * @return void */ protected function writeParagraphStyle() { @@ -129,20 +173,16 @@ abstract class AbstractElement /** * Write ending. - * - * @return void */ protected function writeFontStyle() { $this->writeTextStyle('Font'); } - /** * Write text style. * * @param string $styleType Font|Paragraph - * @return void */ private function writeTextStyle($styleType) { @@ -150,12 +190,12 @@ abstract class AbstractElement $class = "PhpOffice\\PhpWord\\Writer\\Word2007\\Style\\{$styleType}"; $styleObject = $this->element->$method(); + /** @var \PhpOffice\PhpWord\Writer\Word2007\Style\AbstractStyle $styleWriter Type Hint */ $styleWriter = new $class($this->xmlWriter, $styleObject); if (method_exists($styleWriter, 'setIsInline')) { $styleWriter->setIsInline(true); } - /** @var \PhpOffice\PhpWord\Writer\Word2007\Style\AbstractStyle $styleWriter */ $styleWriter->write(); } @@ -169,4 +209,19 @@ abstract class AbstractElement { return CommonText::controlCharacterPHP2OOXML($text); } + + /** + * Write an XML text, this will call text() or writeRaw() depending on the value of Settings::isOutputEscapingEnabled() + * + * @param string $content The text string to write + * @return bool Returns true on success or false on failure + */ + protected function writeText($content) + { + if (Settings::isOutputEscapingEnabled()) { + return $this->getXmlWriter()->text($content); + } + + return $this->getXmlWriter()->writeRaw($content); + } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Bookmark.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Bookmark.php index 424fb0ab79f22d1b048acdba73f8ea0ea538437e..4b0b78a73a4c5805034491170fdb07d03f5aa9f2 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Bookmark.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Bookmark.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -41,7 +41,7 @@ class Bookmark extends AbstractElement $xmlWriter->writeAttribute('w:id', $rId); $xmlWriter->writeAttribute('w:name', $element->getName()); $xmlWriter->endElement(); - + $xmlWriter->startElement('w:bookmarkEnd'); $xmlWriter->writeAttribute('w:id', $rId); $xmlWriter->endElement(); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Chart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Chart.php index 12602532a9129d7bd89e732242f07eae589bacba..591799ab5b45f634e199811913e284523746002b 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Chart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Chart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,8 +28,6 @@ class Chart extends AbstractElement { /** * Write element. - * - * @return void */ public function write() { @@ -45,6 +43,7 @@ class Chart extends AbstractElement if (!$this->withoutP) { $xmlWriter->startElement('w:p'); } + $this->writeCommentRangeStart(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:drawing'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/CheckBox.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/CheckBox.php index 7424985cfc49aeec93799a996122e6f3570005c9..ab888f6757fa92b458e8d4eecc81c6d0fc87fdb4 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/CheckBox.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/CheckBox.php @@ -10,15 +10,13 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\PhpWord\Settings; - /** * CheckBox element writer * @@ -28,8 +26,6 @@ class CheckBox extends Text { /** * Write element. - * - * @return void */ public function write() { @@ -66,17 +62,17 @@ class CheckBox extends Text $xmlWriter->startElement('w:instrText'); $xmlWriter->writeAttribute('xml:space', 'preserve'); $xmlWriter->text(' FORMCHECKBOX '); - $xmlWriter->endElement();// w:instrText + $xmlWriter->endElement(); // w:instrText $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'separate'); - $xmlWriter->endElement();// w:fldChar + $xmlWriter->endElement(); // w:fldChar $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:fldChar'); $xmlWriter->writeAttribute('w:fldCharType', 'end'); - $xmlWriter->endElement();// w:fldChar + $xmlWriter->endElement(); // w:fldChar $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); @@ -85,11 +81,7 @@ class CheckBox extends Text $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($this->getText($element->getText())); - } else { - $xmlWriter->writeRaw($this->getText($element->getText())); - } + $this->writeText($this->getText($element->getText())); $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Container.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Container.php index 0efd0ebc430505c163d1aabbc9573181c64be5f4..47dae29be04a0339e460145157dcef9b8ebb68c5 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Container.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Container.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -38,8 +38,6 @@ class Container extends AbstractElement /** * Write element. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Endnote.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Endnote.php index 9363489e45ac50a7ab9e12390b71bca06b0d7c27..ebfe35c18dec45b128032f7d72d913453b648200 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Endnote.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Endnote.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Field.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Field.php index ae4c66ba8e20f4c466078e4903dee417672accbe..75d4983fef8db99ebffc2346460c59e01739277e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Field.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Field.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,27 +26,98 @@ class Field extends Text { /** * Write field element. - * - * @return void */ public function write() { $xmlWriter = $this->getXmlWriter(); - $element = $this->getElement(); + $element = $this->getElement(); if (!$element instanceof \PhpOffice\PhpWord\Element\Field) { return; } + $this->startElementP(); + + $xmlWriter->startElement('w:r'); + $xmlWriter->startElement('w:fldChar'); + $xmlWriter->writeAttribute('w:fldCharType', 'begin'); + $xmlWriter->endElement(); // w:fldChar + $xmlWriter->endElement(); // w:r + $instruction = ' ' . $element->getType() . ' '; - $properties = $element->getProperties(); + if ($element->getText() != null) { + if (is_string($element->getText())) { + $instruction .= '"' . $element->getText() . '" '; + $instruction .= $this->buildPropertiesAndOptions($element); + } else { + $instruction .= '"'; + } + } else { + $instruction .= $this->buildPropertiesAndOptions($element); + } + $xmlWriter->startElement('w:r'); + $xmlWriter->startElement('w:instrText'); + $xmlWriter->writeAttribute('xml:space', 'preserve'); + $xmlWriter->text($instruction); + $xmlWriter->endElement(); // w:instrText + $xmlWriter->endElement(); // w:r + + if ($element->getText() != null) { + if ($element->getText() instanceof \PhpOffice\PhpWord\Element\TextRun) { + $containerWriter = new Container($xmlWriter, $element->getText(), true); + $containerWriter->write(); + + $xmlWriter->startElement('w:r'); + $xmlWriter->startElement('w:instrText'); + $xmlWriter->text('"' . $this->buildPropertiesAndOptions($element)); + $xmlWriter->endElement(); // w:instrText + $xmlWriter->endElement(); // w:r + + $xmlWriter->startElement('w:r'); + $xmlWriter->startElement('w:instrText'); + $xmlWriter->writeAttribute('xml:space', 'preserve'); + $xmlWriter->text(' '); + $xmlWriter->endElement(); // w:instrText + $xmlWriter->endElement(); // w:r + } + } + + $xmlWriter->startElement('w:r'); + $xmlWriter->startElement('w:fldChar'); + $xmlWriter->writeAttribute('w:fldCharType', 'separate'); + $xmlWriter->endElement(); // w:fldChar + $xmlWriter->endElement(); // w:r + + $xmlWriter->startElement('w:r'); + $xmlWriter->startElement('w:rPr'); + $xmlWriter->startElement('w:noProof'); + $xmlWriter->endElement(); // w:noProof + $xmlWriter->endElement(); // w:rPr + $xmlWriter->writeElement('w:t', $element->getText() != null && is_string($element->getText()) ? $element->getText() : '1'); + $xmlWriter->endElement(); // w:r + + $xmlWriter->startElement('w:r'); + $xmlWriter->startElement('w:fldChar'); + $xmlWriter->writeAttribute('w:fldCharType', 'end'); + $xmlWriter->endElement(); // w:fldChar + $xmlWriter->endElement(); // w:r + + $this->endElementP(); // w:p + } + + private function buildPropertiesAndOptions(\PhpOffice\PhpWord\Element\Field $element) + { + $propertiesAndOptions = ''; + $properties = $element->getProperties(); foreach ($properties as $propkey => $propval) { switch ($propkey) { case 'format': + $propertiesAndOptions .= '\* ' . $propval . ' '; + break; case 'numformat': - $instruction .= '\* ' . $propval . ' '; + $propertiesAndOptions .= '\# ' . $propval . ' '; break; case 'dateformat': - $instruction .= '\@ "' . $propval . '" '; + $propertiesAndOptions .= '\@ "' . $propval . '" '; break; } } @@ -55,34 +126,28 @@ class Field extends Text foreach ($options as $option) { switch ($option) { case 'PreserveFormat': - $instruction .= '\* MERGEFORMAT '; + $propertiesAndOptions .= '\* MERGEFORMAT '; break; case 'LunarCalendar': - $instruction .= '\h '; + $propertiesAndOptions .= '\h '; break; case 'SakaEraCalendar': - $instruction .= '\s '; + $propertiesAndOptions .= '\s '; break; case 'LastUsedFormat': - $instruction .= '\l '; + $propertiesAndOptions .= '\l '; + break; + case 'Bold': + $propertiesAndOptions .= '\b '; + break; + case 'Italic': + $propertiesAndOptions .= '\i '; break; + default: + $propertiesAndOptions .= $option . ' '; } } - $this->startElementP(); - - $xmlWriter->startElement('w:fldSimple'); - $xmlWriter->writeAttribute('w:instr', $instruction); - $xmlWriter->startElement('w:r'); - $xmlWriter->startElement('w:rPr'); - $xmlWriter->startElement('w:noProof'); - $xmlWriter->endElement(); // w:noProof - $xmlWriter->endElement(); // w:rPr - - $xmlWriter->writeElement('w:t', '1'); - $xmlWriter->endElement(); // w:r - $xmlWriter->endElement(); // w:fldSimple - - $this->endElementP(); // w:p + return $propertiesAndOptions; } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Footnote.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Footnote.php index 53fcd6a045eb5774567db5b90eafb4f8d5048ad3..65ef40c7f4e3c298c99ca72afff3deafe569c9ae 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Footnote.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Footnote.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -33,8 +33,6 @@ class Footnote extends Text /** * Write element. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/FormField.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/FormField.php index 27df756f065b160b59de05463ff3427bb368ad10..c77ca3789877b96cbe943a30a574e9ca94c9fce7 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/FormField.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/FormField.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -19,7 +19,6 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\FormField as FormFieldElement; -use PhpOffice\PhpWord\Settings; /** * FormField element writer @@ -27,7 +26,7 @@ use PhpOffice\PhpWord\Settings; * Note: DropDown is active when document protection is set to `forms` * * @since 0.12.0 - * @link http://www.datypic.com/sc/ooxml/t-w_CT_FFData.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_FFData.html * @SuppressWarnings(PHPMD.UnusedPrivateMethod) */ class FormField extends Text @@ -37,8 +36,6 @@ class FormField extends Text /** * Write element. - * - * @return void */ public function write() { @@ -80,7 +77,7 @@ class FormField extends Text $xmlWriter->startElement('w:instrText'); $xmlWriter->writeAttribute('xml:space', 'preserve'); $xmlWriter->text("{$instruction}"); - $xmlWriter->endElement();// w:instrText + $xmlWriter->endElement(); // w:instrText $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); @@ -92,11 +89,7 @@ class FormField extends Text $this->writeFontStyle(); $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($value); - } else { - $xmlWriter->writeRaw($value); - } + $this->writeText($value); $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r @@ -111,10 +104,9 @@ class FormField extends Text /** * Write textinput. * - * @link http://www.datypic.com/sc/ooxml/t-w_CT_FFTextInput.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_FFTextInput.html * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\FormField $element - * @return void */ private function writeTextInput(XMLWriter $xmlWriter, FormFieldElement $element) { @@ -128,10 +120,9 @@ class FormField extends Text /** * Write checkbox. * - * @link http://www.datypic.com/sc/ooxml/t-w_CT_FFCheckBox.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_FFCheckBox.html * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\FormField $element - * @return void */ private function writeCheckBox(XMLWriter $xmlWriter, FormFieldElement $element) { @@ -152,10 +143,9 @@ class FormField extends Text /** * Write dropdown. * - * @link http://www.datypic.com/sc/ooxml/t-w_CT_FFDDList.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_FFDDList.html * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\FormField $element - * @return void */ private function writeDropDown(XMLWriter $xmlWriter, FormFieldElement $element) { @@ -170,6 +160,9 @@ class FormField extends Text $xmlWriter->writeElementBlock('w:result', 'w:val', $value); $xmlWriter->writeElementBlock('w:default', 'w:val', $default); foreach ($entries as $entry) { + if ($entry == null || $entry == '') { + $entry = str_repeat(' ', self::FILLER_LENGTH); + } $xmlWriter->writeElementBlock('w:listEntry', 'w:val', $entry); } $xmlWriter->endElement(); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Image.php index 914c78ea498449730d0cbe30def0b1672f878b07..7e33f75e4f143025a94c7296641c3575d895a607 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Image.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -30,8 +30,6 @@ class Image extends AbstractElement { /** * Write element. - * - * @return void */ public function write() { @@ -50,8 +48,6 @@ class Image extends AbstractElement /** * Write image element. - * - * @return void */ private function writeImage(XMLWriter $xmlWriter, ImageElement $element) { @@ -63,6 +59,7 @@ class Image extends AbstractElement $xmlWriter->startElement('w:p'); $styleWriter->writeAlignment(); } + $this->writeCommentRangeStart(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); @@ -85,8 +82,6 @@ class Image extends AbstractElement /** * Write watermark element. - * - * @return void */ private function writeWatermark(XMLWriter $xmlWriter, ImageElement $element) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Line.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Line.php index ade91fb84f8af87b06716ae66e042d8b6bd146fe..9b1a160d4e72cccd14a539fb21505199dceed2b1 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Line.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Line.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -22,19 +22,16 @@ use PhpOffice\PhpWord\Writer\Word2007\Style\Line as LineStyleWriter; /** * Line element writer - * */ class Line extends AbstractElement { /** * Write element. - * - * @return void */ public function write() { $xmlWriter = $this->getXmlWriter(); - $element = $this->getElement(); + $element = $this->getElement(); if (!$element instanceof LineElement) { return; } @@ -48,6 +45,7 @@ class Line extends AbstractElement $xmlWriter->startElement('w:p'); $styleWriter->writeAlignment(); } + $this->writeCommentRangeStart(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Link.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Link.php index 5f7ad278c99df41cae642b4ea17e5cfcbd14cd20..dc708a618d51332f73227c6d99dc648ad4838ac9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Link.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Link.php @@ -10,15 +10,13 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\PhpWord\Settings; - /** * Link element writer * @@ -28,8 +26,6 @@ class Link extends Text { /** * Write link element. - * - * @return void */ public function write() { @@ -56,11 +52,7 @@ class Link extends Text $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($element->getText()); - } else { - $xmlWriter->writeRaw($element->getText()); - } + $this->writeText($element->getText()); $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r $xmlWriter->endElement(); // w:hyperlink diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ListItem.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ListItem.php index 53644ffa675593e6bf2a26c1940a9da201a9dc33..c1aa0ce3e5e0094b7d91dd48e05f06604b7785db 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ListItem.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ListItem.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,8 +28,6 @@ class ListItem extends AbstractElement { /** * Write list item element. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ListItemRun.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ListItemRun.php index 1ac17a98a92fc854c5d1bf29deea34a54ebc4b68..e6ed2b46d2a2a99ddb99c01d582b040a74616b0e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ListItemRun.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ListItemRun.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,8 +28,6 @@ class ListItemRun extends AbstractElement { /** * Write list item element. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Object.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Object.php index 4fdf6feda8a0f49692f4220d4632e9d8f0e62880..8231ec0c4396d065a1455239ca802aa25309a7f5 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Object.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Object.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,8 +28,6 @@ class Object extends AbstractElement { /** * Write object element. - * - * @return void */ public function write() { @@ -51,6 +49,7 @@ class Object extends AbstractElement $xmlWriter->startElement('w:p'); $styleWriter->writeAlignment(); } + $this->writeCommentRangeStart(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:object'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/PageBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/PageBreak.php index 363a8c2c3a72db1e2922fdca798affef4dbe78e0..04ff29d4877946338cfd1c56a9a4233d8cfe6e54 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/PageBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/PageBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,7 +28,6 @@ class PageBreak extends AbstractElement * Write element. * * @usedby \PhpOffice\PhpWord\Writer\Word2007\Element\AbstractElement::startElementP() - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ParagraphAlignment.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ParagraphAlignment.php index 2c775d1445311e5ea24f99c769c3739a31dac394..0dafa4a0573d985a20ab2b7665b09698a85599d7 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ParagraphAlignment.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/ParagraphAlignment.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -29,7 +29,7 @@ class ParagraphAlignment /** * @since 0.13.0 * - * @param string $value Any value provided by Jc simple type. + * @param string $value Any value provided by Jc simple type * * @see \PhpOffice\PhpWord\SimpleType\Jc For the allowed values of $value parameter. */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/PreserveText.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/PreserveText.php index 82c6f87b0f5ea6695a7fc9f3726140a170dfd303..138878663cdb85960e112343b551da8ec41bc37e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/PreserveText.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/PreserveText.php @@ -10,15 +10,13 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\PhpWord\Settings; - /** * PreserveText element writer * @@ -28,8 +26,6 @@ class PreserveText extends Text { /** * Write preserve text element. - * - * @return void */ public function write() { @@ -62,11 +58,7 @@ class PreserveText extends Text $xmlWriter->startElement('w:instrText'); $xmlWriter->writeAttribute('xml:space', 'preserve'); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($text); - } else { - $xmlWriter->writeRaw($text); - } + $this->writeText($text); $xmlWriter->endElement(); $xmlWriter->endElement(); @@ -88,11 +80,7 @@ class PreserveText extends Text $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($this->getText($text)); - } else { - $xmlWriter->writeRaw($this->getText($text)); - } + $this->writeText($this->getText($text)); $xmlWriter->endElement(); $xmlWriter->endElement(); } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/SDT.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/SDT.php index 313bf7e07b934397691d15197e9b3326662bcd05..6a2025649b13cb314f7a9c4c58ae08f94ded0322 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/SDT.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/SDT.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -24,15 +24,13 @@ use PhpOffice\PhpWord\Element\SDT as SDTElement; * Structured document tag element writer * * @since 0.12.0 - * @link http://www.datypic.com/sc/ooxml/t-w_CT_SdtBlock.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_SdtBlock.html * @SuppressWarnings(PHPMD.UnusedPrivateMethod) */ class SDT extends Text { /** * Write element. - * - * @return void */ public function write() { @@ -43,6 +41,12 @@ class SDT extends Text } $type = $element->getType(); $writeFormField = "write{$type}"; + $alias = $element->getAlias(); + $tag = $element->getTag(); + $value = $element->getValue(); + if ($value === null) { + $value = 'Pick value'; + } $this->startElementP(); @@ -50,15 +54,17 @@ class SDT extends Text // Properties $xmlWriter->startElement('w:sdtPr'); - $xmlWriter->writeElementBlock('w:id', 'w:val', rand(100000000, 999999999)); + $xmlWriter->writeElementIf($alias != null, 'w:alias', 'w:val', $alias); $xmlWriter->writeElementBlock('w:lock', 'w:val', 'sdtLocked'); + $xmlWriter->writeElementBlock('w:id', 'w:val', rand(100000000, 999999999)); + $xmlWriter->writeElementIf($tag != null, 'w:tag', 'w:val', $tag); $this->$writeFormField($xmlWriter, $element); $xmlWriter->endElement(); // w:sdtPr // Content $xmlWriter->startElement('w:sdtContent'); $xmlWriter->startElement('w:r'); - $xmlWriter->writeElement('w:t', 'Pick value'); + $xmlWriter->writeElement('w:t', $value); $xmlWriter->endElement(); // w:r $xmlWriter->endElement(); // w:sdtContent @@ -70,10 +76,9 @@ class SDT extends Text /** * Write combo box. * - * @link http://www.datypic.com/sc/ooxml/t-w_CT_SdtComboBox.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_SdtComboBox.html * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\SDT $element - * @return void */ private function writeComboBox(XMLWriter $xmlWriter, SDTElement $element) { @@ -90,23 +95,21 @@ class SDT extends Text /** * Write drop down list. * - * @link http://www.datypic.com/sc/ooxml/t-w_CT_SdtDropDownList.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_SdtDropDownList.html * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\SDT $element - * @return void */ private function writeDropDownList(XMLWriter $xmlWriter, SDTElement $element) { - $this->writecomboBox($xmlWriter, $element); + $this->writeComboBox($xmlWriter, $element); } /** * Write date. * - * @link http://www.datypic.com/sc/ooxml/t-w_CT_SdtDate.html + * @see http://www.datypic.com/sc/ooxml/t-w_CT_SdtDate.html * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\SDT $element - * @return void */ private function writeDate(XMLWriter $xmlWriter, SDTElement $element) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Shape.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Shape.php index f282c4a53637002bb124971d59d7a41c1d334f95..e384db0665f7019ec0eb9b3e8687b0ef8db80f50 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Shape.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Shape.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -32,8 +32,6 @@ class Shape extends AbstractElement { /** * Write element. - * - * @return void */ public function write() { @@ -55,6 +53,7 @@ class Shape extends AbstractElement if (!$this->withoutP) { $xmlWriter->startElement('w:p'); } + $this->writeCommentRangeStart(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); @@ -80,7 +79,6 @@ class Shape extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style - * @return void */ private function writeArc(XMLWriter $xmlWriter, ShapeStyle $style) { @@ -95,7 +93,6 @@ class Shape extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style - * @return void */ private function writeCurve(XMLWriter $xmlWriter, ShapeStyle $style) { @@ -111,7 +108,6 @@ class Shape extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style - * @return void */ private function writeLine(XMLWriter $xmlWriter, ShapeStyle $style) { @@ -126,7 +122,6 @@ class Shape extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style - * @return void */ private function writePolyline(XMLWriter $xmlWriter, ShapeStyle $style) { @@ -138,7 +133,6 @@ class Shape extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style - * @return void */ private function writeRoundRect(XMLWriter $xmlWriter, ShapeStyle $style) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TOC.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TOC.php index 996edb64e5595defe1e40a5d537cd9400307a235..36ed7f88bccbe7ce66bf6c215d968d96c8eafb5f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TOC.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TOC.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -19,7 +19,6 @@ namespace PhpOffice\PhpWord\Writer\Word2007\Element; use PhpOffice\Common\XMLWriter; use PhpOffice\PhpWord\Element\TOC as TOCElement; -use PhpOffice\PhpWord\Settings; use PhpOffice\PhpWord\Style\Font; use PhpOffice\PhpWord\Writer\Word2007\Style\Font as FontStyleWriter; use PhpOffice\PhpWord\Writer\Word2007\Style\Paragraph as ParagraphStyleWriter; @@ -34,8 +33,6 @@ class TOC extends AbstractElement { /** * Write element. - * - * @return void */ public function write() { @@ -71,7 +68,6 @@ class TOC extends AbstractElement * @param \PhpOffice\PhpWord\Element\TOC $element * @param \PhpOffice\PhpWord\Element\Title $title * @param bool $writeFieldMark - * @return void */ private function writeTitle(XMLWriter $xmlWriter, TOCElement $element, $title, $writeFieldMark) { @@ -100,13 +96,9 @@ class TOC extends AbstractElement $styleWriter = new FontStyleWriter($xmlWriter, $fontStyle); $styleWriter->write(); } - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->writeElement('w:t', $title->getText()); - } else { - $xmlWriter->startElement('w:t'); - $xmlWriter->writeRaw($title->getText()); - $xmlWriter->endElement(); - } + $xmlWriter->startElement('w:t'); + $this->writeText($title->getText()); + $xmlWriter->endElement(); // w:t $xmlWriter->endElement(); // w:r $xmlWriter->startElement('w:r'); @@ -143,7 +135,6 @@ class TOC extends AbstractElement * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\TOC $element * @param int $indent - * @return void */ private function writeStyle(XMLWriter $xmlWriter, TOCElement $element, $indent) { @@ -189,7 +180,6 @@ class TOC extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\TOC $element - * @return void */ private function writeFieldMark(XMLWriter $xmlWriter, TOCElement $element) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Table.php index 093666ee2225d94ec1d5bdbacfd1d86d8da15224..c0590772bf888c5c6d26c41daa4cd667dd6ffe05 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Table.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -36,8 +36,6 @@ class Table extends AbstractElement { /** * Write element. - * - * @return void */ public function write() { @@ -75,7 +73,6 @@ class Table extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Table $element - * @return void */ private function writeColumns(XMLWriter $xmlWriter, TableElement $element) { @@ -112,7 +109,6 @@ class Table extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Row $row - * @return void */ private function writeRow(XMLWriter $xmlWriter, RowElement $row) { @@ -139,11 +135,9 @@ class Table extends AbstractElement * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Cell $cell - * @return void */ private function writeCell(XMLWriter $xmlWriter, CellElement $cell) { - $xmlWriter->startElement('w:tc'); // Write style diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TableAlignment.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TableAlignment.php index 45459a388cc081e4d3ebbaac6cec091b6b4d6aaa..44450fd63ba525a43f4ee73ab4f5649bedbd962f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TableAlignment.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TableAlignment.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -29,7 +29,7 @@ class TableAlignment /** * @since 0.13.0 * - * @param string $value Any value provided by JcTable simple type. + * @param string $value Any value provided by JcTable simple type * * @see \PhpOffice\PhpWord\SimpleType\JcTable For the allowed values of $value parameter. */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Text.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Text.php index 2df4892bfea25c03dc21e4155e95e88d9b6c6fd3..e714943222dc476ab524abee7e0c5f59aa886d50 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Text.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Text.php @@ -10,15 +10,13 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\PhpWord\Settings; - /** * Text element writer * @@ -28,8 +26,6 @@ class Text extends AbstractElement { /** * Write text element. - * - * @return void */ public function write() { @@ -47,11 +43,7 @@ class Text extends AbstractElement $xmlWriter->startElement('w:t'); $xmlWriter->writeAttribute('xml:space', 'preserve'); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->text($this->getText($element->getText())); - } else { - $xmlWriter->writeRaw($this->getText($element->getText())); - } + $this->writeText($this->getText($element->getText())); $xmlWriter->endElement(); $xmlWriter->endElement(); // w:r diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextBox.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextBox.php index 3c4f48c27f0db4a24b6e7496e979d575c5da2cc7..3780c698f077bb4722ebc84318e2973f83c4a300 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextBox.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextBox.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,8 +28,6 @@ class TextBox extends Image { /** * Write element. - * - * @return void */ public function write() { @@ -45,6 +43,7 @@ class TextBox extends Image $xmlWriter->startElement('w:p'); $styleWriter->writeAlignment(); } + $this->writeCommentRangeStart(); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextBreak.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextBreak.php index a9e6f613ac23dbef5c3763d33fdf058dabf822af..161a528e01fff37c08c74d02a1bd17a3d0635934 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextBreak.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextBreak.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class TextBreak extends Text { /** * Write text break element. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextRun.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextRun.php index 1e95ab5ccf016cb8e6c3f23a9a16ba0513b21dff..9fd70b135f06ed8365d2a57e57f530cb90728fbc 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextRun.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/TextRun.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class TextRun extends Text { /** * Write textrun element. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Title.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Title.php index 925d4c433ff31d38a75edcdee658defdd5ab2a57..f204ab1617db580e3db207d8e469b149d76b937d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Title.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Element/Title.php @@ -10,15 +10,13 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\Word2007\Element; -use PhpOffice\PhpWord\Settings; - /** * TextRun element writer * @@ -28,8 +26,6 @@ class Title extends AbstractElement { /** * Write title element. - * - * @return void */ public function write() { @@ -62,14 +58,10 @@ class Title extends AbstractElement // Actual text $xmlWriter->startElement('w:r'); - if (Settings::isOutputEscapingEnabled()) { - $xmlWriter->writeElement('w:t', $this->getText($element->getText())); - } else { - $xmlWriter->startElement('w:t'); - $xmlWriter->writeRaw($this->getText($element->getText())); - $xmlWriter->endElement(); - } - $xmlWriter->endElement(); + $xmlWriter->startElement('w:t'); + $this->writeText($this->getText($element->getText())); + $xmlWriter->endElement(); // w:t + $xmlWriter->endElement(); // w:r // Bookmark end $xmlWriter->startElement('w:bookmarkEnd'); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/AbstractPart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/AbstractPart.php index 26734aa097527ebeedb94241c7a7ff2add3e31a7..038eb21dc843811b66296e4a6605a9b1ef3f97c6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/AbstractPart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/AbstractPart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -50,7 +50,6 @@ abstract class AbstractPart * Set parent writer. * * @param \PhpOffice\PhpWord\Writer\AbstractWriter $writer - * @return void */ public function setParentWriter(AbstractWriter $writer = null) { @@ -60,17 +59,15 @@ abstract class AbstractPart /** * Get parent writer * - * @return \PhpOffice\PhpWord\Writer\AbstractWriter - * * @throws \PhpOffice\PhpWord\Exception\Exception + * @return \PhpOffice\PhpWord\Writer\AbstractWriter */ public function getParentWriter() { if (!is_null($this->parentWriter)) { return $this->parentWriter; - } else { - throw new Exception('No parent WriterInterface assigned.'); } + throw new Exception('No parent WriterInterface assigned.'); } /** @@ -88,8 +85,23 @@ abstract class AbstractPart } if ($useDiskCaching) { return new XMLWriter(XMLWriter::STORAGE_DISK, $this->parentWriter->getDiskCachingDirectory(), Settings::hasCompatibility()); - } else { - return new XMLWriter(XMLWriter::STORAGE_MEMORY, './', Settings::hasCompatibility()); } + + return new XMLWriter(XMLWriter::STORAGE_MEMORY, './', Settings::hasCompatibility()); + } + + /** + * Write an XML text, this will call text() or writeRaw() depending on the value of Settings::isOutputEscapingEnabled() + * + * @param string $content The text string to write + * @return bool Returns true on success or false on failure + */ + protected function writeText($content) + { + if (Settings::isOutputEscapingEnabled()) { + return $this->getXmlWriter()->text($content); + } + + return $this->getXmlWriter()->writeRaw($content); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Chart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Chart.php index 3dd3968b49e692e2d40a686df0a28f2c39c31e87..c3703f9f6df8245e120a8640a5b51df7c7de09af 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Chart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Chart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -24,14 +24,14 @@ use PhpOffice\PhpWord\Element\Chart as ChartElement; * Word2007 chart part writer: word/charts/chartx.xml * * @since 0.12.0 - * @link http://www.datypic.com/sc/ooxml/e-draw-chart_chartSpace.html + * @see http://www.datypic.com/sc/ooxml/e-draw-chart_chartSpace.html */ class Chart extends AbstractPart { /** * Chart element * - * @var \PhpOffice\PhpWord\Element\Chart $element + * @var \PhpOffice\PhpWord\Element\Chart */ private $element; @@ -62,7 +62,6 @@ class Chart extends AbstractPart * Set chart element. * * @param \PhpOffice\PhpWord\Element\Chart $element - * @return void */ public function setElement(ChartElement $element) { @@ -95,9 +94,8 @@ class Chart extends AbstractPart /** * Write chart * - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_Chart.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_Chart.html * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ private function writeChart(XMLWriter $xmlWriter) { @@ -113,16 +111,15 @@ class Chart extends AbstractPart /** * Write plot area. * - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_PlotArea.html - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_PieChart.html - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_DoughnutChart.html - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_BarChart.html - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_LineChart.html - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_AreaChart.html - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_RadarChart.html - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_ScatterChart.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_PlotArea.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_PieChart.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_DoughnutChart.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_BarChart.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_LineChart.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_AreaChart.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_RadarChart.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_ScatterChart.html * @param \PhpOffice\Common\XMLWriter $xmlWriter - * @return void */ private function writePlotArea(XMLWriter $xmlWriter) { @@ -135,7 +132,7 @@ class Chart extends AbstractPart // Chart $chartType = $this->options['type']; - $chartType .= $style->is3d() && !isset($this->options['no3d'])? '3D' : ''; + $chartType .= $style->is3d() && !isset($this->options['no3d']) ? '3D' : ''; $chartType .= 'Chart'; $xmlWriter->startElement("c:{$chartType}"); @@ -182,7 +179,6 @@ class Chart extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param bool $scatter - * @return void */ private function writeSeries(XMLWriter $xmlWriter, $scatter = false) { @@ -213,7 +209,6 @@ class Chart extends AbstractPart $xmlWriter->endElement(); // c:ser $index++; } - } /** @@ -222,13 +217,12 @@ class Chart extends AbstractPart * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $type * @param array $values - * @return void */ private function writeSeriesItem(XMLWriter $xmlWriter, $type, $values) { $types = array( - 'cat' => array('c:cat', 'c:strLit'), - 'val' => array('c:val', 'c:numLit'), + 'cat' => array('c:cat', 'c:strLit'), + 'val' => array('c:val', 'c:numLit'), 'xVal' => array('c:xVal', 'c:strLit'), 'yVal' => array('c:yVal', 'c:numLit'), ); @@ -241,13 +235,9 @@ class Chart extends AbstractPart foreach ($values as $value) { $xmlWriter->startElement('c:pt'); $xmlWriter->writeAttribute('idx', $index); - if (\PhpOffice\PhpWord\Settings::isOutputEscapingEnabled()) { - $xmlWriter->writeElement('c:v', $value); - } else { - $xmlWriter->startElement('c:v'); - $xmlWriter->writeRaw($value); - $xmlWriter->endElement(); - } + $xmlWriter->startElement('c:v'); + $this->writeText($value); + $xmlWriter->endElement(); // c:v $xmlWriter->endElement(); // c:pt $index++; } @@ -259,10 +249,9 @@ class Chart extends AbstractPart /** * Write axis * - * @link http://www.datypic.com/sc/ooxml/t-draw-chart_CT_CatAx.html + * @see http://www.datypic.com/sc/ooxml/t-draw-chart_CT_CatAx.html * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $type - * @return void */ private function writeAxis(XMLWriter $xmlWriter, $type) { @@ -302,10 +291,9 @@ class Chart extends AbstractPart /** * Write shape * - * @link http://www.datypic.com/sc/ooxml/t-a_CT_ShapeProperties.html + * @see http://www.datypic.com/sc/ooxml/t-a_CT_ShapeProperties.html * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param bool $line - * @return void */ private function writeShape(XMLWriter $xmlWriter, $line = false) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Comments.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Comments.php new file mode 100644 index 0000000000000000000000000000000000000000..2b8f9267a2306011aaa8e686cc5527b2bdf802a9 --- /dev/null +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Comments.php @@ -0,0 +1,104 @@ +<?php +/** + * This file is part of PHPWord - A pure PHP library for reading and writing + * word processing documents. + * + * PHPWord is free software distributed under the terms of the GNU Lesser + * General Public License version 3 as published by the Free Software Foundation. + * + * For the full copyright and license information, please read the LICENSE + * file that was distributed with this source code. For the full list of + * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. + * + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors + * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 + */ + +namespace PhpOffice\PhpWord\Writer\Word2007\Part; + +use PhpOffice\Common\XMLWriter; +use PhpOffice\PhpWord\Element\Comment; +use PhpOffice\PhpWord\Writer\Word2007\Element\Container; + +/** + * Word2007 comments part writer: word/comments.xml + */ +class Comments extends AbstractPart +{ + /** + * Comments collection to be written + * + * @var \PhpOffice\PhpWord\Element\Comment[] + */ + protected $elements; + + /** + * Write part + * + * @return string + */ + public function write() + { + $xmlWriter = $this->getXmlWriter(); + + $xmlWriter->startDocument('1.0', 'UTF-8', 'yes'); + $xmlWriter->startElement('w:comments'); + $xmlWriter->writeAttribute('xmlns:ve', 'http://schemas.openxmlformats.org/markup-compatibility/2006'); + $xmlWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office'); + $xmlWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); + $xmlWriter->writeAttribute('xmlns:m', 'http://schemas.openxmlformats.org/officeDocument/2006/math'); + $xmlWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml'); + $xmlWriter->writeAttribute('xmlns:wp', 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing'); + $xmlWriter->writeAttribute('xmlns:w10', 'urn:schemas-microsoft-com:office:word'); + $xmlWriter->writeAttribute('xmlns:w', 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'); + $xmlWriter->writeAttribute('xmlns:wne', 'http://schemas.microsoft.com/office/word/2006/wordml'); + + if ($this->elements !== null) { + foreach ($this->elements as $element) { + if ($element instanceof Comment) { + $this->writeComment($xmlWriter, $element); + } + } + } + + $xmlWriter->endElement(); // w:comments + + return $xmlWriter->getData(); + } + + /** + * Write comment item. + * + * @param \PhpOffice\Common\XMLWriter $xmlWriter + * @param \PhpOffice\PhpWord\Element\Comment $comment + */ + protected function writeComment(XMLWriter $xmlWriter, Comment $comment) + { + $xmlWriter->startElement('w:comment'); + $xmlWriter->writeAttribute('w:id', $comment->getElementId()); + $xmlWriter->writeAttribute('w:author', $comment->getAuthor()); + if ($comment->getDate() != null) { + $xmlWriter->writeAttribute('w:date', $comment->getDate()->format($this->dateFormat)); + } + $xmlWriter->writeAttributeIf($comment->getInitials() != null, 'w:initials', $comment->getInitials()); + + $containerWriter = new Container($xmlWriter, $comment); + $containerWriter->write(); + + $xmlWriter->endElement(); // w:comment + } + + /** + * Set element + * + * @param \PhpOffice\PhpWord\Element\Comment[] $elements + * @return self + */ + public function setElements($elements) + { + $this->elements = $elements; + + return $this; + } +} diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/ContentTypes.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/ContentTypes.php index 1c81f34366e64c34b17bab05248ac0ddaeadf2e6..9be988d34553a948e5246f54aa72c8b36773b4e4 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/ContentTypes.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/ContentTypes.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -36,19 +36,20 @@ class ContentTypes extends AbstractPart $contentTypes = $parentWriter->getContentTypes(); $openXMLPrefix = 'application/vnd.openxmlformats-'; - $wordMLPrefix = $openXMLPrefix . 'officedocument.wordprocessingml.'; - $drawingMLPrefix = $openXMLPrefix . 'officedocument.drawingml.'; + $wordMLPrefix = $openXMLPrefix . 'officedocument.wordprocessingml.'; + $drawingMLPrefix = $openXMLPrefix . 'officedocument.drawingml.'; $overrides = array( '/docProps/core.xml' => $openXMLPrefix . 'package.core-properties+xml', '/docProps/app.xml' => $openXMLPrefix . 'officedocument.extended-properties+xml', '/docProps/custom.xml' => $openXMLPrefix . 'officedocument.custom-properties+xml', - '/word/document.xml' => $wordMLPrefix . 'document.main+xml', - '/word/styles.xml' => $wordMLPrefix . 'styles+xml', - '/word/numbering.xml' => $wordMLPrefix . 'numbering+xml', - '/word/settings.xml' => $wordMLPrefix . 'settings+xml', + '/word/document.xml' => $wordMLPrefix . 'document.main+xml', + '/word/styles.xml' => $wordMLPrefix . 'styles+xml', + '/word/numbering.xml' => $wordMLPrefix . 'numbering+xml', + '/word/settings.xml' => $wordMLPrefix . 'settings+xml', '/word/theme/theme1.xml' => $openXMLPrefix . 'officedocument.theme+xml', - '/word/webSettings.xml' => $wordMLPrefix . 'webSettings+xml', - '/word/fontTable.xml' => $wordMLPrefix . 'fontTable+xml', + '/word/webSettings.xml' => $wordMLPrefix . 'webSettings+xml', + '/word/fontTable.xml' => $wordMLPrefix . 'fontTable+xml', + '/word/comments.xml' => $wordMLPrefix . 'comments+xml', ); $defaults = $contentTypes['default']; @@ -81,8 +82,7 @@ class ContentTypes extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter XML Writer * @param array $parts - * @param boolean $isDefault - * @return void + * @param bool $isDefault */ private function writeContentType(XMLWriter $xmlWriter, $parts, $isDefault) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsApp.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsApp.php index adfe752f80011ebe8677caf9323ae38cc3d801e0..dbd551873f6e16d7f4f3e3aaeab8a5a5d48e4142 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsApp.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsApp.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsCore.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsCore.php index afb6f286e7085f3132b581e3eb63b425d7720c3a..fdabee36d02358941c877bc4d8c76b36d358b1d9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsCore.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsCore.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsCustom.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsCustom.php index 63ed8edeea03504b85acab911a952724fa7ae9e6..8ee2f0284e556ee08ee39e5d046145fb8a20dd12 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsCustom.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/DocPropsCustom.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -60,7 +60,11 @@ class DocPropsCustom extends AbstractPart $xmlWriter->writeElement('vt:bool', ($propertyValue) ? 'true' : 'false'); break; case 'd': - $xmlWriter->writeElement('vt:filetime', date($this->dateFormat, $propertyValue)); + if ($propertyValue instanceof \DateTime) { + $xmlWriter->writeElement('vt:filetime', $propertyValue->format($this->dateFormat)); + } else { + $xmlWriter->writeElement('vt:filetime', date($this->dateFormat, $propertyValue)); + } break; default: $xmlWriter->writeElement('vt:lpwstr', $propertyValue); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Document.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Document.php index 411946f51ca4c555e608219bb8b84ae332df08d9..72e4fcd8d1ae53220709c8b8c36da60ef6651cba 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Document.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Document.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -56,7 +56,6 @@ class Document extends AbstractPart $xmlWriter->startElement('w:body'); - if ($sectionCount > 0) { foreach ($sections as $section) { $currentSection++; @@ -83,7 +82,6 @@ class Document extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Section $section - * @return void */ private function writeSection(XMLWriter $xmlWriter, Section $section) { @@ -99,7 +97,6 @@ class Document extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Section $section - * @return void */ private function writeSectionSettings(XMLWriter $xmlWriter, Section $section) { @@ -129,6 +126,32 @@ class Document extends AbstractPart $xmlWriter->endElement(); } + //footnote properties + if ($section->getFootnotePropoperties() !== null) { + $xmlWriter->startElement('w:footnotePr'); + if ($section->getFootnotePropoperties()->getPos() != null) { + $xmlWriter->startElement('w:pos'); + $xmlWriter->writeAttribute('w:val', $section->getFootnotePropoperties()->getPos()); + $xmlWriter->endElement(); + } + if ($section->getFootnotePropoperties()->getNumFmt() != null) { + $xmlWriter->startElement('w:numFmt'); + $xmlWriter->writeAttribute('w:val', $section->getFootnotePropoperties()->getNumFmt()); + $xmlWriter->endElement(); + } + if ($section->getFootnotePropoperties()->getNumStart() != null) { + $xmlWriter->startElement('w:numStart'); + $xmlWriter->writeAttribute('w:val', $section->getFootnotePropoperties()->getNumStart()); + $xmlWriter->endElement(); + } + if ($section->getFootnotePropoperties()->getNumRestart() != null) { + $xmlWriter->startElement('w:numRestart'); + $xmlWriter->writeAttribute('w:val', $section->getFootnotePropoperties()->getNumRestart()); + $xmlWriter->endElement(); + } + $xmlWriter->endElement(); + } + // Section settings $styleWriter = new SectionStyleWriter($xmlWriter, $section->getStyle()); $styleWriter->write(); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Endnotes.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Endnotes.php index bc15cf1e139d037d42ec90f05d0d8ac24c98c541..289119db74e6c5c9f0da255488b6ccfb8d015d77 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Endnotes.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Endnotes.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/FontTable.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/FontTable.php index 08f0ad0e05a0588b013d4232f2c3e1ad20f73d8f..065a318ec0004510c7215c56b1d9ec0f3af93a22 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/FontTable.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/FontTable.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Footer.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Footer.php index 3e4e4fee2c8213b34a18d4b154e5822941ef6892..cfc9dd40fadf1f925a71913bcdf77e3fecd407ce 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Footer.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Footer.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Footnotes.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Footnotes.php index fd6921498064fe06f489111258d861d5b3125ab8..c9e3bcac20f08f6ee81d4a93ceb7a473a54472ec 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Footnotes.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Footnotes.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -137,7 +137,6 @@ class Footnotes extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Footnote|\PhpOffice\PhpWord\Element\Endnote $element - * @return void */ protected function writeNote(XMLWriter $xmlWriter, $element) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Header.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Header.php index 438e503ecac437b564eedd0d20afbc6bf4392283..5853d92fe39a22fd706c19b26a9978811e1f0fc8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Header.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Header.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Numbering.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Numbering.php index c5c9b4c7244e6f323b45afaa9c45db6d452aaa6e..6233a6b7b1ebc0f6915bda9d17c6de832ffc4d18 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Numbering.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Numbering.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -99,7 +99,6 @@ class Numbering extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\NumberingLevel $level - * @return void */ private function writeLevel(XMLWriter $xmlWriter, NumberingLevel $level) { @@ -140,7 +139,6 @@ class Numbering extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\NumberingLevel $level - * @return void * @todo Use paragraph style writer */ private function writeParagraph(XMLWriter $xmlWriter, NumberingLevel $level) @@ -173,7 +171,6 @@ class Numbering extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\NumberingLevel $level - * @return void * @todo Use font style writer */ private function writeFont(XMLWriter $xmlWriter, NumberingLevel $level) diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Rels.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Rels.php index 4a3b5b673df6b8fdeb89a065606f8d7b3799ea09..154c7e89433874866282780319c19443e50e0dfd 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Rels.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Rels.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -53,7 +53,6 @@ class Rels extends AbstractPart * @param array $xmlRels * @param array $mediaRels * @param int $relId - * @return void */ protected function writeRels(XMLWriter $xmlWriter, $xmlRels = array(), $mediaRels = array(), $relId = 1) { @@ -80,7 +79,6 @@ class Rels extends AbstractPart * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param int $relId * @param array $mediaRel - * @return void */ private function writeMediaRel(XMLWriter $xmlWriter, $relId, $mediaRel) { @@ -109,8 +107,6 @@ class Rels extends AbstractPart * @param string $target Relationship target * @param string $targetMode Relationship target mode * - * @return void - * * @throws \PhpOffice\PhpWord\Exception\Exception */ private function writeRel(XMLWriter $xmlWriter, $relId, $type, $target, $targetMode = '') @@ -128,7 +124,7 @@ class Rels extends AbstractPart } $xmlWriter->endElement(); } else { - throw new Exception("Invalid parameters passed."); + throw new Exception('Invalid parameters passed.'); } } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/RelsDocument.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/RelsDocument.php index c60dba286fd871d952a789189edfb4d331d39454..505aa223826f020813f42f529f322dff7e9f9224 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/RelsDocument.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/RelsDocument.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/RelsPart.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/RelsPart.php index e8939c7fa1fbbfc91bd0a145b46a1b524a70e886..e639c041cbb2a19378921e37db1baaf7e024f3a6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/RelsPart.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/RelsPart.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Settings.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Settings.php index 5c6f646cae3d78235e8c166e0be47b252a752001..e56e2612bde59f19851d5a0e5c67dd23052f0851 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Settings.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Settings.php @@ -10,17 +10,22 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ namespace PhpOffice\PhpWord\Writer\Word2007\Part; +use PhpOffice\PhpWord\ComplexType\ProofState; +use PhpOffice\PhpWord\ComplexType\TrackChangesView; +use PhpOffice\PhpWord\Shared\Microsoft\PasswordEncoder; +use PhpOffice\PhpWord\Style\Language; + /** * Word2007 settings part writer: word/settings.xml * - * @link http://www.schemacentral.com/sc/ooxml/t-w_CT_Settings.html + * @see http://www.schemacentral.com/sc/ooxml/t-w_CT_Settings.html */ class Settings extends AbstractPart { @@ -67,13 +72,12 @@ class Settings extends AbstractPart * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $settingKey * @param array|string $settingValue - * @return void */ protected function writeSetting($xmlWriter, $settingKey, $settingValue) { if ($settingValue == '') { $xmlWriter->writeElement($settingKey); - } else { + } elseif (is_array($settingValue) && !empty($settingValue)) { $xmlWriter->startElement($settingKey); /** @var array $settingValue Type hint */ @@ -92,89 +96,202 @@ class Settings extends AbstractPart /** * Get settings. - * - * @return void */ private function getSettings() { + /** @var \PhpOffice\PhpWord\Metadata\Settings $documentSettings */ + $documentSettings = $this->getParentWriter()->getPhpWord()->getSettings(); + // Default settings $this->settings = array( - 'w:zoom' => array('@attributes' => array('w:percent' => '100')), - 'w:defaultTabStop' => array('@attributes' => array('w:val' => '708')), - 'w:hyphenationZone' => array('@attributes' => array('w:val' => '425')), + 'w:defaultTabStop' => array('@attributes' => array('w:val' => '708')), + 'w:hyphenationZone' => array('@attributes' => array('w:val' => '425')), 'w:characterSpacingControl' => array('@attributes' => array('w:val' => 'doNotCompress')), - 'w:themeFontLang' => array('@attributes' => array('w:val' => 'en-US')), - 'w:decimalSymbol' => array('@attributes' => array('w:val' => '.')), - 'w:listSeparator' => array('@attributes' => array('w:val' => ';')), - 'w:compat' => '', - 'm:mathPr' => array( - 'm:mathFont' => array('@attributes' => array('m:val' => 'Cambria Math')), - 'm:brkBin' => array('@attributes' => array('m:val' => 'before')), - 'm:brkBinSub' => array('@attributes' => array('m:val' => '--')), - 'm:smallFrac' => array('@attributes' => array('m:val' => 'off')), - 'm:dispDef' => '', - 'm:lMargin' => array('@attributes' => array('m:val' => '0')), - 'm:rMargin' => array('@attributes' => array('m:val' => '0')), - 'm:defJc' => array('@attributes' => array('m:val' => 'centerGroup')), + 'w:decimalSymbol' => array('@attributes' => array('w:val' => $documentSettings->getDecimalSymbol())), + 'w:listSeparator' => array('@attributes' => array('w:val' => ';')), + 'w:compat' => array(), + 'm:mathPr' => array( + 'm:mathFont' => array('@attributes' => array('m:val' => 'Cambria Math')), + 'm:brkBin' => array('@attributes' => array('m:val' => 'before')), + 'm:brkBinSub' => array('@attributes' => array('m:val' => '--')), + 'm:smallFrac' => array('@attributes' => array('m:val' => 'off')), + 'm:dispDef' => '', + 'm:lMargin' => array('@attributes' => array('m:val' => '0')), + 'm:rMargin' => array('@attributes' => array('m:val' => '0')), + 'm:defJc' => array('@attributes' => array('m:val' => 'centerGroup')), 'm:wrapIndent' => array('@attributes' => array('m:val' => '1440')), - 'm:intLim' => array('@attributes' => array('m:val' => 'subSup')), - 'm:naryLim' => array('@attributes' => array('m:val' => 'undOvr')), + 'm:intLim' => array('@attributes' => array('m:val' => 'subSup')), + 'm:naryLim' => array('@attributes' => array('m:val' => 'undOvr')), ), 'w:clrSchemeMapping' => array( '@attributes' => array( - 'w:bg1' => 'light1', - 'w:t1' => 'dark1', - 'w:bg2' => 'light2', - 'w:t2' => 'dark2', - 'w:accent1' => 'accent1', - 'w:accent2' => 'accent2', - 'w:accent3' => 'accent3', - 'w:accent4' => 'accent4', - 'w:accent5' => 'accent5', - 'w:accent6' => 'accent6', - 'w:hyperlink' => 'hyperlink', + 'w:bg1' => 'light1', + 'w:t1' => 'dark1', + 'w:bg2' => 'light2', + 'w:t2' => 'dark2', + 'w:accent1' => 'accent1', + 'w:accent2' => 'accent2', + 'w:accent3' => 'accent3', + 'w:accent4' => 'accent4', + 'w:accent5' => 'accent5', + 'w:accent6' => 'accent6', + 'w:hyperlink' => 'hyperlink', 'w:followedHyperlink' => 'followedHyperlink', ), ), ); - // Other settings - $this->getProtection(); - $this->getCompatibility(); + $this->setOnOffValue('w:mirrorMargins', $documentSettings->hasMirrorMargins()); + $this->setOnOffValue('w:hideSpellingErrors', $documentSettings->hasHideSpellingErrors()); + $this->setOnOffValue('w:hideGrammaticalErrors', $documentSettings->hasHideGrammaticalErrors()); + $this->setOnOffValue('w:trackRevisions', $documentSettings->hasTrackRevisions()); + $this->setOnOffValue('w:doNotTrackMoves', $documentSettings->hasDoNotTrackMoves()); + $this->setOnOffValue('w:doNotTrackFormatting', $documentSettings->hasDoNotTrackFormatting()); + $this->setOnOffValue('w:evenAndOddHeaders', $documentSettings->hasEvenAndOddHeaders()); + $this->setOnOffValue('w:updateFields', $documentSettings->hasUpdateFields()); + + $this->setThemeFontLang($documentSettings->getThemeFontLang()); + $this->setRevisionView($documentSettings->getRevisionView()); + $this->setDocumentProtection($documentSettings->getDocumentProtection()); + $this->setProofState($documentSettings->getProofState()); + $this->setZoom($documentSettings->getZoom()); + $this->setCompatibility(); + } + + /** + * Adds a boolean attribute to the settings array + * + * @param string $settingName + * @param bool $booleanValue + */ + private function setOnOffValue($settingName, $booleanValue) + { + if ($booleanValue !== null && is_bool($booleanValue)) { + if ($booleanValue) { + $this->settings[$settingName] = array('@attributes' => array()); + } else { + $this->settings[$settingName] = array('@attributes' => array('w:val' => 'false')); + } + } } /** * Get protection settings. * - * @return void + * @param \PhpOffice\PhpWord\Metadata\Protection $documentProtection */ - private function getProtection() + private function setDocumentProtection($documentProtection) { - $protection = $this->getParentWriter()->getPhpWord()->getProtection(); - if ($protection->getEditing() !== null) { - $this->settings['w:documentProtection'] = array( + if ($documentProtection->getEditing() !== null) { + if ($documentProtection->getPassword() == null) { + $this->settings['w:documentProtection'] = array( + '@attributes' => array( + 'w:enforcement' => 1, + 'w:edit' => $documentProtection->getEditing(), + ), + ); + } else { + if ($documentProtection->getSalt() == null) { + $documentProtection->setSalt(openssl_random_pseudo_bytes(16)); + } + $passwordHash = PasswordEncoder::hashPassword($documentProtection->getPassword(), $documentProtection->getAlgorithm(), $documentProtection->getSalt(), $documentProtection->getSpinCount()); + $this->settings['w:documentProtection'] = array( + '@attributes' => array( + 'w:enforcement' => 1, + 'w:edit' => $documentProtection->getEditing(), + 'w:cryptProviderType' => 'rsaFull', + 'w:cryptAlgorithmClass' => 'hash', + 'w:cryptAlgorithmType' => 'typeAny', + 'w:cryptAlgorithmSid' => PasswordEncoder::getAlgorithmId($documentProtection->getAlgorithm()), + 'w:cryptSpinCount' => $documentProtection->getSpinCount(), + 'w:hash' => $passwordHash, + 'w:salt' => base64_encode($documentProtection->getSalt()), + ), + ); + } + } + } + + /** + * Set the Proof state + * + * @param ProofState $proofState + */ + private function setProofState(ProofState $proofState = null) + { + if ($proofState != null && $proofState->getGrammar() !== null && $proofState->getSpelling() !== null) { + $this->settings['w:proofState'] = array( '@attributes' => array( - 'w:enforcement' => 1, - 'w:edit' => $protection->getEditing(), - ) + 'w:spelling' => $proofState->getSpelling(), + 'w:grammar' => $proofState->getGrammar(), + ), ); } } /** - * Get compatibility setting. + * Set the Revision View + * + * @param TrackChangesView $trackChangesView + */ + private function setRevisionView(TrackChangesView $trackChangesView = null) + { + if ($trackChangesView != null) { + $revisionView = array(); + $revisionView['w:markup'] = $trackChangesView->hasMarkup() ? 'true' : 'false'; + $revisionView['w:comments'] = $trackChangesView->hasComments() ? 'true' : 'false'; + $revisionView['w:insDel'] = $trackChangesView->hasInsDel() ? 'true' : 'false'; + $revisionView['w:formatting'] = $trackChangesView->hasFormatting() ? 'true' : 'false'; + $revisionView['w:inkAnnotations'] = $trackChangesView->hasInkAnnotations() ? 'true' : 'false'; + + $this->settings['w:revisionView'] = array('@attributes' => $revisionView); + } + } + + /** + * Sets the language + * + * @param Language $language + */ + private function setThemeFontLang(Language $language = null) + { + $latinLanguage = ($language == null || $language->getLatin() === null) ? 'en-US' : $language->getLatin(); + $lang = array(); + $lang['w:val'] = $latinLanguage; + if ($language != null) { + $lang['w:eastAsia'] = $language->getEastAsia() === null ? 'x-none' : $language->getEastAsia(); + $lang['w:bidi'] = $language->getBidirectional() === null ? 'x-none' : $language->getBidirectional(); + } + $this->settings['w:themeFontLang'] = array('@attributes' => $lang); + } + + /** + * Set the magnification * - * @return void + * @param mixed $zoom + */ + private function setZoom($zoom = null) + { + if ($zoom !== null) { + $attr = is_int($zoom) ? 'w:percent' : 'w:val'; + $this->settings['w:zoom'] = array('@attributes' => array($attr => $zoom)); + } + } + + /** + * Get compatibility setting. */ - private function getCompatibility() + private function setCompatibility() { $compatibility = $this->getParentWriter()->getPhpWord()->getCompatibility(); if ($compatibility->getOoxmlVersion() !== null) { - $this->settings['w:compat']['w:compatSetting'] = array('@attributes' => array( - 'w:name' => 'compatibilityMode', - 'w:uri' => 'http://schemas.microsoft.com/office/word', - 'w:val' => $compatibility->getOoxmlVersion(), - )); + $this->settings['w:compat']['w:compatSetting'] = array( + '@attributes' => array( + 'w:name' => 'compatibilityMode', + 'w:uri' => 'http://schemas.microsoft.com/office/word', + 'w:val' => $compatibility->getOoxmlVersion(), + ), + ); } } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Styles.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Styles.php index 7bcb8d92a43ee5282dc6f2b9ba58f79bb5e2f299..126cda4fd1a9d2f710ae17d8e3a81b461b253ab8 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Styles.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Styles.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -79,12 +79,13 @@ class Styles extends AbstractPart * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\AbstractStyle[] $styles - * @return void */ private function writeDefaultStyles(XMLWriter $xmlWriter, $styles) { $fontName = PhpWordSettings::getDefaultFontName(); $fontSize = PhpWordSettings::getDefaultFontSize(); + $language = $this->getParentWriter()->getPhpWord()->getSettings()->getThemeFontLang(); + $latinLanguage = ($language == null || $language->getLatin() === null) ? 'en-US' : $language->getLatin(); // Default font $xmlWriter->startElement('w:docDefaults'); @@ -102,6 +103,13 @@ class Styles extends AbstractPart $xmlWriter->startElement('w:szCs'); $xmlWriter->writeAttribute('w:val', $fontSize * 2); $xmlWriter->endElement(); // w:szCs + $xmlWriter->startElement('w:lang'); + $xmlWriter->writeAttribute('w:val', $latinLanguage); + if ($language != null) { + $xmlWriter->writeAttributeIf($language->getEastAsia() !== null, 'w:eastAsia', $language->getEastAsia()); + $xmlWriter->writeAttributeIf($language->getBidirectional() !== null, 'w:bidi', $language->getBidirectional()); + } + $xmlWriter->endElement(); // w:lang $xmlWriter->endElement(); // w:rPr $xmlWriter->endElement(); // w:rPrDefault $xmlWriter->endElement(); // w:docDefaults @@ -145,7 +153,6 @@ class Styles extends AbstractPart * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $styleName * @param \PhpOffice\PhpWord\Style\Font $style - * @return void */ private function writeFontStyle(XMLWriter $xmlWriter, $styleName, FontStyle $style) { @@ -170,6 +177,9 @@ class Styles extends AbstractPart $xmlWriter->startElement('w:link'); $xmlWriter->writeAttribute('w:val', $styleLink); $xmlWriter->endElement(); + } elseif (!is_null($paragraphStyle)) { + // if type is 'paragraph' it should have a styleId + $xmlWriter->writeAttribute('w:styleId', $styleName); } // Style name @@ -178,7 +188,13 @@ class Styles extends AbstractPart $xmlWriter->endElement(); // Parent style - $xmlWriter->writeElementIf(!is_null($paragraphStyle), 'w:basedOn', 'w:val', 'Normal'); + if (!is_null($paragraphStyle)) { + if ($paragraphStyle->getStyleName() != null) { + $xmlWriter->writeElementBlock('w:basedOn', 'w:val', $paragraphStyle->getStyleName()); + } elseif ($paragraphStyle->getBasedOn() != null) { + $xmlWriter->writeElementBlock('w:basedOn', 'w:val', $paragraphStyle->getBasedOn()); + } + } // w:pPr if (!is_null($paragraphStyle)) { @@ -199,7 +215,6 @@ class Styles extends AbstractPart * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $styleName * @param \PhpOffice\PhpWord\Style\Paragraph $style - * @return void */ private function writeParagraphStyle(XMLWriter $xmlWriter, $styleName, ParagraphStyle $style) { @@ -232,7 +247,6 @@ class Styles extends AbstractPart * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $styleName * @param \PhpOffice\PhpWord\Style\Table $style - * @return void */ private function writeTableStyle(XMLWriter $xmlWriter, $styleName, TableStyle $style) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Theme.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Theme.php index e9b16bfcc280e837646569640996f1abcbdf986d..c264140e94af86fa7df82a1531a103d1d9393984 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Theme.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/Theme.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -48,7 +48,6 @@ class Theme extends AbstractPart return $str; } - /** * Write color scheme * diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/WebSettings.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/WebSettings.php index ce42063da7d1074addc7ff1da23b3c8ad45c93d7..9f18e3566cdf77d4d74b1b926ba347d1a8b68f77 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/WebSettings.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Part/WebSettings.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/AbstractStyle.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/AbstractStyle.php index d0ee5a0def85adb84065044285349f720cc9a8f4..d775693351d75d933b729aef0c51f8cb1f1c9b90 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/AbstractStyle.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/AbstractStyle.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -71,7 +71,7 @@ abstract class AbstractStyle /** * Get Style * - * @return \PhpOffice\PhpWord\Style\AbstractStyle + * @return string|\PhpOffice\PhpWord\Style\AbstractStyle */ protected function getStyle() { @@ -88,11 +88,11 @@ abstract class AbstractStyle protected function convertTwip($value, $default = 0) { $factors = array( - Settings::UNIT_CM => 567, - Settings::UNIT_MM => 56.7, - Settings::UNIT_INCH => 1440, + Settings::UNIT_CM => 567, + Settings::UNIT_MM => 56.7, + Settings::UNIT_INCH => 1440, Settings::UNIT_POINT => 20, - Settings::UNIT_PICA => 240, + Settings::UNIT_PICA => 240, ); $unit = Settings::getMeasurementUnit(); $factor = 1; @@ -109,12 +109,11 @@ abstract class AbstractStyle * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $name * @param mixed $value - * @return void */ protected function writeChildStyle(XMLWriter $xmlWriter, $name, $value) { if ($value !== null) { - $class = "PhpOffice\\PhpWord\\Writer\\Word2007\\Style\\" . $name; + $class = 'PhpOffice\\PhpWord\\Writer\\Word2007\\Style\\' . $name; /** @var \PhpOffice\PhpWord\Writer\Word2007\Style\AbstractStyle $writer */ $writer = new $class($xmlWriter, $value); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Cell.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Cell.php index c9156de1332ccafb1bea38e8e23996ae62c01738..b889aa551ec3d73f88d791c73346561b00a598a6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Cell.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Cell.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -33,8 +33,6 @@ class Cell extends AbstractStyle /** * Write style. - * - * @return void */ public function write() { @@ -47,10 +45,14 @@ class Cell extends AbstractStyle $xmlWriter->startElement('w:tcPr'); // Width - $xmlWriter->startElement('w:tcW'); - $xmlWriter->writeAttribute('w:w', $this->width); - $xmlWriter->writeAttribute('w:type', 'dxa'); - $xmlWriter->endElement(); // w:tcW + if (!is_null($this->width) || !is_null($style->getWidth())) { + $width = is_null($this->width) ? $style->getWidth() : $this->width; + + $xmlWriter->startElement('w:tcW'); + $xmlWriter->writeAttribute('w:w', $width); + $xmlWriter->writeAttribute('w:type', $style->getUnit()); + $xmlWriter->endElement(); // w:tcW + } // Text direction $textDir = $style->getTextDirection(); @@ -67,6 +69,7 @@ class Cell extends AbstractStyle $styleWriter = new MarginBorder($xmlWriter); $styleWriter->setSizes($style->getBorderSize()); $styleWriter->setColors($style->getBorderColor()); + $styleWriter->setStyles($style->getBorderStyle()); $styleWriter->setAttributes(array('defaultColor' => CellStyle::DEFAULT_BORDER_COLOR)); $styleWriter->write(); @@ -93,7 +96,6 @@ class Cell extends AbstractStyle * Set width. * * @param int $value - * @return void */ public function setWidth($value = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Extrusion.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Extrusion.php index 3ecd76e4feb554f2657a0ce52df9efc307b4c8e7..e3a86a587c959c719259ff7529e74414b55a3934 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Extrusion.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Extrusion.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Extrusion extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { @@ -37,7 +35,7 @@ class Extrusion extends AbstractStyle } $xmlWriter = $this->getXmlWriter(); - $xmlWriter->startElement("o:extrusion"); + $xmlWriter->startElement('o:extrusion'); $xmlWriter->writeAttribute('on', 't'); $xmlWriter->writeAttributeIf($style->getType() !== null, 'type', $style->getType()); $xmlWriter->writeAttributeIf($style->getColor() !== null, 'color', $style->getColor()); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Fill.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Fill.php index 7ce681063589c851404156d13f3e3a557a34b3a4..de64313bbff3b2c15cca96adb75ae7e66e23df89 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Fill.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Fill.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Fill extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Font.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Font.php index 97cf3088b9373bd3ae625b00cfc1fe1e717d3550..9c2714dc71bedd54d6812068328ad95c5452f61f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Font.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Font.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -33,8 +33,6 @@ class Font extends AbstractStyle /** * Write style. - * - * @return void */ public function write() { @@ -54,8 +52,6 @@ class Font extends AbstractStyle /** * Write full style. - * - * @return void */ private function writeStyle() { @@ -63,6 +59,7 @@ class Font extends AbstractStyle if (!$style instanceof \PhpOffice\PhpWord\Style\Font) { return; } + $xmlWriter = $this->getXmlWriter(); $xmlWriter->startElement('w:rPr'); @@ -86,6 +83,16 @@ class Font extends AbstractStyle $xmlWriter->endElement(); } + //Language + $language = $style->getLang(); + if ($language != null && ($language->getLatin() !== null || $language->getEastAsia() !== null || $language->getBidirectional() !== null)) { + $xmlWriter->startElement('w:lang'); + $xmlWriter->writeAttributeIf($language->getLatin() !== null, 'w:val', $language->getLatin()); + $xmlWriter->writeAttributeIf($language->getEastAsia() !== null, 'w:eastAsia', $language->getEastAsia()); + $xmlWriter->writeAttributeIf($language->getBidirectional() !== null, 'w:bidi', $language->getBidirectional()); + $xmlWriter->endElement(); + } + // Color $color = $style->getColor(); $xmlWriter->writeElementIf($color !== null, 'w:color', 'w:val', $color); @@ -97,6 +104,7 @@ class Font extends AbstractStyle // Bold, italic $xmlWriter->writeElementIf($style->isBold(), 'w:b'); + $xmlWriter->writeElementIf($style->isBold(), 'w:bCs'); $xmlWriter->writeElementIf($style->isItalic(), 'w:i'); $xmlWriter->writeElementIf($style->isItalic(), 'w:iCs'); @@ -129,7 +137,7 @@ class Font extends AbstractStyle $styleWriter = new Shading($xmlWriter, $shading); $styleWriter->write(); } - + // RTL if ($this->isInline === true) { $styleName = $style->getStyleName(); @@ -143,7 +151,6 @@ class Font extends AbstractStyle * Set is inline. * * @param bool $value - * @return void */ public function setIsInline($value) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Frame.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Frame.php index 9c6ddaefad1724bcbb9b21fe8fbf140790ca7e6a..9bd5db66221014bdec933ba48057908fb7a8974f 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Frame.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Frame.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,10 +28,10 @@ use PhpOffice\PhpWord\Writer\Word2007\Element\ParagraphAlignment; */ class Frame extends AbstractStyle { + const PHP_32BIT_INT_MAX = 2147483647; + /** * Write style. - * - * @return void */ public function write() { @@ -41,7 +41,8 @@ class Frame extends AbstractStyle } $xmlWriter = $this->getXmlWriter(); - $zIndices = array(FrameStyle::WRAP_INFRONT => PHP_INT_MAX, FrameStyle::WRAP_BEHIND => -PHP_INT_MAX); + $maxZIndex = min(PHP_INT_MAX, self::PHP_32BIT_INT_MAX); + $zIndices = array(FrameStyle::WRAP_INFRONT => $maxZIndex, FrameStyle::WRAP_BEHIND => -$maxZIndex); $properties = array( 'width' => 'width', @@ -62,7 +63,7 @@ class Frame extends AbstractStyle $styles = array_merge($sizeStyles, $posStyles); - // zIndex for infront & behind wrap + // zIndex for infront & behind wrap $wrap = $style->getWrap(); if ($wrap !== null && isset($zIndices[$wrap])) { $styles['z-index'] = $zIndices[$wrap]; @@ -77,8 +78,6 @@ class Frame extends AbstractStyle /** * Write alignment. - * - * @return void */ public function writeAlignment() { @@ -108,7 +107,6 @@ class Frame extends AbstractStyle * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Frame $style * @param string $wrap - * @return void */ private function writeWrap(XMLWriter $xmlWriter, FrameStyle $style, $wrap) { @@ -129,8 +127,8 @@ class Frame extends AbstractStyle $vPos = $style->getVPosRelTo(); if ($pos == FrameStyle::POS_ABSOLUTE) { - $xmlWriter->writeAttribute('anchorx', "page"); - $xmlWriter->writeAttribute('anchory', "page"); + $xmlWriter->writeAttribute('anchorx', 'page'); + $xmlWriter->writeAttribute('anchory', 'page'); } elseif ($pos == FrameStyle::POS_RELATIVE) { if (isset($relativePositions[$hPos])) { $xmlWriter->writeAttribute('anchorx', $relativePositions[$hPos]); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Image.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Image.php index 3bbe751eba7e0558888fbf2230343d909866f1ab..271b99dfec0b4a9d81c284cf68e12a8342cfa679 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Image.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Image.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Indentation.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Indentation.php index a7edaee188b3556633070cbf6d62713eca476a15..c5a598ffb54d42ecd4629d56ec470baacd3376d7 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Indentation.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Indentation.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Indentation extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Line.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Line.php index 3407c2523cc775106f15faf5fdab2cde6d0190ac..f065e52115d2173805b2254bad612a67f39ed7a6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Line.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Line.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -21,14 +21,11 @@ use PhpOffice\PhpWord\Style\Line as LineStyle; /** * Line style writer - * */ class Line extends Frame { /** * Write Line stroke. - * - * @return void * @todo Merge with `Stroke` style */ public function writeStroke() diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/LineNumbering.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/LineNumbering.php index 592fb7bb97e53e68c588aeaabed93721bf24a78f..3ed577c62a24aadc1efb92d8fafa2479b8fdd00e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/LineNumbering.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/LineNumbering.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,9 +26,6 @@ class LineNumbering extends AbstractStyle { /** * Write style. - * - * @return void - * * The w:start seems to be zero based so we have to decrement by one */ public function write() diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/MarginBorder.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/MarginBorder.php index 68ba70d2dfc560e4aa6311988fde6903b62509cc..5c3ecde2e240765271ae130815d4b3a848222340 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/MarginBorder.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/MarginBorder.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -29,7 +29,7 @@ class MarginBorder extends AbstractStyle /** * Sizes * - * @var integer[] + * @var int[] */ private $sizes = array(); @@ -40,6 +40,13 @@ class MarginBorder extends AbstractStyle */ private $colors = array(); + /** + * Border styles + * + * @var string[] + */ + private $styles = array(); + /** * Other attributes * @@ -49,8 +56,6 @@ class MarginBorder extends AbstractStyle /** * Write style. - * - * @return void */ public function write() { @@ -64,7 +69,8 @@ class MarginBorder extends AbstractStyle if (isset($this->colors[$i])) { $color = $this->colors[$i]; } - $this->writeSide($xmlWriter, $sides[$i], $this->sizes[$i], $color); + $style = isset($this->styles[$i]) ? $this->styles[$i] : 'single'; + $this->writeSide($xmlWriter, $sides[$i], $this->sizes[$i], $color, $style); } } } @@ -76,9 +82,9 @@ class MarginBorder extends AbstractStyle * @param string $side * @param int $width * @param string $color - * @return void + * @param string $borderStyle */ - private function writeSide(XMLWriter $xmlWriter, $side, $width, $color = null) + private function writeSide(XMLWriter $xmlWriter, $side, $width, $color = null, $borderStyle = 'solid') { $xmlWriter->startElement('w:' . $side); if (!empty($this->colors)) { @@ -87,9 +93,9 @@ class MarginBorder extends AbstractStyle $color = $this->attributes['defaultColor']; } } - $xmlWriter->writeAttribute('w:val', 'single'); + $xmlWriter->writeAttribute('w:val', $borderStyle); $xmlWriter->writeAttribute('w:sz', $width); - $xmlWriter->writeAttribute('w:color', $color); + $xmlWriter->writeAttributeIf($color != null, 'w:color', $color); if (!empty($this->attributes)) { if (isset($this->attributes['space'])) { $xmlWriter->writeAttribute('w:space', $this->attributes['space']); @@ -105,8 +111,7 @@ class MarginBorder extends AbstractStyle /** * Set sizes. * - * @param integer[] $value - * @return void + * @param int[] $value */ public function setSizes($value) { @@ -117,18 +122,26 @@ class MarginBorder extends AbstractStyle * Set colors. * * @param string[] $value - * @return void */ public function setColors($value) { $this->colors = $value; } + /** + * Set border styles. + * + * @param string[] $value + */ + public function setStyles($value) + { + $this->styles = $value; + } + /** * Set attributes. * * @param array $value - * @return void */ public function setAttributes($value) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Outline.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Outline.php index 620720b399c660cbcb3ca3ec4928d0433f22af5e..9ae61f396a660a4d7a8ee844258aea49ce02067e 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Outline.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Outline.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Outline extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { @@ -37,7 +35,7 @@ class Outline extends AbstractStyle } $xmlWriter = $this->getXmlWriter(); - $xmlWriter->startElement("v:stroke"); + $xmlWriter->startElement('v:stroke'); $xmlWriter->writeAttribute('on', 't'); $xmlWriter->writeAttributeIf($style->getColor() !== null, 'color', $style->getColor()); $xmlWriter->writeAttributeIf($style->getWeight() !== null, 'weight', $style->getWeight() . $style->getUnit()); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Paragraph.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Paragraph.php index 2cb08bee178bcbf9a5fd74106ba81bcb60054346..424b87f8c8b898eaff39fdbe82c76f8d4304f87d 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Paragraph.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Paragraph.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -45,8 +45,6 @@ class Paragraph extends AbstractStyle /** * Write style. - * - * @return void */ public function write() { @@ -70,8 +68,6 @@ class Paragraph extends AbstractStyle /** * Write full style. - * - * @return void */ private function writeStyle() { @@ -107,6 +103,15 @@ class Paragraph extends AbstractStyle $xmlWriter->endElement(); } + //Right to left + $xmlWriter->writeElementIf($styles['bidi'] === true, 'w:bidi'); + + //Paragraph contextualSpacing + $xmlWriter->writeElementIf($styles['contextualSpacing'] === true, 'w:contextualSpacing'); + + //Paragraph contextualSpacing + $xmlWriter->writeElementIf($styles['textAlignment'] !== null, 'w:textAlignment', 'w:val', $styles['textAlignment']); + // Child style: alignment, indentation, spacing, and shading $this->writeChildStyle($xmlWriter, 'Indentation', $styles['indentation']); $this->writeChildStyle($xmlWriter, 'Spacing', $styles['spacing']); @@ -140,12 +145,11 @@ class Paragraph extends AbstractStyle * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Tab[] $tabs - * @return void */ private function writeTabs(XMLWriter $xmlWriter, $tabs) { if (!empty($tabs)) { - $xmlWriter->startElement("w:tabs"); + $xmlWriter->startElement('w:tabs'); foreach ($tabs as $tab) { $styleWriter = new Tab($xmlWriter, $tab); $styleWriter->write(); @@ -159,7 +163,6 @@ class Paragraph extends AbstractStyle * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param array $numbering - * @return void */ private function writeNumbering(XMLWriter $xmlWriter, $numbering) { @@ -188,7 +191,6 @@ class Paragraph extends AbstractStyle * Set without w:pPr. * * @param bool $value - * @return void */ public function setWithoutPPR($value) { @@ -199,7 +201,6 @@ class Paragraph extends AbstractStyle * Set is inline. * * @param bool $value - * @return void */ public function setIsInline($value) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Row.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Row.php index e8b7e1a5b1b4d316cae37e545a8ab9ea62242751..f57094db6c538a4bdd61d4881faca7d1822d94e6 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Row.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Row.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -31,8 +31,6 @@ class Row extends AbstractStyle /** * Write style. - * - * @return void */ public function write() { @@ -60,7 +58,6 @@ class Row extends AbstractStyle * Set height. * * @param int $value - * @return void */ public function setHeight($value = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Section.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Section.php index 60b5d86967a61ee05585636c918fe924ea6d3416..ef50c111e53967a17b7bef74a2b4dfdc2897d09a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Section.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Section.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,8 +28,6 @@ class Section extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shading.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shading.php index c3594b24fdc4f9823992657b50d7deb8cb3a24b4..0068068791b74110e53d90b20e98d02a1f31b73c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shading.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shading.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Shading extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { @@ -38,9 +36,9 @@ class Shading extends AbstractStyle $xmlWriter = $this->getXmlWriter(); $xmlWriter->startElement('w:shd'); - $xmlWriter->writeAttribute('w:val', $style->getPattern()); - $xmlWriter->writeAttribute('w:color', $style->getColor()); - $xmlWriter->writeAttribute('w:fill', $style->getFill()); + $xmlWriter->writeAttributeIf(!is_null($style->getPattern()), 'w:val', $style->getPattern()); + $xmlWriter->writeAttributeIf(!is_null($style->getColor()), 'w:color', $style->getColor()); + $xmlWriter->writeAttributeIf(!is_null($style->getFill()), 'w:fill', $style->getFill()); $xmlWriter->endElement(); } } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shadow.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shadow.php index 239c161d5ea16e6889321d8f0478c9518e97c44d..5efc38c4379ba85164b047ccb88163c4b0d84b4a 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shadow.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shadow.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Shadow extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { @@ -37,7 +35,7 @@ class Shadow extends AbstractStyle } $xmlWriter = $this->getXmlWriter(); - $xmlWriter->startElement("v:shadow"); + $xmlWriter->startElement('v:shadow'); $xmlWriter->writeAttribute('on', 't'); $xmlWriter->writeAttributeIf($style->getColor() !== null, 'color', $style->getColor()); $xmlWriter->writeAttributeIf($style->getOffset() !== null, 'offset', $style->getOffset()); diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shape.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shape.php index 4ed1469d5d6cf4ef38c2b4d2b5032e5123d1e81f..aad42ae75470e88710ecbdbbc4f5f5ea04b34dbd 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shape.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Shape.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Shape extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Spacing.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Spacing.php index bd2d06aa02d843d09f193de3fd050e091cbb76bf..c18339bdbbb290d819c860d9650528d69a6286a0 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Spacing.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Spacing.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Spacing extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { @@ -48,7 +46,7 @@ class Spacing extends AbstractStyle $line = $style->getLine(); $xmlWriter->writeAttributeIf(!is_null($line), 'w:line', $line); - $xmlWriter->writeAttributeIf(!is_null($line), 'w:lineRule', $style->getRule()); + $xmlWriter->writeAttributeIf(!is_null($line), 'w:lineRule', $style->getLineRule()); $xmlWriter->endElement(); } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Tab.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Tab.php index 9867023f6ece0b70eb6e73748f206ddff36578b7..7b0a0ab55d54ae526bb41c24b337a111a0bf1611 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Tab.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Tab.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -26,8 +26,6 @@ class Tab extends AbstractStyle { /** * Write style. - * - * @return void */ public function write() { @@ -37,9 +35,9 @@ class Tab extends AbstractStyle } $xmlWriter = $this->getXmlWriter(); - $xmlWriter->startElement("w:tab"); - $xmlWriter->writeAttribute("w:val", $style->getType()); - $xmlWriter->writeAttribute("w:leader", $style->getLeader()); + $xmlWriter->startElement('w:tab'); + $xmlWriter->writeAttribute('w:val', $style->getType()); + $xmlWriter->writeAttribute('w:leader', $style->getLeader()); $xmlWriter->writeAttribute('w:pos', $this->convertTwip($style->getPosition())); $xmlWriter->endElement(); } diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Table.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Table.php index 570e85bb7b946ae1d328acc48844f10a8530cc26..620e4fbf629c24ec151cb43eba9613461379e9d5 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Table.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/Table.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -35,8 +35,6 @@ class Table extends AbstractStyle /** * Write style. - * - * @return void */ public function write() { @@ -62,7 +60,6 @@ class Table extends AbstractStyle * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style - * @return void */ private function writeStyle(XMLWriter $xmlWriter, TableStyle $style) { @@ -100,7 +97,6 @@ class Table extends AbstractStyle * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param int $width * @param string $unit - * @return void */ private function writeWidth(XMLWriter $xmlWriter, $width, $unit) { @@ -115,7 +111,6 @@ class Table extends AbstractStyle * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style - * @return void */ private function writeMargin(XMLWriter $xmlWriter, TableStyle $style) { @@ -135,7 +130,6 @@ class Table extends AbstractStyle * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style - * @return void */ private function writeBorder(XMLWriter $xmlWriter, TableStyle $style) { @@ -156,7 +150,6 @@ class Table extends AbstractStyle * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style - * @return void */ private function writeFirstRow(XMLWriter $xmlWriter, TableStyle $style) { @@ -176,7 +169,6 @@ class Table extends AbstractStyle * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style - * @return void */ private function writeShading(XMLWriter $xmlWriter, TableStyle $style) { @@ -194,7 +186,6 @@ class Table extends AbstractStyle * Set width. * * @param int $value - * @return void */ public function setWidth($value = null) { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/TextBox.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/TextBox.php index f8f94da37fee3489101e0391d2b3fd4ef8e56b74..cd92f84550b7baa7df1d49747e18c0b08c37752c 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/TextBox.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/Word2007/Style/TextBox.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ @@ -28,8 +28,6 @@ class TextBox extends Frame { /** * Writer inner margin. - * - * @return void */ public function writeInnerMargin() { @@ -46,8 +44,6 @@ class TextBox extends Frame /** * Writer border. - * - * @return void */ public function writeBorder() { diff --git a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/WriterInterface.php b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/WriterInterface.php index 1ccdf3213d260e0a175518431bb497bcde9ae3d6..b5f08199d236055c5db6b74dcee856f0ec4715b9 100644 --- a/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/WriterInterface.php +++ b/civicrm/vendor/phpoffice/phpword/src/PhpWord/Writer/WriterInterface.php @@ -10,8 +10,8 @@ * file that was distributed with this source code. For the full list of * contributors, visit https://github.com/PHPOffice/PHPWord/contributors. * - * @link https://github.com/PHPOffice/PHPWord - * @copyright 2010-2016 PHPWord contributors + * @see https://github.com/PHPOffice/PHPWord + * @copyright 2010-2017 PHPWord contributors * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ diff --git a/civicrm/vendor/psr/http-message/CHANGELOG.md b/civicrm/vendor/psr/http-message/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..74b1ef923c1616bd2c544953ac776c6ca3c59286 --- /dev/null +++ b/civicrm/vendor/psr/http-message/CHANGELOG.md @@ -0,0 +1,36 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.0.1 - 2016-08-06 + +### Added + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Updated all `@return self` annotation references in interfaces to use + `@return static`, which more closelly follows the semantics of the + specification. +- Updated the `MessageInterface::getHeaders()` return annotation to use the + value `string[][]`, indicating the format is a nested array of strings. +- Updated the `@link` annotation for `RequestInterface::withRequestTarget()` + to point to the correct section of RFC 7230. +- Updated the `ServerRequestInterface::withUploadedFiles()` parameter annotation + to add the parameter name (`$uploadedFiles`). +- Updated a `@throws` annotation for the `UploadedFileInterface::moveTo()` + method to correctly reference the method parameter (it was referencing an + incorrect parameter name previously). + +## 1.0.0 - 2016-05-18 + +Initial stable release; reflects accepted PSR-7 specification. diff --git a/civicrm/vendor/psr/http-message/LICENSE b/civicrm/vendor/psr/http-message/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..c2d8e452de1bc5fc64680e356e7508e12527a02a --- /dev/null +++ b/civicrm/vendor/psr/http-message/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014 PHP Framework Interoperability Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/civicrm/vendor/psr/http-message/README.md b/civicrm/vendor/psr/http-message/README.md new file mode 100644 index 0000000000000000000000000000000000000000..28185338f72381295cdd8b5762b00c707ca05da7 --- /dev/null +++ b/civicrm/vendor/psr/http-message/README.md @@ -0,0 +1,13 @@ +PSR Http Message +================ + +This repository holds all interfaces/classes/traits related to +[PSR-7](http://www.php-fig.org/psr/psr-7/). + +Note that this is not a HTTP message implementation of its own. It is merely an +interface that describes a HTTP message. See the specification for more details. + +Usage +----- + +We'll certainly need some stuff in here. \ No newline at end of file diff --git a/civicrm/vendor/psr/http-message/composer.json b/civicrm/vendor/psr/http-message/composer.json new file mode 100644 index 0000000000000000000000000000000000000000..b0d2937a03a5fbe5219a3ff7a2470fb92b851942 --- /dev/null +++ b/civicrm/vendor/psr/http-message/composer.json @@ -0,0 +1,26 @@ +{ + "name": "psr/http-message", + "description": "Common interface for HTTP messages", + "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"], + "homepage": "https://github.com/php-fig/http-message", + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/civicrm/vendor/psr/http-message/src/MessageInterface.php b/civicrm/vendor/psr/http-message/src/MessageInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..dd46e5ec81eef701ccb6e61c08debe86570dcb8e --- /dev/null +++ b/civicrm/vendor/psr/http-message/src/MessageInterface.php @@ -0,0 +1,187 @@ +<?php + +namespace Psr\Http\Message; + +/** + * HTTP messages consist of requests from a client to a server and responses + * from a server to a client. This interface defines the methods common to + * each. + * + * Messages are considered immutable; all methods that might change state MUST + * be implemented such that they retain the internal state of the current + * message and return an instance that contains the changed state. + * + * @link http://www.ietf.org/rfc/rfc7230.txt + * @link http://www.ietf.org/rfc/rfc7231.txt + */ +interface MessageInterface +{ + /** + * Retrieves the HTTP protocol version as a string. + * + * The string MUST contain only the HTTP version number (e.g., "1.1", "1.0"). + * + * @return string HTTP protocol version. + */ + public function getProtocolVersion(); + + /** + * Return an instance with the specified HTTP protocol version. + * + * The version string MUST contain only the HTTP version number (e.g., + * "1.1", "1.0"). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new protocol version. + * + * @param string $version HTTP protocol version + * @return static + */ + public function withProtocolVersion($version); + + /** + * Retrieves all message header values. + * + * The keys represent the header name as it will be sent over the wire, and + * each value is an array of strings associated with the header. + * + * // Represent the headers as a string + * foreach ($message->getHeaders() as $name => $values) { + * echo $name . ": " . implode(", ", $values); + * } + * + * // Emit headers iteratively: + * foreach ($message->getHeaders() as $name => $values) { + * foreach ($values as $value) { + * header(sprintf('%s: %s', $name, $value), false); + * } + * } + * + * While header names are not case-sensitive, getHeaders() will preserve the + * exact case in which headers were originally specified. + * + * @return string[][] Returns an associative array of the message's headers. Each + * key MUST be a header name, and each value MUST be an array of strings + * for that header. + */ + public function getHeaders(); + + /** + * Checks if a header exists by the given case-insensitive name. + * + * @param string $name Case-insensitive header field name. + * @return bool Returns true if any header names match the given header + * name using a case-insensitive string comparison. Returns false if + * no matching header name is found in the message. + */ + public function hasHeader($name); + + /** + * Retrieves a message header value by the given case-insensitive name. + * + * This method returns an array of all the header values of the given + * case-insensitive header name. + * + * If the header does not appear in the message, this method MUST return an + * empty array. + * + * @param string $name Case-insensitive header field name. + * @return string[] An array of string values as provided for the given + * header. If the header does not appear in the message, this method MUST + * return an empty array. + */ + public function getHeader($name); + + /** + * Retrieves a comma-separated string of the values for a single header. + * + * This method returns all of the header values of the given + * case-insensitive header name as a string concatenated together using + * a comma. + * + * NOTE: Not all header values may be appropriately represented using + * comma concatenation. For such headers, use getHeader() instead + * and supply your own delimiter when concatenating. + * + * If the header does not appear in the message, this method MUST return + * an empty string. + * + * @param string $name Case-insensitive header field name. + * @return string A string of values as provided for the given header + * concatenated together using a comma. If the header does not appear in + * the message, this method MUST return an empty string. + */ + public function getHeaderLine($name); + + /** + * Return an instance with the provided value replacing the specified header. + * + * While header names are case-insensitive, the casing of the header will + * be preserved by this function, and returned from getHeaders(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new and/or updated header and value. + * + * @param string $name Case-insensitive header field name. + * @param string|string[] $value Header value(s). + * @return static + * @throws \InvalidArgumentException for invalid header names or values. + */ + public function withHeader($name, $value); + + /** + * Return an instance with the specified header appended with the given value. + * + * Existing values for the specified header will be maintained. The new + * value(s) will be appended to the existing list. If the header did not + * exist previously, it will be added. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new header and/or value. + * + * @param string $name Case-insensitive header field name to add. + * @param string|string[] $value Header value(s). + * @return static + * @throws \InvalidArgumentException for invalid header names or values. + */ + public function withAddedHeader($name, $value); + + /** + * Return an instance without the specified header. + * + * Header resolution MUST be done without case-sensitivity. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the named header. + * + * @param string $name Case-insensitive header field name to remove. + * @return static + */ + public function withoutHeader($name); + + /** + * Gets the body of the message. + * + * @return StreamInterface Returns the body as a stream. + */ + public function getBody(); + + /** + * Return an instance with the specified message body. + * + * The body MUST be a StreamInterface object. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return a new instance that has the + * new body stream. + * + * @param StreamInterface $body Body. + * @return static + * @throws \InvalidArgumentException When the body is not valid. + */ + public function withBody(StreamInterface $body); +} diff --git a/civicrm/vendor/psr/http-message/src/RequestInterface.php b/civicrm/vendor/psr/http-message/src/RequestInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..a96d4fd6366790ec833502cefd2e1ec91a5c440f --- /dev/null +++ b/civicrm/vendor/psr/http-message/src/RequestInterface.php @@ -0,0 +1,129 @@ +<?php + +namespace Psr\Http\Message; + +/** + * Representation of an outgoing, client-side request. + * + * Per the HTTP specification, this interface includes properties for + * each of the following: + * + * - Protocol version + * - HTTP method + * - URI + * - Headers + * - Message body + * + * During construction, implementations MUST attempt to set the Host header from + * a provided URI if no Host header is provided. + * + * Requests are considered immutable; all methods that might change state MUST + * be implemented such that they retain the internal state of the current + * message and return an instance that contains the changed state. + */ +interface RequestInterface extends MessageInterface +{ + /** + * Retrieves the message's request target. + * + * Retrieves the message's request-target either as it will appear (for + * clients), as it appeared at request (for servers), or as it was + * specified for the instance (see withRequestTarget()). + * + * In most cases, this will be the origin-form of the composed URI, + * unless a value was provided to the concrete implementation (see + * withRequestTarget() below). + * + * If no URI is available, and no request-target has been specifically + * provided, this method MUST return the string "/". + * + * @return string + */ + public function getRequestTarget(); + + /** + * Return an instance with the specific request-target. + * + * If the request needs a non-origin-form request-target — e.g., for + * specifying an absolute-form, authority-form, or asterisk-form — + * this method may be used to create an instance with the specified + * request-target, verbatim. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * changed request target. + * + * @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various + * request-target forms allowed in request messages) + * @param mixed $requestTarget + * @return static + */ + public function withRequestTarget($requestTarget); + + /** + * Retrieves the HTTP method of the request. + * + * @return string Returns the request method. + */ + public function getMethod(); + + /** + * Return an instance with the provided HTTP method. + * + * While HTTP method names are typically all uppercase characters, HTTP + * method names are case-sensitive and thus implementations SHOULD NOT + * modify the given string. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * changed request method. + * + * @param string $method Case-sensitive method. + * @return static + * @throws \InvalidArgumentException for invalid HTTP methods. + */ + public function withMethod($method); + + /** + * Retrieves the URI instance. + * + * This method MUST return a UriInterface instance. + * + * @link http://tools.ietf.org/html/rfc3986#section-4.3 + * @return UriInterface Returns a UriInterface instance + * representing the URI of the request. + */ + public function getUri(); + + /** + * Returns an instance with the provided URI. + * + * This method MUST update the Host header of the returned request by + * default if the URI contains a host component. If the URI does not + * contain a host component, any pre-existing Host header MUST be carried + * over to the returned request. + * + * You can opt-in to preserving the original state of the Host header by + * setting `$preserveHost` to `true`. When `$preserveHost` is set to + * `true`, this method interacts with the Host header in the following ways: + * + * - If the Host header is missing or empty, and the new URI contains + * a host component, this method MUST update the Host header in the returned + * request. + * - If the Host header is missing or empty, and the new URI does not contain a + * host component, this method MUST NOT update the Host header in the returned + * request. + * - If a Host header is present and non-empty, this method MUST NOT update + * the Host header in the returned request. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new UriInterface instance. + * + * @link http://tools.ietf.org/html/rfc3986#section-4.3 + * @param UriInterface $uri New request URI to use. + * @param bool $preserveHost Preserve the original state of the Host header. + * @return static + */ + public function withUri(UriInterface $uri, $preserveHost = false); +} diff --git a/civicrm/vendor/psr/http-message/src/ResponseInterface.php b/civicrm/vendor/psr/http-message/src/ResponseInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..c306514e6bbdf07282bda9e3dc61d91f6554e642 --- /dev/null +++ b/civicrm/vendor/psr/http-message/src/ResponseInterface.php @@ -0,0 +1,68 @@ +<?php + +namespace Psr\Http\Message; + +/** + * Representation of an outgoing, server-side response. + * + * Per the HTTP specification, this interface includes properties for + * each of the following: + * + * - Protocol version + * - Status code and reason phrase + * - Headers + * - Message body + * + * Responses are considered immutable; all methods that might change state MUST + * be implemented such that they retain the internal state of the current + * message and return an instance that contains the changed state. + */ +interface ResponseInterface extends MessageInterface +{ + /** + * Gets the response status code. + * + * The status code is a 3-digit integer result code of the server's attempt + * to understand and satisfy the request. + * + * @return int Status code. + */ + public function getStatusCode(); + + /** + * Return an instance with the specified status code and, optionally, reason phrase. + * + * If no reason phrase is specified, implementations MAY choose to default + * to the RFC 7231 or IANA recommended reason phrase for the response's + * status code. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated status and reason phrase. + * + * @link http://tools.ietf.org/html/rfc7231#section-6 + * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml + * @param int $code The 3-digit integer result code to set. + * @param string $reasonPhrase The reason phrase to use with the + * provided status code; if none is provided, implementations MAY + * use the defaults as suggested in the HTTP specification. + * @return static + * @throws \InvalidArgumentException For invalid status code arguments. + */ + public function withStatus($code, $reasonPhrase = ''); + + /** + * Gets the response reason phrase associated with the status code. + * + * Because a reason phrase is not a required element in a response + * status line, the reason phrase value MAY be null. Implementations MAY + * choose to return the default RFC 7231 recommended reason phrase (or those + * listed in the IANA HTTP Status Code Registry) for the response's + * status code. + * + * @link http://tools.ietf.org/html/rfc7231#section-6 + * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml + * @return string Reason phrase; must return an empty string if none present. + */ + public function getReasonPhrase(); +} diff --git a/civicrm/vendor/psr/http-message/src/ServerRequestInterface.php b/civicrm/vendor/psr/http-message/src/ServerRequestInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..02512340ad853714bca1e25b619fa9097154f103 --- /dev/null +++ b/civicrm/vendor/psr/http-message/src/ServerRequestInterface.php @@ -0,0 +1,261 @@ +<?php + +namespace Psr\Http\Message; + +/** + * Representation of an incoming, server-side HTTP request. + * + * Per the HTTP specification, this interface includes properties for + * each of the following: + * + * - Protocol version + * - HTTP method + * - URI + * - Headers + * - Message body + * + * Additionally, it encapsulates all data as it has arrived to the + * application from the CGI and/or PHP environment, including: + * + * - The values represented in $_SERVER. + * - Any cookies provided (generally via $_COOKIE) + * - Query string arguments (generally via $_GET, or as parsed via parse_str()) + * - Upload files, if any (as represented by $_FILES) + * - Deserialized body parameters (generally from $_POST) + * + * $_SERVER values MUST be treated as immutable, as they represent application + * state at the time of request; as such, no methods are provided to allow + * modification of those values. The other values provide such methods, as they + * can be restored from $_SERVER or the request body, and may need treatment + * during the application (e.g., body parameters may be deserialized based on + * content type). + * + * Additionally, this interface recognizes the utility of introspecting a + * request to derive and match additional parameters (e.g., via URI path + * matching, decrypting cookie values, deserializing non-form-encoded body + * content, matching authorization headers to users, etc). These parameters + * are stored in an "attributes" property. + * + * Requests are considered immutable; all methods that might change state MUST + * be implemented such that they retain the internal state of the current + * message and return an instance that contains the changed state. + */ +interface ServerRequestInterface extends RequestInterface +{ + /** + * Retrieve server parameters. + * + * Retrieves data related to the incoming request environment, + * typically derived from PHP's $_SERVER superglobal. The data IS NOT + * REQUIRED to originate from $_SERVER. + * + * @return array + */ + public function getServerParams(); + + /** + * Retrieve cookies. + * + * Retrieves cookies sent by the client to the server. + * + * The data MUST be compatible with the structure of the $_COOKIE + * superglobal. + * + * @return array + */ + public function getCookieParams(); + + /** + * Return an instance with the specified cookies. + * + * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST + * be compatible with the structure of $_COOKIE. Typically, this data will + * be injected at instantiation. + * + * This method MUST NOT update the related Cookie header of the request + * instance, nor related values in the server params. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated cookie values. + * + * @param array $cookies Array of key/value pairs representing cookies. + * @return static + */ + public function withCookieParams(array $cookies); + + /** + * Retrieve query string arguments. + * + * Retrieves the deserialized query string arguments, if any. + * + * Note: the query params might not be in sync with the URI or server + * params. If you need to ensure you are only getting the original + * values, you may need to parse the query string from `getUri()->getQuery()` + * or from the `QUERY_STRING` server param. + * + * @return array + */ + public function getQueryParams(); + + /** + * Return an instance with the specified query string arguments. + * + * These values SHOULD remain immutable over the course of the incoming + * request. They MAY be injected during instantiation, such as from PHP's + * $_GET superglobal, or MAY be derived from some other value such as the + * URI. In cases where the arguments are parsed from the URI, the data + * MUST be compatible with what PHP's parse_str() would return for + * purposes of how duplicate query parameters are handled, and how nested + * sets are handled. + * + * Setting query string arguments MUST NOT change the URI stored by the + * request, nor the values in the server params. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated query string arguments. + * + * @param array $query Array of query string arguments, typically from + * $_GET. + * @return static + */ + public function withQueryParams(array $query); + + /** + * Retrieve normalized file upload data. + * + * This method returns upload metadata in a normalized tree, with each leaf + * an instance of Psr\Http\Message\UploadedFileInterface. + * + * These values MAY be prepared from $_FILES or the message body during + * instantiation, or MAY be injected via withUploadedFiles(). + * + * @return array An array tree of UploadedFileInterface instances; an empty + * array MUST be returned if no data is present. + */ + public function getUploadedFiles(); + + /** + * Create a new instance with the specified uploaded files. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated body parameters. + * + * @param array $uploadedFiles An array tree of UploadedFileInterface instances. + * @return static + * @throws \InvalidArgumentException if an invalid structure is provided. + */ + public function withUploadedFiles(array $uploadedFiles); + + /** + * Retrieve any parameters provided in the request body. + * + * If the request Content-Type is either application/x-www-form-urlencoded + * or multipart/form-data, and the request method is POST, this method MUST + * return the contents of $_POST. + * + * Otherwise, this method may return any results of deserializing + * the request body content; as parsing returns structured content, the + * potential types MUST be arrays or objects only. A null value indicates + * the absence of body content. + * + * @return null|array|object The deserialized body parameters, if any. + * These will typically be an array or object. + */ + public function getParsedBody(); + + /** + * Return an instance with the specified body parameters. + * + * These MAY be injected during instantiation. + * + * If the request Content-Type is either application/x-www-form-urlencoded + * or multipart/form-data, and the request method is POST, use this method + * ONLY to inject the contents of $_POST. + * + * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of + * deserializing the request body content. Deserialization/parsing returns + * structured data, and, as such, this method ONLY accepts arrays or objects, + * or a null value if nothing was available to parse. + * + * As an example, if content negotiation determines that the request data + * is a JSON payload, this method could be used to create a request + * instance with the deserialized parameters. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated body parameters. + * + * @param null|array|object $data The deserialized body data. This will + * typically be in an array or object. + * @return static + * @throws \InvalidArgumentException if an unsupported argument type is + * provided. + */ + public function withParsedBody($data); + + /** + * Retrieve attributes derived from the request. + * + * The request "attributes" may be used to allow injection of any + * parameters derived from the request: e.g., the results of path + * match operations; the results of decrypting cookies; the results of + * deserializing non-form-encoded message bodies; etc. Attributes + * will be application and request specific, and CAN be mutable. + * + * @return array Attributes derived from the request. + */ + public function getAttributes(); + + /** + * Retrieve a single derived request attribute. + * + * Retrieves a single derived request attribute as described in + * getAttributes(). If the attribute has not been previously set, returns + * the default value as provided. + * + * This method obviates the need for a hasAttribute() method, as it allows + * specifying a default value to return if the attribute is not found. + * + * @see getAttributes() + * @param string $name The attribute name. + * @param mixed $default Default value to return if the attribute does not exist. + * @return mixed + */ + public function getAttribute($name, $default = null); + + /** + * Return an instance with the specified derived request attribute. + * + * This method allows setting a single derived request attribute as + * described in getAttributes(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated attribute. + * + * @see getAttributes() + * @param string $name The attribute name. + * @param mixed $value The value of the attribute. + * @return static + */ + public function withAttribute($name, $value); + + /** + * Return an instance that removes the specified derived request attribute. + * + * This method allows removing a single derived request attribute as + * described in getAttributes(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the attribute. + * + * @see getAttributes() + * @param string $name The attribute name. + * @return static + */ + public function withoutAttribute($name); +} diff --git a/civicrm/vendor/psr/http-message/src/StreamInterface.php b/civicrm/vendor/psr/http-message/src/StreamInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..f68f391269b472ec9d9828d2725c12019fa99903 --- /dev/null +++ b/civicrm/vendor/psr/http-message/src/StreamInterface.php @@ -0,0 +1,158 @@ +<?php + +namespace Psr\Http\Message; + +/** + * Describes a data stream. + * + * Typically, an instance will wrap a PHP stream; this interface provides + * a wrapper around the most common operations, including serialization of + * the entire stream to a string. + */ +interface StreamInterface +{ + /** + * Reads all data from the stream into a string, from the beginning to end. + * + * This method MUST attempt to seek to the beginning of the stream before + * reading data and read the stream until the end is reached. + * + * Warning: This could attempt to load a large amount of data into memory. + * + * This method MUST NOT raise an exception in order to conform with PHP's + * string casting operations. + * + * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring + * @return string + */ + public function __toString(); + + /** + * Closes the stream and any underlying resources. + * + * @return void + */ + public function close(); + + /** + * Separates any underlying resources from the stream. + * + * After the stream has been detached, the stream is in an unusable state. + * + * @return resource|null Underlying PHP stream, if any + */ + public function detach(); + + /** + * Get the size of the stream if known. + * + * @return int|null Returns the size in bytes if known, or null if unknown. + */ + public function getSize(); + + /** + * Returns the current position of the file read/write pointer + * + * @return int Position of the file pointer + * @throws \RuntimeException on error. + */ + public function tell(); + + /** + * Returns true if the stream is at the end of the stream. + * + * @return bool + */ + public function eof(); + + /** + * Returns whether or not the stream is seekable. + * + * @return bool + */ + public function isSeekable(); + + /** + * Seek to a position in the stream. + * + * @link http://www.php.net/manual/en/function.fseek.php + * @param int $offset Stream offset + * @param int $whence Specifies how the cursor position will be calculated + * based on the seek offset. Valid values are identical to the built-in + * PHP $whence values for `fseek()`. SEEK_SET: Set position equal to + * offset bytes SEEK_CUR: Set position to current location plus offset + * SEEK_END: Set position to end-of-stream plus offset. + * @throws \RuntimeException on failure. + */ + public function seek($offset, $whence = SEEK_SET); + + /** + * Seek to the beginning of the stream. + * + * If the stream is not seekable, this method will raise an exception; + * otherwise, it will perform a seek(0). + * + * @see seek() + * @link http://www.php.net/manual/en/function.fseek.php + * @throws \RuntimeException on failure. + */ + public function rewind(); + + /** + * Returns whether or not the stream is writable. + * + * @return bool + */ + public function isWritable(); + + /** + * Write data to the stream. + * + * @param string $string The string that is to be written. + * @return int Returns the number of bytes written to the stream. + * @throws \RuntimeException on failure. + */ + public function write($string); + + /** + * Returns whether or not the stream is readable. + * + * @return bool + */ + public function isReadable(); + + /** + * Read data from the stream. + * + * @param int $length Read up to $length bytes from the object and return + * them. Fewer than $length bytes may be returned if underlying stream + * call returns fewer bytes. + * @return string Returns the data read from the stream, or an empty string + * if no bytes are available. + * @throws \RuntimeException if an error occurs. + */ + public function read($length); + + /** + * Returns the remaining contents in a string + * + * @return string + * @throws \RuntimeException if unable to read or an error occurs while + * reading. + */ + public function getContents(); + + /** + * Get stream metadata as an associative array or retrieve a specific key. + * + * The keys returned are identical to the keys returned from PHP's + * stream_get_meta_data() function. + * + * @link http://php.net/manual/en/function.stream-get-meta-data.php + * @param string $key Specific metadata to retrieve. + * @return array|mixed|null Returns an associative array if no key is + * provided. Returns a specific key value if a key is provided and the + * value is found, or null if the key is not found. + */ + public function getMetadata($key = null); +} diff --git a/civicrm/vendor/psr/http-message/src/UploadedFileInterface.php b/civicrm/vendor/psr/http-message/src/UploadedFileInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..f8a6901e014477f5bcbd2bbbe525b0c0b34d3b97 --- /dev/null +++ b/civicrm/vendor/psr/http-message/src/UploadedFileInterface.php @@ -0,0 +1,123 @@ +<?php + +namespace Psr\Http\Message; + +/** + * Value object representing a file uploaded through an HTTP request. + * + * Instances of this interface are considered immutable; all methods that + * might change state MUST be implemented such that they retain the internal + * state of the current instance and return an instance that contains the + * changed state. + */ +interface UploadedFileInterface +{ + /** + * Retrieve a stream representing the uploaded file. + * + * This method MUST return a StreamInterface instance, representing the + * uploaded file. The purpose of this method is to allow utilizing native PHP + * stream functionality to manipulate the file upload, such as + * stream_copy_to_stream() (though the result will need to be decorated in a + * native PHP stream wrapper to work with such functions). + * + * If the moveTo() method has been called previously, this method MUST raise + * an exception. + * + * @return StreamInterface Stream representation of the uploaded file. + * @throws \RuntimeException in cases when no stream is available or can be + * created. + */ + public function getStream(); + + /** + * Move the uploaded file to a new location. + * + * Use this method as an alternative to move_uploaded_file(). This method is + * guaranteed to work in both SAPI and non-SAPI environments. + * Implementations must determine which environment they are in, and use the + * appropriate method (move_uploaded_file(), rename(), or a stream + * operation) to perform the operation. + * + * $targetPath may be an absolute path, or a relative path. If it is a + * relative path, resolution should be the same as used by PHP's rename() + * function. + * + * The original file or stream MUST be removed on completion. + * + * If this method is called more than once, any subsequent calls MUST raise + * an exception. + * + * When used in an SAPI environment where $_FILES is populated, when writing + * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be + * used to ensure permissions and upload status are verified correctly. + * + * If you wish to move to a stream, use getStream(), as SAPI operations + * cannot guarantee writing to stream destinations. + * + * @see http://php.net/is_uploaded_file + * @see http://php.net/move_uploaded_file + * @param string $targetPath Path to which to move the uploaded file. + * @throws \InvalidArgumentException if the $targetPath specified is invalid. + * @throws \RuntimeException on any error during the move operation, or on + * the second or subsequent call to the method. + */ + public function moveTo($targetPath); + + /** + * Retrieve the file size. + * + * Implementations SHOULD return the value stored in the "size" key of + * the file in the $_FILES array if available, as PHP calculates this based + * on the actual size transmitted. + * + * @return int|null The file size in bytes or null if unknown. + */ + public function getSize(); + + /** + * Retrieve the error associated with the uploaded file. + * + * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants. + * + * If the file was uploaded successfully, this method MUST return + * UPLOAD_ERR_OK. + * + * Implementations SHOULD return the value stored in the "error" key of + * the file in the $_FILES array. + * + * @see http://php.net/manual/en/features.file-upload.errors.php + * @return int One of PHP's UPLOAD_ERR_XXX constants. + */ + public function getError(); + + /** + * Retrieve the filename sent by the client. + * + * Do not trust the value returned by this method. A client could send + * a malicious filename with the intention to corrupt or hack your + * application. + * + * Implementations SHOULD return the value stored in the "name" key of + * the file in the $_FILES array. + * + * @return string|null The filename sent by the client or null if none + * was provided. + */ + public function getClientFilename(); + + /** + * Retrieve the media type sent by the client. + * + * Do not trust the value returned by this method. A client could send + * a malicious media type with the intention to corrupt or hack your + * application. + * + * Implementations SHOULD return the value stored in the "type" key of + * the file in the $_FILES array. + * + * @return string|null The media type sent by the client or null if none + * was provided. + */ + public function getClientMediaType(); +} diff --git a/civicrm/vendor/psr/http-message/src/UriInterface.php b/civicrm/vendor/psr/http-message/src/UriInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..9d7ab9eae8f29060899cf2f9904e2bd0409af515 --- /dev/null +++ b/civicrm/vendor/psr/http-message/src/UriInterface.php @@ -0,0 +1,323 @@ +<?php +namespace Psr\Http\Message; + +/** + * Value object representing a URI. + * + * This interface is meant to represent URIs according to RFC 3986 and to + * provide methods for most common operations. Additional functionality for + * working with URIs can be provided on top of the interface or externally. + * Its primary use is for HTTP requests, but may also be used in other + * contexts. + * + * Instances of this interface are considered immutable; all methods that + * might change state MUST be implemented such that they retain the internal + * state of the current instance and return an instance that contains the + * changed state. + * + * Typically the Host header will be also be present in the request message. + * For server-side requests, the scheme will typically be discoverable in the + * server parameters. + * + * @link http://tools.ietf.org/html/rfc3986 (the URI specification) + */ +interface UriInterface +{ + /** + * Retrieve the scheme component of the URI. + * + * If no scheme is present, this method MUST return an empty string. + * + * The value returned MUST be normalized to lowercase, per RFC 3986 + * Section 3.1. + * + * The trailing ":" character is not part of the scheme and MUST NOT be + * added. + * + * @see https://tools.ietf.org/html/rfc3986#section-3.1 + * @return string The URI scheme. + */ + public function getScheme(); + + /** + * Retrieve the authority component of the URI. + * + * If no authority information is present, this method MUST return an empty + * string. + * + * The authority syntax of the URI is: + * + * <pre> + * [user-info@]host[:port] + * </pre> + * + * If the port component is not set or is the standard port for the current + * scheme, it SHOULD NOT be included. + * + * @see https://tools.ietf.org/html/rfc3986#section-3.2 + * @return string The URI authority, in "[user-info@]host[:port]" format. + */ + public function getAuthority(); + + /** + * Retrieve the user information component of the URI. + * + * If no user information is present, this method MUST return an empty + * string. + * + * If a user is present in the URI, this will return that value; + * additionally, if the password is also present, it will be appended to the + * user value, with a colon (":") separating the values. + * + * The trailing "@" character is not part of the user information and MUST + * NOT be added. + * + * @return string The URI user information, in "username[:password]" format. + */ + public function getUserInfo(); + + /** + * Retrieve the host component of the URI. + * + * If no host is present, this method MUST return an empty string. + * + * The value returned MUST be normalized to lowercase, per RFC 3986 + * Section 3.2.2. + * + * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 + * @return string The URI host. + */ + public function getHost(); + + /** + * Retrieve the port component of the URI. + * + * If a port is present, and it is non-standard for the current scheme, + * this method MUST return it as an integer. If the port is the standard port + * used with the current scheme, this method SHOULD return null. + * + * If no port is present, and no scheme is present, this method MUST return + * a null value. + * + * If no port is present, but a scheme is present, this method MAY return + * the standard port for that scheme, but SHOULD return null. + * + * @return null|int The URI port. + */ + public function getPort(); + + /** + * Retrieve the path component of the URI. + * + * The path can either be empty or absolute (starting with a slash) or + * rootless (not starting with a slash). Implementations MUST support all + * three syntaxes. + * + * Normally, the empty path "" and absolute path "/" are considered equal as + * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically + * do this normalization because in contexts with a trimmed base path, e.g. + * the front controller, this difference becomes significant. It's the task + * of the user to handle both "" and "/". + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.3. + * + * As an example, if the value should include a slash ("/") not intended as + * delimiter between path segments, that value MUST be passed in encoded + * form (e.g., "%2F") to the instance. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.3 + * @return string The URI path. + */ + public function getPath(); + + /** + * Retrieve the query string of the URI. + * + * If no query string is present, this method MUST return an empty string. + * + * The leading "?" character is not part of the query and MUST NOT be + * added. + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.4. + * + * As an example, if a value in a key/value pair of the query string should + * include an ampersand ("&") not intended as a delimiter between values, + * that value MUST be passed in encoded form (e.g., "%26") to the instance. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.4 + * @return string The URI query string. + */ + public function getQuery(); + + /** + * Retrieve the fragment component of the URI. + * + * If no fragment is present, this method MUST return an empty string. + * + * The leading "#" character is not part of the fragment and MUST NOT be + * added. + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.5. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.5 + * @return string The URI fragment. + */ + public function getFragment(); + + /** + * Return an instance with the specified scheme. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified scheme. + * + * Implementations MUST support the schemes "http" and "https" case + * insensitively, and MAY accommodate other schemes if required. + * + * An empty scheme is equivalent to removing the scheme. + * + * @param string $scheme The scheme to use with the new instance. + * @return static A new instance with the specified scheme. + * @throws \InvalidArgumentException for invalid or unsupported schemes. + */ + public function withScheme($scheme); + + /** + * Return an instance with the specified user information. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified user information. + * + * Password is optional, but the user information MUST include the + * user; an empty string for the user is equivalent to removing user + * information. + * + * @param string $user The user name to use for authority. + * @param null|string $password The password associated with $user. + * @return static A new instance with the specified user information. + */ + public function withUserInfo($user, $password = null); + + /** + * Return an instance with the specified host. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified host. + * + * An empty host value is equivalent to removing the host. + * + * @param string $host The hostname to use with the new instance. + * @return static A new instance with the specified host. + * @throws \InvalidArgumentException for invalid hostnames. + */ + public function withHost($host); + + /** + * Return an instance with the specified port. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified port. + * + * Implementations MUST raise an exception for ports outside the + * established TCP and UDP port ranges. + * + * A null value provided for the port is equivalent to removing the port + * information. + * + * @param null|int $port The port to use with the new instance; a null value + * removes the port information. + * @return static A new instance with the specified port. + * @throws \InvalidArgumentException for invalid ports. + */ + public function withPort($port); + + /** + * Return an instance with the specified path. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified path. + * + * The path can either be empty or absolute (starting with a slash) or + * rootless (not starting with a slash). Implementations MUST support all + * three syntaxes. + * + * If the path is intended to be domain-relative rather than path relative then + * it must begin with a slash ("/"). Paths not starting with a slash ("/") + * are assumed to be relative to some base path known to the application or + * consumer. + * + * Users can provide both encoded and decoded path characters. + * Implementations ensure the correct encoding as outlined in getPath(). + * + * @param string $path The path to use with the new instance. + * @return static A new instance with the specified path. + * @throws \InvalidArgumentException for invalid paths. + */ + public function withPath($path); + + /** + * Return an instance with the specified query string. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified query string. + * + * Users can provide both encoded and decoded query characters. + * Implementations ensure the correct encoding as outlined in getQuery(). + * + * An empty query string value is equivalent to removing the query string. + * + * @param string $query The query string to use with the new instance. + * @return static A new instance with the specified query string. + * @throws \InvalidArgumentException for invalid query strings. + */ + public function withQuery($query); + + /** + * Return an instance with the specified URI fragment. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified URI fragment. + * + * Users can provide both encoded and decoded fragment characters. + * Implementations ensure the correct encoding as outlined in getFragment(). + * + * An empty fragment value is equivalent to removing the fragment. + * + * @param string $fragment The fragment to use with the new instance. + * @return static A new instance with the specified fragment. + */ + public function withFragment($fragment); + + /** + * Return the string representation as a URI reference. + * + * Depending on which components of the URI are present, the resulting + * string is either a full URI or relative reference according to RFC 3986, + * Section 4.1. The method concatenates the various components of the URI, + * using the appropriate delimiters: + * + * - If a scheme is present, it MUST be suffixed by ":". + * - If an authority is present, it MUST be prefixed by "//". + * - The path can be concatenated without delimiters. But there are two + * cases where the path has to be adjusted to make the URI reference + * valid as PHP does not allow to throw an exception in __toString(): + * - If the path is rootless and an authority is present, the path MUST + * be prefixed by "/". + * - If the path is starting with more than one "/" and no authority is + * present, the starting slashes MUST be reduced to one. + * - If a query is present, it MUST be prefixed by "?". + * - If a fragment is present, it MUST be prefixed by "#". + * + * @see http://tools.ietf.org/html/rfc3986#section-4.1 + * @return string + */ + public function __toString(); +} diff --git a/civicrm/xml/GenCode.php b/civicrm/xml/GenCode.php new file mode 100644 index 0000000000000000000000000000000000000000..8fef7b0d418894d40034ff3cf48aeb40500e4562 --- /dev/null +++ b/civicrm/xml/GenCode.php @@ -0,0 +1,45 @@ +<?php + +if (PHP_SAPI !== 'cli') { + die("GenCode can only be run from command line."); +} + +ini_set('include_path', '.' . PATH_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'packages' . PATH_SEPARATOR . '..'); +// make sure the memory_limit is at least 512 MB +$memLimitString = trim(ini_get('memory_limit')); +$memLimitUnit = strtolower(substr($memLimitString, -1)); +$memLimit = (int) $memLimitString; +switch ($memLimitUnit) { + case 'g': + $memLimit *= 1024; + case 'm': + $memLimit *= 1024; + case 'k': + $memLimit *= 1024; +} + +if ($memLimit >= 0 and $memLimit < 536870912) { + // Note: When processing all locales, CRM_Core_I18n::singleton() eats a lot of RAM. + ini_set('memory_limit', -1); +} +date_default_timezone_set('UTC'); // avoid php warnings if timezone is not set - CRM-10844 + +define('CIVICRM_UF', 'Drupal'); +define('CIVICRM_UF_BASEURL', '/'); + +require_once 'CRM/Core/ClassLoader.php'; +CRM_Core_ClassLoader::singleton()->register(); + +# TODO: pull these settings from configuration +$genCode = new CRM_Core_CodeGen_Main( + '../CRM/Core/DAO/', // $CoreDAOCodePath + '../sql/', // $sqlCodePath + '../', // $phpCodePath + '../templates/', // $tplCodePath + NULL, // IGNORE + @$argv[3], // cms + empty($argv[2]) ? NULL : $argv[2], // db version + empty($argv[1]) ? 'schema/Schema.xml' : $argv[1], // schema file + getenv('CIVICRM_GENCODE_DIGEST') ? getenv('CIVICRM_GENCODE_DIGEST') : NULL // path to digest file +); +$genCode->main(); diff --git a/civicrm/xml/plugins/block.ts.php b/civicrm/xml/plugins/block.ts.php new file mode 100644 index 0000000000000000000000000000000000000000..a610ec0901d62219dd15d40f2e0835fb7828c553 --- /dev/null +++ b/civicrm/xml/plugins/block.ts.php @@ -0,0 +1,11 @@ +<?php +/** + * @param array $params + * @param $text + * @param $smarty + * + * @return string + */ +function smarty_block_ts($params, $text, &$smarty) { + return ts($text, $params); +} diff --git a/civicrm/xml/schema/ACL/ACL.xml b/civicrm/xml/schema/ACL/ACL.xml new file mode 100644 index 0000000000000000000000000000000000000000..8353d97944bab5d49d571d38b1555647a11a95d6 --- /dev/null +++ b/civicrm/xml/schema/ACL/ACL.xml @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/ACL</base> + <class>ACL</class> + <name>civicrm_acl</name> + <comment>Access Control List</comment> + <add>1.6</add> + <field> + <name>id</name> + <title>ACL ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique table ID</comment> + <add>1.6</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>ACL Name</title> + <type>varchar</type> + <length>64</length> + <comment>ACL Name.</comment> + <html> + <type>Text</type> + </html> + <add>1.6</add> + </field> + <field> + <name>deny</name> + <title>Deny ACL?</title> + <type>boolean</type> + <default>0</default> + <required>true</required> + <comment>Is this ACL entry Allow (0) or Deny (1) ?</comment> + <html> + <type>Radio</type> + </html> + <add>1.6</add> + </field> + <field> + <name>entity_table</name> + <title>ACL Entity</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Table of the object possessing this ACL entry (Contact, Group, or ACL Group)</comment> + <add>1.6</add> + </field> + <field> + <name>entity_id</name> + <type>int unsigned</type> + <title>Entity ID</title> + <comment>ID of the object possessing this ACL</comment> + <add>1.6</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.6</add> + </dynamicForeignKey> + <field> + <name>operation</name> + <type>varchar</type> + <title>ACL Operation</title> + <length>8</length> + <required>true</required> + <comment>What operation does this ACL entry control?</comment> + <pseudoconstant> + <callback>CRM_ACL_BAO_ACL::operation</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.6</add> + </field> + <field> + <name>object_table</name> + <title>ACL Object</title> + <type>varchar</type> + <length>64</length> + <comment>The table of the object controlled by this ACL entry</comment> + <add>1.6</add> + </field> + <field> + <name>object_id</name> + <title>ACL Object ID</title> + <type>int unsigned</type> + <comment>The ID of the object controlled by this ACL entry</comment> + <add>1.6</add> + </field> + <field> + <name>acl_table</name> + <title>ACL Table</title> + <type>varchar</type> + <length>64</length> + <comment>If this is a grant/revoke entry, what table are we granting?</comment> + <add>1.6</add> + </field> + <field> + <name>acl_id</name> + <title>ACL Group ID</title> + <type>int unsigned</type> + <comment>ID of the ACL or ACL group being granted/revoked</comment> + <add>1.6</add> + </field> + <index> + <name>index_acl_id</name> + <fieldName>acl_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>is_active</name> + <title>ACL Is Active?</title> + <type>boolean</type> + <comment>Is this property active?</comment> + <add>1.6</add> + <html> + <type>CheckBox</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/ACL/Cache.xml b/civicrm/xml/schema/ACL/Cache.xml new file mode 100644 index 0000000000000000000000000000000000000000..d73ea8a08a583363516aae81d92e4d05af3c7595 --- /dev/null +++ b/civicrm/xml/schema/ACL/Cache.xml @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/ACL</base> + <class>Cache</class> + <name>civicrm_acl_cache</name> + <comment>Cache for acls and contacts</comment> + <add>1.6</add> + <field> + <name>id</name> + <title>Cache ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique table ID</comment> + <add>1.6</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Cache Contact</title> + <type>int unsigned</type> + <comment>Foreign Key to Contact</comment> + <add>1.6</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.6</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>acl_id</name> + <title>Cache ACL</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign Key to ACL</comment> + <add>1.6</add> + </field> + <foreignKey> + <name>acl_id</name> + <table>civicrm_acl</table> + <key>id</key> + <add>1.6</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>index_acl_id</name> + <fieldName>acl_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>modified_date</name> + <title>Cache Modified Date</title> + <type>timestamp</type> + <required>false</required> + <comment>When was this cache entry last modified</comment> + <add>1.6</add> + </field> +</table> diff --git a/civicrm/xml/schema/ACL/EntityRole.xml b/civicrm/xml/schema/ACL/EntityRole.xml new file mode 100644 index 0000000000000000000000000000000000000000..5d7958b729285ded56042edf7ebbd952abcf9d42 --- /dev/null +++ b/civicrm/xml/schema/ACL/EntityRole.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/ACL</base> + <class>EntityRole</class> + <name>civicrm_acl_entity_role</name> + <comment>Join table for Contacts and Groups to ACL Roles</comment> + <add>1.6</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Entity Role</title> + <required>true</required> + <comment>Unique table ID</comment> + <add>1.6</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>acl_role_id</name> + <title>ACL Role ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign Key to ACL Role (which is an option value pair and hence an implicit FK)</comment> + <add>1.6</add> + </field> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Table of the object joined to the ACL Role (Contact or Group)</comment> + <add>1.6</add> + </field> + <field> + <name>entity_id</name> + <title>ACL Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID of the group/contact object being joined</comment> + <add>1.6</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.6</add> + </dynamicForeignKey> + <field> + <name>is_active</name> + <title>ACL Entity Role is Active</title> + <type>boolean</type> + <comment>Is this property active?</comment> + <add>1.6</add> + </field> + <index> + <name>index_role</name> + <fieldName>acl_role_id</fieldName> + <add>1.6</add> + </index> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>1.6</add> + </index> +</table> diff --git a/civicrm/xml/schema/ACL/files.xml b/civicrm/xml/schema/ACL/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..2c156ee04c94e1b1ccbfa7c5ef4c7464f847e575 --- /dev/null +++ b/civicrm/xml/schema/ACL/files.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="ACL.xml" parse="xml" /> +<xi:include href="Cache.xml" parse="xml" /> +<xi:include href="EntityRole.xml" parse="xml" /> + +</tables> diff --git a/civicrm/xml/schema/Activity/Activity.xml b/civicrm/xml/schema/Activity/Activity.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b6da122492cd095a3346467dbef37733ace6dd8 --- /dev/null +++ b/civicrm/xml/schema/Activity/Activity.xml @@ -0,0 +1,486 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Activity</base> + <class>Activity</class> + <name>civicrm_activity</name> + <comment>Other Activity details stored here include contact, location, details.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <uniqueName>activity_id</uniqueName> + <title>Activity ID</title> + <import>true</import> + <type>int unsigned</type> + <required>true</required> + <comment>Unique Other Activity ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>source_contact_id</name> + <type>int unsigned</type> + <title>Source Contact</title> + <import>true</import> + <headerPattern>/(activity.)?source(.contact(.id)?)?/i</headerPattern> + <comment>Contact ID of the person scheduling or logging this Activity. Usually the authenticated user.</comment> + <add>1.1</add> + <drop>4.4</drop> + </field> + <foreignKey> + <name>source_contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + <drop>4.4</drop> + <onDelete>SET NULL</onDelete> + </foreignKey> + <index> + <name>UI_source_contact_id</name> + <fieldName>source_contact_id</fieldName> + <add>2.0</add> + <drop>3.2</drop> + </index> + <field> + <name>source_record_id</name> + <type>int unsigned</type> + <title>Source Record</title> + <comment>Artificial FK to original transaction (e.g. contribution) IF it is not an Activity. Table can be figured out through activity_type_id, and further through component registry.</comment> + <add>2.0</add> + </field> + <index> + <name>UI_source_record_id</name> + <fieldName>source_record_id</fieldName> + <add>3.2</add> + </index> + <field> + <name>activity_type_id</name> + <title>Activity Type ID</title> + <import>true</import> + <type>int unsigned</type> + <required>true</required> + <export>true</export> + <default>1</default> + <headerPattern>/(activity.)?type(.id$)/i</headerPattern> + <comment>FK to civicrm_option_value.id, that has to be valid, registered activity type.</comment> + <add>1.1</add> + <pseudoconstant> + <optionGroupName>activity_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>UI_activity_type_id</name> + <fieldName>activity_type_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>target_entity_table</name> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name of table where item being referenced is stored.</comment> + <add>1.1</add> + <drop>2.0</drop> + </field> + <field> + <name>target_entity_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the referenced item.</comment> + <add>1.1</add> + <drop>2.0</drop> + </field> + <field> + <name>subject</name> + <uniqueName>activity_subject</uniqueName> + <type>varchar</type> + <title>Subject</title> + <length>255</length> + <comment>The subject/purpose/short description of the activity.</comment> + <import>true</import> + <headerPattern>/(activity.)?subject/i</headerPattern> + <html> + <type>Text</type> + </html> + <add>1.1</add> + <change>2.0</change> + </field> + <field> + <name>scheduled_date</name> + <type>datetime</type> + <comment>Date and time meeting is scheduled to occur.</comment> + <add>1.1</add> + <drop>2.0</drop> + </field> + <field> + <name>activity_date_time</name> + <import>true</import> + <title>Activity Date</title> + <type>datetime</type> + <headerPattern>/(activity.)?date(.time$)?/i</headerPattern> + <comment>Date and time this activity is scheduled to occur. Formerly named scheduled_date_time.</comment> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + <add>2.0</add> + </field> + <index> + <name>index_activity_date_time</name> + <fieldName>activity_date_time</fieldName> + <add>4.7</add> + </index> + <field> + <name>due_date_time</name> + <type>datetime</type> + <comment>Date and time this activity is due.</comment> + <add>2.0</add> + <drop>3.0</drop> + </field> + <field> + <name>duration_hours</name> + <type>int unsigned</type> + <comment>Planned or actual duration of meeting - hours.</comment> + <add>1.1</add> + <drop>2.0</drop> + </field> + <field> + <name>duration_minutes</name> + <type>int unsigned</type> + <comment>Planned or actual duration of meeting - minutes.</comment> + <add>1.1</add> + <drop>2.0</drop> + </field> + <field> + <name>duration</name> + <uniqueName>activity_duration</uniqueName> + <title>Duration</title> + <import>true</import> + <type>int unsigned</type> + <headerPattern>/(activity.)?duration(s)?$/i</headerPattern> + <comment>Planned or actual duration of activity expressed in minutes. Conglomerate of former duration_hours and duration_minutes.</comment> + <add>2.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>location</name> + <uniqueName>activity_location</uniqueName> + <title>Location</title> + <import>true</import> + <type>varchar</type> + <length>255</length> + <headerPattern>/(activity.)?location$/i</headerPattern> + <comment>Location of the activity (optional, open text).</comment> + <html> + <type>Text</type> + </html> + <add>1.1</add> + </field> + <field> + <name>phone_id</name> + <type>int unsigned</type> + <title>Phone (called) ID</title> + <comment>Phone ID of the number called (optional - used if an existing phone number is selected).</comment> + <add>2.0</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>phone_id</name> + <table>civicrm_phone</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>phone_number</name> + <title>Phone (called) Number</title> + <type>varchar</type> + <length>64</length> + <comment>Phone number in case the number does not exist in the civicrm_phone table.</comment> + <html> + <type>Text</type> + </html> + <add>2.0</add> + </field> + <field> + <name>details</name> + <uniqueName>activity_details</uniqueName> + <title>Details</title> + <import>true</import> + <type>longtext</type> + <headerPattern>/(activity.)?detail(s)?$/i</headerPattern> + <comment>Details about the activity (agenda, notes, etc).</comment> + <html> + <type>RichTextEditor</type> + <rows>8</rows> + <cols>60</cols> + </html> + <add>1.1</add> + </field> + <field> + <name>status</name> + <type>enum</type> + <title>Status</title> + <values>Scheduled, Completed</values> + <comment>What is the status of this meeting? Completed meeting status results in activity history entry.</comment> + <add>1.1</add> + <drop>2.0</drop> + </field> + <field> + <name>status_id</name> + <uniqueName>activity_status_id</uniqueName> + <title>Activity Status</title> + <import>true</import> + <export>true</export> + <headerPattern>/(activity.)?status(.label$)?/i</headerPattern> + <type>int unsigned</type> + <comment>ID of the status this activity is currently in. Foreign key to civicrm_option_value.</comment> + <add>2.0</add> + <pseudoconstant> + <optionGroupName>activity_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>index_status_id</name> + <fieldName>status_id</fieldName> + <add>4.7</add> + </index> + <field> + <name>priority_id</name> + <type>int unsigned</type> + <title>Priority</title> + <comment>ID of the priority given to this activity. Foreign key to civicrm_option_value.</comment> + <add>2.0</add> + <pseudoconstant> + <optionGroupName>priority</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>parent_id</name> + <title>Parent Activity Id</title> + <type>int unsigned</type> + <comment>Parent meeting ID (if this is a follow-up item). This is not currently implemented</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>parent_id</name> + <table>civicrm_activity</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>is_test</name> + <title>Test</title> + <uniqueName>activity_is_test</uniqueName> + <type>boolean</type> + <default>0</default> + <import>true</import> + <headerPattern>/(is.)?test(.activity)?/i</headerPattern> + <add>2.0</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>medium_id</name> + <uniqueName>activity_medium_id</uniqueName> + <title>Activity Medium</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Activity Medium, Implicit FK to civicrm_option_value where option_group = encounter_medium.</comment> + <pseudoconstant> + <optionGroupName>encounter_medium</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>2.2</add> + </field> + <index> + <name>index_medium_id</name> + <fieldName>medium_id</fieldName> + <add>2.2</add> + </index> + <field> + <name>is_auto</name> + <title>Auto</title> + <type>boolean</type> + <default>0</default> + <add>2.2</add> + </field> + <field> + <name>relationship_id</name> + <title>Relationship Id</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>FK to Relationship ID</comment> + <add>2.2</add> + </field> + <foreignKey> + <name>relationship_id</name> + <table>civicrm_relationship</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_current_revision</name> + <title>Is this activity a current revision in versioning chain?</title> + <type>boolean</type> + <default>1</default> + <import>true</import> + <headerPattern>/(is.)?(current.)?(revision|version(ing)?)/i</headerPattern> + <add>2.2</add> + <html> + <type>CheckBox</type> + </html> + </field> + <index> + <name>index_is_current_revision</name> + <fieldName>is_current_revision</fieldName> + <add>2.2</add> + </index> + <field> + <name>original_id</name> + <type>int unsigned</type> + <title>Original Activity ID </title> + <comment>Activity ID of the first activity record in versioning chain.</comment> + <add>2.2</add> + </field> + <foreignKey> + <name>original_id</name> + <table>civicrm_activity</table> + <key>id</key> + <add>2.2</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_original_id</name> + <fieldName>original_id</fieldName> + <add>2.2</add> + <drop>3.2</drop> + </index> + <field> + <name>result</name> + <uniqueName>activity_result</uniqueName> + <type>varchar</type> + <title>Result</title> + <length>255</length> + <comment>Currently being used to store result id for survey activity, FK to option value.</comment> + <html> + <type>Text</type> + </html> + <add>3.3</add> + </field> + <field> + <name>is_deleted</name> + <uniqueName>activity_is_deleted</uniqueName> + <title>Activity is in the Trash</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <headerPattern>/(activity.)?(trash|deleted)/i</headerPattern> + <add>2.2</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>index_is_deleted</name> + <fieldName>is_deleted</fieldName> + <add>2.2</add> + </index> + <field> + <name>campaign_id</name> + <uniqueName>activity_campaign_id</uniqueName> + <type>int unsigned</type> + <title>Campaign</title> + <import>true</import> + <comment>The campaign for which this activity has been triggered.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.4</add> + <html> + <type>CheckBox</type> + </html> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>engagement_level</name> + <uniqueName>activity_engagement_level</uniqueName> + <type>int unsigned</type> + <title>Engagement Index</title> + <import>true</import> + <comment>Assign a specific level of engagement to this activity. Used for tracking constituents in ladder of engagement.</comment> + <pseudoconstant> + <optionGroupName>engagement_index</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>3.4</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <add>4.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_star</name> + <title>Is Starred</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <comment>Activity marked as favorite.</comment> + <headerPattern>/(activity.)?(star|favorite)/i</headerPattern> + <add>4.7</add> + </field> + <field> + <name>created_date</name> + <uniqueName>activity_created_date</uniqueName> + <type>timestamp</type> + <comment>When was the activity was created.</comment> + <required>false</required> + <export>true</export> + <default>NULL</default> + <add>4.7</add> + </field> + <field> + <name>modified_date</name> + <uniqueName>activity_modified_date</uniqueName> + <type>timestamp</type> + <comment>When was the activity (or closely related entity) was created or modified or deleted.</comment> + <required>false</required> + <export>true</export> + <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Activity/ActivityAssignment.xml b/civicrm/xml/schema/Activity/ActivityAssignment.xml new file mode 100644 index 0000000000000000000000000000000000000000..f3df06bb54ab71d9b610e0d136af4ecccc571b0a --- /dev/null +++ b/civicrm/xml/schema/Activity/ActivityAssignment.xml @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Activity</base> + <class>ActivityAssignment</class> + <name>civicrm_activity_assignment</name> + <comment>Activity assignments</comment> + <add>1.8</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Activity Assignment ID</title> + <required>true</required> + <comment>Activity assignment id</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + + <field> + <name>activity_entity_table</name> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name of table where item being referenced is stored (activity, phonecall or meeting).</comment> + <add>1.8</add> + <drop>2.0</drop> + </field> + + <field> + <name>activity_entity_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Entity (activity, phonecall or meeting) id for which the assigment is created</comment> + <add>1.8</add> + <drop>2.0</drop> + </field> + + <dynamicForeignKey> + <idColumn>activity_entity_id</idColumn> + <typeColumn>activity_entity_table</typeColumn> + <add>1.8</add> + <drop>2.0</drop> + </dynamicForeignKey> + + <field> + <name>target_entity_table</name> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name of table where item being referenced is stored (contact assigned to given activity).</comment> + <add>1.8</add> + <drop>2.0</drop> + </field> + + <field> + <name>target_entity_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the referenced item.</comment> + <add>1.1</add> + <drop>2.0</drop> + </field> + + <dynamicForeignKey> + <idColumn>target_entity_id</idColumn> + <typeColumn>target_entity_table</typeColumn> + <add>1.8</add> + <drop>2.0</drop> + </dynamicForeignKey> + + <field> + <name>activity_id</name> + <type>int unsigned</type> + <title>Activity ID</title> + <required>true</required> + <comment>Foreign key to the activity for this assignment.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>activity_id</name> + <table>civicrm_activity</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + + <field> + <name>assignee_contact_id</name> + <type>int unsigned</type> + <title>Assignee Contact ID</title> + <required>true</required> + <comment>Foreign key to the contact for this assignment.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>assignee_contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + + <index> + <name>UI_activity_assignee_contact_id</name> + <fieldName>assignee_contact_id</fieldName> + <fieldName>activity_id</fieldName> + <unique>true</unique> + <add>2.0</add> + </index> + + +</table> diff --git a/civicrm/xml/schema/Activity/ActivityContact.xml b/civicrm/xml/schema/Activity/ActivityContact.xml new file mode 100644 index 0000000000000000000000000000000000000000..351b22e047eed7e58226a013ca6c32c9e1561242 --- /dev/null +++ b/civicrm/xml/schema/Activity/ActivityContact.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Activity</base> + <class>ActivityContact</class> + <name>civicrm_activity_contact</name> + <comment>Activity Contact</comment> + <archive>true</archive> + <add>4.4</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Activity Contact ID</title> + <required>true</required> + <comment>Activity contact id</comment> + <add>4.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>activity_id</name> + <type>int unsigned</type> + <title>Activity ID</title> + <required>true</required> + <comment>Foreign key to the activity for this record.</comment> + <add>4.4</add> + </field> + <foreignKey> + <name>activity_id</name> + <table>civicrm_activity</table> + <key>id</key> + <add>4.4</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <title>Contact ID (match to contact)</title> + <import>true</import> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the contact for this record.</comment> + <add>4.4</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.4</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>record_type_id</name> + <type>int unsigned</type> + <title>Record Type ID</title> + <comment>Nature of this contact's role in the activity: 1 assignee, 2 creator, 3 focus or target.</comment> + <pseudoconstant> + <optionGroupName>activity_contacts</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.4</add> + </field> + <index> + <name>UI_activity_contact</name> + <fieldName>contact_id</fieldName> + <fieldName>activity_id</fieldName> + <fieldName>record_type_id</fieldName> + <unique>true</unique> + <add>4.4</add> + </index> + <index> + <name>index_record_type</name> + <fieldName>activity_id</fieldName> + <fieldName>record_type_id</fieldName> + <add>4.4</add> + </index> +</table> diff --git a/civicrm/xml/schema/Activity/ActivityTarget.xml b/civicrm/xml/schema/Activity/ActivityTarget.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b5cba7867d1e5602bdfae1eea27ce58f441d4db --- /dev/null +++ b/civicrm/xml/schema/Activity/ActivityTarget.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Activity</base> + <class>ActivityTarget</class> + <name>civicrm_activity_target</name> + <comment>Activity targets</comment> + <add>2.0</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Activity Target ID</title> + <required>true</required> + <comment>Activity target id</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>activity_id</name> + <type>int unsigned</type> + <title>Activity ID</title> + <required>true</required> + <comment>Foreign key to the activity for this target.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>activity_id</name> + <table>civicrm_activity</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + + <field> + <name>target_contact_id</name> + <title>Contact ID (match to contact)</title> + <import>true</import> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the contact for this target.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>target_contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + + <index> + <name>UI_activity_target_contact_id</name> + <fieldName>target_contact_id</fieldName> + <fieldName>activity_id</fieldName> + <unique>true</unique> + <add>2.0</add> + </index> +</table> diff --git a/civicrm/xml/schema/Activity/files.xml b/civicrm/xml/schema/Activity/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..7a5413c80d6af3c2d05ae52e4b867b65c433aec4 --- /dev/null +++ b/civicrm/xml/schema/Activity/files.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="Activity.xml" parse="xml" /> +<xi:include href="ActivityContact.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Batch/Batch.xml b/civicrm/xml/schema/Batch/Batch.xml new file mode 100644 index 0000000000000000000000000000000000000000..24fdbf4f6132daa921815cc77d3bc75bb7fe7bcd --- /dev/null +++ b/civicrm/xml/schema/Batch/Batch.xml @@ -0,0 +1,220 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Batch</base> + <class>Batch</class> + <name>civicrm_batch</name> + <comment>Stores the details of a batch operation Used primarily when doing batch operations with an external system.</comment> + <add>3.3</add> + <field> + <name>id</name> + <title>Batch ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique Address ID</comment> + <add>3.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Batch Name</title> + <type>varchar</type> + <length>64</length> + <comment>Variable name/programmatic handle for this batch.</comment> + <add>3.3</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>4.2</add> + </index> + <field> + <name>label</name> + <type>varchar</type> + <length>64</length> + <localizable>true</localizable> + <comment>Friendly Name.</comment> + <add>3.3</add> + <drop>4.2</drop> + </field> + <field> + <name>title</name> + <title>Batch Title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Friendly Name.</comment> + <add>4.2</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>description</name> + <title>Batch Description</title> + <type>text</type> + <comment>Description of this batch set.</comment> + <localizable>true</localizable> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>3.3</add> + </field> + <field> + <name>created_id</name> + <title>Batch Created By</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <title>Batch Created Date</title> + <type>datetime</type> + <comment>When was this item created</comment> + <add>3.3</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>modified_id</name> + <title>Batch Modified By</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>3.3</add> + </field> + <field> + <name>modified_date</name> + <title>Batch Modified Date</title> + <type>datetime</type> + <comment>When was this item created</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>modified_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>saved_search_id</name> + <title>Batch Smart Group</title> + <type>int unsigned</type> + <comment>FK to Saved Search ID</comment> + <add>4.1</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>saved_search_id</name> + <table>civicrm_saved_search</table> + <key>id</key> + <add>4.2</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>status_id</name> + <title>Batch Status</title> + <type>int unsigned</type> + <required>true</required> + <comment>fk to Batch Status options in civicrm_option_values</comment> + <add>4.2</add> + <pseudoconstant> + <optionGroupName>batch_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>type_id</name> + <title>Batch Type</title> + <type>int unsigned</type> + <comment>fk to Batch Type options in civicrm_option_values</comment> + <add>4.2</add> + <pseudoconstant> + <optionGroupName>batch_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>mode_id</name> + <title>Batch Mode</title> + <type>int unsigned</type> + <comment>fk to Batch mode options in civicrm_option_values</comment> + <add>4.2</add> + <pseudoconstant> + <optionGroupName>batch_mode</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>total</name> + <title>Batch Total</title> + <type>decimal</type> + <comment>Total amount for this batch.</comment> + <add>4.2</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>item_count</name> + <title>Batch Number of Items</title> + <type>int unsigned</type> + <comment>Number of items in a batch.</comment> + <add>4.2</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>payment_instrument_id</name> + <title>Batch Payment Method</title> + <type>int unsigned</type> + <comment>fk to Payment Instrument options in civicrm_option_values</comment> + <pseudoconstant> + <optionGroupName>payment_instrument</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.3</add> + </field> + <field> + <name>exported_date</name> + <title>Batch Exported Date</title> + <type>datetime</type> + <add>4.3</add> + </field> + <field> + <name>data</name> + <title>Batch Data</title> + <type>longtext</type> + <comment>cache entered data</comment> + <add>4.4</add> + </field> +</table> diff --git a/civicrm/xml/schema/Batch/EntityBatch.xml b/civicrm/xml/schema/Batch/EntityBatch.xml new file mode 100644 index 0000000000000000000000000000000000000000..462c40d1a71ed92702f1ff7cffb711469601a61a --- /dev/null +++ b/civicrm/xml/schema/Batch/EntityBatch.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Batch</base> + <class>EntityBatch</class> + <name>civicrm_entity_batch</name> + <comment>Batch entities (Contributions, Participants, Contacts) to a batch.</comment> + <field> + <name>id</name> + <title>EntityBatch ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>primary key</comment> + <add>3.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>EntityBatch Table</title> + <type>varchar</type> + <length>64</length> + <comment>physical tablename for entity being joined to file, e.g. civicrm_contact</comment> + <add>3.3</add> + </field> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to entity table specified in entity_table column.</comment> + <add>3.3</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>3.3</add> + </dynamicForeignKey> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>3.3</add> + </index> + <field> + <name>batch_id</name> + <title>Batch ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_batch</comment> + <pseudoconstant> + <table>civicrm_batch</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.3</add> + </field> + <foreignKey> + <name>batch_id</name> + <table>civicrm_batch</table> + <key>id</key> + <add>3.3</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_batch_entity</name> + <fieldName>batch_id</fieldName> + <fieldName>entity_id</fieldName> + <fieldName>entity_table</fieldName> + <unique>true</unique> + <add>3.3</add> + </index> +</table> diff --git a/civicrm/xml/schema/Batch/files.xml b/civicrm/xml/schema/Batch/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..2cf3e3c2785c79139b2d4c99c24d79a99e3c9c60 --- /dev/null +++ b/civicrm/xml/schema/Batch/files.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="Batch.xml" parse="xml" /> + <xi:include href="EntityBatch.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Bridge/OG.xml b/civicrm/xml/schema/Bridge/OG.xml new file mode 100644 index 0000000000000000000000000000000000000000..14256e1f4963e9d9922a702f5013651799d0eb36 --- /dev/null +++ b/civicrm/xml/schema/Bridge/OG.xml @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Bridge</base> + <class>OG</class> + <name>civicrm_bridge_og</name> + <comment>An FK table that links between drupal organic group, civicrm group and civicrm acl roles</comment> + <add>2.0</add> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Unique table ID</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>drupal_og_id</name> + <type>int unsigned</type> + <comment>Foreign key to the organic group.</comment> + <add>2.0</add> + </field> + <index> + <name>index_drupal_og_id</name> + <fieldName>index_drupal_og_id</fieldName> + <add>2.0</add> + </index> + <field> + <name>group_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm group.</comment> + <add>2.0</add> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>group_id</name> + <table>civicrm_group</table> + <key>id</key> + <add>2.0</add> + </foreignKey> + <field> + <name>acl_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm acl.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>acl_id</name> + <table>civicrm_acl</table> + <key>id</key> + <add>2.0</add> + </foreignKey> + <field> + <name>admin_group_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to admin civicrm group.</comment> + <add>2.0</add> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>admin_group_id</name> + <table>civicrm_group</table> + <key>id</key> + <add>2.0</add> + </foreignKey> + <field> + <name>admin_acl_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm acl.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>admin_acl_id</name> + <table>civicrm_acl</table> + <key>id</key> + <add>2.0</add> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Bridge/Role.xml b/civicrm/xml/schema/Bridge/Role.xml new file mode 100644 index 0000000000000000000000000000000000000000..52f01cde2aa491a11b6502083509d46ec71e3697 --- /dev/null +++ b/civicrm/xml/schema/Bridge/Role.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Bridge</base> + <class>Role</class> + <name>civicrm_bridge_role</name> + <comment>An FK table that links between civicrm group and drupal roles</comment> + <add>2.0</add> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Unique table ID</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>drupal_role_id</name> + <type>int unsigned</type> + <comment>Foreign key to the drupal role.</comment> + <add>2.0</add> + </field> + <index> + <name>index_drupal_role_id</name> + <fieldName>index_drupal_role_id</fieldName> + <add>2.0</add> + </index> + <field> + <name>group_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm group.</comment> + <add>2.0</add> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>group_id</name> + <table>civicrm_group</table> + <key>id</key> + <add>2.0</add> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Bridge/files.xml b/civicrm/xml/schema/Bridge/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..d6ce987b2d5b161bba7f5ec87c5d842a36085906 --- /dev/null +++ b/civicrm/xml/schema/Bridge/files.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="OG.xml" parse="xml" /> +<xi:include href="Role.xml" parse="xml" /> + +</tables> diff --git a/civicrm/xml/schema/Campaign/Campaign.xml b/civicrm/xml/schema/Campaign/Campaign.xml new file mode 100644 index 0000000000000000000000000000000000000000..da4ec8cbb073ac9872b0409bac7504a324889899 --- /dev/null +++ b/civicrm/xml/schema/Campaign/Campaign.xml @@ -0,0 +1,251 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Campaign</base> + <class>Campaign</class> + <name>civicrm_campaign</name> + <comment>Campaign Details.</comment> + <add>3.3</add> + + <field> + <name>id</name> + <title>Campaign ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique Campaign ID.</comment> + <import>true</import> + <add>3.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + + <field> + <name>name</name> + <title>Campaign Name</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <comment>Name of the Campaign.</comment> + <import>true</import> + <html> + <type>Text</type> + </html> + <add>3.3</add> + </field> + + <field> + <name>title</name> + <title>Campaign Title</title> + <type>varchar</type> + <length>255</length> + <comment>Title of the Campaign.</comment> + <import>true</import> + <html> + <type>Text</type> + </html> + <add>3.3</add> + </field> + + <field> + <name>description</name> + <title>Campaign Description</title> + <type>text</type> + <html> + <type>TextArea</type> + <rows>8</rows> + <cols>60</cols> + </html> + <comment>Full description of Campaign.</comment> + <add>3.3</add> + </field> + + <field> + <name>start_date</name> + <title>Campaign Start Date</title> + <type>datetime</type> + <headerPattern>/^start|(s(tart\s)?date)$/i</headerPattern> + <comment>Date and time that Campaign starts.</comment> + <import>true</import> + <html> + <type>Select Date</type> + </html> + <add>3.3</add> + </field> + + <field> + <name>end_date</name> + <title>Campaign End Date</title> + <type>datetime</type> + <headerPattern>/^end|(e(nd\s)?date)$/i</headerPattern> + <comment>Date and time that Campaign ends.</comment> + <import>true</import> + <html> + <type>Select Date</type> + </html> + <add>3.3</add> + </field> + + <field> + <name>campaign_type_id</name> + <title>Campaign Type</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Campaign Type ID.Implicit FK to civicrm_option_value where option_group = campaign_type</comment> + <import>true</import> + <pseudoconstant> + <optionGroupName>campaign_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>3.3</add> + </field> + <index> + <name>UI_campaign_type_id</name> + <fieldName>campaign_type_id</fieldName> + <add>3.3</add> + </index> + + <field> + <name>status_id</name> + <title>Campaign Status</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Campaign status ID.Implicit FK to civicrm_option_value where option_group = campaign_status</comment> + <import>true</import> + <pseudoconstant> + <optionGroupName>campaign_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>3.3</add> + </field> + <index> + <name>UI_campaign_status_id</name> + <fieldName>status_id</fieldName> + <add>3.3</add> + </index> + + <field> + <name>external_identifier</name> + <type>varchar</type> + <title>Campaign External ID</title> + <length>32</length> + <headerPattern>/external\s?id/i</headerPattern> + <dataPattern>/^\d{11,}$/</dataPattern> + <comment>Unique trusted external ID (generally from a legacy app/datasource). Particularly useful for deduping operations.</comment> + <import>true</import> + <add>3.3</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>UI_external_identifier</name> + <unique>true</unique> + <fieldName>external_identifier</fieldName> + <add>3.3</add> + </index> + + <field> + <name>parent_id</name> + <title>Parent Campaign</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Optional parent id for this Campaign.</comment> + <import>true</import> + <add>3.3</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>parent_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + + <field> + <name>is_active</name> + <title>Is Campaign Active?</title> + <type>boolean</type> + <default>1</default> + <comment>Is this Campaign enabled or disabled/cancelled?</comment> + <add>3.3</add> + <html> + <type>CheckBox</type> + </html> + </field> + + <field> + <name>created_id</name> + <type>int unsigned</type> + <title>Campaign Created By</title> + <comment>FK to civicrm_contact, who created this Campaign.</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + + <field> + <name>created_date</name> + <type>datetime</type> + <title>Campaign Created Date</title> + <comment>Date and time that Campaign was created.</comment> + <add>3.3</add> + <html> + <type>Select Date</type> + </html> + </field> + + <field> + <name>last_modified_id</name> + <type>int unsigned</type> + <title>Campaign Modified By</title> + <comment>FK to civicrm_contact, who recently edited this Campaign.</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>last_modified_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + + <field> + <name>last_modified_date</name> + <type>datetime</type> + <title>Campaign Modified Date</title> + <comment>Date and time that Campaign was edited last time.</comment> + <add>3.3</add> + </field> + <field> + <name>goal_general</name> + <type>text</type> + <title>Campaign Goals</title> + <comment>General goals for Campaign.</comment> + <add>3.4</add> + <html> + <type>RichTextEditor</type> + </html> + </field> + <field> + <name>goal_revenue</name> + <type>decimal</type> + <comment>The target revenue for this campaign.</comment> + <add>3.4</add> + <html> + <type>Text</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Campaign/CampaignGroup.xml b/civicrm/xml/schema/Campaign/CampaignGroup.xml new file mode 100644 index 0000000000000000000000000000000000000000..dda4c7dc8046dabdcf504d942b8609d36cddac84 --- /dev/null +++ b/civicrm/xml/schema/Campaign/CampaignGroup.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Campaign</base> + <class>CampaignGroup</class> + <name>civicrm_campaign_group</name> + <comment>Campaign Group Details.</comment> + <add>3.3</add> + + <field> + <name>id</name> + <title>Campaign Group ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Campaign Group id.</comment> + <add>3.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + + <field> + <name>campaign_id</name> + <title>Campaign</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the activity Campaign.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.3</add> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <add>3.3</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + + <field> + <name>group_type</name> + <title>Campaign Group Type</title> + <type>varchar</type> + <length>8</length> + <default>NULL</default> + <comment>Type of Group.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getCampaignGroupTypes</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <default>NULL</default> + <comment>Name of table where item being referenced is stored.</comment> + <add>3.3</add> + </field> + + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Entity id of referenced table.</comment> + <add>3.3</add> + </field> + + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>3.3</add> + </dynamicForeignKey> +</table> diff --git a/civicrm/xml/schema/Campaign/Survey.xml b/civicrm/xml/schema/Campaign/Survey.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e810ccb85e2937841c1960f27f7d734e2de6bbd --- /dev/null +++ b/civicrm/xml/schema/Campaign/Survey.xml @@ -0,0 +1,240 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Campaign</base> + <class>Survey</class> + <name>civicrm_survey</name> + <comment>Campaign Survey Details.</comment> + <add>3.2</add> + + <field> + <name>id</name> + <title>Survey ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Survey id.</comment> + <add>3.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + + <field> + <name>title</name> + <title>Survey Title</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <localizable>true</localizable> + <comment>Title of the Survey.</comment> + <import>true</import> + <add>3.3</add> + </field> + + <field> + <name>campaign_id</name> + <title>Survey Campaign ID</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Foreign key to the Campaign.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.3</add> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + + <field> + <name>activity_type_id</name> + <title>Activity Type</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Implicit FK to civicrm_option_value where option_group = activity_type</comment> + <import>true</import> + <add>3.3</add> + <pseudoconstant> + <optionGroupName>activity_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>UI_activity_type_id</name> + <fieldName>activity_type_id</fieldName> + <add>3.3</add> + </index> + + <field> + <name>recontact_interval</name> + <title>Follow up Interval</title> + <type>text</type> + <comment>Recontact intervals for each status.</comment> + <html> + <type>TextArea</type> + <rows>20</rows> + <cols>80</cols> + </html> + <add>3.3</add> + </field> + + <field> + <name>instructions</name> + <title>Instructions</title> + <type>text</type> + <localizable>true</localizable> + <comment>Script instructions for volunteers to use for the survey.</comment> + <html> + <type>TextArea</type> + <rows>20</rows> + <cols>80</cols> + </html> + <add>3.3</add> + </field> + + <field> + <name>release_frequency</name> + <title>Survey Hold Duration</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Number of days for recurrence of release.</comment> + <add>3.3</add> + </field> + + <field> + <name>max_number_of_contacts</name> + <title>Maximum number of contacts</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Maximum number of contacts to allow for survey.</comment> + <add>3.3</add> + </field> + + <field> + <name>default_number_of_contacts</name> + <title>Default number of contacts</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Default number of contacts to allow for survey.</comment> + <add>3.3</add> + </field> + + <field> + <name>is_active</name> + <title>Survey Is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this survey enabled or disabled/cancelled?</comment> + <add>3.3</add> + </field> + + <field> + <name>is_default</name> + <title>Is Default Survey</title> + <type>boolean</type> + <default>0</default> + <comment>Is this default survey?</comment> + <add>3.3</add> + </field> + + <field> + <name>created_id</name> + <title>Survey Created By</title> + <type>int unsigned</type> + <comment>FK to civicrm_contact, who created this Survey.</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + + <field> + <name>created_date</name> + <type>datetime</type> + <title>Campaign Created Date</title> + <comment>Date and time that Survey was created.</comment> + <add>3.3</add> + </field> + + <field> + <name>last_modified_id</name> + <title>Survey Modified</title> + <type>int unsigned</type> + <comment>FK to civicrm_contact, who recently edited this Survey.</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>last_modified_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + + <field> + <name>last_modified_date</name> + <title>Survey Modified On</title> + <type>datetime</type> + <comment>Date and time that Survey was edited last time.</comment> + <add>3.3</add> + </field> + + <field> + <name>result_id</name> + <title>Survey Result</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Used to store option group id.</comment> + <add>3.3</add> + </field> + <field> + <name>bypass_confirm</name> + <title>No Email Verification</title> + <type>boolean</type> + <default>0</default> + <comment>Bypass the email verification.</comment> + <add>4.2</add> + </field> + <field> + <name>thankyou_title</name> + <title>Thank-you Title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Title for Thank-you page (header title tag, and display at the top of the page).</comment> + <add>4.2</add> + </field> + <field> + <name>thankyou_text</name> + <title>Thank-you Text</title> + <type>text</type> + <html> + <type>TextArea</type> + <rows>8</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>text and html allowed. displayed above result on success page</comment> + <add>4.2</add> + </field> + <field> + <name>is_share</name> + <title>Is shared through social media</title> + <type>boolean</type> + <default>1</default> + <comment>Can people share the petition through social media?</comment> + <add>4.4</add> + </field> +</table> diff --git a/civicrm/xml/schema/Campaign/files.xml b/civicrm/xml/schema/Campaign/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..25f8cce5fde9947d13bec064997aca655a34d708 --- /dev/null +++ b/civicrm/xml/schema/Campaign/files.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="Campaign.xml" parse="xml" /> +<xi:include href="CampaignGroup.xml" parse="xml" /> +<xi:include href="Survey.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Case/Case.xml b/civicrm/xml/schema/Case/Case.xml new file mode 100644 index 0000000000000000000000000000000000000000..beeaaa98741380951611ebb65a49f13b193f20f6 --- /dev/null +++ b/civicrm/xml/schema/Case/Case.xml @@ -0,0 +1,214 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Case</base> + <class>Case</class> + <name>civicrm_case</name> + <comment>This table stores information about cases grouping activities.</comment> + <add>1.8</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <uniqueName>case_id</uniqueName> + <required>true</required> + <import>true</import> + <title>Case ID</title> + <comment>Unique Case ID</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <uniqueName>case_contact_id</uniqueName> + <required>true</required> + <comment>Contact ID of contact record given case belongs to.</comment> + <add>1.8</add> + <drop>2.1</drop> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.8</add> + <drop>2.1</drop> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>case_type_id</name> + <type>int unsigned</type> + <import>true</import> + <export>false</export> + <title>Case Type</title> + <required>true</required> + <comment>FK to civicrm_case_type.id</comment> + <html> + <type>Select</type> + </html> + <pseudoconstant> + <table>civicrm_case_type</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>2.0</add> + </field> + <index> + <name>index_case_type_id</name> + <fieldName>case_type_id</fieldName> + <add>2.0</add> + </index> + <foreignKey> + <name>case_type_id</name> + <table>civicrm_case_type</table> + <key>id</key> + <add>4.5</add> + </foreignKey> + <field> + <name>casetag1_id</name> + <type>varchar</type> + <length>128</length> + <required>true</required> + <comment>Id of first case category.</comment> + <add>1.8</add> + <drop>2.0</drop> + </field> + <index> + <name>index_casetag1_id</name> + <fieldName>casetag1_id</fieldName> + <add>1.8</add> + <drop>2.0</drop> + </index> + <field> + <name>casetag2_id</name> + <type>varchar</type> + <length>128</length> + <required>true</required> + <comment>Id of second case category.</comment> + <add>1.8</add> + <drop>2.0</drop> + </field> + <index> + <name>index_casetag2_id</name> + <fieldName>casetag2_id</fieldName> + <add>1.8</add> + <drop>2.0</drop> + </index> + <field> + <name>casetag3_id</name> + <type>varchar</type> + <length>128</length> + <required>true</required> + <comment>Id of third case category.</comment> + <add>1.8</add> + <drop>2.0</drop> + </field> + <index> + <name>index_casetag3_id</name> + <fieldName>casetag3_id</fieldName> + <add>1.8</add> + <drop>2.0</drop> + </index> + <field> + <name>subject</name> + <type>varchar</type> + <length>128</length> + <title>Case Subject</title> + <import>true</import> + <uniqueName>case_subject</uniqueName> + <comment>Short name of the case.</comment> + <html> + <type>Text</type> + </html> + <add>1.8</add> + </field> + <field> + <name>start_date</name> + <uniqueName>case_start_date</uniqueName> + <title>Case Start Date</title> + <import>true</import> + <type>date</type> + <comment>Date on which given case starts.</comment> + <html> + <type>Select Date</type> + </html> + <add>1.8</add> + </field> + <field> + <name>end_date</name> + <uniqueName>case_end_date</uniqueName> + <title>Case End Date</title> + <import>true</import> + <type>date</type> + <comment>Date on which given case ends.</comment> + <html> + <type>Select Date</type> + </html> + <add>1.8</add> + </field> + <field> + <name>details</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>8</rows> + <cols>60</cols> + </html> + <comment>Details about the meeting (agenda, notes, etc).</comment> + <add>1.8</add> + </field> + <field> + <name>status_id</name> + <type>int unsigned</type> + <uniqueName>case_status_id</uniqueName> + <required>true</required> + <import>true</import> + <export>false</export> + <title>Case Status</title> + <comment>Id of case status.</comment> + <pseudoconstant> + <optionGroupName>case_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.8</add> + </field> + <field> + <name>is_deleted</name> + <title>Case is in the Trash</title> + <uniqueName>case_deleted</uniqueName> + <type>boolean</type> + <default>0</default> + <import>true</import> + <title>Case Deleted</title> + <add>2.2</add> + </field> + <index> + <name>index_is_deleted</name> + <fieldName>is_deleted</fieldName> + <add>2.2</add> + </index> + <field> + <name>created_date</name> + <uniqueName>case_created_date</uniqueName> + <type>timestamp</type> + <comment>When was the case was created.</comment> + <required>false</required> + <export>true</export> + <default>NULL</default> + <add>4.7</add> + </field> + <field> + <name>modified_date</name> + <uniqueName>case_modified_date</uniqueName> + <type>timestamp</type> + <comment>When was the case (or closely related entity) was created or modified or deleted.</comment> + <required>false</required> + <export>true</export> + <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Case/CaseActivity.xml b/civicrm/xml/schema/Case/CaseActivity.xml new file mode 100644 index 0000000000000000000000000000000000000000..0ae6710e4d74324c7fb318185775507cec00e5e4 --- /dev/null +++ b/civicrm/xml/schema/Case/CaseActivity.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Case</base> + <class>CaseActivity</class> + <name>civicrm_case_activity</name> + <comment>Joining table for case-activity associations.</comment> + <add>1.8</add> + <log>true</log> + <field> + <name>id</name> + <title>Case Activity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique case-activity association id</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>case_id</name> + <title>Case</title> + <type>int unsigned</type> + <required>true</required> + <comment>Case ID of case-activity association.</comment> + <add>1.8</add> + </field> + <foreignKey> + <name>case_id</name> + <table>civicrm_case</table> + <key>id</key> + <add>1.8</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>activity_id</name> + <title>Activity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Activity ID of case-activity association.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>activity_id</name> + <table>civicrm_activity</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_case_activity_id</name> + <fieldName>case_id</fieldName> + <fieldName>activity_id</fieldName> + <add>2.0</add> + </index> + + <field> + <name>activity_entity_table</name> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name of table where item being referenced is stored (activity, phonecall or meeting).</comment> + <add>1.8</add> + <drop>2.0</drop> + </field> + + <field> + <name>activity_entity_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Entity (activity, phonecall or meeting) id for which the assigment is created</comment> + <add>1.8</add> + <drop>2.0</drop> + </field> + + <dynamicForeignKey> + <idColumn>activity_entity_id</idColumn> + <typeColumn>activity_entity_table</typeColumn> + <add>1.8</add> + <drop>2.0</drop> + </dynamicForeignKey> + +</table> diff --git a/civicrm/xml/schema/Case/CaseContact.xml b/civicrm/xml/schema/Case/CaseContact.xml new file mode 100644 index 0000000000000000000000000000000000000000..f4ae08f187057818e9da408d2394218b82135403 --- /dev/null +++ b/civicrm/xml/schema/Case/CaseContact.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Case</base> + <class>CaseContact</class> + <name>civicrm_case_contact</name> + <comment>Joining table for case-contact associations.</comment> + <add>2.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Case Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique case-contact association id</comment> + <add>2.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>case_id</name> + <title>Case</title> + <type>int unsigned</type> + <required>true</required> + <comment>Case ID of case-contact association.</comment> + <add>2.1</add> + </field> + <foreignKey> + <name>case_id</name> + <table>civicrm_case</table> + <key>id</key> + <add>2.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Contact ID of contact record given case belongs to.</comment> + <html> + <type>EntityRef</type> + </html> + <add>2.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_case_contact_id</name> + <fieldName>case_id</fieldName> + <fieldName>contact_id</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Case/CaseType.xml b/civicrm/xml/schema/Case/CaseType.xml new file mode 100644 index 0000000000000000000000000000000000000000..8af587a5b5044501cc56d12fb05d46ee22467ce7 --- /dev/null +++ b/civicrm/xml/schema/Case/CaseType.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Case</base> + <class>CaseType</class> + <name>civicrm_case_type</name> + <comment>Case type definition</comment> + <add>4.5</add> + <log>true</log> + <field> + <name>id</name> + <title>Case Type ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Autoincremented type id</comment> + <add>4.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Case Type Name</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Machine name for Case Type</comment> + <add>4.5</add> + </field> + <index> + <name>case_type_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>4.5</add> + </index> + <field> + <name>title</name> + <title>Case Type Title</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <localizable>true</localizable> + <comment>Natural language name for Case Type</comment> + <add>4.5</add> + </field> + <field> + <name>description</name> + <title>Case Type Description</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Description of the Case Type</comment> + <add>4.5</add> + </field> + <field> + <name>is_active</name> + <title>Case Type Is Active</title> + <type>boolean</type> + <comment>Is this entry active?</comment> + <add>4.5</add> + </field> + <field> + <name>is_reserved</name> + <title>Case Type Is Reserved</title> + <type>boolean</type> + <comment>Is this case type a predefined system type?</comment> + <add>4.5</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <required>true</required> + <default>1</default> + <comment>Ordering of the case types</comment> + <add>4.5</add> + </field> + <field> + <name>definition</name> + <title>Case Type Definition</title> + <type>blob</type> + <comment>xml definition of case type</comment> + <add>4.5</add> + </field> +</table> diff --git a/civicrm/xml/schema/Case/files.xml b/civicrm/xml/schema/Case/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..ab66c820314c0eff29921365675d8aa7e94f009a --- /dev/null +++ b/civicrm/xml/schema/Case/files.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="Case.xml" parse="xml" /> +<xi:include href="CaseActivity.xml" parse="xml" /> +<xi:include href="CaseContact.xml" parse="xml" /> +<xi:include href="CaseType.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Contact/ACLContactCache.xml b/civicrm/xml/schema/Contact/ACLContactCache.xml new file mode 100644 index 0000000000000000000000000000000000000000..d544de405067fefcaf75127d2decc823ecdcc0b1 --- /dev/null +++ b/civicrm/xml/schema/Contact/ACLContactCache.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>ACLContactCache</class> + <name>civicrm_acl_contact_cache</name> + <comment>Join table cache for contacts that a user has permission on.</comment> + <add>3.1</add> + <field> + <name>id</name> + <title>ACL Contact Cache ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>primary key</comment> + <add>3.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>user_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <comment>FK to civicrm_contact (could be null for anon user)</comment> + <add>3.1</add> + </field> + <foreignKey> + <name>user_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_contact</comment> + <add>3.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>operation</name> + <title>Operation</title> + <type>varchar</type> + <length>8</length> + <required>true</required> + <comment>What operation does this user have permission on?</comment> + <pseudoconstant> + <callback>CRM_ACL_BAO_ACL::operation</callback> + </pseudoconstant> + <add>1.6</add> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>UI_user_contact_operation</name> + <fieldName>user_id</fieldName> + <fieldName>contact_id</fieldName> + <fieldName>operation</fieldName> + <unique>true</unique> + <add>3.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Contact/Contact.xml b/civicrm/xml/schema/Contact/Contact.xml new file mode 100644 index 0000000000000000000000000000000000000000..cfc14f5bd1367e616be40480647b47dd7bbc9a1f --- /dev/null +++ b/civicrm/xml/schema/Contact/Contact.xml @@ -0,0 +1,884 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>Contact</class> + <name>civicrm_contact</name> + <comment>Contact objects are defined by a civicrm_contact record plus a related civicrm_contact_type record.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Contact ID</title> + <import>true</import> + <headerPattern>/internal|contact?|id$/i</headerPattern> + <required>true</required> + <comment>Unique Contact ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_type</name> + <title>Contact Type</title> + <type>varchar</type> + <length>64</length> + <comment>Type of Contact.</comment> + <export>true</export> + <pseudoconstant> + <table>civicrm_contact_type</table> + <keyColumn>name</keyColumn> + <labelColumn>label</labelColumn> + <condition>parent_id IS NULL</condition> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.1</add> + <change>3.1</change> + </field> + <index> + <name>index_contact_type</name> + <fieldName>contact_type</fieldName> + <add>2.1</add> + </index> + <field> + <name>contact_sub_type</name> + <title>Contact Subtype</title> + <type>varchar</type> + <length>255</length> + <export>true</export> + <import>true</import> + <headerPattern>/C(ontact )?(subtype|sub-type|sub type)/i</headerPattern> + <comment>May be used to over-ride contact view and edit templates.</comment> + <pseudoconstant> + <table>civicrm_contact_type</table> + <keyColumn>name</keyColumn> + <labelColumn>label</labelColumn> + <condition>parent_id IS NOT NULL</condition> + </pseudoconstant> + <html> + <type>Select</type> + <multiple>1</multiple> + </html> + <serialize>SEPARATOR_BOOKEND</serialize> + <add>1.5</add> + </field> + <index> + <name>index_contact_sub_type</name> + <fieldName>contact_sub_type</fieldName> + <add>2.1</add> + </index> + <field> + <name>do_not_email</name> + <type>boolean</type> + <import>true</import> + <headerPattern>/d(o )?(not )?(email)/i</headerPattern> + <dataPattern>/^\d{1,}$/</dataPattern> + <default>0</default> + <html> + <type>CheckBox</type> + </html> + <add>1.1</add> + </field> + <field> + <name>do_not_phone</name> + <type>boolean</type> + <default>0</default> + <import>true</import> + <headerPattern>/d(o )?(not )?(call|phone)/i</headerPattern> + <dataPattern>/^\d{1,}$/</dataPattern> + <add>1.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>do_not_mail</name> + <type>boolean</type> + <import>true</import> + <headerPattern>/^(d(o\s)?n(ot\s)?mail)|(\w*)?bulk\s?(\w*)$/i</headerPattern> + <dataPattern>/^\d{1,}$/</dataPattern> + <default>0</default> + <add>1.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>do_not_sms</name> + <type>boolean</type> + <import>true</import> + <headerPattern>/d(o )?(not )?(sms)/i</headerPattern> + <dataPattern>/^\d{1,}$/</dataPattern> + <default>0</default> + <add>3.0</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>do_not_trade</name> + <type>boolean</type> + <import>true</import> + <headerPattern>/d(o )?(not )?(trade)/i</headerPattern> + <dataPattern>/^\d{1,}$/</dataPattern> + <default>0</default> + <add>1.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_opt_out</name> + <type>boolean</type> + <title>No Bulk Emails (User Opt Out)</title> + <default>0</default> + <import>true</import> + <required>true</required> + <comment>Has the contact opted out from receiving all bulk email from the organization or site domain?</comment> + <add>1.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>legal_identifier</name> + <type>varchar</type> + <length>32</length> + <import>true</import> + <headerPattern>/legal\s?id/i</headerPattern> + <dataPattern>/\w+?\d{5,}/</dataPattern> + <comment>May be used for SSN, EIN/TIN, Household ID (census) or other applicable unique legal/government ID. + </comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>external_identifier</name> + <type>varchar</type> + <length>64</length> + <html> + <type>Text</type> + <size>8</size> + </html> + + <import>true</import> + <headerPattern>/external\s?id/i</headerPattern> + <dataPattern>/^\d{11,}$/</dataPattern> + <comment>Unique trusted external ID (generally from a legacy app/datasource). Particularly useful for deduping operations.</comment> + <add>1.1</add> + </field> + <index> + <name>UI_external_identifier</name> + <unique>true</unique> + <fieldName>external_identifier</fieldName> + <add>1.7</add> + </index> + <field> + <name>sort_name</name> + <title>Sort Name</title> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + <size>30</size> + </html> + + <export>true</export> + <comment>Name used for sorting different contact types</comment> + <add>1.1</add> + </field> + <index> + <name>index_sort_name</name> + <fieldName>sort_name</fieldName> + <add>2.1</add> + </index> + <field> + <name>display_name</name> + <title>Display Name</title> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + <size>30</size> + </html> + + <export>true</export> + <comment>Formatted name representing preferred format for display/print/other output.</comment> + <add>1.1</add> + </field> + <field> + <name>nick_name</name> + <title>Nickname</title> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + <size>30</size> + </html> + + <import>true</import> + <headerPattern>/n(ick\s)name|nick$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <comment>Nickname.</comment> + <fulltext/> + <add>1.1</add> + </field> + <field> + <name>legal_name</name> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + <size>30</size> + </html> + + <import>true</import> + <headerPattern>/^legal|(l(egal\s)?name)$/i</headerPattern> + <comment>Legal Name.</comment> + <fulltext/> + <add>1.1</add> + </field> + <field> + <name>home_URL</name> + <rule>url</rule> + <title>Website</title> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + <size>30</size> + </html> + + <import>true</import> + <headerPattern>/^(home\sURL)|URL|web|site/i</headerPattern> + <dataPattern>/^[\w\/\:\.]+$/</dataPattern> + <comment>optional "home page" URL for this contact.</comment> + <add>1.1</add> + <drop>3.2</drop> + </field> + <field> + <name>image_URL</name> + <type>text</type> + <import>true</import> + <comment>optional URL for preferred image (photo, logo, etc.) to display for this contact.</comment> + <add>1.1</add> + <html> + <type>File</type> + <size>30</size> + </html> + </field> + <field> + <name>preferred_communication_method</name> + <title>Preferred Communication Method</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/^p(ref\w*\s)?c(omm\w*)|( meth\w*)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <comment>What is the preferred mode of communication.</comment> + <add>1.1</add> + <pseudoconstant> + <optionGroupName>preferred_communication_method</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + <multiple>1</multiple> + </html> + <serialize>SEPARATOR_BOOKEND</serialize> + </field> + <index> + <name>index_preferred_communication_method</name> + <fieldName>preferred_communication_method</fieldName> + <add>1.6</add> + </index> + <field> + <name>preferred_language</name> + <title>Preferred Language</title> + <type>varchar</type> + <length>5</length> + <comment>Which language is preferred for communication. FK to languages in civicrm_option_value.</comment> + <headerPattern>/^lang/i</headerPattern> + <import>true</import> + <pseudoconstant> + <optionGroupName>languages</optionGroupName> + <keyColumn>name</keyColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>3.2</add> + </field> + <field> + <name>preferred_mail_format</name> + <type>varchar</type> + <length>8</length> + <default>"Both"</default> + <import>true</import> + <headerPattern>/^p(ref\w*\s)?m(ail\s)?f(orm\w*)$/i</headerPattern> + <comment>What is the preferred mode of sending an email.</comment> + <add>1.1</add> + <pseudoconstant> + <callback>CRM_Core_SelectValues::pmf</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>hash</name> + <title>Contact Hash</title> + <type>varchar</type> + <length>32</length> + <comment>Key for validating requests related to this contact.</comment> + <add>1.1</add> + <change>1.5</change> + <export>true</export> + </field> + <index> + <name>index_hash</name> + <fieldName>hash</fieldName> + <add>2.1</add> + </index> + <field> + <name>api_key</name> + <type>varchar</type> + <length>32</length> + <comment>API Key for validating requests related to this contact.</comment> + <add>2.2</add> + </field> + <index> + <name>index_api_key</name> + <fieldName>api_key</fieldName> + <add>2.1</add> + </index> + <field> + <name>source</name> + <title>Contact Source</title> + <uniqueName>contact_source</uniqueName> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + <size>30</size> + </html> + + <import>true</import> + <headerPattern>/(C(ontact\s)?Source)$/i</headerPattern> + <comment>where contact come from, e.g. import, donate module insert...</comment> + <add>1.1</add> + </field> + <field> + <name>first_name</name> + <type>varchar</type> + <length>64</length> + <html> + <type>Text</type> + <size>30</size> + </html> + <import>true</import> + <headerPattern>/^first|(f(irst\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <fulltext/> + <comment>First Name.</comment> + <add>1.1</add> + </field> + <index> + <name>index_first_name</name> + <fieldName>first_name</fieldName> + <add>1.8</add> + </index> + <field> + <name>middle_name</name> + <type>varchar</type> + <length>64</length> + <html> + <type>Text</type> + <size>30</size> + </html> + <import>true</import> + <headerPattern>/^middle|(m(iddle\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <fulltext/> + <comment>Middle Name.</comment> + <add>1.1</add> + </field> + <field> + <name>last_name</name> + <type>varchar</type> + <length>64</length> + <html> + <type>Text</type> + <size>30</size> + </html> + <import>true</import> + <headerPattern>/^last|(l(ast\s)?name)$/i</headerPattern> + <dataPattern>/^\w+(\s\w+)?+$/</dataPattern> + <comment>Last Name.</comment> + <fulltext/> + <add>1.1</add> + </field> + <index> + <name>index_last_name</name> + <fieldName>last_name</fieldName> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </index> + <field> + <name>prefix_id</name> + <title>Individual Prefix</title> + <type>int unsigned</type> + <comment>Prefix or Title for name (Ms, Mr...). FK to prefix ID</comment> + <pseudoconstant> + <optionGroupName>individual_prefix</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <headerPattern>/^(prefix|title)/i</headerPattern> + <dataPattern>/^(mr|ms|mrs|sir|dr)\.?$/i</dataPattern> + <import>true</import> + <add>1.2</add> + </field> + <index> + <name>UI_prefix</name> + <fieldName>prefix_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>suffix_id</name> + <title>Individual Suffix</title> + <type>int unsigned</type> + <pseudoconstant> + <optionGroupName>individual_suffix</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <import>true</import> + <comment>Suffix for name (Jr, Sr...). FK to suffix ID</comment> + <headerPattern>/^suffix$/i</headerPattern> + <dataPattern>/^(sr|jr)\.?|i{2,}$/</dataPattern> + <add>1.2</add> + </field> + <index> + <name>UI_suffix</name> + <fieldName>suffix_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>formal_title</name> + <type>varchar</type> + <length>64</length> + <import>true</import> + <html> + <type>Text</type> + </html> + <headerPattern>/^title/i</headerPattern> + <comment>Formal (academic or similar) title in front of name. (Prof., Dr. etc.)</comment> + <add>4.5</add> + </field> + <field> + <name>communication_style_id</name> + <title>Communication Style</title> + <type>int unsigned</type> + <pseudoconstant> + <optionGroupName>communication_style</optionGroupName> + </pseudoconstant> + <export>true</export> + <comment>Communication style (e.g. formal vs. familiar) to use with this contact. FK to communication styles in civicrm_option_value.</comment> + <add>4.4</add> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>index_communication_style_id</name> + <fieldName>communication_style_id</fieldName> + <add>4.4</add> + </index> + <field> + <name>greeting_type</name> + <type>varchar</type> + <length>128</length> + <import>true</import> + <comment>Preferred greeting format.</comment> + <add>1.1</add> + <drop>2.2</drop> + </field> + <field> + <name>greeting_type_id</name> + <title>Greeting Type</title> + <type>int unsigned</type> + <comment>FK to civicrm_option_value.id, that has to be valid, registered Greeting type.</comment> + <add>2.2</add> + <drop>3.0</drop> + </field> + <field> + <name>custom_greeting</name> + <type>varchar</type> + <length>128</length> + <import>true</import> + <comment>Custom greeting message.</comment> + <add>1.1</add> + <drop>3.0</drop> + </field> + <field> + <name>email_greeting_id</name> + <type>int unsigned</type> + <title>Email Greeting ID</title> + <export>true</export> + <comment>FK to civicrm_option_value.id, that has to be valid registered Email Greeting.</comment> + <add>3.0</add> + <pseudoconstant> + <optionGroupName>email_greeting</optionGroupName> + </pseudoconstant> + </field> + <field> + <name>email_greeting_custom</name> + <type>varchar</type> + <length>128</length> + <import>true</import> + <export>false</export> + <comment>Custom Email Greeting.</comment> + <add>3.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>email_greeting_display</name> + <title>Email Greeting</title> + <type>varchar</type> + <length>255</length> + <comment>Cache Email Greeting.</comment> + <add>3.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>postal_greeting_id</name> + <type>int unsigned</type> + <title>Postal Greeting ID</title> + <export>true</export> + <comment>FK to civicrm_option_value.id, that has to be valid registered Postal Greeting.</comment> + <add>3.0</add> + <html> + <type>Text</type> + </html> + <pseudoconstant> + <optionGroupName>postal_greeting</optionGroupName> + </pseudoconstant> + </field> + <field> + <name>postal_greeting_custom</name> + <type>varchar</type> + <length>128</length> + <import>true</import> + <export>false</export> + <comment>Custom Postal greeting.</comment> + <add>3.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>postal_greeting_display</name> + <title>Postal Greeting</title> + <type>varchar</type> + <length>255</length> + <comment>Cache Postal greeting.</comment> + <add>3.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>addressee_id</name> + <type>int unsigned</type> + <title>Addressee ID</title> + <comment>FK to civicrm_option_value.id, that has to be valid registered Addressee.</comment> + <add>3.0</add> + <export>true</export> + <pseudoconstant> + <optionGroupName>addressee</optionGroupName> + </pseudoconstant> + </field> + <field> + <name>addressee_custom</name> + <type>varchar</type> + <length>128</length> + <import>true</import> + <export>false</export> + <comment>Custom Addressee.</comment> + <add>3.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>addressee_display</name> + <title>Addressee</title> + <type>varchar</type> + <length>255</length> + <comment>Cache Addressee.</comment> + <add>3.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>job_title</name> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + <size>30</size> + </html> + <import>true</import> + <headerPattern>/^job|(j(ob\s)?title)$/i</headerPattern> + <dataPattern>//</dataPattern> + <comment>Job Title</comment> + <add>1.1</add> + </field> + <field> + <name>gender_id</name> + <title>Gender</title> + <type>int unsigned</type> + <pseudoconstant> + <optionGroupName>gender</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <headerPattern>/^gender$/i</headerPattern> + <comment>FK to gender ID</comment> + <import>true</import> + <add>1.2</add> + </field> + <index> + <name>UI_gender</name> + <fieldName>gender_id</fieldName> + <add>1.6</add> + <html> + <type>Select</type> + </html> + </index> + <field> + <name>birth_date</name> + <type>date</type> + <import>true</import> + <headerPattern>/^birth|(b(irth\s)?date)|D(\W*)O(\W*)B(\W*)$/i</headerPattern> + <dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern> + <comment>Date of birth</comment> + <add>1.1</add> + <html> + <type>Select Date</type> + <formatType>birth</formatType> + </html> + </field> + <field> + <name>is_deceased</name> + <title>Deceased</title> + <import>true</import> + <export>true</export> + <headerPattern>/i(s\s)?d(eceased)$/i</headerPattern> + <type>boolean</type> + <default>0</default> + <add>1.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <index> + <name>index_is_deceased</name> + <fieldName>is_deceased</fieldName> + <add>4.7</add> + </index> + <field> + <name>deceased_date</name> + <type>date</type> + <import>true</import> + <export>true</export> + <headerPattern>/^deceased|(d(eceased\s)?date)$/i</headerPattern> + <comment>Date of deceased</comment> + <add>1.5</add> + <html> + <type>Select Date</type> + <formatType>birth</formatType> + </html> + </field> + <field> + <name>mail_to_household_id</name> + <title>Mail to Household ID</title> + <type>int unsigned</type> + <comment>OPTIONAL FK to civicrm_contact_household record. If NOT NULL, direct mail communications to household rather than individual location. </comment> + <export>true</export> + <add>1.1</add> + <drop>3.3</drop> + </field> + <foreignKey> + <name>mail_to_household_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.1</add> + <onDelete>SET NULL</onDelete> + <drop>3.3</drop> + </foreignKey> + <field> + <name>household_name</name> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + <size>30</size> + </html> + <import>true</import> + <headerPattern>/^household|(h(ousehold\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <comment>Household Name.</comment> + <fulltext/> + <add>1.1</add> + </field> + <index> + <name>index_household_name</name> + <fieldName>household_name</fieldName> + <add>1.8</add> + </index> + <field> + <name>primary_contact_id</name> + <type>int unsigned</type> + <title>Household Primary Contact ID</title> + <comment>Optional FK to Primary Contact for this household.</comment> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>primary_contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>organization_name</name> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + <size>30</size> + </html> + <import>true</import> + <headerPattern>/^organization|(o(rganization\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <comment>Organization Name.</comment> + <fulltext/> + <add>1.1</add> + </field> + <index> + <name>index_organization_name</name> + <fieldName>organization_name</fieldName> + <add>1.8</add> + </index> + <field> + <name>sic_code</name> + <type>varchar</type> + <length>8</length> + <import>true</import> + <headerPattern>/^sic|(s(ic\s)?code)$/i</headerPattern> + <comment>Standard Industry Classification Code.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>user_unique_id</name> + <rule>url</rule> + <title>Unique ID (OpenID)</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/^Open\s?ID|u(niq\w*)?\s?ID/i</headerPattern> + <dataPattern>/^[\w\/\:\.]+$/</dataPattern> + <comment>the OpenID (or OpenID-style http://username.domain/) unique identifier for this contact mainly used for logging in to CiviCRM</comment> + <add>2.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>employer_id</name> + <title>Current Employer</title> + <uniqueName>current_employer_id</uniqueName> + <type>int unsigned</type> + <comment>OPTIONAL FK to civicrm_contact record.</comment> + <export>true</export> + <add>2.1</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>employer_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_deleted</name> + <title>Contact is in Trash</title> + <uniqueName>contact_is_deleted</uniqueName> + <type>boolean</type> + <default>0</default> + <required>true</required> + <export>true</export> + <add>3.2</add> + <html> + <type>CheckBox</type> + </html> + </field> + <index> + <name>index_is_deleted</name> + <fieldName>is_deleted</fieldName> + <add>3.2</add> + <drop>4.4</drop> + </index> + <index> + <name>index_is_deleted_sort_name</name> + <fieldName>is_deleted</fieldName> + <fieldName>sort_name</fieldName> + <fieldName>id</fieldName> + <add>4.4</add> + </index> + <field> + <name>created_date</name> + <type>timestamp</type> + <comment>When was the contact was created.</comment> + <required>false</required> + <export>true</export> + <default>NULL</default> + <add>4.3</add> + </field> + <field> + <name>modified_date</name> + <type>timestamp</type> + <comment>When was the contact (or closely related entity) was created or modified or deleted.</comment> + <required>false</required> + <export>true</export> + <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> + <add>4.3</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contact/ContactType.xml b/civicrm/xml/schema/Contact/ContactType.xml new file mode 100644 index 0000000000000000000000000000000000000000..8a701d53e032fc1af454ec918318895b7f237c76 --- /dev/null +++ b/civicrm/xml/schema/Contact/ContactType.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>ContactType</class> + <name>civicrm_contact_type</name> + <comment>Provide type information for contacts</comment> + <add>3.1</add> + <field> + <name>id</name> + <title>Contact Type ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Contact Type ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <type>varchar</type> + <length>64</length> + <comment>Internal name of Contact Type (or Subtype).</comment> + <add>3.1</add> + </field> + <index> + <name>contact_type</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>3.1</add> + </index> + <field> + <name>label</name> + <title>Contact Type Label</title> + <type>varchar</type> + <length>64</length> + <comment>localized Name of Contact Type.</comment> + <localizable>true</localizable> + <add>3.1</add> + </field> + <field> + <name>description</name> + <title>Contact Type Description</title> + <type>text</type> + <html> + <type>TextArea</type> + <rows>2</rows> + <cols>60</cols> + </html> + <comment>localized Optional verbose description of the type.</comment> + <localizable>true</localizable> + <add>3.1</add> + </field> + <field> + <name>image_URL</name> + <title>Contact Type Image URL</title> + <type>varchar</type> + <length>255</length> + <comment>URL of image if any.</comment> + <add>3.1</add> + </field> + <field> + <name>parent_id</name> + <title>Contact Type Parent</title> + <type>int unsigned</type> + <comment>Optional FK to parent contact type.</comment> + <pseudoconstant> + <table>civicrm_contact_type</table> + <keyColumn>id</keyColumn> + <labelColumn>label</labelColumn> + <condition>parent_id IS NULL</condition> + </pseudoconstant> + <add>3.1</add> + </field> + <foreignKey> + <name>parent_id</name> + <table>civicrm_contact_type</table> + <key>id</key> + <add>3.1</add> + </foreignKey> + <field> + <name>is_active</name> + <title>Contact Type Is Active?</title> + <type>boolean</type> + <comment>Is this entry active?</comment> + <add>3.1</add> + </field> + <field> + <name>is_reserved</name> + <title>Contact Type is Reserved?</title> + <type>boolean</type> + <comment>Is this contact type a predefined system type</comment> + <add>3.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contact/DashboardContact.xml b/civicrm/xml/schema/Contact/DashboardContact.xml new file mode 100644 index 0000000000000000000000000000000000000000..6e3f0599b9331dcf9b1f0176607cc93faa825ed9 --- /dev/null +++ b/civicrm/xml/schema/Contact/DashboardContact.xml @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>DashboardContact</class> + <name>civicrm_dashboard_contact</name> + <comment>Table to store dashboard for each contact.</comment> + <add>3.1</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Dashboard Contact ID</title> + <required>true</required> + <add>3.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>dashboard_id</name> + <type>int unsigned</type> + <title>Dashboard</title> + <required>true</required> + <comment>Dashboard ID</comment> + <add>3.1</add> + </field> + <foreignKey> + <name>dashboard_id</name> + <table>civicrm_dashboard</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>3.1</add> + </foreignKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <title>Dashboard Contact</title> + <required>true</required> + <comment>Contact ID</comment> + <add>3.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>3.1</add> + </foreignKey> + <index> + <name>index_dashboard_id_contact_id</name> + <fieldName>dashboard_id</fieldName> + <fieldName>contact_id</fieldName> + <unique>true</unique> + <add>4.7</add> + </index> + <field> + <name>column_no</name> + <type>boolean</type> + <comment>column no for this widget</comment> + <default>0</default> + <add>3.1</add> + </field> + <field> + <name>is_minimized</name> + <type>boolean</type> + <title>Dashlet is Minimized?</title> + <comment>Is Minimized?</comment> + <default>0</default> + <add>3.1</add> + <drop>4.7</drop> + </field> + <field> + <name>is_fullscreen</name> + <type>boolean</type> + <title>Dashlet is FullScreen?</title> + <comment>Is Fullscreen?</comment> + <default>1</default> + <add>3.1</add> + <drop>4.7</drop> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Dashlet is Active?</title> + <comment>Is this widget active?</comment> + <default>0</default> + <add>3.1</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <comment>Ordering of the widgets.</comment> + <default>0</default> + <add>3.1</add> + </field> + <field> + <name>content</name> + <type>longtext</type> + <comment>dashlet content</comment> + <add>3.3</add> + <drop>4.7</drop> + </field> + <field> + <name>created_date</name> + <type>datetime</type> + <title>Dashlet Created On</title> + <comment>When was content populated</comment> + <add>3.3</add> + <drop>4.7</drop> + </field> +</table> diff --git a/civicrm/xml/schema/Contact/Group.xml b/civicrm/xml/schema/Contact/Group.xml new file mode 100644 index 0000000000000000000000000000000000000000..4deea9bf9639c99e2e4e652cfbe7cfd1989c8e2a --- /dev/null +++ b/civicrm/xml/schema/Contact/Group.xml @@ -0,0 +1,224 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>Group</class> + <name>civicrm_group</name> + <comment>Provide grouping of related contacts</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Group ID</title> + <required>true</required> + <comment>Group ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <type>varchar</type> + <title>Group Name</title> + <length>64</length> + <comment>Internal name of Group.</comment> + <add>1.1</add> + </field> + <field> + <name>title</name> + <type>varchar</type> + <title>Group Title</title> + <length>64</length> + <localizable>true</localizable> + <comment>Name of Group.</comment> + <add>1.1</add> + </field> + <field> + <name>description</name> + <type>text</type> + <title>Group Description</title> + <html> + <type>TextArea</type> + <rows>2</rows> + <cols>60</cols> + </html> + <comment>Optional verbose description of the group.</comment> + <add>1.1</add> + </field> + <field> + <name>source</name> + <type>varchar</type> + <title>Group Source</title> + <length>64</length> + <comment>Module or process which created this group.</comment> + <add>1.1</add> + </field> + <field> + <name>saved_search_id</name> + <type>int unsigned</type> + <title>Saved Search ID</title> + <comment>FK to saved search table.</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>saved_search_id</name> + <table>civicrm_saved_search</table> + <key>id</key> + <add>1.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Group Enabled</title> + <comment>Is this entry active?</comment> + <add>1.1</add> + </field> + <field> + <name>visibility</name> + <type>varchar</type> + <length>24</length> + <title>Group Visibility Setting</title> + <default>'User and User Admin Only'</default> + <comment>In what context(s) is this field visible.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::groupVisibility</callback> + </pseudoconstant> + <add>1.2</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>where_clause</name> + <type>text</type> + <title>Group Where Clause</title> + <comment>the sql where clause if a saved search acl</comment> + <add>1.6</add> + </field> + <field> + <name>select_tables</name> + <type>text</type> + <title>Tables For Select Clause</title> + <comment>the tables to be included in a select data</comment> + <serialize>PHP</serialize> + <add>1.6</add> + </field> + <field> + <name>where_tables</name> + <type>text</type> + <title>Tables For Where Clause</title> + <comment>the tables to be included in the count statement</comment> + <serialize>PHP</serialize> + <add>1.6</add> + </field> + <field> + <name>group_type</name> + <type>varchar</type> + <title>Group Type</title> + <length>128</length> + <comment>FK to group type</comment> + <pseudoconstant> + <optionGroupName>group_type</optionGroupName> + </pseudoconstant> + <serialize>SEPARATOR_BOOKEND</serialize> + <add>1.9</add> + </field> + <field> + <name>cache_date</name> + <type>timestamp</type> + <title>Group Cache Date</title> + <required>false</required> + <comment>Date when we created the cache for a smart group</comment> + <add>2.1</add> + </field> + <field> + <name>refresh_date</name> + <type>timestamp</type> + <title>Next Group Refresh Time</title> + <required>false</required> + <comment>Date and time when we need to refresh the cache next.</comment> + <add>4.3</add> + </field> + <field> + <name>parents</name> + <type>text</type> + <title>Group Parents</title> + <comment>IDs of the parent(s)</comment> + <add>2.1</add> + <serialize>COMMA</serialize> + <pseudoconstant> + <callback>CRM_Core_PseudoConstant::allGroup</callback> + </pseudoconstant> + </field> + <field> + <name>children</name> + <type>text</type> + <title>Group Children</title> + <comment>IDs of the child(ren)</comment> + <add>2.1</add> + </field> + <field> + <name>is_hidden</name> + <type>boolean</type> + <title>Group is Hidden</title> + <default>0</default> + <comment>Is this group hidden?</comment> + <add>2.2</add> + </field> + <field> + <name>is_reserved</name> + <type>boolean</type> + <title>Group is Reserved</title> + <default>0</default> + <add>4.2</add> + </field> + <index> + <name>index_group_type</name> + <fieldName>group_type</fieldName> + <add>1.9</add> + </index> + <index> + <name>UI_title</name> + <fieldName>title</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <field> + <name>created_id</name> + <type>int unsigned</type> + <title>Group Created By</title> + <comment>FK to contact table.</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>modified_id</name> + <type>int unsigned</type> + <title>Group Modified By</title> + <comment>FK to contact table.</comment> + <add>4.5</add> + </field> + <foreignKey> + <name>modified_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.5</add> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Contact/GroupContact.xml b/civicrm/xml/schema/Contact/GroupContact.xml new file mode 100644 index 0000000000000000000000000000000000000000..304be14a0a513e128c7c85903ba5859bfe856a50 --- /dev/null +++ b/civicrm/xml/schema/Contact/GroupContact.xml @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>GroupContact</class> + <name>civicrm_group_contact</name> + <comment>Join table sets membership for 'static' groups. Also used to store 'opt-out' entries for 'query' type groups (status = 'OUT') </comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Group Contact ID</title> + <required>true</required> + <comment>primary key</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>group_id</name> + <type>int unsigned</type> + <title>Group ID</title> + <required>true</required> + <comment>FK to civicrm_group</comment> + <add>1.1</add> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>group_id</name> + <table>civicrm_group</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <title>Contact ID</title> + <required>true</required> + <comment>FK to civicrm_contact</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>status</name> + <type>varchar</type> + <length>8</length> + <title>Group Contact Status</title> + <comment>status of contact relative to membership in group</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::groupContactStatus</callback> + </pseudoconstant> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>location_id</name> + <type>int unsigned</type> + <title>Group Contact Location</title> + <comment>Optional location to associate with this membership</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>location_id</name> + <table>civicrm_loc_block</table> + <key>id</key> + <add>1.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>email_id</name> + <type>int unsigned</type> + <title>Group Contact Email</title> + <comment>Optional email to associate with this membership</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>email_id</name> + <table>civicrm_email</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <index> + <name>UI_contact_group</name> + <fieldName>contact_id</fieldName> + <fieldName>group_id</fieldName> + <unique>true</unique> + <add>1.6</add> + </index> +</table> diff --git a/civicrm/xml/schema/Contact/GroupContactCache.xml b/civicrm/xml/schema/Contact/GroupContactCache.xml new file mode 100644 index 0000000000000000000000000000000000000000..22e92fd4bd811bb6cb60afef3bab8667b6488b82 --- /dev/null +++ b/civicrm/xml/schema/Contact/GroupContactCache.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>GroupContactCache</class> + <name>civicrm_group_contact_cache</name> + <comment>Join table cache for 'static' groups.</comment> + <add>2.1</add> + <field> + <name>id</name> + <title>Group Contact Cache ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>primary key</comment> + <add>2.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>group_id</name> + <title>Group</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_group</comment> + <add>2.1</add> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>group_id</name> + <table>civicrm_group</table> + <key>id</key> + <add>2.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_contact</comment> + <add>2.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_contact_group</name> + <fieldName>contact_id</fieldName> + <fieldName>group_id</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Contact/GroupNesting.xml b/civicrm/xml/schema/Contact/GroupNesting.xml new file mode 100644 index 0000000000000000000000000000000000000000..cad890eb273621b1065ad90ffe4c34a408543821 --- /dev/null +++ b/civicrm/xml/schema/Contact/GroupNesting.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>GroupNesting</class> + <name>civicrm_group_nesting</name> + <comment>Provide parent-child relationships for groups</comment> + <add>2.0</add> + <log>true</log> + <field> + <name>id</name> + <title>Group Nesting ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Relationship ID</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>child_group_id</name> + <title>Child Group</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID of the child group</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>child_group_id</name> + <table>civicrm_group</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>2.0</add> + </foreignKey> + <field> + <name>parent_group_id</name> + <title>Parent Group</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID of the parent group</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>parent_group_id</name> + <table>civicrm_group</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>2.0</add> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Contact/GroupOrganization.xml b/civicrm/xml/schema/Contact/GroupOrganization.xml new file mode 100644 index 0000000000000000000000000000000000000000..938717148faa3eb5084da2ae83abf0c65268deef --- /dev/null +++ b/civicrm/xml/schema/Contact/GroupOrganization.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>GroupOrganization</class> + <name>civicrm_group_organization</name> + <comment>Integrate Organization information into Groups</comment> + <add>2.0</add> + <log>true</log> + <field> + <name>id</name> + <title>Group Organization ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Relationship ID</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>group_id</name> + <title>Group</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID of the group</comment> + <add>2.0</add> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>group_id</name> + <table>civicrm_group</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>2.0</add> + </foreignKey> + <field> + <name>organization_id</name> + <title>Organization</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID of the Organization Contact</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>organization_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>2.0</add> + </foreignKey> + <index> + <name>UI_group_organization</name> + <unique>true</unique> + <fieldName>group_id</fieldName> + <fieldName>organization_id</fieldName> + <add>2.0</add> + </index> +</table> diff --git a/civicrm/xml/schema/Contact/Household.xml b/civicrm/xml/schema/Contact/Household.xml new file mode 100644 index 0000000000000000000000000000000000000000..89f4216792a40e20baffc749c07e9231aa0957e8 --- /dev/null +++ b/civicrm/xml/schema/Contact/Household.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>Household</class> + <name>civicrm_household</name> + <comment>Define household specific properties</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Unique Household ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Contact ID</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <field> + <name>household_name</name> + <type>varchar</type> + <length>128</length> + <import>true</import> + <headerPattern>/^household|(h(ousehold\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <comment>Household Name.</comment> + <fulltext/> + <add>1.1</add> + </field> + <index> + <name>index_household_name</name> + <fieldName>household_name</fieldName> + <add>1.8</add> + </index> + <field> + <name>primary_contact_id</name> + <type>int unsigned</type> + <comment>Optional FK to Primary Contact for this household.</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>primary_contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <index> + <name>UI_contact</name> + <fieldName>contact_id</fieldName> + <unique>true</unique> + <add>1.6</add> + </index> +</table> diff --git a/civicrm/xml/schema/Contact/Individual.xml b/civicrm/xml/schema/Contact/Individual.xml new file mode 100644 index 0000000000000000000000000000000000000000..45f27206778691466b3a82896e691debfdf20a66 --- /dev/null +++ b/civicrm/xml/schema/Contact/Individual.xml @@ -0,0 +1,231 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>Individual</class> + <name>civicrm_individual</name> + <comment>Define contact-individual specific properties. Extends civicrm_contact.</comment> + <log>true</log> + <add>1.1</add> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Unique Individual ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Contact ID</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <field> + <name>first_name</name> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/^first|(f(irst\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <fulltext/> + <comment>First Name.</comment> + <add>1.1</add> + </field> + <index> + <name>index_first_name</name> + <fieldName>first_name</fieldName> + <add>1.8</add> + </index> + <field> + <name>middle_name</name> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/^middle|(m(iddle\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <fulltext/> + <comment>Middle Name.</comment> + <add>1.1</add> + </field> + <field> + <name>last_name</name> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/^(l(ast\s)?name)$/i</headerPattern> + <dataPattern>/^\w+(\s\w+)?+$/</dataPattern> + <comment>Last Name.</comment> + <fulltext/> + <add>1.1</add> + </field> + <index> + <name>index_last_name</name> + <fieldName>last_name</fieldName> + <add>1.8</add> + </index> + <field> + <name>gender</name> + <type>enum</type> + <import>true</import> + <values>Female, Male, Other</values> + <add>1.1</add> + <drop>1.2</drop> + </field> + <field> + <name>prefix_id</name> + <type>int unsigned</type> + <comment>Prefix or Title for name (Ms, Mr...). FK to prefix ID</comment> + <headerPattern>/^(prefix|title)/i</headerPattern> + <dataPattern>/^(mr|ms|mrs|sir|dr)\.?$/i</dataPattern> + <add>1.2</add> + </field> + <index> + <name>UI_prefix</name> + <fieldName>prefix_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>suffix_id</name> + <type>int unsigned</type> + <comment>Suffix for name (Jr, Sr...). FK to suffix ID</comment> + <headerPattern>/^suffix$/i</headerPattern> + <dataPattern>/^(sr|jr)\.?|i{2,}$/</dataPattern> + <add>1.2</add> + </field> + <index> + <name>UI_suffix</name> + <fieldName>suffix_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>prefix</name> + <type>varchar</type> + <length>64</length> + <import>true</import> + <comment>Prefix to Name.</comment> + <add>1.1</add> + <drop>1.2</drop> + </field> + <field> + <name>suffix</name> + <type>varchar</type> + <length>64</length> + <import>true</import> + <comment>Suffix to Name.</comment> + <add>1.1</add> + <drop>1.2</drop> + </field> + <field> + <name>greeting_type</name> + <type>varchar</type> + <length>128</length> + <comment>Preferred greeting format.</comment> + <add>1.1</add> + <drop>2.2</drop> + </field> + <field> + <name>greeting_type_id</name> + <title>Greeting Type</title> + <type>int unsigned</type> + <comment>FK to civicrm_option_value.id, that has to be valid, registered Greeting type.</comment> + <add>2.2</add> + </field> + <field> + <name>custom_greeting</name> + <type>varchar</type> + <length>128</length> + <comment>Custom greeting message.</comment> + <add>1.1</add> + </field> + <field> + <name>job_title</name> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/^job|(j(ob\s)?title)$/i</headerPattern> + <dataPattern>//</dataPattern> + <comment>Job Title</comment> + <add>1.1</add> + </field> + <field> + <name>gender_id</name> + <type>int unsigned</type> + <headerPattern>/^gender$/i</headerPattern> + <comment>FK to gender ID</comment> + <add>1.2</add> + </field> + <index> + <name>UI_gender</name> + <fieldName>gender_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>birth_date</name> + <type>date</type> + <import>true</import> + <headerPattern>/^birth|(b(irth\s)?date)|D(\W*)O(\W*)B(\W*)$/i</headerPattern> + <dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern> + <comment>Date of birth</comment> + <add>1.1</add> + </field> + <field> + <name>is_deceased</name> + <title>Deceased</title> + <import>true</import> + <export>true</export> + <headerPattern>/i(s\s)?d(eceased)$/i</headerPattern> + <type>boolean</type> + <default>0</default> + <add>1.1</add> + </field> + <field> + <name>deceased_date</name> + <type>date</type> + <import>true</import> + <export>true</export> + <headerPattern>/^deceased|(d(eceased\s)?date)$/i</headerPattern> + <comment>Date of deceased</comment> + <add>1.5</add> + </field> + <field> + <name>phone_to_household_id</name> + <type>int unsigned</type> + <comment>OPTIONAL FK to civicrm_contact_household record. If NOT NULL, direct phone communications to household + rather than individual location. + </comment> + <add>1.1</add> + </field> + <field> + <name>email_to_household_id</name> + <type>int unsigned</type> + <comment>OPTIONAL FK to civicrm_contact_household record. If NOT NULL, direct phone communications to household + rather than individual location. + </comment> + <add>1.1</add> + </field> + <field> + <name>mail_to_household_id</name> + <type>int unsigned</type> + <comment>OPTIONAL FK to civicrm_contact_household record. If NOT NULL, direct mail communications to household + rather than individual location. + </comment> + <add>1.1</add> + </field> + <index> + <name>UI_contact</name> + <fieldName>contact_id</fieldName> + <unique>true</unique> + <add>1.6</add> + </index> +</table> diff --git a/civicrm/xml/schema/Contact/Organization.xml b/civicrm/xml/schema/Contact/Organization.xml new file mode 100644 index 0000000000000000000000000000000000000000..bb5c88b82715f04e867b266c0a16181742ba2f4b --- /dev/null +++ b/civicrm/xml/schema/Contact/Organization.xml @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>Organization</class> + <name>civicrm_organization</name> + <comment>Define organization specific properties</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Unique Organization ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Contact ID</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <field> + <name>organization_name</name> + <type>varchar</type> + <length>128</length> + <import>true</import> + <headerPattern>/^organization|(o(rganization\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <comment>Organization Name.</comment> + <fulltext/> + <add>1.1</add> + </field> + <index> + <name>index_organization_name</name> + <fieldName>organization_name</fieldName> + <add>1.8</add> + </index> + <field> + <name>legal_name</name> + <type>varchar</type> + <length>128</length> + <import>true</import> + <headerPattern>/^legal|(l(egal\s)?name)$/i</headerPattern> + <comment>Legal Name.</comment> + <fulltext/> + <add>1.1</add> + </field> + <field> + <name>sic_code</name> + <type>varchar</type> + <length>8</length> + <import>true</import> + <headerPattern>/^sic|(s(ic\s)?code)$/i</headerPattern> + <comment>Standard Industry Classification Code.</comment> + <add>1.1</add> + </field> + <field> + <name>primary_contact_id</name> + <type>int unsigned</type> + <comment>Optional FK to Primary Contact for this organization.</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>primary_contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <index> + <name>UI_contact</name> + <fieldName>contact_id</fieldName> + <unique>true</unique> + <add>1.6</add> + </index> +</table> diff --git a/civicrm/xml/schema/Contact/Relationship.xml b/civicrm/xml/schema/Contact/Relationship.xml new file mode 100644 index 0000000000000000000000000000000000000000..92e7ec449033836352eefa4f49181ff6e8e9624b --- /dev/null +++ b/civicrm/xml/schema/Contact/Relationship.xml @@ -0,0 +1,156 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>Relationship</class> + <name>civicrm_relationship</name> + <comment>Relationship between any 2 types of contacts.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Relationship ID</title> + <required>true</required> + <comment>Relationship ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id_a</name> + <type>int unsigned</type> + <title>Contact A</title> + <required>true</required> + <comment>id of the first contact</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>contact_id_a</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id_b</name> + <type>int unsigned</type> + <title>Contact B</title> + <required>true</required> + <comment>id of the second contact</comment> + <add>1.1</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>contact_id_b</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>relationship_type_id</name> + <type>int unsigned</type> + <title>Relationship Type</title> + <required>true</required> + <comment>id of the relationship</comment> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>relationship_type_id</name> + <table>civicrm_relationship_type</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>start_date</name> + <type>date</type> + <title>Relationship Start Date</title> + <comment>date when the relationship started</comment> + <add>1.1</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>end_date</name> + <type>date</type> + <title>Relationship End Date</title> + <comment>date when the relationship ended</comment> + <add>1.1</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Relationship Is Active</title> + <default>1</default> + <comment>is the relationship active ?</comment> + <add>1.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>description</name> + <type>varchar</type> + <title>Relationship Description</title> + <length>255</length> + <comment>Optional verbose description for the relationship.</comment> + <add>1.5</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_permission_a_b</name> + <type>boolean</type> + <title>Contact A has Permission Over Contact B</title> + <default>0</default> + <comment>is contact a has permission to view / edit contact and + related data for contact b ? + </comment> + <add>2.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_permission_b_a</name> + <type>boolean</type> + <title>Contact B has Permission Over Contact A</title> + <default>0</default> + <comment>is contact b has permission to view / edit contact and + related data for contact a ? + </comment> + <add>2.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>case_id</name> + <type>int unsigned</type> + <title>Relationship Case</title> + <default>NULL</default> + <comment>FK to civicrm_case</comment> + <add>2.2</add> + </field> + <foreignKey> + <name>case_id</name> + <table>civicrm_case</table> + <key>id</key> + <add>2.2</add> + <onDelete>CASCADE</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Contact/RelationshipType.xml b/civicrm/xml/schema/Contact/RelationshipType.xml new file mode 100644 index 0000000000000000000000000000000000000000..f530b032118a1a73983bcf3c934543239f227652 --- /dev/null +++ b/civicrm/xml/schema/Contact/RelationshipType.xml @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>RelationshipType</class> + <name>civicrm_relationship_type</name> + <comment>Relationship types s/b structured with contact_a as the 'subject/child' contact and contact_b as the 'object/parent' contact (e.g. Individual A is Employee of Org B).</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Relationship Type ID</title> + <required>true</required> + <comment>Primary key</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name_a_b</name> + <type>varchar</type> + <title>Relationship Type Name A to B</title> + <length>64</length> + <comment>name for relationship of contact_a to contact_b.</comment> + <add>1.1</add> + </field> + <field> + <name>label_a_b</name> + <type>varchar</type> + <title>Relationship Type Label A to B</title> + <length>64</length> + <comment>label for relationship of contact_a to contact_b.</comment> + <add>3.0</add> + <localizable>true</localizable> + </field> + <field> + <name>name_b_a</name> + <type>varchar</type> + <title>Relationship Type Name B to A</title> + <length>64</length> + <comment>Optional name for relationship of contact_b to contact_a.</comment> + <add>1.1</add> + </field> + <field> + <name>label_b_a</name> + <type>varchar</type> + <title>Relationship Type Label B to A</title> + <length>64</length> + <comment>Optional label for relationship of contact_b to contact_a.</comment> + <add>3.0</add> + <localizable>true</localizable> + </field> + <field> + <name>description</name> + <type>varchar</type> + <title>Relationship Description</title> + <length>255</length> + <comment>Optional verbose description of the relationship type.</comment> + <add>1.1</add> + <localizable>true</localizable> + </field> + <field> + <name>contact_type_a</name> + <title>Contact Type for Contact A</title> + <type>varchar</type> + <length>12</length> + <comment>If defined, contact_a in a relationship of this type must be a specific contact_type.</comment> + <pseudoconstant> + <table>civicrm_contact_type</table> + <keyColumn>name</keyColumn> + <labelColumn>label</labelColumn> + <condition>parent_id IS NULL</condition> + </pseudoconstant> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>contact_type_b</name> + <title>Contact Type for Contact B</title> + <type>varchar</type> + <length>12</length> + <comment>If defined, contact_b in a relationship of this type must be a specific contact_type.</comment> + <pseudoconstant> + <table>civicrm_contact_type</table> + <keyColumn>name</keyColumn> + <labelColumn>label</labelColumn> + <condition>parent_id IS NULL</condition> + </pseudoconstant> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>contact_sub_type_a</name> + <title>Contact Subtype A</title> + <type>varchar</type> + <length>64</length> + <comment>If defined, contact_sub_type_a in a relationship of this type must be a specific contact_sub_type. + </comment> + <add>3.1</add> + <html> + <type>Select</type> + </html> + <pseudoconstant> + <table>civicrm_contact_type</table> + <keyColumn>name</keyColumn> + <labelColumn>label</labelColumn> + <condition>parent_id IS NOT NULL</condition> + </pseudoconstant> + </field> + <field> + <name>contact_sub_type_b</name> + <title>Contact Subtype B</title> + <type>varchar</type> + <length>64</length> + <comment>If defined, contact_sub_type_b in a relationship of this type must be a specific contact_sub_type. + </comment> + <add>3.1</add> + <html> + <type>Select</type> + </html> + <pseudoconstant> + <table>civicrm_contact_type</table> + <keyColumn>name</keyColumn> + <labelColumn>label</labelColumn> + <condition>parent_id IS NOT NULL</condition> + </pseudoconstant> + </field> + <field> + <name>is_reserved</name> + <type>boolean</type> + <title>Relationship Type is Reserved</title> + <comment>Is this relationship type a predefined system type (can not be changed or de-activated)?</comment> + <add>1.1</add> + </field> + <field> + <name>is_active</name> + <title>Relationship Type is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this relationship type currently active (i.e. can be used when creating or editing relationships)? + </comment> + <add>1.1</add> + </field> + <index> + <name>UI_name_a_b</name> + <fieldName>name_a_b</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <index> + <name>UI_name_b_a</name> + <fieldName>name_b_a</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Contact/SavedSearch.xml b/civicrm/xml/schema/Contact/SavedSearch.xml new file mode 100644 index 0000000000000000000000000000000000000000..4da353078754c92a7bce91671b065f332410deac --- /dev/null +++ b/civicrm/xml/schema/Contact/SavedSearch.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>SavedSearch</class> + <name>civicrm_saved_search</name> + <comment>Users can save their complex SQL queries and use them later.</comment> + <add>1.1</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Saved Search ID</title> + <required>true</required> + <comment>Saved Search ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>false</autoincrement> + </primaryKey> + <field> + <name>query</name> + <title>SQL Query</title> + <type>text</type> + <import>true</import> + <comment>SQL query for this search</comment> + <add>1.1</add> + <drop>1.5</drop> + </field> + <field> + <name>form_values</name> + <title>Submitted Form Values</title> + <type>text</type> + <import>true</import> + <comment>Submitted form values for this search</comment> + <serialize>PHP</serialize> + <add>1.1</add> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Saved Search Enabled</title> + <comment>Is this entry active?</comment> + <add>1.1</add> + <drop>1.5</drop> + </field> + <field> + <name>mapping_id</name> + <type>int unsigned</type> + <title>Mapping ID</title> + <comment>Foreign key to civicrm_mapping used for saved search-builder searches.</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>mapping_id</name> + <table>civicrm_mapping</table> + <key>id</key> + <add>1.5</add> + </foreignKey> + <field> + <name>search_custom_id</name> + <type>int unsigned</type> + <title>Option Value ID</title> + <comment>Foreign key to civicrm_option value table used for saved custom searches.</comment> + <add>2.0</add> + </field> + <field> + <name>where_clause</name> + <type>text</type> + <title>Where Clause</title> + <comment>the sql where clause if a saved search acl</comment> + <add>1.6</add> + </field> + <field> + <name>select_tables</name> + <type>text</type> + <title>Select Tables</title> + <comment>the tables to be included in a select data</comment> + <serialize>PHP</serialize> + <add>1.6</add> + </field> + <field> + <name>where_tables</name> + <type>text</type> + <title>Where Tables</title> + <comment>the tables to be included in the count statement</comment> + <serialize>PHP</serialize> + <add>1.6</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contact/SubscriptionHistory.xml b/civicrm/xml/schema/Contact/SubscriptionHistory.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e93766e708be0ffd09e84b148fe5a7803c71455 --- /dev/null +++ b/civicrm/xml/schema/Contact/SubscriptionHistory.xml @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contact</base> + <class>SubscriptionHistory</class> + <name>civicrm_subscription_history</name> + <comment>History information of subscribe/unsubscribe actions</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Group Membership History ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Internal Id</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Contact Id</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>group_id</name> + <title>Group</title> + <type>int unsigned</type> + <comment>Group Id</comment> + <add>1.1</add> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>group_id</name> + <table>civicrm_group</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>date</name> + <title>Group Membership Action Date</title> + <type>timestamp</type> + <required>true</required> + <default>CURRENT_TIMESTAMP</default> + <comment>Date of the (un)subscription</comment> + <add>1.1</add> + </field> + <field> + <name>method</name> + <title>Group Membership Action</title> + <type>varchar</type> + <length>8</length> + <comment>How the (un)subscription was triggered</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getSubscriptionHistoryMethods</callback> + </pseudoconstant> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>status</name> + <title>Group Membership Status</title> + <type>varchar</type> + <length>8</length> + <comment>The state of the contact within the group</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::groupContactStatus</callback> + </pseudoconstant> + <add>1.1</add> + </field> + <field> + <name>tracking</name> + <title>Group Membership Tracking</title> + <type>varchar</type> + <length>255</length> + <comment>IP address or other tracking info</comment> + <add>1.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contact/files.xml b/civicrm/xml/schema/Contact/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd9cfb946ff271bc0190ea5afa3a71e0f7a8b4b5 --- /dev/null +++ b/civicrm/xml/schema/Contact/files.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="Contact.xml" parse="xml" /> +<xi:include href="DashboardContact.xml" parse="xml" /> +<xi:include href="Group.xml" parse="xml" /> +<xi:include href="SubscriptionHistory.xml" parse="xml" /> +<xi:include href="GroupContact.xml" parse="xml" /> +<xi:include href="GroupContactCache.xml" parse="xml" /> +<xi:include href="ACLContactCache.xml" parse="xml" /> +<xi:include href="GroupNesting.xml" parse="xml" /> +<xi:include href="GroupOrganization.xml" parse="xml" /> +<xi:include href="Relationship.xml" parse="xml" /> +<xi:include href="RelationshipType.xml" parse="xml" /> +<xi:include href="SavedSearch.xml" parse="xml" /> +<xi:include href="ContactType.xml" parse="xml" /> + +</tables> diff --git a/civicrm/xml/schema/Contribute/Contribution.xml b/civicrm/xml/schema/Contribute/Contribution.xml new file mode 100644 index 0000000000000000000000000000000000000000..edcb3befa4114113cf03630ef1f12b4830c9bf6c --- /dev/null +++ b/civicrm/xml/schema/Contribute/Contribution.xml @@ -0,0 +1,538 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contribute</base> + <class>Contribution</class> + <name>civicrm_contribution</name> + <add>1.3</add> + <log>true</log> + <field> + <name>id</name> + <uniqueName>contribution_id</uniqueName> + <type>int unsigned</type> + <required>true</required> + <import>true</import> + <title>Contribution ID</title> + <comment>Contribution ID</comment> + <add>1.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <uniqueName>contribution_contact_id</uniqueName> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <import>true</import> + <headerPattern>/contact(.?id)?/i</headerPattern> + <dataPattern>/^\d+$/</dataPattern> + <comment>FK to Contact ID</comment> + <html> + <type>EntityRef</type> + </html> + <add>1.3</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.3</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>solicitor_id</name> + <title>Solicitor ID</title> + <type>int unsigned</type> + <comment>FK to Solicitor ID</comment> + <add>1.4</add> + <drop>2.2</drop> + </field> + <foreignKey> + <name>solicitor_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.4</add> + <drop>2.2</drop> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>contribution_type_id</name> + <title>Contribution Type</title> + <export>false</export> + <type>int unsigned</type> + <comment>FK to Contribution Type</comment> + <add>1.3</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>contribution_type_id</name> + <table>civicrm_contribution_type</table> + <key>id</key> + <add>1.3</add> + <drop>4.3</drop> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <comment>FK to Financial Type for (total_amount - non_deductible_amount).</comment> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <export>true</export> + <html> + <type>Select</type> + </html> + <add>4.3</add> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>contribution_page_id</name> + <title>Contribution Page ID</title> + <type>int unsigned</type> + <import>true</import> + <comment>The Contribution Page which triggered this contribution</comment> + <pseudoconstant> + <table>civicrm_contribution_page</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.5</add> + </field> + <foreignKey> + <name>contribution_page_id</name> + <table>civicrm_contribution_page</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>payment_instrument_id</name> + <uniqueName>payment_instrument_id</uniqueName> + <title>Payment Method ID</title> + <type>int unsigned</type> + <comment>FK to Payment Instrument</comment> + <export>true</export> + <headerPattern>/^payment|(p(ayment\s)?instrument)$/i</headerPattern> + <pseudoconstant> + <optionGroupName>payment_instrument</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.3</add> + </field> + <index> + <name>UI_contrib_payment_instrument_id</name> + <fieldName>payment_instrument_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>receive_date</name> + <title>Date Received</title> + <type>datetime</type> + <import>true</import> + <headerPattern>/receive(.?date)?/i</headerPattern> + <dataPattern>/^\d{4}-?\d{2}-?\d{2} ?(\d{2}:?\d{2}:?(\d{2})?)?$/</dataPattern> + <comment>Date contribution was received - not necessarily the creation date of the record</comment> + <add>1.3</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>non_deductible_amount</name> + <title>Non-deductible Amount</title> + <type>decimal</type> + <default>0</default> + <import>true</import> + <headerPattern>/non?.?deduct/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>Portion of total amount which is NOT tax deductible. Equal to total_amount for non-deductible financial types.</comment> + <add>1.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>total_amount</name> + <type>decimal</type> + <required>true</required> + <import>true</import> + <headerPattern>/^total|(.?^am(ou)?nt)/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>Total amount of this contribution. Use market value for non-monetary gifts.</comment> + <add>1.3</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>index_total_amount_receive_date</name> + <fieldName>total_amount</fieldName> + <fieldName>receive_date</fieldName> + <add>4.7</add> + </index> + <field> + <name>fee_amount</name> + <type>decimal</type> + <import>true</import> + <headerPattern>/fee(.?am(ou)?nt)?/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>actual processor fee if known - may be 0.</comment> + <add>1.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>net_amount</name> + <type>decimal</type> + <import>true</import> + <headerPattern>/net(.?am(ou)?nt)?/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>actual funds transfer amount. total less fees. if processor does not report actual fee during transaction, this is set to total_amount.</comment> + <add>1.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>trxn_id</name> + <title>Transaction ID</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/tr(ansactio|x)n(.?id)?/i</headerPattern> + <comment>unique transaction id. may be processor id, bank id + trans id, or account number + check number... depending on payment_method</comment> + <html> + <type>Text</type> + </html> + <add>1.3</add> + </field> + <field> + <name>invoice_id</name> + <title>Invoice Reference</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/invoice(.?id)?/i</headerPattern> + <comment>unique invoice id, system generated or passed in</comment> + <html> + <type>Text</type> + </html> + <add>1.3</add> + </field> + <field> + <name>invoice_number</name> + <title>Invoice Number</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/invoice(.?number)?/i</headerPattern> + <comment>Human readable invoice number</comment> + <html> + <type>Text</type> + </html> + <add>4.7</add> + </field> + <field> + <name>currency</name> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <import>true</import> + <headerPattern>/cur(rency)?/i</headerPattern> + <dataPattern>/^[A-Z]{3}$/i</dataPattern> + <comment>3 character string, value from config setting or input via user.</comment> + <add>1.3</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>cancel_date</name> + <type>datetime</type> + <import>true</import> + <headerPattern>/cancel(.?date)?/i</headerPattern> + <dataPattern>/^\d{4}-?\d{2}-?\d{2} ?(\d{2}:?\d{2}:?(\d{2})?)?$/</dataPattern> + <comment>when was gift cancelled</comment> + <add>1.3</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>cancel_reason</name> + <type>text</type> + <import>true</import> + <headerPattern>/(cancel.?)?reason/i</headerPattern> + <html> + <type>Text</type> + </html> + <add>1.3</add> + </field> + <field> + <name>receipt_date</name> + <type>datetime</type> + <import>true</import> + <headerPattern>/receipt(.?date)?/i</headerPattern> + <dataPattern>/^\d{4}-?\d{2}-?\d{2} ?(\d{2}:?\d{2}:?(\d{2})?)?$/</dataPattern> + <comment>when (if) receipt was sent. populated automatically for online donations w/ automatic receipting</comment> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + <add>1.3</add> + </field> + <field> + <name>thankyou_date</name> + <title>Thank-you Date</title> + <type>datetime</type> + <import>true</import> + <headerPattern>/thank(s|(.?you))?(.?date)?/i</headerPattern> + <dataPattern>/^\d{4}-?\d{2}-?\d{2} ?(\d{2}:?\d{2}:?(\d{2})?)?$/</dataPattern> + <comment>when (if) was donor thanked</comment> + <add>1.3</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>source</name> + <uniqueName>contribution_source</uniqueName> + <title>Contribution Source</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/source/i</headerPattern> + <comment>Origin of this Contribution.</comment> + <add>1.3</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>index_source</name> + <fieldName>source</fieldName> + <add>4.7</add> + </index> + <field> + <name>amount_level</name> + <title>Amount Label</title> + <type>text</type> + <import>true</import> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>note</name> + <type>text</type> + <comment>Note and/or Comment.</comment> + <import>true</import> + <headerPattern>/Note|Comment/i</headerPattern> + <dataPattern>//</dataPattern> + <add>1.4</add> + <drop>1.7</drop> + </field> + <index> + <name>UI_contrib_trxn_id</name> + <fieldName>trxn_id</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <index> + <name>UI_contrib_invoice_id</name> + <fieldName>invoice_id</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <field> + <name>contribution_recur_id</name> + <title>Recurring Contribution ID</title> + <type>int unsigned</type> + <comment>Conditional foreign key to civicrm_contribution_recur id. Each contribution made in connection with a recurring contribution carries a foreign key to the recurring contribution record. This assumes we can track these processor initiated events.</comment> + <export>true</export> + <add>1.4</add> + </field> + <foreignKey> + <name>contribution_recur_id</name> + <table>civicrm_contribution_recur</table> + <key>id</key> + <add>1.4</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_test</name> + <title>Test</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_pay_later</name> + <title>Is Pay Later</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <add>2.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>contribution_status_id</name> + <title>Contribution Status ID</title> + <type>int unsigned</type> + <default>1</default> + <import>true</import> + <export>true</export> + <headerPattern>/status/i</headerPattern> + <pseudoconstant> + <optionGroupName>contribution_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.6</add> + </field> + <index> + <name>index_contribution_status</name> + <fieldName>contribution_status_id</fieldName> + <add>1.6</add> + </index> + <index> + <name>received_date</name> + <fieldName>receive_date</fieldName> + <add>1.6</add> + </index> + <field> + <name>address_id</name> + <uniqueName>contribution_address_id</uniqueName> + <title>Contribution Address</title> + <type>int unsigned</type> + <comment>Conditional foreign key to civicrm_address.id. We insert an address record for each contribution when we have associated billing name and address data.</comment> + <add>2.2</add> + <export>true</export> + </field> + <foreignKey> + <name>address_id</name> + <table>civicrm_address</table> + <key>id</key> + <add>2.2</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>check_number</name> + <title>Check Number</title> + <uniqueName>contribution_check_number</uniqueName> + <headerPattern>/check(.?number)?/i</headerPattern> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + <size>6</size> + </html> + <import>true</import> + <add>2.2</add> + </field> + <index> + <name>check_number</name> + <fieldName>check_number</fieldName> + <add>2.2</add> + </index> + <field> + <name>campaign_id</name> + <uniqueName>contribution_campaign_id</uniqueName> + <type>int unsigned</type> + <title>Campaign</title> + <import>true</import> + <comment>The campaign for which this contribution has been triggered.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.4</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>creditnote_id</name> + <title>Credit Note ID</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/creditnote(.?id)?/i</headerPattern> + <comment>unique credit note id, system generated or passed in</comment> + <add>4.6</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>index_creditnote_id</name> + <fieldName>creditnote_id</fieldName> + <add>4.7</add> + </index> + <field> + <name>tax_amount</name> + <title>Tax Amount</title> + <type>decimal</type> + <import>true</import> + <headerPattern>/tax(.?am(ou)?nt)?/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>Total tax amount of this contribution.</comment> + <add>4.6</add> + <html> + <type>Text</type> + </html> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>revenue_recognition_date</name> + <type>datetime</type> + <import>true</import> + <headerPattern>/revenue(.?date)?/i</headerPattern> + <dataPattern>/^\d{4}-?\d{2}-?\d{2} ?(\d{2}:?\d{2}:?(\d{2})?)?$/</dataPattern> + <comment>Stores the date when revenue should be recognized.</comment> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contribute/ContributionPage.xml b/civicrm/xml/schema/Contribute/ContributionPage.xml new file mode 100644 index 0000000000000000000000000000000000000000..ace8c0f500bb5685ed5a1d29d6d9a69d769f8681 --- /dev/null +++ b/civicrm/xml/schema/Contribute/ContributionPage.xml @@ -0,0 +1,462 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contribute</base> + <class>ContributionPage</class> + <name>civicrm_contribution_page</name> + <comment>A Contribution object store meta information about a single customized contribution page</comment> + <add>1.3</add> + <log>true</log> + <field> + <name>id</name> + <title>Contribution Page ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Contribution Id</comment> + <add>1.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>title</name> + <title>Contribution Page Title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Contribution Page title. For top of page display</comment> + <add>1.3</add> + </field> + <field> + <name>intro_text</name> + <title>Contribution Page Introduction Text</title> + <type>text</type> + <html> + <type>RichTextEditor</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>Text and html allowed. Displayed below title.</comment> + <add>1.3</add> + </field> + <field> + <name>contribution_type_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>default Contribution type assigned to contributions submitted via this page, e.g. Contribution, Campaign Contribution</comment> + <add>1.3</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>contribution_type_id</name> + <table>civicrm_contribution_type</table> + <key>id</key> + <drop>4.3</drop> + </foreignKey> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <comment>default financial type assigned to contributions submitted via this page, e.g. Contribution, Campaign Contribution</comment> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.3</add> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>payment_processor</name> + <type>varchar</type> + <length>128</length> + <comment>Payment Processors configured for this contribution Page</comment> + <pseudoconstant> + <table>civicrm_payment_processor</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.8</add> + </field> + <field> + <name>is_credit_card_only</name> + <title>Is Credit Card Only?</title> + <type>boolean</type> + <comment>if true - processing logic must reject transaction at confirmation stage if pay method != credit card</comment> + <default>0</default> + <add>1.3</add> + </field> + <field> + <name>is_monetary</name> + <title>Is Monetary</title> + <type>boolean</type> + <default>1</default> + <comment>if true - allows real-time monetary transactions otherwise non-monetary transactions</comment> + <add>1.6</add> + </field> + <field> + <name>is_recur</name> + <title>Is Recurring</title> + <type>boolean</type> + <default>0</default> + <comment>if true - allows recurring contributions, valid only for PayPal_Standard</comment> + <add>1.6</add> + </field> + <field> + <name>is_confirm_enabled</name> + <title>Confirmation Page?</title> + <type>boolean</type> + <default>1</default> + <comment>if false, the confirm page in contribution pages gets skipped</comment> + <add>4.2</add> + </field> + <field> + <name>recur_frequency_unit</name> + <title>Recurring Frequency</title> + <type>varchar</type> + <length>128</length> + <comment>Supported recurring frequency units.</comment> + <pseudoconstant> + <optionGroupName>recur_frequency_units</optionGroupName> + <keyColumn>name</keyColumn> + </pseudoconstant> + <html> + <type>Select</type> + <multiple>1</multiple> + </html> + <serialize>SEPARATOR_TRIMMED</serialize> + <add>2.1</add> + </field> + <field> + <name>is_recur_interval</name> + <title>Support Recurring Intervals</title> + <type>boolean</type> + <default>0</default> + <comment>if true - supports recurring intervals</comment> + <add>2.1</add> + </field> + <field> + <name>is_recur_installments</name> + <title>Recurring Installments?</title> + <type>boolean</type> + <default>0</default> + <comment>if true - asks user for recurring installments</comment> + <add>4.3</add> + </field> + <field> + <name>adjust_recur_start_date</name> + <title>Adjust Recurring Start Date</title> + <type>boolean</type> + <default>0</default> + <comment>if true - user is able to adjust payment start date</comment> + <add>4.7</add> + </field> + <field> + <name>is_pay_later</name> + <title>Pay Later</title> + <type>boolean</type> + <default>0</default> + <comment>if true - allows the user to send payment directly to the org later</comment> + <add>2.0</add> + </field> + <field> + <name>pay_later_text</name> + <title>Pay Later Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>The text displayed to the user in the main form</comment> + <add>2.0</add> + </field> + <field> + <name>pay_later_receipt</name> + <title>Pay Later Receipt</title> + <type>text</type> + <localizable>true</localizable> + <comment>The receipt sent to the user instead of the normal receipt text</comment> + <add>2.0</add> + </field> + <field> + <name>is_partial_payment</name> + <title>Allow Partial Payment</title> + <type>boolean</type> + <default>0</default> + <comment>is partial payment enabled for this online contribution page</comment> + <add>4.3</add> + </field> + <field> + <name>initial_amount_label</name> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Initial amount label for partial payment</comment> + <add>4.3</add> + </field> + <field> + <name>initial_amount_help_text</name> + <type>text</type> + <localizable>true</localizable> + <comment>Initial amount help text for partial payment</comment> + <add>4.3</add> + </field> + <field> + <name>min_initial_amount</name> + <type>decimal</type> + <comment>Minimum initial amount for partial payment</comment> + <add>4.3</add> + </field> + <field> + <name>is_allow_other_amount</name> + <title>Allow Other Amounts</title> + <type>boolean</type> + <comment>if true, page will include an input text field where user can enter their own amount</comment> + <default>0</default> + <add>1.3</add> + </field> + <field> + <name>default_amount_id</name> + <title>Default Amount</title> + <type>int unsigned</type> + <comment>FK to civicrm_option_value.</comment> + <add>1.7</add> + </field> + <field> + <name>min_amount</name> + <title>Minimum Amount</title> + <type>decimal</type> + <comment>if other amounts allowed, user can configure minimum allowed.</comment> + <add>1.3</add> + </field> + <field> + <name>max_amount</name> + <title>Maximum Amount</title> + <type>decimal</type> + <comment>if other amounts allowed, user can configure maximum allowed.</comment> + <add>1.3</add> + </field> + <field> + <name>goal_amount</name> + <type>decimal</type> + <comment>The target goal for this page, allows people to build a goal meter</comment> + <add>1.5</add> + </field> + <field> + <name>thankyou_title</name> + <title>Thank-you Title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Title for Thank-you page (header title tag, and display at the top of the page).</comment> + <add>1.3</add> + </field> + <field> + <name>thankyou_text</name> + <title>Thank-you Text</title> + <type>text</type> + <html> + <type>RichTextEditor</type> + <rows>8</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>text and html allowed. displayed above result on success page</comment> + <add>1.3</add> + </field> + <field> + <name>thankyou_footer</name> + <title>Thank-you Footer</title> + <type>text</type> + <html> + <type>RichTextEditor</type> + <rows>8</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>Text and html allowed. displayed at the bottom of the success page. Common usage is to include link(s) to other pages such as tell-a-friend, etc.</comment> + <add>1.3</add> + </field> + <field> + <name>is_email_receipt</name> + <title>Send email Receipt</title> + <type>boolean</type> + <comment>if true, receipt is automatically emailed to contact on success</comment> + <default>0</default> + <add>1.3</add> + </field> + <field> + <name>receipt_from_name</name> + <title>Receipt From</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>FROM email name used for receipts generated by contributions to this contribution page.</comment> + <add>1.3</add> + </field> + <field> + <name>receipt_from_email</name> + <title>Receipt From email</title> + <type>varchar</type> + <length>255</length> + <comment>FROM email address used for receipts generated by contributions to this contribution page.</comment> + <add>1.3</add> + </field> + <field> + <name>cc_receipt</name> + <title>Receipt cc</title> + <type>varchar</type> + <length>255</length> + <comment>comma-separated list of email addresses to cc each time a receipt is sent</comment> + <add>1.3</add> + </field> + <field> + <name>bcc_receipt</name> + <title>Receipt bcc</title> + <type>varchar</type> + <length>255</length> + <comment>comma-separated list of email addresses to bcc each time a receipt is sent</comment> + <add>1.3</add> + </field> + <field> + <name>receipt_text</name> + <title>Receipt Text</title> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>text to include above standard receipt info on receipt email. emails are text-only, so do not allow html for now</comment> + <add>1.3</add> + </field> + <field> + <name>is_active</name> + <title>Is Page Active?</title> + <type>boolean</type> + <comment>Is this property active?</comment> + <add>1.3</add> + </field> + <field> + <name>footer_text</name> + <title>Footer Text</title> + <type>text</type> + <html> + <type>RichTextEditor</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>Text and html allowed. Displayed at the bottom of the first page of the contribution wizard.</comment> + <add>1.4</add> + </field> + <field> + <name>amount_block_is_active</name> + <title>Is Amount Block Active?</title> + <type>boolean</type> + <comment>Is this property active?</comment> + <default>1</default> + <add>1.5</add> + </field> + <field> + <name>start_date</name> + <title>Contribution Page Start Date</title> + <type>datetime</type> + <title>Contribution Page Start Date</title> + <comment>Date and time that this page starts.</comment> + <add>1.8</add> + </field> + <field> + <name>end_date</name> + <type>datetime</type> + <title>Contribution Page End Date</title> + <comment>Date and time that this page ends. May be NULL if no defined end date/time</comment> + <add>1.8</add> + </field> + <field> + <name>created_id</name> + <title>Contribution Page Created By</title> + <type>int unsigned</type> + <comment>FK to civicrm_contact, who created this contribution page</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <type>datetime</type> + <title>Contribution Page Created Date</title> + <comment>Date and time that contribution page was created.</comment> + <add>3.0</add> + </field> + <field> + <name>currency</name> + <title>Contribution Page Currency</title> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <headerPattern>/cur(rency)?/i</headerPattern> + <dataPattern>/^[A-Z]{3}$/i</dataPattern> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.3</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>campaign_id</name> + <title>Contribution Page Campaign ID</title> + <type>int unsigned</type> + <comment>The campaign for which we are collecting contributions with this page.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.4</add> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_share</name> + <title>Is Contribution Page Shared?</title> + <type>boolean</type> + <default>1</default> + <comment>Can people share the contribution page through social media?</comment> + <add>4.1</add> + </field> + <field> + <name>is_billing_required</name> + <title>Is billing block required</title> + <type>boolean</type> + <default>0</default> + <comment>if true - billing block is required for online contribution page</comment> + <add>4.6</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contribute/ContributionProduct.xml b/civicrm/xml/schema/Contribute/ContributionProduct.xml new file mode 100644 index 0000000000000000000000000000000000000000..ce6865ec5d3c832e414b3631959490d844422591 --- /dev/null +++ b/civicrm/xml/schema/Contribute/ContributionProduct.xml @@ -0,0 +1,121 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contribute</base> + <class>ContributionProduct</class> + <name>civicrm_contribution_product</name> + <add>1.4</add> + <log>true</log> + <field> + <name>id</name> + <title>Contribution Product ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>product_id</name> + <title>Product ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.4</add> + </field> + <field> + <name>contribution_id</name> + <title>Contribution ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.4</add> + </field> + <foreignKey> + <name>contribution_id</name> + <table>civicrm_contribution</table> + <key>id</key> + <add>1.4</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>product_option</name> + <title>Product Option</title> + <type>varchar</type> + <length>255</length> + <export>true</export> + <comment>Option value selected if applicable - e.g. color, size etc.</comment> + <add>1.4</add> + </field> + <field> + <name>quantity</name> + <title>Quantity</title> + <type>int</type> + <export>true</export> + <comment></comment> + <add>1.4</add> + </field> + <field> + <name>total_cost</name> + <type>decimal</type> + <required>true</required> + <import>true</import> + <headerPattern>/^total|(.?^am(ou)?nt)/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>quantity X civicrm_product.cost.</comment> + <add>1.3</add> + <drop>4.1</drop> + </field> + <field> + <name>fulfilled_date</name> + <type>date</type> + <title>Fulfilled Date</title> + <export>true</export> + <comment>Optional. Can be used to record the date this product was fulfilled or shipped.</comment> + <add>1.4</add> + </field> + <field> + <name>start_date</name> + <uniqueName>contribution_start_date</uniqueName> + <title>Start date for premium</title> + <type>date</type> + <export>true</export> + <comment>Actual start date for a time-delimited premium (subscription, service or membership)</comment> + <add>1.4</add> + </field> + <field> + <name>end_date</name> + <uniqueName>contribution_end_date</uniqueName> + <type>date</type> + <title>End date for premium</title> + <export>true</export> + <comment>Actual end date for a time-delimited premium (subscription, service or membership)</comment> + <add>1.4</add> + </field> + <field> + <name>comment</name> + <title>Premium comment</title> + <type>text</type> + <add>1.4</add> + </field> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <default>NULL</default> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>FK to Financial Type(for membership price sets only).</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.3</add> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Contribute/ContributionRecur.xml b/civicrm/xml/schema/Contribute/ContributionRecur.xml new file mode 100644 index 0000000000000000000000000000000000000000..26407dcc93ea7889b9c7360d8b7f2d2ae4ed5630 --- /dev/null +++ b/civicrm/xml/schema/Contribute/ContributionRecur.xml @@ -0,0 +1,391 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Contribute</base> + <class>ContributionRecur</class> + <name>civicrm_contribution_recur</name> + <add>1.6</add> + <log>true</log> + <field> + <name>id</name> + <title>Recurring Contribution ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Contribution Recur ID</comment> + <add>1.6</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to civicrm_contact.id .</comment> + <add>1.6</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.6</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>amount</name> + <title>Amount</title> + <type>decimal</type> + <required>true</required> + <comment>Amount to be contributed or charged each recurrence.</comment> + <add>1.6</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>currency</name> + <title>Currency</title> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>frequency_unit</name> + <title>Frequency Unit</title> + <type>varchar</type> + <length>8</length> + <default>'month'</default> + <comment>Time units for recurrence of payment.</comment> + <pseudoconstant> + <optionGroupName>recur_frequency_units</optionGroupName> + <keyColumn>name</keyColumn> + </pseudoconstant> + <add>1.6</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>frequency_interval</name> + <title>Interval (number of units)</title> + <type>int unsigned</type> + <required>true</required> + <comment>Number of time units for recurrence of payment.</comment> + <add>1.6</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>installments</name> + <title>Number of Installments</title> + <type>int unsigned</type> + <comment>Total number of payments to be made. Set this to 0 if this is an open-ended commitment i.e. no set end date.</comment> + <add>1.6</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>start_date</name> + <title>Recurring Contribution Started Date</title> + <type>datetime</type> + <required>true</required> + <comment>The date the first scheduled recurring contribution occurs.</comment> + <add>1.6</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>create_date</name> + <title>Recurring Contribution Created Date</title> + <type>datetime</type> + <required>true</required> + <comment>When this recurring contribution record was created.</comment> + <add>1.6</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>modified_date</name> + <title>Recurring Contribution Modified Date</title> + <type>datetime</type> + <comment>Last updated date for this record. mostly the last time a payment was received</comment> + <add>1.6</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>cancel_date</name> + <title>Recurring Contribution Cancel Date</title> + <type>datetime</type> + <comment>Date this recurring contribution was cancelled by contributor- if we can get access to it</comment> + <add>1.6</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>end_date</name> + <title>Recurring Contribution End Date</title> + <type>datetime</type> + <comment>Date this recurring contribution finished successfully</comment> + <add>1.6</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>processor_id</name> + <title>Processor ID</title> + <type>varchar</type> + <length>255</length> + <comment>Possibly needed to store a unique identifier for this recurring payment order - if this is available from the processor??</comment> + <add>1.6</add> + </field> + <field> + <name>payment_token_id</name> + <title>Payment Token ID</title> + <type>int unsigned</type> + <comment>Optionally used to store a link to a payment token used for this recurring contribution.</comment> + <add>4.6</add> + </field> + <foreignKey> + <name>payment_token_id</name> + <table>civicrm_payment_token</table> + <key>id</key> + <add>4.6</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>trxn_id</name> + <title>Transaction ID</title> + <type>varchar</type> + <length>255</length> + <comment>unique transaction id. may be processor id, bank id + trans id, or account number + check number... depending on payment_method</comment> + <add>1.6</add> + </field> + <field> + <name>invoice_id</name> + <title>Invoice ID</title> + <type>varchar</type> + <length>255</length> + <comment>unique invoice id, system generated or passed in</comment> + <add>1.6</add> + </field> + <index> + <name>UI_contrib_trxn_id</name> + <fieldName>trxn_id</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <index> + <name>UI_contrib_invoice_id</name> + <fieldName>invoice_id</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <field> + <name>contribution_status_id</name> + <title>Recurring Contribution Status</title> + <type>int unsigned</type> + <default>1</default> + <import>true</import> + <add>1.6</add> + <pseudoconstant> + <optionGroupName>contribution_status</optionGroupName> + </pseudoconstant> + </field> + <index> + <name>index_contribution_status</name> + <fieldName>contribution_status_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>is_test</name> + <title>Test</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>cycle_day</name> + <title>Number of Cycle Day</title> + <type>int unsigned</type> + <default>1</default> + <required>true</required> + <comment>Day in the period when the payment should be charged e.g. 1st of month, 15th etc.</comment> + <add>1.6</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>next_sched_contribution</name> + <type>datetime</type> + <comment>At Groundspring this was used by the cron job which triggered payments. If we''re not doing that but we know about payments, it might still be useful to store for display to org andor contributors.</comment> + <add>1.6</add> + <drop>4.4</drop> + </field> + <field> + <name>next_sched_contribution_date</name> + <title>Next Scheduled Contribution Date</title> + <type>datetime</type> + <comment>Next scheduled date</comment> + <add>4.4</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>failure_count</name> + <title>Number of Failures</title> + <type>int unsigned</type> + <default>0</default> + <comment>Number of failed charge attempts since last success. Business rule could be set to deactivate on more than x failures.</comment> + <add>1.6</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>failure_retry_date</name> + <type>datetime</type> + <title>Retry Failed Attempt Date</title> + <comment>Date to retry failed attempt</comment> + <add>1.6</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>auto_renew</name> + <title>Auto Renew</title> + <type>boolean</type> + <required>true</required> + <default>0</default> + <comment>Some systems allow contributor to set a number of installments - but then auto-renew the subscription or commitment if they do not cancel.</comment> + <add>1.6</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>payment_processor_id</name> + <title>Payment Processor</title> + <type>int unsigned</type> + <comment>Foreign key to civicrm_payment_processor.id</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>payment_processor_id</name> + <table>civicrm_payment_processor</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>contribution_type_id</name> + <title>Contribution Type</title> + <export>false</export> + <type>int unsigned</type> + <comment>FK to Contribution Type</comment> + <add>4.1</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>contribution_type_id</name> + <table>civicrm_contribution_type</table> + <key>id</key> + <add>4.1</add> + <drop>4.3</drop> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <export>false</export> + <type>int unsigned</type> + <comment>FK to Financial Type</comment> + <add>4.3</add> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <add>4.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>payment_instrument_id</name> + <title>Payment Method</title> + <type>int unsigned</type> + <comment>FK to Payment Instrument</comment> + <pseudoconstant> + <optionGroupName>payment_instrument</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.1</add> + </field> + <index> + <name>UI_contribution_recur_payment_instrument_id</name> + <fieldName>payment_instrument_id</fieldName> + <add>4.1</add> + </index> + <field> + <name>campaign_id</name> + <uniqueName>contribution_campaign_id</uniqueName> + <type>int unsigned</type> + <title>Campaign</title> + <import>true</import> + <comment>The campaign for which this contribution has been triggered.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>4.1</add> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_email_receipt</name> + <title>Send email Receipt?</title> + <type>boolean</type> + <comment>if true, receipt is automatically emailed to contact on each successful payment</comment> + <default>1</default> + <add>4.1</add> + <html> + <type>CheckBox</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Contribute/ContributionSoft.xml b/civicrm/xml/schema/Contribute/ContributionSoft.xml new file mode 100644 index 0000000000000000000000000000000000000000..cf9d3f384eae0fdc502c4a5de49e4fca8549e365 --- /dev/null +++ b/civicrm/xml/schema/Contribute/ContributionSoft.xml @@ -0,0 +1,146 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contribute</base> + <class>ContributionSoft</class> + <name>civicrm_contribution_soft</name> + <add>2.2</add> + <log>true</log> + <field> + <name>id</name> + <uniqueName>contribution_soft_id</uniqueName> + <title>Soft Contribution ID</title> + <type>int unsigned</type> + <required>true</required> + <import>true</import> + <title>Soft Contribution ID</title> + <comment>Soft Contribution ID</comment> + <add>2.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contribution_id</name> + <title>Soft Contribution - Contribution</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to contribution table.</comment> + <add>2.2</add> + </field> + <foreignKey> + <name>contribution_id</name> + <table>civicrm_contribution</table> + <key>id</key> + <add>2.2</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <uniqueName>contribution_soft_contact_id</uniqueName> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <import>true</import> + <headerPattern>/contact(.?id)?/i</headerPattern> + <dataPattern>/^\d+$/</dataPattern> + <comment>FK to Contact ID</comment> + <add>2.2</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.2</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>amount</name> + <title>Soft Contribution Amount</title> + <type>decimal</type> + <required>true</required> + <import>true</import> + <headerPattern>/total(.?am(ou)?nt)?/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>Amount of this soft contribution.</comment> + <add>2.2</add> + </field> + <field> + <name>currency</name> + <type>varchar</type> + <title>Soft Contribution Currency</title> + <length>3</length> + <default>NULL</default> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>pcp_id</name> + <type>int unsigned</type> + <title>Soft Contribution PCP</title> + <default>NULL</default> + <comment>FK to civicrm_pcp.id</comment> + <add>2.2</add> + <pseudoconstant> + <table>civicrm_pcp</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + </field> + <foreignKey> + <name>pcp_id</name> + <table>civicrm_pcp</table> + <key>id</key> + <add>3.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <index> + <name>index_id</name> + <fieldName>pcp_id</fieldName> + <add>2.2</add> + </index> + <field> + <name>pcp_display_in_roll</name> + <type>boolean</type> + <title>Soft Contribution Display on PCP</title> + <default>0</default> + <add>2.2</add> + </field> + <field> + <name>pcp_roll_nickname</name> + <type>varchar</type> + <title>Soft Contribution PCP Nickname</title> + <length>255</length> + <default>NULL</default> + <add>2.2</add> + </field> + <field> + <name>pcp_personal_note</name> + <type>varchar</type> + <title>Soft Contribution PCP Note</title> + <length>255</length> + <default>NULL</default> + <add>2.2</add> + </field> + <field> + <name>soft_credit_type_id</name> + <type>int unsigned</type> + <default>NULL</default> + <title>Soft Credit Type</title> + <pseudoconstant> + <optionGroupName>soft_credit_type</optionGroupName> + </pseudoconstant> + <comment>Soft Credit Type ID.Implicit FK to civicrm_option_value where option_group = soft_credit_type.</comment> + <add>2.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contribute/Premium.xml b/civicrm/xml/schema/Contribute/Premium.xml new file mode 100644 index 0000000000000000000000000000000000000000..039d1921a90f3e7be6344f80fd4d467724d286dc --- /dev/null +++ b/civicrm/xml/schema/Contribute/Premium.xml @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contribute</base> + <class>Premium</class> + <comment>table - settings for the Premiums features for a given contribution page </comment> + <name>civicrm_premiums</name> + <add>1.4</add> + <log>true</log> + <field> + <name>id</name> + <title>Premium ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Premium Entity</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Joins these premium settings to another object. Always civicrm_contribution_page for now.</comment> + <add>1.4</add> + </field> + <field> + <name>entity_id</name> + <title>Premium entity ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.4</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.4</add> + </dynamicForeignKey> + <field> + <name>premiums_active </name> + <title>Is Premium Active?</title> + <type>boolean</type> + <default>0</default> + <required>true</required> + <comment>Is the Premiums feature enabled for this page?</comment> + <add>1.4</add> + </field> + <field> + <name>premiums_intro_title</name> + <type>varchar</type> + <title>Title for Premiums section</title> + <length>255</length> + <localizable>true</localizable> + <comment>Title for Premiums section.</comment> + <add>1.4</add> + </field> + <field> + <name>premiums_intro_text</name> + <title>Premium Introductory Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>Displayed in <div> at top of Premiums section of page. Text and HTML allowed.</comment> + <add>1.4</add> + </field> + <field> + <name>premiums_contact_email</name> + <title>Premium Contact Email</title> + <type>varchar</type> + <length>100</length> + <comment>This email address is included in receipts if it is populated and a premium has been selected.</comment> + <add>1.4</add> + </field> + <field> + <name>premiums_contact_phone</name> + <title>Premiums Contact Phone</title> + <type>varchar</type> + <length>50</length> + <comment>This phone number is included in receipts if it is populated and a premium has been selected.</comment> + <add>1.4</add> + </field> + <field> + <name>premiums_display_min_contribution</name> + <title>Display Minimum Contribution?</title> + <type>boolean</type> + <required>true</required> + <comment>Boolean. Should we automatically display minimum contribution amount text after the premium descriptions.</comment> + <add>1.4</add> + </field> + <field> + <name>premiums_nothankyou_label</name> + <title>No Thank-you Text</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Label displayed for No Thank-you option in premiums block (e.g. No thank you)</comment> + <add>4.3</add> + </field> + <field> + <name>premiums_nothankyou_position</name> + <title>No Thank-you Position</title> + <type>int unsigned</type> + <default>1</default> + <add>4.3</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contribute/PremiumsProduct.xml b/civicrm/xml/schema/Contribute/PremiumsProduct.xml new file mode 100644 index 0000000000000000000000000000000000000000..7f9b86604767f86ed026e5dfe99352be072872cf --- /dev/null +++ b/civicrm/xml/schema/Contribute/PremiumsProduct.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contribute</base> + <class>PremiumsProduct</class> + <name>civicrm_premiums_product</name> + <comment>joins premiums (settings) to individual product/premium items - determines which products are available for a given contribution page</comment> + <add>1.4</add> + <log>true</log> + <field> + <name>id</name> + <title>Premium Product ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Contribution ID</comment> + <add>1.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>premiums_id</name> + <title>Premium</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to premiums settings record.</comment> + <add>1.4</add> + </field> + <foreignKey> + <name>premiums_id</name> + <table>civicrm_premiums</table> + <key>id</key> + <add>1.4</add> + </foreignKey> + <field> + <name>product_id</name> + <title>Product</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to each product object.</comment> + <add>1.4</add> + </field> + <foreignKey> + <name>product_id</name> + <table>civicrm_product</table> + <key>id</key> + <add>1.4</add> + </foreignKey> + <field> + <name>sort_position</name> + <title>Sort Position</title> + <type>int unsigned</type> + <required>true</required> + <add>1.4</add> + <drop>2.0</drop> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int unsigned</type> + <required>true</required> + <add>2.0</add> + </field> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <default>NULL</default> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>FK to Financial Type.</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.3</add> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Contribute/Product.xml b/civicrm/xml/schema/Contribute/Product.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0095082ab1eed5128c2b18fa9ebe4bbd5edd7e3 --- /dev/null +++ b/civicrm/xml/schema/Contribute/Product.xml @@ -0,0 +1,208 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contribute</base> + <class>Product</class> + <comment>able - stores "product info" for premiums and can be used for non-incentive products </comment> + <name>civicrm_product</name> + <add>1.4</add> + <log>true</log> + <field> + <name>id</name> + <title>Product ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <uniqueName>product_name</uniqueName> + <title>Product Name</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <export>true</export> + <localizable>true</localizable> + <comment>Required product/premium name</comment> + <add>1.4</add> + </field> + <field> + <name>description</name> + <title>Description</title> + <type>text</type> + <localizable>true</localizable> + <comment>Optional description of the product/premium.</comment> + <add>1.4</add> + </field> + <field> + <name>sku</name> + <title>SKU</title> + <type>varchar</type> + <length>50</length> + <export>true</export> + <comment>Optional product sku or code.</comment> + <add>1.4</add> + </field> + <field> + <name>options</name> + <title>Options</title> + <type>text</type> + <localizable>true</localizable> + <comment>Store comma-delimited list of color, size, etc. options for the product.</comment> + <add>1.4</add> + </field> + <field> + <name>image</name> + <title>Image</title> + <type>varchar</type> + <length>255</length> + <comment>Full or relative URL to uploaded image - fullsize.</comment> + <add>1.4</add> + </field> + <field> + <name>thumbnail</name> + <title>Thumbnail</title> + <type>varchar</type> + <length>255</length> + <comment>Full or relative URL to image thumbnail.</comment> + <add>1.4</add> + </field> + <field> + <name>price</name> + <title>Price</title> + <type>decimal</type> + <comment>Sell price or market value for premiums. For tax-deductible contributions, this will be stored as non_deductible_amount in the contribution record.</comment> + <add>1.4</add> + </field> + <field> + <name>currency</name> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <default>NULL</default> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>FK to Financial Type.</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.3</add> + </foreignKey> + + <field> + <name>min_contribution</name> + <title>Minimum Contribution</title> + <type>decimal</type> + <comment>Minimum contribution required to be eligible to select this premium.</comment> + <add>1.4</add> + </field> + <field> + <name>cost</name> + <title>Cost</title> + <type>decimal</type> + <comment>Actual cost of this product. Useful to determine net return from sale or using this as an incentive.</comment> + <add>1.4</add> + </field> + <field> + <name>is_active</name> + <title>Is Active</title> + <type>boolean</type> + <required>true</required> + <comment>Disabling premium removes it from the premiums_premium join table below.</comment> + <add>1.4</add> + </field> + <field> + <name>period_type</name> + <title>Period Type</title> + <type>varchar</type> + <length>8</length> + <default>'rolling'</default> + <comment>Rolling means we set start/end based on current day, fixed means we set start/end for current year or month + (e.g. 1 year + fixed -> we would set start/end for 1/1/06 thru 12/31/06 for any premium chosen in 2006) </comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::periodType</callback> + </pseudoconstant> + <add>1.4</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>fixed_period_start_day</name> + <title>Fixed Period Start Day</title> + <type>int</type> + <default>0101</default> + <comment>Month and day (MMDD) that fixed period type subscription or membership starts.</comment> + <add>1.4</add> + </field> + <field> + <name>duration_unit</name> + <title>Duration Unit</title> + <type>varchar</type> + <length>8</length> + <default>'year'</default> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getPremiumUnits</callback> + </pseudoconstant> + <add>1.4</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>duration_interval</name> + <title>Duration Interval</title> + <type>int</type> + <comment>Number of units for total duration of subscription, service, membership (e.g. 12 Months).</comment> + <add>1.4</add> + </field> + <field> + <name>frequency_unit</name> + <title>Frequency Unit</title> + <type>varchar</type> + <length>8</length> + <default>'month'</default> + <comment>Frequency unit and interval allow option to store actual delivery frequency for a subscription or service.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getPremiumUnits</callback> + </pseudoconstant> + <add>1.4</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>frequency_interval</name> + <title>Frequency Interval</title> + <type>int</type> + <comment>Number of units for delivery frequency of subscription, service, membership (e.g. every 3 Months).</comment> + <add>1.4</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contribute/Widget.xml b/civicrm/xml/schema/Contribute/Widget.xml new file mode 100644 index 0000000000000000000000000000000000000000..22ffb1170917164cafebeccb73834a60f80f189b --- /dev/null +++ b/civicrm/xml/schema/Contribute/Widget.xml @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Contribute</base> + <class>Widget</class> + <name>civicrm_contribution_widget</name> + <comment>A Widget object to store meta information about a single customized contribution widget</comment> + <add>2.0</add> + <log>true</log> + <field> + <name>id</name> + <title>Widget ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Contribution Id</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contribution_page_id</name> + <title>Contribution Page</title> + <type>int unsigned</type> + <comment>The Contribution Page which triggered this contribution</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>contribution_page_id</name> + <table>civicrm_contribution_page</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>is_active</name> + <title>Enabled?</title> + <type>boolean</type> + <comment>Is this property active?</comment> + <add>2.0</add> + </field> + <field> + <name>title</name> + <title>Widget Title</title> + <type>varchar</type> + <length>255</length> + <comment>Widget title.</comment> + <add>2.0</add> + </field> + <field> + <name>url_logo</name> + <title>Widget Image Url</title> + <type>varchar</type> + <length>255</length> + <comment>URL to Widget logo</comment> + <add>2.0</add> + </field> + <field> + <name>button_title</name> + <title>Button Title</title> + <type>varchar</type> + <length>255</length> + <comment>Button title.</comment> + <add>2.0</add> + </field> + <field> + <name>about</name> + <title>Description</title> + <type>text</type> + <comment>About description.</comment> + <add>2.0</add> + </field> + <field> + <name>url_homepage</name> + <title>Homepage Url</title> + <type>varchar</type> + <length>255</length> + <comment>URL to Homepage.</comment> + <add>2.0</add> + </field> + <field> + <name>color_title</name> + <title>Title Color</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> + <field> + <name>color_button</name> + <title>Button Colour</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> + <field> + <name>color_bar</name> + <title>Bar Color</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> + <field> + <name>color_main_text</name> + <title>Main Text Color</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> + <field> + <name>color_main</name> + <title>Main Colour</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> + <field> + <name>color_main_bg</name> + <title>Backgroup Color</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> + <field> + <name>color_bg</name> + <title>Other Backgroun Colour</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> + <field> + <name>color_about_link</name> + <title>About Link Colour</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> + <field> + <name>color_homepage_link</name> + <title>Homepage Link Colour</title> + <type>varchar</type> + <length>10</length> + <add>2.0</add> + </field> +</table> diff --git a/civicrm/xml/schema/Contribute/files.xml b/civicrm/xml/schema/Contribute/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..f4717f7957aac07ab02b29f997ff38671ac184b4 --- /dev/null +++ b/civicrm/xml/schema/Contribute/files.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="ContributionRecur.xml" parse="xml" /> +<xi:include href="Contribution.xml" parse="xml" /> +<xi:include href="ContributionPage.xml" parse="xml" /> +<xi:include href="ContributionProduct.xml" parse="xml" /> +<xi:include href="ContributionSoft.xml" parse="xml" /> +<xi:include href="Premium.xml" parse="xml" /> +<xi:include href="Product.xml" parse="xml" /> +<xi:include href="PremiumsProduct.xml" parse="xml" /> +<xi:include href="Widget.xml" parse="xml" /> + +</tables> diff --git a/civicrm/xml/schema/Core/ActionLog.xml b/civicrm/xml/schema/Core/ActionLog.xml new file mode 100644 index 0000000000000000000000000000000000000000..9bfc8cbcd4807235fa92dcfa5ba5f3b44854468e --- /dev/null +++ b/civicrm/xml/schema/Core/ActionLog.xml @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>ActionLog</class> + <name>civicrm_action_log</name> + <comment>Table to store log for the reminder.</comment> + <add>3.4</add> + <field> + <name>id</name> + <title>Action Schedule ID</title> + <type>int unsigned</type> + <required>true</required> + <add>3.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Action Schedule Contact ID</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>3.4</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.4</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to id of the entity that the action was performed on. Pseudo - FK.</comment> + <add>3.4</add> + </field> + <field> + <name>entity_table</name> + <type>varchar</type> + <title>Entity Table</title> + <length>255</length> + <comment>name of the entity table for the above id, e.g. civicrm_activity, civicrm_participant</comment> + <add>3.4</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>3.4</add> + </dynamicForeignKey> + <field> + <name>action_schedule_id</name> + <title>Schedule</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to the action schedule that this action originated from.</comment> + <add>3.4</add> + </field> + <foreignKey> + <name>action_schedule_id</name> + <table>civicrm_action_schedule</table> + <key>id</key> + <add>3.4</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>action_date_time</name> + <title>Action Date And Time</title> + <type>datetime</type> + <comment>date time that the action was performed on.</comment> + <add>3.4</add> + </field> + <field> + <name>is_error</name> + <title>Error?</title> + <type>boolean</type> + <default>0</default> + <comment>Was there any error sending the reminder?</comment> + <add>3.4</add> + </field> + <field> + <name>message</name> + <title>Message</title> + <type>text</type> + <comment>Description / text in case there was an error encountered.</comment> + <add>3.4</add> + </field> + <field> + <name>repetition_number</name> + <title>Repetition Number</title> + <type>int unsigned</type> + <comment>Keeps track of the sequence number of this repetition.</comment> + <add>3.4</add> + </field> + <field> + <name>reference_date</name> + <title>Reference Date</title> + <type>date</type> + <default>NULL</default> + <comment>Stores the date from the entity which triggered this reminder action (e.g. membership.end_date for most membership renewal reminders)</comment> + <add>4.6</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/ActionMapping.xml b/civicrm/xml/schema/Core/ActionMapping.xml new file mode 100644 index 0000000000000000000000000000000000000000..5ce84e661146581b17b8512234cf2daf01297821 --- /dev/null +++ b/civicrm/xml/schema/Core/ActionMapping.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>ActionMapping</class> + <name>civicrm_action_mapping</name> + <comment>Table to store mapping for the reminder.</comment> + <add>3.4</add> + <field> + <name>id</name> + <title>Action Mapping ID</title> + <type>int unsigned</type> + <required>true</required> + <add>3.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity</name> + <title>Action Mapping Entity</title> + <type>varchar</type> + <length>64</length> + <comment>Entity for which the reminder is created</comment> + <add>3.4</add> + </field> + <field> + <name>entity_value</name> + <title>Action Mapping Entity Value</title> + <type>varchar</type> + <length>64</length> + <comment>Entity value</comment> + <add>3.4</add> + </field> + <field> + <name>entity_value_label</name> + <title>Value Label</title> + <type>varchar</type> + <length>64</length> + <comment>Entity value label</comment> + <add>3.4</add> + </field> + <field> + <name>entity_status</name> + <title>Status</title> + <type>varchar</type> + <length>64</length> + <comment>Entity status</comment> + <add>3.4</add> + </field> + <field> + <name>entity_status_label</name> + <title>Status Label</title> + <type>varchar</type> + <length>64</length> + <comment>Entity status label</comment> + <add>3.4</add> + </field> + <field> + <name>entity_date_start</name> + <title>Entity Start Date</title> + <type>varchar</type> + <length>64</length> + <comment>Entity date</comment> + <add>3.4</add> + </field> + <field> + <name>entity_date_end</name> + <title>Entity End Date</title> + <type>varchar</type> + <length>64</length> + <comment>Entity date</comment> + <add>3.4</add> + </field> + <field> + <name>entity_recipient</name> + <title>Entity Recipient</title> + <type>varchar</type> + <length>64</length> + <comment>Entity recipient</comment> + <add>3.4</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/ActionSchedule.xml b/civicrm/xml/schema/Core/ActionSchedule.xml new file mode 100644 index 0000000000000000000000000000000000000000..98d8c55dcb9dde6161ce88cbef183139c8fad343 --- /dev/null +++ b/civicrm/xml/schema/Core/ActionSchedule.xml @@ -0,0 +1,344 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>ActionSchedule</class> + <name>civicrm_action_schedule</name> + <comment>Table to store the reminders.</comment> + <add>3.4</add> + <field> + <name>id</name> + <title>Action Schedule ID</title> + <type>int unsigned</type> + <required>true</required> + <add>3.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Name</title> + <type>varchar</type> + <length>64</length> + <comment>Name of the action(reminder)</comment> + <add>3.4</add> + </field> + <field> + <name>title</name> + <title>Title</title> + <type>varchar</type> + <length>64</length> + <comment>Title of the action(reminder)</comment> + <add>3.4</add> + </field> + <field> + <name>recipient</name> + <type>varchar</type> + <length>64</length> + <comment>Recipient</comment> + <add>3.4</add> + </field> + <field> + <name>limit_to</name> + <type>boolean</type> + <comment>Is this the recipient criteria limited to OR in addition to?</comment> + <add>4.4</add> + </field> + <field> + <name>entity_value</name> + <type>varchar</type> + <length>255</length> + <comment>Entity value</comment> + <add>3.4</add> + </field> + <field> + <name>entity_status</name> + <type>varchar</type> + <length>64</length> + <comment>Entity status</comment> + <add>3.4</add> + </field> + <field> + <name>start_action_offset</name> + <type>int unsigned</type> + <comment>Reminder Interval.</comment> + <add>3.4</add> + </field> + <field> + <name>start_action_unit</name> + <type>varchar</type> + <length>8</length> + <comment>Time units for reminder.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getRecurringFrequencyUnits</callback> + </pseudoconstant> + <add>3.4</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>start_action_condition</name> + <type>varchar</type> + <length>64</length> + <comment>Reminder Action</comment> + <add>3.4</add> + </field> + <field> + <name>start_action_date</name> + <type>varchar</type> + <length>64</length> + <comment>Entity date</comment> + <add>3.4</add> + </field> + <field> + <name>is_repeat</name> + <title>Repeat?</title> + <type>boolean</type> + <default>0</default> + <add>3.4</add> + </field> + <field> + <name>repetition_frequency_unit</name> + <type>varchar</type> + <length>8</length> + <comment>Time units for repetition of reminder.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getRecurringFrequencyUnits</callback> + </pseudoconstant> + <add>3.4</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>repetition_frequency_interval</name> + <type>int unsigned</type> + <comment>Time interval for repeating the reminder.</comment> + <add>3.4</add> + </field> + <field> + <name>end_frequency_unit</name> + <type>varchar</type> + <length>8</length> + <comment>Time units till repetition of reminder.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getRecurringFrequencyUnits</callback> + </pseudoconstant> + <add>3.4</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>end_frequency_interval</name> + <type>int unsigned</type> + <comment>Time interval till repeating the reminder.</comment> + <add>3.4</add> + </field> + <field> + <name>end_action</name> + <type>varchar</type> + <length>32</length> + <comment>Reminder Action till repeating the reminder.</comment> + <add>3.4</add> + </field> + <field> + <name>end_date</name> + <type>varchar</type> + <length>64</length> + <comment>Entity end date</comment> + <add>3.4</add> + </field> + <field> + <name>is_active</name> + <title>Schedule is Active?</title> + <type>boolean</type> + <default>1</default> + <comment>Is this option active?</comment> + <add>3.4</add> + </field> + <field> + <name>recipient_manual</name> + <title>Recipient Manual</title> + <type>varchar</type> + <length>128</length> + <comment>Contact IDs to which reminder should be sent.</comment> + <add>3.4</add> + </field> + <field> + <name>recipient_listing</name> + <title>Recipient Listing</title> + <type>varchar</type> + <length>128</length> + <comment>listing based on recipient field.</comment> + <add>4.1</add> + </field> + <field> + <name>body_text</name> + <title>Reminder Text</title> + <type>longtext</type> + <comment>Body of the mailing in text format.</comment> + <add>3.4</add> + </field> + <field> + <name>body_html</name> + <title>Reminder HTML</title> + <type>longtext</type> + <comment>Body of the mailing in html format.</comment> + <add>3.4</add> + </field> + <field> + <name>sms_body_text</name> + <title>SMS Reminder Text</title> + <type>longtext</type> + <comment>Content of the SMS text.</comment> + <add>4.5</add> + </field> + <field> + <name>subject</name> + <title>Reminder Subject</title> + <type>varchar</type> + <length>128</length> + <comment>Subject of mailing</comment> + <add>3.4</add> + </field> + <field> + <name>record_activity</name> + <title>Record Activity for Reminder?</title> + <type>boolean</type> + <default>NULL</default> + <comment>Record Activity for this reminder?</comment> + <add>3.4</add> + </field> + <field> + <name>mapping_id</name> + <title>Reminder Mapping</title> + <type>varchar</type> + <length>64</length> + <comment>Name/ID of the mapping to use on this table</comment> + <add>3.4</add> + </field> + <field> + <name>group_id</name> + <title>Reminder Group</title> + <type>int unsigned</type> + <comment>FK to Group</comment> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>3.4</add> + </field> + <foreignKey> + <name>group_id</name> + <table>civicrm_group</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>msg_template_id</name> + <title>Reminder Template</title> + <type>int unsigned</type> + <comment>FK to the message template.</comment> + </field> + <foreignKey> + <name>msg_template_id</name> + <table>civicrm_msg_template</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>sms_template_id</name> + <title>SMS Reminder Template</title> + <type>int unsigned</type> + <comment>FK to the message template.</comment> + </field> + <foreignKey> + <name>sms_template_id</name> + <table>civicrm_msg_template</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>absolute_date</name> + <title>Fixed Date for Reminder</title> + <type>date</type> + <comment>Date on which the reminder be sent.</comment> + <add>4.1</add> + </field> + <field> + <name>from_name</name> + <title>Reminder from Name</title> + <type>varchar</type> + <length>255</length> + <comment>Name in "from" field</comment> + <add>4.5</add> + </field> + <field> + <name>from_email</name> + <title>Reminder From Email</title> + <type>varchar</type> + <length>255</length> + <comment>Email address in "from" field</comment> + <add>4.5</add> + </field> + <field> + <name>mode</name> + <title>Message Mode</title> + <default>"Email"</default> + <type>varchar</type> + <length>128</length> + <comment>Send the message as email or sms or both.</comment> + <pseudoconstant> + <optionGroupName>msg_mode</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.5</add> + </field> + <field> + <name>sms_provider_id</name> + <title>SMS Provider</title> + <type>int unsigned</type> + <add>4.5</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>sms_provider_id</name> + <table>civicrm_sms_provider</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.5</add> + </foreignKey> + <field> + <name>used_for</name> + <type>varchar</type> + <length>64</length> + <comment>Used for repeating entity</comment> + <add>4.6</add> + </field> + <field> + <name>filter_contact_language</name> + <type>varchar</type> + <length>128</length> + <comment>Used for multilingual installation</comment> + <add>4.7</add> + </field> + <field> + <name>communication_language</name> + <type>varchar</type> + <length>8</length> + <comment>Used for multilingual installation</comment> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Address.xml b/civicrm/xml/schema/Core/Address.xml new file mode 100644 index 0000000000000000000000000000000000000000..878b446df82b06c677a9b163a4c53b51a041a6af --- /dev/null +++ b/civicrm/xml/schema/Core/Address.xml @@ -0,0 +1,445 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Address</class> + <name>civicrm_address</name> + <comment>Stores the physical street / mailing address. This format should be capable of storing ALL international addresses.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Address ID</title> + <required>true</required> + <comment>Unique Address ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>location_type_id</name> + <title>Address Location Type</title> + <type>int unsigned</type> + <comment>Which Location does this address belong to.</comment> + <add>2.0</add> + <pseudoconstant> + <table>civicrm_location_type</table> + <keyColumn>id</keyColumn> + <labelColumn>display_name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>index_location_type</name> + <fieldName>location_type_id</fieldName> + <add>2.0</add> + </index> + <field> + <name>is_primary</name> + <title>Is Address Primary?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the primary address.</comment> + <add>2.0</add> + <html> + <type>CheckBox</type> + </html> + </field> + <index> + <name>index_is_primary</name> + <fieldName>is_primary</fieldName> + <add>2.0</add> + </index> + <field> + <name>is_billing</name> + <title>Is Billing Address</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the billing address.</comment> + <add>2.0</add> + <html> + <type>CheckBox</type> + </html> + </field> + <index> + <name>index_is_billing</name> + <fieldName>is_billing</fieldName> + <add>2.0</add> + </index> + <field> + <name>street_address</name> + <title>Street Address</title> + <type>varchar</type> + <length>96</length> + <import>true</import> + <headerPattern>/(street|address)/i</headerPattern> + <dataPattern>/^(\d{1,5}( [0-9A-Za-z]+)+)$|^(P\.?O\.\? Box \d{1,5})$/i</dataPattern> + <comment>Concatenation of all routable street address components (prefix, street number, street name, suffix, unit + number OR P.O. Box). Apps should be able to determine physical location with this data (for mapping, mail + delivery, etc.). + </comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>street_number</name> + <title>Street Number</title> + <type>int</type> + <export>true</export> + <comment>Numeric portion of address number on the street, e.g. For 112A Main St, the street_number = 112.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>street_number_suffix</name> + <title>Street Number Suffix</title> + <type>varchar</type> + <length>8</length> + <export>true</export> + <comment>Non-numeric portion of address number on the street, e.g. For 112A Main St, the street_number_suffix = A + </comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>street_number_predirectional</name> + <title>Street Direction Prefix</title> + <type>varchar</type> + <length>8</length> + <comment>Directional prefix, e.g. SE Main St, SE is the prefix.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>street_name</name> + <type>varchar</type> + <title>Street Name</title> + <length>64</length> + <export>true</export> + <comment>Actual street name, excluding St, Dr, Rd, Ave, e.g. For 112 Main St, the street_name = Main.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>index_street_name</name> + <fieldName>street_name</fieldName> + <add>1.1</add> + </index> + <field> + <name>street_type</name> + <title>Street Type</title> + <type>varchar</type> + <length>8</length> + <comment>St, Rd, Dr, etc.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>street_number_postdirectional</name> + <title>Street Direction Suffix</title> + <type>varchar</type> + <length>8</length> + <comment>Directional prefix, e.g. Main St S, S is the suffix.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>street_unit</name> + <title>Street Unit</title> + <type>varchar</type> + <length>16</length> + <export>true</export> + <comment>Secondary unit designator, e.g. Apt 3 or Unit # 14, or Bldg 1200</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>supplemental_address_1</name> + <title>Supplemental Address 1</title> + <type>varchar</type> + <length>96</length> + <import>true</import> + <headerPattern>/(supplemental(\s)?)?address(\s\d+)?/i</headerPattern> + <dataPattern>/unit|ap(ar)?t(ment)?\s(\d|\w)+/i</dataPattern> + <comment>Supplemental Address Information, Line 1</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>supplemental_address_2</name> + <title>Supplemental Address 2</title> + <type>varchar</type> + <length>96</length> + <import>true</import> + <headerPattern>/(supplemental(\s)?)?address(\s\d+)?/i</headerPattern> + <dataPattern>/unit|ap(ar)?t(ment)?\s(\d|\w)+/i</dataPattern> + <comment>Supplemental Address Information, Line 2</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>supplemental_address_3</name> + <title>Supplemental Address 3</title> + <type>varchar</type> + <length>96</length> + <import>true</import> + <headerPattern>/(supplemental(\s)?)?address(\s\d+)?/i</headerPattern> + <dataPattern>/unit|ap(ar)?t(ment)?\s(\d|\w)+/i</dataPattern> + <comment>Supplemental Address Information, Line 3</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>city</name> + <title>City</title> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/city/i</headerPattern> + <dataPattern>/^[A-Za-z]+(\.?)(\s?[A-Za-z]+){0,2}$/</dataPattern> + <comment>City, Town or Village Name.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>index_city</name> + <fieldName>city</fieldName> + <add>1.1</add> + </index> + <field> + <name>county_id</name> + <type>int unsigned</type> + <title>County</title> + <comment>Which County does this address belong to.</comment> + <pseudoconstant> + <table>civicrm_county</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>ChainSelect</type> + </html> + <add>1.1</add> + </field> + <foreignKey> + <name>county_id</name> + <table>civicrm_county</table> + <key>id</key> + <import>true</import> + <headerPattern>/county/i</headerPattern> + <dataPattern>/[A-Z]{2}/</dataPattern> + <add>1.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>state_province_id</name> + <title>State/Province</title> + <type>int unsigned</type> + <comment>Which State_Province does this address belong to.</comment> + <pseudoconstant> + <table>civicrm_state_province</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>ChainSelect</type> + </html> + <add>1.1</add> + </field> + <foreignKey> + <name>state_province_id</name> + <table>civicrm_state_province</table> + <key>id</key> + <import>true</import> + <headerPattern>/state|prov(ince)?/i</headerPattern> + <dataPattern> + /A[LKSZRAP]|C[AOT]|D[EC]|F[LM]|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEHINOPST]|N[CDEHJMVY]|O[HKR]|P[ARW]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY]/i + </dataPattern> + <add>1.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>postal_code_suffix</name> + <title>Postal Code Suffix</title> + <type>varchar</type> + <length>12</length> + <import>true</import> + <headerPattern>/p(ostal)\sc(ode)\ss(uffix)/i</headerPattern> + <dataPattern>/\d?\d{4}(-\d{4})?/</dataPattern> + <comment>Store the suffix, like the +4 part in the USPS system.</comment> + <add>1.1</add> + <html> + <type>Text</type> + <size>3</size> + </html> + </field> + <field> + <name>postal_code</name> + <title>Postal Code</title> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/postal|zip/i</headerPattern> + <dataPattern>/\d?\d{4}(-\d{4})?/</dataPattern> + <comment>Store both US (zip5) AND international postal codes. App is responsible for country/region appropriate validation.</comment> + <add>1.1</add> + <html> + <type>Text</type> + <size>6</size> + </html> + </field> + <field> + <name>usps_adc</name> + <title>USPS Code</title> + <type>varchar</type> + <length>32</length> + <comment>USPS Bulk mailing code.</comment> + <add>1.1</add> + </field> + <field> + <name>country_id</name> + <title>Country</title> + <type>int unsigned</type> + <comment>Which Country does this address belong to.</comment> + <pseudoconstant> + <table>civicrm_country</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + <nameColumn>iso_code</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.1</add> + </field> + <foreignKey> + <name>country_id</name> + <table>civicrm_country</table> + <key>id</key> + <import>true</import> + <headerPattern>/country/i</headerPattern> + <dataPattern>/\w+(\s\w+)?/</dataPattern> + <add>1.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>geo_code_1</name> + <title>Latitude</title> + <type>float</type> + <import>true</import> + <headerPattern>/geo/i</headerPattern> + <comment>Latitude</comment> + <add>1.1</add> + <html> + <type>Text</type> + <size>9</size> + </html> + </field> + <field> + <name>geo_code_2</name> + <title>Longitude</title> + <type>float</type> + <comment>Longitude</comment> + <import>true</import> + <headerPattern>/geo/i</headerPattern> + <add>1.1</add> + <html> + <type>Text</type> + <size>9</size> + </html> + </field> + <field> + <name>manual_geo_code</name> + <title>Is manually geocoded</title> + <type>boolean</type> + <default>0</default> + <comment>Is this a manually entered geo code</comment> + <add>4.3</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>timezone</name> + <title>Timezone</title> + <type>varchar</type> + <length>8</length> + <comment>Timezone expressed as a UTC offset - e.g. United States CST would be written as "UTC-6".</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>name</name> + <uniqueName>address_name</uniqueName> + <title>Address Name</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/^location|(l(ocation\s)?name)$/i</headerPattern> + <dataPattern>/^\w+$/</dataPattern> + <add>2.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>master_id</name> + <title>Master Address Belongs To</title> + <type>int unsigned</type> + <import>true</import> + <comment>FK to Address ID</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>master_id</name> + <table>civicrm_address</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Core/AddressFormat.xml b/civicrm/xml/schema/Core/AddressFormat.xml new file mode 100644 index 0000000000000000000000000000000000000000..ae678018b9e8b8102406f597e46ab068e6bb0faf --- /dev/null +++ b/civicrm/xml/schema/Core/AddressFormat.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>AddressFormat</class> + <name>civicrm_address_format</name> + <add>3.2</add> + <field> + <name>id</name> + <title>Address Format ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Address Format Id</comment> + <add>3.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>format</name> + <title>Address Format</title> + <type>text</type> + <comment>The format of an address</comment> + <add>3.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Cache.xml b/civicrm/xml/schema/Core/Cache.xml new file mode 100644 index 0000000000000000000000000000000000000000..29445f1aa986b8f6acec3992cb96539f75838e02 --- /dev/null +++ b/civicrm/xml/schema/Core/Cache.xml @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Cache</class> + <name>civicrm_cache</name> + <comment>Table to cache items for civicrm components.</comment> + <add>2.1</add> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <add>2.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>group_name</name> + <type>varchar</type> + <length>32</length> + <required>true</required> + <comment>group name for cache element, useful in cleaning cache elements</comment> + <add>2.1</add> + </field> + <field> + <name>path</name> + <type>varchar</type> + <length>255</length> + <comment>Unique path name for cache element</comment> + <add>2.1</add> + </field> + <index> + <name>UI_group_path</name> + <fieldName>group_name</fieldName> + <fieldName>path</fieldName> + <unique>true</unique> + <add>2.1</add> + <drop>4.2</drop> + </index> + <index> + <name>UI_group_path_date</name> + <fieldName>group_name</fieldName> + <fieldName>path</fieldName> + <fieldName>created_date</fieldName> + <unique>true</unique> + <add>4.2</add> + </index> + <field> + <name>data</name> + <type>longtext</type> + <comment>data associated with this path</comment> + <add>2.1</add> + </field> + <field> + <name>component_id</name> + <type>int unsigned</type> + <comment>Component that this menu item belongs to</comment> + <add>2.1</add> + <pseudoconstant> + <table>civicrm_component</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>component_id</name> + <table>civicrm_component</table> + <key>id</key> + <add>2.1</add> + </foreignKey> + <field> + <name>created_date</name> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <comment>When was the cache item created</comment> + <add>2.1</add> + </field> + <field> + <name>expired_date</name> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <comment>When should the cache item expire</comment> + <add>2.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Component.xml b/civicrm/xml/schema/Core/Component.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a9f7e13f28a6cf5eefb45077776fae2f6cb7670 --- /dev/null +++ b/civicrm/xml/schema/Core/Component.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Component</class> + <name>civicrm_component</name> + <add>2.0</add> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Component ID</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Component name</title> + <type>varchar</type> + <required>true</required> + <length>64</length> + <comment>Name of the component.</comment> + <add>2.0</add> + </field> + <field> + <name>namespace</name> + <title>Namespace reserved for component.</title> + <type>varchar</type> + <length>128</length> + <comment>Path to components main directory in a form of a class + namespace. + </comment> + <add>2.0</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Country.xml b/civicrm/xml/schema/Core/Country.xml new file mode 100644 index 0000000000000000000000000000000000000000..bdfac28f1180775ea52a3656cc96e07aa9d504f0 --- /dev/null +++ b/civicrm/xml/schema/Core/Country.xml @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Country</class> + <name>civicrm_country</name> + <add>1.1</add> + <field> + <name>id</name> + <title>Country ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Country Id</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Country</title> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/country/i</headerPattern> + <dataPattern>/^[A-Z][a-z]+\.?(\s+[A-Z][a-z]+){0,3}$/</dataPattern> + <comment>Country Name</comment> + <add>1.1</add> + </field> + <field> + <name>iso_code</name> + <title>Country ISO Code</title> + <type>char</type> + <length>2</length> + <comment>ISO Code</comment> + <add>1.1</add> + </field> + <field> + <name>country_code</name> + <title>Country Phone Prefix</title> + <type>varchar</type> + <length>4</length> + <comment>National prefix to be used when dialing TO this country.</comment> + <add>1.1</add> + </field> + <field> + <name>address_format_id</name> + <title>Address Format</title> + <type>int unsigned</type> + <comment>Foreign key to civicrm_address_format.id.</comment> + <add>3.2</add> + </field> + <foreignKey> + <name>address_format_id</name> + <table>civicrm_address_format</table> + <key>id</key> + <add>3.2</add> + </foreignKey> + <field> + <name>idd_prefix</name> + <title>Outgoing Phone Prefix</title> + <type>varchar</type> + <length>4</length> + <comment>International direct dialing prefix from within the country TO another country</comment> + <add>1.1</add> + </field> + <field> + <name>ndd_prefix</name> + <title>Area Code</title> + <type>varchar</type> + <length>4</length> + <comment>Access prefix to call within a country to a different area</comment> + <add>1.1</add> + </field> + <field> + <name>region_id</name> + <title>Region</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to civicrm_worldregion.id.</comment> + <add>1.8</add> + </field> + <foreignKey> + <name>region_id</name> + <table>civicrm_worldregion</table> + <key>id</key> + <add>1.8</add> + </foreignKey> + <field> + <name>is_province_abbreviated</name> + <title>Abbreviate Province?</title> + <type>boolean</type> + <default>0</default> + <comment>Should state/province be displayed as abbreviation for contacts from this country?</comment> + <add>3.1</add> + </field> + <index> + <name>UI_name_iso_code</name> + <fieldName>name</fieldName> + <fieldName>iso_code</fieldName> + <unique>true</unique> + <add>1.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/County.xml b/civicrm/xml/schema/Core/County.xml new file mode 100644 index 0000000000000000000000000000000000000000..edd4513ff880df44a65e3c72d8c12080d00980f2 --- /dev/null +++ b/civicrm/xml/schema/Core/County.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>County</class> + <name>civicrm_county</name> + <add>1.1</add> + <field> + <name>id</name> + <title>County ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>County ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>false</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>County</title> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/county/i</headerPattern> + <dataPattern>/[A-Z]{2}/</dataPattern> + <comment>Name of County</comment> + <add>1.1</add> + </field> + <field> + <name>abbreviation</name> + <title>County Abbreviation</title> + <type>varchar</type> + <length>4</length> + <comment>2-4 Character Abbreviation of County</comment> + <add>1.1</add> + </field> + <field> + <name>state_province_id</name> + <title>State</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID of State/Province that County belongs</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>state_province_id</name> + <table>civicrm_state_province</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <index> + <name>UI_name_state_id</name> + <fieldName>name</fieldName> + <fieldName>state_province_id</fieldName> + <unique>true</unique> + <add>1.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/CustomField.xml b/civicrm/xml/schema/Core/CustomField.xml new file mode 100644 index 0000000000000000000000000000000000000000..d9ee5bb74ce72108a4ac746e436dc2be674fd424 --- /dev/null +++ b/civicrm/xml/schema/Core/CustomField.xml @@ -0,0 +1,292 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>CustomField</class> + <name>civicrm_custom_field</name> + <comment>Stores info about an extended (custom) property (data and form field info).</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Custom Field ID</title> + <required>true</required> + <comment>Unique Custom Field ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>custom_group_id</name> + <type>int unsigned</type> + <title>Custom Group</title> + <required>true</required> + <comment>FK to civicrm_custom_group.</comment> + <add>1.1</add> + <pseudoconstant> + <table>civicrm_custom_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>custom_group_id</name> + <table>civicrm_custom_group</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>name</name> + <type>varchar</type> + <title>Custom Field Name</title> + <length>64</length> + <comment>Variable name/programmatic handle for this group.</comment> + <add>3.3</add> + </field> + <field> + <name>label</name> + <type>varchar</type> + <title>Custom Field Label</title> + <length>255</length> + <required>true</required> + <localizable>true</localizable> + <comment>Text for form field label (also friendly name for administering this custom property).</comment> + <add>1.1</add> + </field> + <field> + <name>data_type</name> + <type>varchar</type> + <title>Custom Field Data Type</title> + <length>16</length> + <required>true</required> + <comment>Controls location of data storage in extended_data table.</comment> + <pseudoconstant> + <callback>CRM_Core_BAO_CustomField::dataType</callback> + </pseudoconstant> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>html_type</name> + <type>varchar</type> + <title>Custom Field HTML Type</title> + <length>32</length> + <required>true</required> + <comment>HTML types plus several built-in extended types.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::customHtmlType</callback> + </pseudoconstant> + <add>1.1</add> + </field> + <field> + <name>default_value</name> + <type>varchar</type> + <title>Custom Field Default</title> + <length>255</length> + <comment>Use form_options.is_default for field_types which use options.</comment> + <add>1.1</add> + </field> + <field> + <name>is_required</name> + <title>Custom Field Is Required?</title> + <type>boolean</type> + <comment>Is a value required for this property.</comment> + <add>1.1</add> + </field> + <field> + <name>is_searchable</name> + <title>Allow Searching on Field?</title> + <type>boolean</type> + <comment>Is this property searchable.</comment> + <add>1.1</add> + </field> + <field> + <name>is_search_range</name> + <type>boolean</type> + <title>Search as a Range</title> + <comment>Is this property range searchable.</comment> + <add>1.4</add> + <default>0</default> + </field> + <field> + <name>weight</name> + <type>int</type> + <title>Order</title> + <required>true</required> + <default>1</default> + <comment>Controls field display order within an extended property group.</comment> + <add>1.1</add> + </field> + <field> + <name>help_pre</name> + <type>text</type> + <title>Custom Field Pre Text</title> + <localizable>true</localizable> + <comment>Description and/or help text to display before this field.</comment> + <add>1.1</add> + </field> + <field> + <name>help_post</name> + <type>text</type> + <title>Custom Field Post Text</title> + <localizable>true</localizable> + <comment>Description and/or help text to display after this field.</comment> + <add>1.1</add> + </field> + <field> + <name>mask</name> + <type>varchar</type> + <title>Custom Field Formatting</title> + <length>64</length> + <comment>Optional format instructions for specific field types, like date types.</comment> + <add>1.1</add> + </field> + <field> + <name>attributes</name> + <type>varchar</type> + <title>Custom Field Attributes</title> + <length>255</length> + <comment>Store collection of type-appropriate attributes, e.g. textarea needs rows/cols attributes</comment> + <add>1.1</add> + </field> + <field> + <name>javascript</name> + <type>varchar</type> + <title>Custom Field Javascript</title> + <length>255</length> + <comment>Optional scripting attributes for field.</comment> + <add>1.1</add> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Custom Field Is Active?</title> + <comment>Is this property active?</comment> + <add>1.1</add> + </field> + <field> + <name>is_view</name> + <type>boolean</type> + <title>Field is Viewable</title> + <comment>Is this property set by PHP Code? A code field is viewable but not editable</comment> + <add>1.1</add> + </field> + <field> + <name>options_per_line</name> + <type>int unsigned</type> + <title>Field Options Per Line</title> + <comment>number of options per line for checkbox and radio</comment> + </field> + <field> + <name>text_length</name> + <type>int unsigned</type> + <title>Field Length</title> + <comment>field length if alphanumeric</comment> + <add>2.2</add> + </field> + <field> + <name>start_date_years</name> + <type>int</type> + <title>Field Start Date</title> + <comment>Date may be up to start_date_years years prior to the current date.</comment> + <add>1.4</add> + </field> + <field> + <name>end_date_years</name> + <type>int</type> + <title>Field End Date</title> + <comment>Date may be up to end_date_years years after the current date.</comment> + <add>1.4</add> + </field> + <field> + <name>date_parts</name> + <type>varchar</type> + <length>255</length> + <comment>which date part included in display </comment> + <add>1.4</add> + <drop>3.1</drop> + </field> + <field> + <name>date_format</name> + <type>varchar</type> + <title>Field Data Format</title> + <length>64</length> + <comment>date format for custom date</comment> + <add>3.1</add> + </field> + <field> + <name>time_format</name> + <type>int unsigned</type> + <title>Field Time Format</title> + <comment>time format for custom date</comment> + <add>3.1</add> + </field> + <field> + <name>note_columns</name> + <type>int unsigned</type> + <title>Field Note Columns</title> + <comment> Number of columns in Note Field </comment> + <add>1.4</add> + </field> + <field> + <name>note_rows</name> + <type>int unsigned</type> + <title>Field Note Rows</title> + <comment> Number of rows in Note Field </comment> + <add>1.4</add> + </field> + <field> + <name>column_name</name> + <type>varchar</type> + <title>Field Column Name</title> + <length>255</length> + <comment>Name of the column that holds the values for this field.</comment> + <add>2.0</add> + </field> + <field> + <name>option_group_id</name> + <type>int unsigned</type> + <title>Field Option Group</title> + <comment>For elements with options, the option group id that is used</comment> + <add>1.4</add> + </field> + <field> + <name>filter</name> + <type>varchar</type> + <title>Field Filter</title> + <length>255</length> + <comment>Stores Contact Get API params contact reference custom fields. May be used for other filters in the future.</comment> + <add>4.1</add> + </field> + <field> + <name>in_selector</name> + <type>boolean</type> + <title>Field Display</title> + <default>0</default> + <comment>Should the multi-record custom field values be displayed in tab table listing</comment> + <add>4.5</add> + </field> + <index> + <name>UI_label_custom_group_id</name> + <fieldName>label</fieldName> + <fieldName>custom_group_id</fieldName> + <unique>true</unique> + <add>1.1</add> + </index> + <index> + <name>UI_name_custom_group_id</name> + <fieldName>name</fieldName> + <fieldName>custom_group_id</fieldName> + <unique>true</unique> + <add>4.3</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/CustomGroup.xml b/civicrm/xml/schema/Core/CustomGroup.xml new file mode 100644 index 0000000000000000000000000000000000000000..de3a4d70f168cf8e0f9332820d2ec0c0d0e95aad --- /dev/null +++ b/civicrm/xml/schema/Core/CustomGroup.xml @@ -0,0 +1,226 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>CustomGroup</class> + <name>civicrm_custom_group</name> + <comment>All extended (custom) properties are associated with a group. These are logical sets of related data. + </comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Custom Group ID</title> + <required>true</required> + <comment>Unique Custom Group ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <type>varchar</type> + <title>Custom Group Name</title> + <length>64</length> + <comment>Variable name/programmatic handle for this group.</comment> + <add>1.1</add> + </field> + <field> + <name>title</name> + <type>varchar</type> + <title>Custom Group Title</title> + <length>64</length> + <required>true</required> + <localizable>true</localizable> + <comment>Friendly Name.</comment> + <add>1.1</add> + </field> + <field> + <name>extends</name> + <type>varchar</type> + <title>Custom Group Extends</title> + <length>255</length> + <default>'Contact'</default> + <comment>Type of object this group extends (can add other options later e.g. contact_address, etc.).</comment> + <add>1.1</add> + </field> + <field> + <name>extends_entity_column_name</name> + <type>varchar</type> + <length>64</length> + <comment>linking custom group for dynamic object</comment> + <add>1.6</add> + <drop>2.2</drop> + </field> + <field> + <name>extends_entity_column_id</name> + <type>int unsigned</type> + <title>Custom Group Subtype List</title> + <default>NULL</default> + <comment>FK to civicrm_option_value.id (for option group custom_data_type.)</comment> + <add>2.2</add> + </field> + <field> + <name>extends_entity_column_value</name> + <type>varchar</type> + <title>Custom Group Subtype</title> + <length>255</length> + <comment>linking custom group for dynamic object</comment> + <serialize>SEPARATOR_BOOKEND</serialize> + <add>1.6</add> + </field> + <field> + <name>style</name> + <type>varchar</type> + <title>Custom Group Style</title> + <length>15</length> + <comment>Visual relationship between this form and its parent.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::customGroupStyle</callback> + </pseudoconstant> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>collapse_display</name> + <type>int unsigned</type> + <title>Collapse Custom Group?</title> + <default>0</default> + <comment>Will this group be in collapsed or expanded mode on initial display ?</comment> + <add>1.1</add> + </field> + <field> + <name>help_pre</name> + <type>text</type> + <title>Custom Group Pre Text</title> + <localizable>true</localizable> + <comment>Description and/or help text to display before fields in form.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>1.1</add> + </field> + <field> + <name>help_post</name> + <type>text</type> + <title>Custom Group Post Text</title> + <localizable>true</localizable> + <comment>Description and/or help text to display after fields in form.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>1.1</add> + </field> + <field> + <name>weight</name> + <type>int</type> + <title>Order</title> + <required>true</required> + <default>1</default> + <comment>Controls display order when multiple extended property groups are setup for the same class.</comment> + <add>1.1</add> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Custom Group Is Active?</title> + <comment>Is this property active?</comment> + <add>1.1</add> + </field> + <field> + <name>table_name</name> + <type>varchar</type> + <length>255</length> + <comment>Name of the table that holds the values for this group.</comment> + <add>2.0</add> + </field> + <field> + <name>is_multiple</name> + <type>boolean</type> + <title>Supports Multiple Records</title> + <comment>Does this group hold multiple values?</comment> + <add>2.0</add> + </field> + <field> + <name>min_multiple</name> + <type>int unsigned</type> + <title>Minimum Multiple Records</title> + <comment>minimum number of multiple records (typically 0?)</comment> + <add>2.2</add> + </field> + <field> + <name>max_multiple</name> + <type>int unsigned</type> + <title>Maximum Multiple Records</title> + <comment>maximum number of multiple records, if 0 - no max</comment> + <add>2.2</add> + </field> + <field> + <name>collapse_adv_display</name> + <type>int unsigned</type> + <title>Collapse Group Display</title> + <default>0</default> + <comment>Will this group be in collapsed or expanded mode on advanced search display ?</comment> + <add>3.0</add> + </field> + <index> + <name>UI_title_extends</name> + <fieldName>title</fieldName> + <fieldName>extends</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <index> + <name>UI_name_extends</name> + <fieldName>name</fieldName> + <fieldName>extends</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <field> + <name>created_id</name> + <type>int unsigned</type> + <title>Custom Group Created By</title> + <comment>FK to civicrm_contact, who created this custom group</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <type>datetime</type> + <title>Custom Group Created Date</title> + <comment>Date and time this custom group was created.</comment> + <add>3.0</add> + </field> + <field> + <name>is_reserved</name> + <type>boolean</type> + <title>Reserved Group?</title> + <default>0</default> + <comment>Is this a reserved Custom Group?</comment> + <add>4.4</add> + </field> + <field> + <name>is_public</name> + <type>boolean</type> + <title>Custom Group Is Public?</title> + <default>1</default> + <comment>Is this property public?</comment> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Dashboard.xml b/civicrm/xml/schema/Core/Dashboard.xml new file mode 100644 index 0000000000000000000000000000000000000000..41ed111374447b1832f6041175f96f27f025dc00 --- /dev/null +++ b/civicrm/xml/schema/Core/Dashboard.xml @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Dashboard</class> + <name>civicrm_dashboard</name> + <comment>Table to store dashboard.</comment> + <add>3.1</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>DashletID</title> + <required>true</required> + <add>3.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <type>int unsigned</type> + <title>Dashlet Domain</title> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Domain for dashboard</comment> + <add>3.1</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.1</add> + </foreignKey> + <field> + <name>name</name> + <type>varchar</type> + <title>Dashlet Name</title> + <length>64</length> + <comment>Internal name of dashlet.</comment> + <add>4.4</add> + </field> + <field> + <name>label</name> + <type>varchar</type> + <title>Dashlet Title</title> + <length>255</length> + <comment>dashlet title</comment> + <localizable>true</localizable> + <add>3.1</add> + </field> + <field> + <name>url</name> + <type>varchar</type> + <title>Dashlet URL</title> + <length>255</length> + <comment>url in case of external dashlet</comment> + <add>3.1</add> + </field> + <field> + <name>content</name> + <type>text</type> + <comment>dashlet content</comment> + <add>3.1</add> + <drop>3.3</drop> + </field> + <field> + <name>permission</name> + <type>varchar</type> + <title>Dashlet Permission</title> + <length>255</length> + <comment>Permission for the dashlet</comment> + <add>3.1</add> + </field> + <field> + <name>permission_operator</name> + <type>varchar</type> + <title>Dashlet Permission Operator</title> + <length>3</length> + <comment>Permission Operator</comment> + <add>3.1</add> + </field> + <field> + <name>column_no</name> + <type>boolean</type> + <title>Dashlet Column</title> + <comment>column no for this dashlet</comment> + <default>0</default> + <add>3.1</add> + <drop>4.7</drop> + </field> + <field> + <name>is_minimized</name> + <type>boolean</type> + <title>Minimize Dashlet?</title> + <comment>Is Minimized?</comment> + <default>0</default> + <add>3.1</add> + <drop>4.7</drop> + </field> + <field> + <name>fullscreen_url</name> + <type>varchar</type> + <title>Fullscreen URL</title> + <length>255</length> + <comment>fullscreen url for dashlet</comment> + <add>3.4</add> + </field> + <field> + <name>is_fullscreen</name> + <type>boolean</type> + <title>Is Fullscreen?</title> + <comment>Is Fullscreen?</comment> + <default>1</default> + <add>3.1</add> + <drop>4.7</drop> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Is Dashlet Active?</title> + <comment>Is this dashlet active?</comment> + <default>0</default> + <add>3.1</add> + </field> + <field> + <name>is_reserved</name> + <type>boolean</type> + <title>Is Dashlet Reserved?</title> + <comment>Is this dashlet reserved?</comment> + <default>0</default> + <add>3.1</add> + </field> + <field> + <name>weight</name> + <type>int</type> + <title>Order</title> + <comment>Ordering of the dashlets.</comment> + <default>0</default> + <add>3.1</add> + <drop>4.7</drop> + </field> + <field> + <name>cache_minutes</name> + <type>int unsigned</type> + <title>Cache Minutes</title> + <comment>Number of minutes to cache dashlet content in browser localStorage.</comment> + <default>60</default> + <required>true</required> + <add>4.7</add> + </field> + <field> + <name>created_date</name> + <type>datetime</type> + <title>Dashlet Created Date</title> + <comment>When was content populated</comment> + <add>3.1</add> + <drop>3.3</drop> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Discount.xml b/civicrm/xml/schema/Core/Discount.xml new file mode 100644 index 0000000000000000000000000000000000000000..16cde71afdcae8c20be8999cfcdb4b715aa0382c --- /dev/null +++ b/civicrm/xml/schema/Core/Discount.xml @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Discount</class> + <name>civicrm_discount</name> + <comment>Stores discounts for events on the basis of date</comment> + <log>true</log> + <field> + <name>id</name> + <title>Discount ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>primary key</comment> + <add>2.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <comment>physical tablename for entity being joined to discount, e.g. civicrm_event</comment> + <add>2.1</add> + </field> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to entity table specified in entity_table column.</comment> + <add>2.1</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>2.1</add> + </dynamicForeignKey> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>2.1</add> + </index> + <field> + <name>option_group_id</name> + <uniqueName>participant_discount_name</uniqueName> + <title>Discount Name</title> + <type>int unsigned</type> + <required>true</required> + <export>true</export> + <comment>FK to civicrm_price_set</comment> + <add>2.1</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>option_group_id</name> + <table>civicrm_price_set</table> + <key>id</key> + <add>2.1</add> + <onDelete>CASCADE</onDelete> + <drop>4.3</drop> + </foreignKey> + <field> + <name>price_set_id</name> + <uniqueName>participant_discount_name</uniqueName> + <title>Discount Name</title> + <type>int unsigned</type> + <required>true</required> + <export>true</export> + <comment>FK to civicrm_price_set</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>price_set_id</name> + <table>civicrm_price_set</table> + <key>id</key> + <add>4.3</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>index_entity_option_id</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <fieldName>price_set_id</fieldName> + <add>2.1</add> + </index> + <field> + <name>start_date</name> + <title>Discount Start Date</title> + <type>date</type> + <comment>Date when discount starts.</comment> + <add>2.1</add> + </field> + <field> + <name>end_date</name> + <title>Discount End Date</title> + <type>date</type> + <comment>Date when discount ends.</comment> + <add>2.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Domain.xml b/civicrm/xml/schema/Core/Domain.xml new file mode 100644 index 0000000000000000000000000000000000000000..f9478785599e4cdf9827074cda8df4e0d0496a17 --- /dev/null +++ b/civicrm/xml/schema/Core/Domain.xml @@ -0,0 +1,140 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Domain</class> + <name>civicrm_domain</name> + <comment>Top-level hierarchy to support multi-org/domain installations. Define domains for multi-org installs, else all contacts belong to one domain.</comment> + <add>1.1</add> + <field> + <name>id</name> + <title>Domain ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Domain ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <type>varchar</type> + <title>Domain Name</title> + <length>64</length> + <comment>Name of Domain / Organization</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>description</name> + <type>varchar</type> + <title>Domain Description</title> + <length>255</length> + <comment>Description of Domain.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>1.1</add> + </index> + <field> + <name>contact_name</name> + <type>varchar</type> + <length>64</length> + <comment>Name of the person responsible for this domain</comment> + <add>1.1</add> + <drop>1.9</drop> + </field> + <field> + <name>email_name</name> + <type>varchar</type> + <length>255</length> + <comment>The default email name that is used in the from address for all outgoing emails</comment> + <add>1.9</add> + <drop>2.2</drop> + </field> + <field> + <name>email_address</name> + <type>varchar</type> + <length>255</length> + <comment>The default email address that is used as the from address for all outgoing emails</comment> + <add>1.9</add> + <drop>2.2</drop> + </field> + <field> + <name>email_domain</name> + <type>varchar</type> + <length>64</length> + <comment>The domain from which outgoing email for this domain will appear to originate</comment> + <add>1.1</add> + <drop>2.2</drop> + </field> + <field> + <name>email_return_path</name> + <type>varchar</type> + <length>64</length> + <comment>The domain from which outgoing email for this domain will appear to originate</comment> + <add>1.1</add> + <drop>2.2</drop> + </field> + <field> + <name>config_backend</name> + <type>text</type> + <title>Domain Configuration</title> + <comment>Backend configuration.</comment> + <serialize>PHP</serialize> + <add>1.6</add> + </field> + <field> + <name>version</name> + <type>varchar</type> + <title>CiviCRM Version</title> + <length>32</length> + <comment>The civicrm version this instance is running</comment> + <add>2.0</add> + </field> + <field> + <name>loc_block_id</name> + <type>int unsigned</type> + <comment>FK to Location Block ID. This is specifically not an FK to avoid circular constraints</comment> + <add>2.0</add> + <drop>4.3</drop> + </field> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <title>Domain Contact</title> + <comment>FK to Contact ID. This is specifically not an FK to avoid circular constraints</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>locales</name> + <type>text</type> + <title>Supported Languages</title> + <comment>list of locales supported by the current db state (NULL for single-lang install)</comment> + <add>2.1</add> + </field> + <field> + <name>locale_custom_strings</name> + <type>text</type> + <title>Language Customizations</title> + <comment>Locale specific string overrides</comment> + <serialize>PHP</serialize> + <add>3.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Email.xml b/civicrm/xml/schema/Core/Email.xml new file mode 100644 index 0000000000000000000000000000000000000000..bc9cedb87736ebecb3eaabe5847653cd730dcb1f --- /dev/null +++ b/civicrm/xml/schema/Core/Email.xml @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Email</class> + <name>civicrm_email</name> + <comment>Email information for a specific location.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Email ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique Email ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Email Contact</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>location_type_id</name> + <title>Email Location Type</title> + <type>int unsigned</type> + <comment>Which Location does this email belong to.</comment> + <add>2.0</add> + <pseudoconstant> + <table>civicrm_location_type</table> + <keyColumn>id</keyColumn> + <labelColumn>display_name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>index_location_type</name> + <fieldName>location_type_id</fieldName> + <add>2.0</add> + </index> + <field> + <name>email</name> + <title>Email</title> + <type>varchar</type> + <length>254</length> + <html> + <type>Text</type> + <size>30</size> + </html> + <import>true</import> + <headerPattern>/e.?mail/i</headerPattern> + <dataPattern>/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/</dataPattern> + <rule>email</rule> + <comment>Email address</comment> + <add>1.1</add> + </field> + <index> + <name>UI_email</name> + <fieldName>email</fieldName> + <add>1.5</add> + </index> + <field> + <name>is_primary</name> + <type>boolean</type> + <default>0</default> + <comment>Is this the primary email for this contact and location.</comment> + <add>1.1</add> + </field> + <field> + <name>is_primary</name> + <title>Is Primary email</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the primary?</comment> + <add>2.0</add> + </field> + <index> + <name>index_is_primary</name> + <fieldName>is_primary</fieldName> + <add>2.0</add> + </index> + <field> + <name>is_billing</name> + <title>Is Billing Email?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the billing?</comment> + <add>2.0</add> + </field> + <index> + <name>index_is_billing</name> + <fieldName>is_billing</fieldName> + <add>2.0</add> + </index> + <field> + <name>on_hold</name> + <export>true</export> + <type>boolean</type> + <default>0</default> + <required>true</required> + <comment>Is this address on bounce hold?</comment> + <add>1.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_bulkmail</name> + <title>Use for Bulk Mail</title> + <export>true</export> + <type>boolean</type> + <default>0</default> + <required>true</required> + <comment>Is this address for bulk mail ?</comment> + <add>1.9</add> + </field> + <field> + <name>hold_date</name> + <type>datetime</type> + <comment>When the address went on bounce hold</comment> + <add>1.1</add> + </field> + <field> + <name>reset_date</name> + <type>datetime</type> + <comment>When the address bounce status was last reset</comment> + <add>1.1</add> + </field> + <field> + <name>signature_text</name> + <type>text</type> + <import>true</import> + <default>NULL</default> + <comment>Text formatted signature for the email.</comment> + <add>3.2</add> + </field> + <field> + <name>signature_html</name> + <type>text</type> + <import>true</import> + <default>NULL</default> + <comment>HTML formatted signature for the email.</comment> + <add>3.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/EntityFile.xml b/civicrm/xml/schema/Core/EntityFile.xml new file mode 100644 index 0000000000000000000000000000000000000000..b4a0f2387bbb7464f0ecc0f131913ded772b51f9 --- /dev/null +++ b/civicrm/xml/schema/Core/EntityFile.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>EntityFile</class> + <name>civicrm_entity_file</name> + <comment>Attaches (joins) uploaded files (images, documents, etc.) to entities (Contacts, Groups, Actions).</comment> + <log>true</log> + <field> + <name>id</name> + <title>Entity File ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>primary key</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <comment>physical tablename for entity being joined to file, e.g. civicrm_contact</comment> + <add>1.5</add> + </field> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to entity table specified in entity_table column.</comment> + <add>1.5</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.5</add> + </dynamicForeignKey> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>1.5</add> + </index> + <field> + <name>file_id</name> + <title>File</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_file</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>file_id</name> + <table>civicrm_file</table> + <key>id</key> + <add>1.5</add> + </foreignKey> + <index> + <name>index_entity_file_id</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <fieldName>file_id</fieldName> + <add>1.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/EntityTag.xml b/civicrm/xml/schema/Core/EntityTag.xml new file mode 100644 index 0000000000000000000000000000000000000000..1f3543dcf0a12ecc31b6cb2d5cd9095c8bee9bae --- /dev/null +++ b/civicrm/xml/schema/Core/EntityTag.xml @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>EntityTag</class> + <name>civicrm_entity_tag</name> + <comment>Tag entities (Contacts, Groups, Actions) to categories.</comment> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Entity Tag ID</title> + <required>true</required> + <comment>primary key</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to contact table.</comment> + <add>2.0</add> + <drop>3.2</drop> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.0</add> + <drop>3.2</drop> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>entity_table</name> + <type>varchar</type> + <title>Entity Table</title> + <length>64</length> + <comment>physical tablename for entity being joined to file, e.g. civicrm_contact</comment> + <pseudoconstant> + <optionGroupName>tag_used_for</optionGroupName> + </pseudoconstant> + <add>3.2</add> + </field> + <field> + <name>entity_id</name> + <type>int unsigned</type> + <title>Entity ID</title> + <required>true</required> + <comment>FK to entity table specified in entity_table column.</comment> + <add>3.2</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>3.2</add> + </dynamicForeignKey> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>3.2</add> + <drop>3.4</drop> + </index> + <field> + <name>tag_id</name> + <type>int unsigned</type> + <title>Tag</title> + <required>true</required> + <comment>FK to civicrm_tag</comment> + <add>1.1</add> + <pseudoconstant> + <table>civicrm_tag</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>tag_id</name> + <table>civicrm_tag</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_entity_id_entity_table_tag_id</name> + <fieldName>entity_id</fieldName> + <fieldName>entity_table</fieldName> + <fieldName>tag_id</fieldName> + <unique>true</unique> + <add>3.4</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/Extension.xml b/civicrm/xml/schema/Core/Extension.xml new file mode 100644 index 0000000000000000000000000000000000000000..673b379291f161051af1c395ab1ce5f0bebe80b2 --- /dev/null +++ b/civicrm/xml/schema/Core/Extension.xml @@ -0,0 +1,101 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Extension</class> + <name>civicrm_extension</name> + <add>4.2</add> + <log>false</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Extension ID</title> + <required>true</required> + <comment>Local Extension ID</comment> + <add>4.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>type</name> + <title>Type</title> + <type>varchar</type> + <length>8</length> + <required>true</required> + <comment></comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getExtensionTypes</callback> + </pseudoconstant> + <add>4.2</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <!-- "key" is a reserved word in MySQL --> + <name>full_name</name> + <title>Key</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <comment>Fully qualified extension name</comment> + <add>4.2</add> + </field> + <index> + <name>UI_extension_full_name</name> + <fieldName>full_name</fieldName> + <unique>true</unique> + <add>4.2</add> + </index> + <field> + <name>name</name> + <title>Name</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <comment>Short name</comment> + <add>4.2</add> + </field> + <index> + <name>UI_extension_name</name> + <fieldName>name</fieldName> + <add>4.2</add> + </index> + <field> + <name>label</name> + <title>Label</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <comment>Short, printable name</comment> + <add>4.2</add> + </field> + <field> + <name>file</name> + <title>File</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <comment>Primary PHP file</comment> + <add>4.2</add> + </field> + <field> + <name>schema_version</name> + <title>Schema Version</title> + <type>varchar</type> + <length>63</length> + <import>true</import> + <comment>Revision code of the database schema; the format is module-defined</comment> + <add>4.2</add> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Extension is Active?</title> + <default>1</default> + <comment>Is this extension active?</comment> + <add>4.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/File.xml b/civicrm/xml/schema/Core/File.xml new file mode 100644 index 0000000000000000000000000000000000000000..b11c3da0f600a0a7c6efc809550c96d75ff057c6 --- /dev/null +++ b/civicrm/xml/schema/Core/File.xml @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>File</class> + <name>civicrm_file</name> + <comment>Data store for uploaded (attached) files (pointer to file on disk OR blob). Maybe be joined to entities via custom_value.file_id or entity_file table.</comment> + <add>1.5</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>File ID</title> + <required>true</required> + <comment>Unique ID</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>file_type_id</name> + <type>int unsigned</type> + <title>File Type</title> + <comment>Type of file (e.g. Transcript, Income Tax Return, etc). FK to civicrm_option_value.</comment> + <add>1.5</add> + </field> + <field> + <name>mime_type</name> + <type>varchar</type> + <title>Mime Type</title> + <length>255</length> + <comment>mime type of the document</comment> + <add>1.5</add> + </field> + <field> + <name>uri</name> + <type>varchar</type> + <title>Path</title> + <length>255</length> + <comment>uri of the file on disk</comment> + <add>1.5</add> + </field> + <field> + <name>document</name> + <type>mediumblob</type> + <title>File Contents</title> + <comment>contents of the document</comment> + <add>1.5</add> + </field> + <field> + <name>description</name> + <type>varchar</type> + <title>File Description</title> + <length>255</length> + <comment>Additional descriptive text regarding this attachment (optional).</comment> + <add>1.5</add> + </field> + <field> + <name>upload_date</name> + <type>datetime</type> + <title>File Upload Date</title> + <comment>Date and time that this attachment was uploaded or written to server.</comment> + <add>1.5</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/IM.xml b/civicrm/xml/schema/Core/IM.xml new file mode 100644 index 0000000000000000000000000000000000000000..ce4e3961e6cb8d4a1600abbf584ffa77ed116ed0 --- /dev/null +++ b/civicrm/xml/schema/Core/IM.xml @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>IM</class> + <name>civicrm_im</name> + <comment>IM information for a specific location.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Instant Messenger ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique IM ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>IM Contact</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>location_type_id</name> + <title>IM Location Type</title> + <type>int unsigned</type> + <comment>Which Location does this email belong to.</comment> + <pseudoconstant> + <table>civicrm_location_type</table> + <keyColumn>id</keyColumn> + <labelColumn>display_name</labelColumn> + </pseudoconstant> + <add>2.0</add> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>index_location_type</name> + <fieldName>location_type_id</fieldName> + <add>2.0</add> + </index> + <field> + <name>name</name> + <title>IM Screen Name</title> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/I(nstant )?M(ess.*)?|screen(\s+)?name/i</headerPattern> + <dataPattern>/^[A-Za-z][0-9A-Za-z]{20,}$/</dataPattern> + <comment>IM screen name</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>provider_id</name> + <title>IM Provider</title> + <type>int unsigned</type> + <comment>Which IM Provider does this screen name belong to.</comment> + <add>1.1</add> + <pseudoconstant> + <optionGroupName>instant_messenger_service</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>UI_provider_id</name> + <fieldName>provider_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>is_primary</name> + <title>Is IM Primary?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the primary IM for this contact and location.</comment> + <add>1.1</add> + </field> + <index> + <name>index_is_primary</name> + <fieldName>is_primary</fieldName> + <add>2.0</add> + </index> + <field> + <name>is_billing</name> + <title>Is IM Billing?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the billing?</comment> + <add>2.0</add> + </field> + <index> + <name>index_is_billing</name> + <fieldName>is_billing</fieldName> + <add>2.0</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/Job.xml b/civicrm/xml/schema/Core/Job.xml new file mode 100644 index 0000000000000000000000000000000000000000..45429a4afff94779db49007f4b3ea5cb95734ee5 --- /dev/null +++ b/civicrm/xml/schema/Core/Job.xml @@ -0,0 +1,132 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Job</class> + <name>civicrm_job</name> + <comment>Scheduled job.</comment> + <add>4.1</add> + <log>false</log> + <field> + <name>id</name> + <title>Job ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Job Id</comment> + <add>4.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Job Domain</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this scheduled job for</comment> + <add>4.1</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>4.1</add> + </foreignKey> + <field> + <name>run_frequency</name> + <title>Job Frequency</title> + <type>varchar</type> + <length>8</length> + <default>"Daily"</default> + <comment>Scheduled job run frequency.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getJobFrequency</callback> + </pseudoconstant> + <add>4.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>last_run</name> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <comment>When was this cron entry last run</comment> + <add>4.1</add> + </field> + <field> + <name>scheduled_run_date</name> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <comment>When is this cron entry scheduled to run</comment> + <add>4.7</add> + </field> + <field> + <name>name</name> + <title>Job Name</title> + <type>varchar</type> + <length>255</length> + <comment>Title of the job</comment> + <add>4.1</add> + </field> + <field> + <name>description</name> + <title>Job Description</title> + <type>varchar</type> + <length>255</length> + <comment>Description of the job</comment> + <add>4.1</add> + </field> + <field> + <name>api_prefix</name> + <type>varchar</type> + <length>255</length> + <default>"civicrm_api3"</default> + <comment>Prefix of the job api call</comment> + <add>4.1</add> + <drop>4.3</drop> + </field> + <field> + <name>api_entity</name> + <title>API Entity</title> + <type>varchar</type> + <length>255</length> + <comment>Entity of the job api call</comment> + <add>4.1</add> + </field> + <field> + <name>api_action</name> + <title>API Action</title> + <type>varchar</type> + <length>255</length> + <comment>Action of the job api call</comment> + <add>4.1</add> + </field> + <field> + <name>parameters</name> + <title>API Parameters</title> + <type>text</type> + <comment>List of parameters to the command.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <add>4.1</add> + </field> + <field> + <name>is_active</name> + <title>Job Is Active?</title> + <type>boolean</type> + <comment>Is this job active?</comment> + <add>4.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/JobLog.xml b/civicrm/xml/schema/Core/JobLog.xml new file mode 100644 index 0000000000000000000000000000000000000000..b47a752bbfe296c3cf903a94de32bdd545d8d5af --- /dev/null +++ b/civicrm/xml/schema/Core/JobLog.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>JobLog</class> + <name>civicrm_job_log</name> + <comment>Scheduled jobs log.</comment> + <add>4.1</add> + <log>false</log> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <title>Job Log ID</title> + <comment>Job log entry Id</comment> + <add>4.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Domain ID</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this scheduled job for</comment> + <add>4.1</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>4.1</add> + </foreignKey> + <field> + <name>run_time</name> + <type>timestamp</type> + <title>Timestamp</title> + <comment>Log entry date</comment> + <add>4.1</add> + </field> + <field> + <name>job_id</name> + <title>Job ID</title> + <type>int unsigned</type> + <comment>Pointer to job id - not a FK though, just for logging purposes</comment> + <add>4.1</add> + </field> + <field> + <name>name</name> + <title>Job Name</title> + <type>varchar</type> + <length>255</length> + <comment>Title of the job</comment> + <add>4.1</add> + </field> + <field> + <name>command</name> + <title>Command</title> + <type>varchar</type> + <length>255</length> + <comment>Full path to file containing job script</comment> + <add>4.1</add> + </field> + <field> + <name>description</name> + <title>Description</title> + <type>varchar</type> + <length>255</length> + <comment>Title line of log entry</comment> + <add>4.1</add> + </field> + <field> + <name>data</name> + <title>Extended Data</title> + <type>text</type> + <comment>Potential extended data for specific job run (e.g. tracebacks).</comment> + <add>4.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/LocBlock.xml b/civicrm/xml/schema/Core/LocBlock.xml new file mode 100644 index 0000000000000000000000000000000000000000..75a80185d50c969c0aea6c23ea711c5997811d0f --- /dev/null +++ b/civicrm/xml/schema/Core/LocBlock.xml @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>LocBlock</class> + <name>civicrm_loc_block</name> + <comment>Define location specific properties</comment> + <add>2.0</add> + <log>true</log> + <field> + <name>id</name> + <title>Location Block ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique ID</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>address_id</name> + <title>Location Block Address</title> + <type>int unsigned</type> + <add>2.0</add> + </field> + <foreignKey> + <name>address_id</name> + <table>civicrm_address</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>email_id</name> + <title>Location Block Email</title> + <type>int unsigned</type> + <add>2.0</add> + </field> + <foreignKey> + <name>email_id</name> + <table>civicrm_email</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>phone_id</name> + <title>Location Block Phone</title> + <type>int unsigned</type> + <add>2.0</add> + </field> + <foreignKey> + <name>phone_id</name> + <table>civicrm_phone</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>im_id</name> + <title>Location Block IM</title> + <type>int unsigned</type> + <add>2.0</add> + </field> + <foreignKey> + <name>im_id</name> + <table>civicrm_im</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>address_2_id</name> + <title>Location Block IM 2</title> + <type>int unsigned</type> + <add>2.0</add> + </field> + <foreignKey> + <name>address_2_id</name> + <table>civicrm_address</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>email_2_id</name> + <type>int unsigned</type> + <title>Email 2</title> + <add>2.0</add> + </field> + <foreignKey> + <name>email_2_id</name> + <table>civicrm_email</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>phone_2_id</name> + <type>int unsigned</type> + <title>Phone 2</title> + <add>2.0</add> + </field> + <foreignKey> + <name>phone_2_id</name> + <table>civicrm_phone</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>im_2_id</name> + <type>int unsigned</type> + <title>Instant Messenger 2</title> + <add>2.0</add> + </field> + <foreignKey> + <name>im_2_id</name> + <table>civicrm_im</table> + <key>id</key> + <add>2.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Core/LocationType.xml b/civicrm/xml/schema/Core/LocationType.xml new file mode 100644 index 0000000000000000000000000000000000000000..83caa4802fc7b7f409cad23920f51913872055e7 --- /dev/null +++ b/civicrm/xml/schema/Core/LocationType.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>LocationType</class> + <name>civicrm_location_type</name> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Location Type ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Location Type ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Location Type</title> + <type>varchar</type> + <length>64</length> + <comment>Location Type Name.</comment> + <add>1.1</add> + </field> + <field> + <name>display_name</name> + <title>Display Name</title> + <type>varchar</type> + <length>64</length> + <comment>Location Type Display Name.</comment> + <localizable>true</localizable> + <add>4.1</add> + </field> + <field> + <name>vcard_name</name> + <title>vCard Location Type</title> + <type>varchar</type> + <length>64</length> + <comment>vCard Location Type Name.</comment> + <add>1.1</add> + </field> + <field> + <name>description</name> + <type>varchar</type> + <length>255</length> + <comment>Location Type Description.</comment> + <add>1.1</add> + </field> + <field> + <name>is_reserved</name> + <title>Location Type is Reserved?</title> + <type>boolean</type> + <comment>Is this location type a predefined system location?</comment> + <add>1.1</add> + </field> + <field> + <name>is_active</name> + <title>Location Type is Active?</title> + <type>boolean</type> + <comment>Is this property active?</comment> + <add>1.1</add> + </field> + <field> + <name>is_default</name> + <title>Default Location Type?</title> + <type>boolean</type> + <comment>Is this location type the default?</comment> + <add>1.1</add> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/Log.xml b/civicrm/xml/schema/Core/Log.xml new file mode 100644 index 0000000000000000000000000000000000000000..d7892395c7eafde2ed8c0d70e66c4de2f263d659 --- /dev/null +++ b/civicrm/xml/schema/Core/Log.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Log</class> + <name>civicrm_log</name> + <comment>Log can be linked to any object in the application.</comment> + <add>1.5</add> + <field> + <name>id</name> + <title>Log ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Log ID</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name of table where item being referenced is stored.</comment> + <add>1.5</add> + </field> + <field> + <name>entity_id</name> + <title>Entity ID </title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the referenced item.</comment> + <add>1.5</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.5</add> + </dynamicForeignKey> + <index> + <name>index_entity</name> + <add>1.5</add> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>1.5</add> + </index> + <field> + <name>data</name> + <title>Data</title> + <type>text</type> + <comment>Updates does to this object if any.</comment> + <add>1.5</add> + </field> + <field> + <name>modified_id</name> + <title>Modified By</title> + <type>int unsigned</type> + <comment>FK to Contact ID of person under whose credentials this data modification was made.</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>modified_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>modified_date</name> + <title>Modified Date</title> + <type>datetime</type> + <comment>When was the referenced entity created or modified or deleted.</comment> + <add>1.5</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/MailSettings.xml b/civicrm/xml/schema/Core/MailSettings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0dea26c13b2a70b69035ba34bba08a2512cf559f --- /dev/null +++ b/civicrm/xml/schema/Core/MailSettings.xml @@ -0,0 +1,153 @@ +<table> + <base>CRM/Core</base> + <class>MailSettings</class> + <name>civicrm_mail_settings</name> + <comment>Various email accounts for use by CiviMail (and its processor)</comment> + <add>2.2</add> + <field> + <name>id</name> + <title>Mail Settings ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>primary key</comment> + <add>2.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Mail Settings Domain</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this match entry for</comment> + <add>3.1</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>4.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>name</name> + <title>Mail Settings Name</title> + <type>varchar</type> + <length>255</length> + <comment>name of this group of settings</comment> + <add>2.2</add> + </field> + <field> + <name>is_default</name> + <title>Is Default Mail Settings?</title> + <type>boolean</type> + <comment>whether this is the default set of settings for this domain</comment> + <add>2.2</add> + </field> + <field> + <name>domain</name> + <title>email Domain</title> + <type>varchar</type> + <length>255</length> + <comment>email address domain (the part after @)</comment> + <add>2.2</add> + </field> + <field> + <name>localpart</name> + <title>email Local Part</title> + <type>varchar</type> + <length>255</length> + <comment>optional local part (like civimail+ for addresses like civimail+s.1.2@example.com)</comment> + <add>2.2</add> + </field> + <field> + <name>return_path</name> + <title>Return Path</title> + <type>varchar</type> + <length>255</length> + <comment>contents of the Return-Path header</comment> + <add>2.2</add> + </field> + <field> + <name>protocol</name> + <title>Protocol</title> + <type>varchar</type> + <length>255</length> + <comment>name of the protocol to use for polling (like IMAP, POP3 or Maildir)</comment> + <add>2.2</add> + <pseudoconstant> + <optionGroupName>mail_protocol</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>server</name> + <title>Mail Server</title> + <type>varchar</type> + <length>255</length> + <comment>server to use when polling</comment> + <add>2.2</add> + </field> + <field> + <name>port</name> + <title>Mail Port</title> + <type>int unsigned</type> + <comment>port to use when polling</comment> + <add>2.2</add> + </field> + <field> + <name>username</name> + <title>Mail Account Username</title> + <type>varchar</type> + <length>255</length> + <comment>username to use when polling</comment> + <add>2.2</add> + </field> + <field> + <name>password</name> + <title>Mail Account Password</title> + <type>varchar</type> + <length>255</length> + <comment>password to use when polling</comment> + <add>2.2</add> + </field> + <field> + <name>is_ssl</name> + <title>Mail Account Uses SSL</title> + <type>boolean</type> + <comment>whether to use SSL or not</comment> + <add>2.2</add> + </field> + <field> + <name>source</name> + <title>Mail Folder</title> + <type>varchar</type> + <length>255</length> + <comment>folder to poll from when using IMAP, path to poll from when using Maildir, etc.</comment> + <add>2.2</add> + </field> + <field> + <name>activity_status</name> + <title>Activity Status</title> + <type>varchar</type> + <length>255</length> + <comment>Name of status to use when creating email to activity.</comment> + <add>4.7</add> + <pseudoconstant> + <optionGroupName>activity_status</optionGroupName> + <keyColumn>name</keyColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Managed.xml b/civicrm/xml/schema/Core/Managed.xml new file mode 100644 index 0000000000000000000000000000000000000000..9fdb1bc35389266dedb791233c87e5a48bbff6f3 --- /dev/null +++ b/civicrm/xml/schema/Core/Managed.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Managed</class> + <name>civicrm_managed</name> + <comment>List of declaratively managed objects</comment> + <add>4.2</add> + <log>false</log> + <field> + <name>id</name> + <title>Managed ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Surrogate Key</comment> + <add>4.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>module</name> + <title>Module</title> + <type>varchar</type> + <length>127</length> + <required>true</required> + <comment>Name of the module which declared this object</comment> + <add>4.2</add> + </field> + <field> + <name>name</name> + <title>Name</title> + <type>varchar</type> + <length>127</length> + <comment>Symbolic name used by the module to identify the object</comment> + <add>4.2</add> + </field> + <index> + <name>UI_managed_module_name</name> + <fieldName>module</fieldName> + <fieldName>name</fieldName> + <add>4.2</add> + </index> + <field> + <name>entity_type</name> + <title>Entity Type</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>API entity type</comment> + <add>4.2</add> + </field> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the referenced item.</comment> + <add>4.2</add> + </field> + <field> + <name>cleanup</name> + <title>Cleanup Setting</title> + <type>varchar</type> + <length>32</length> + <comment>Policy on when to cleanup entity (always, never, unused)</comment> + <pseudoconstant> + <callback>CRM_Core_ManagedEntities::getCleanupOptions</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.5</add> + </field> + <index> + <name>UI_managed_entity</name> + <fieldName>entity_type</fieldName> + <fieldName>entity_id</fieldName> + <add>4.2</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/Mapping.xml b/civicrm/xml/schema/Core/Mapping.xml new file mode 100644 index 0000000000000000000000000000000000000000..f488d598fe518d15eae8baf273e33d50f8e4b8d3 --- /dev/null +++ b/civicrm/xml/schema/Core/Mapping.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Mapping</class> + <name>civicrm_mapping</name> + <comment>Store field mappings in import or export for reuse</comment> + <add>1.2</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Mapping ID</title> + <required>true</required> + <comment>Mapping ID</comment> + <add>1.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + <add>1.2</add> + </primaryKey> + <field> + <name>name</name> + <type>varchar</type> + <length>64</length> + <comment>Name of Mapping</comment> + <add>1.2</add> + </field> + <field> + <name>description</name> + <type>varchar</type> + <length>255</length> + <comment>Description of Mapping.</comment> + <add>1.2</add> + </field> + <field> + <name>mapping_type</name> + <type>enum</type> + <values>Export, Import, Export Contributions, Import Contributions, Import Activity, Search Builder, Import + Memberships, Import Participants + </values> + <comment>Type of Mapping.</comment> + <add>1.2</add> + <drop>2.1</drop> + </field> + <field> + <name>mapping_type_id</name> + <type>int unsigned</type> + <title>Mapping Type</title> + <comment>Mapping Type</comment> + <add>2.1</add> + <pseudoconstant> + <optionGroupName>mapping_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <add>1.2</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/MappingField.xml b/civicrm/xml/schema/Core/MappingField.xml new file mode 100644 index 0000000000000000000000000000000000000000..30f58d69c90731594e856719a229d2ffe4f8b9f4 --- /dev/null +++ b/civicrm/xml/schema/Core/MappingField.xml @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>MappingField</class> + <name>civicrm_mapping_field</name> + <comment>Individual field mappings for Mapping</comment> + <add>1.2</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Mapping Field ID</title> + <required>true</required> + <comment>Mapping Field ID</comment> + <add>1.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + <add>1.2</add> + </primaryKey> + <field> + <name>mapping_id</name> + <type>int unsigned</type> + <title>Mapping ID</title> + <required>true</required> + <comment>Mapping to which this field belongs</comment> + <add>1.2</add> + </field> + <foreignKey> + <name>mapping_id</name> + <table>civicrm_mapping</table> + <key>id</key> + <add>1.2</add> + </foreignKey> + <field> + <name>name</name> + <type>varchar</type> + <length>255</length> + <comment>Mapping field key</comment> + <add>1.2</add> + </field> + <field> + <name>contact_type</name> + <type>varchar</type> + <length>64</length> + <comment>Contact Type in mapping</comment> + <html> + <type>Select</type> + </html> + <add>1.2</add> + </field> + <field> + <name>column_number</name> + <type>int unsigned</type> + <required>true</required> + <comment>Column number for mapping set</comment> + <add>1.2</add> + </field> + <field> + <name>location_type_id</name> + <type>int unsigned</type> + <title>Location type ID</title> + <comment>Location type of this mapping, if required</comment> + <add>1.2</add> + </field> + <foreignKey> + <name>location_type_id</name> + <table>civicrm_location_type</table> + <key>id</key> + <add>1.2</add> + </foreignKey> + <field> + <name>phone_type</name> + <type>varchar</type> + <length>64</length> + <comment>Phone type, if required</comment> + <add>1.2</add> + <drop>2.2</drop> + </field> + <field> + <name>phone_type_id</name> + <type>int unsigned</type> + <title>Phone type ID</title> + <comment>Which type of phone does this number belongs.</comment> + <add>2.2</add> + </field> + <field> + <name>im_provider_id</name> + <type>int unsigned</type> + <title>IM provider ID</title> + <comment>Which type of IM Provider does this name belong.</comment> + <add>3.0</add> + <pseudoconstant> + <optionGroupName>instant_messenger_service</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>website_type_id</name> + <type>int unsigned</type> + <title>Website type ID</title> + <comment>Which type of website does this site belong</comment> + <add>3.2</add> + <pseudoconstant> + <optionGroupName>website_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>relationship_type_id</name> + <type>int unsigned</type> + <title>Relationship type ID</title> + <comment>Relationship type, if required</comment> + <add>1.2</add> + </field> + <foreignKey> + <name>relationship_type_id</name> + <table>civicrm_relationship_type</table> + <key>id</key> + <add>1.2</add> + </foreignKey> + <field> + <name>relationship_direction</name> + <type>varchar</type> + <length>6</length> + <add>1.7</add> + </field> + <field> + <name>grouping</name> + <type>int unsigned</type> + <default>1</default> + <comment>Used to group mapping_field records into related sets (e.g. for criteria sets in search builder + mappings). + </comment> + <add>1.5</add> + </field> + <field> + <name>operator</name> + <type>varchar</type> + <length>16</length> + <type>enum</type> + <comment>SQL WHERE operator for search-builder mapping fields (search criteria).</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getSearchBuilderOperators</callback> + </pseudoconstant> + <add>1.5</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>value</name> + <type>varchar</type> + <length>255</length> + <comment>SQL WHERE value for search-builder mapping fields.</comment> + <add>1.5</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Menu.xml b/civicrm/xml/schema/Core/Menu.xml new file mode 100644 index 0000000000000000000000000000000000000000..303ae57f57105d7c8daeb00017885f87c5e1f326 --- /dev/null +++ b/civicrm/xml/schema/Core/Menu.xml @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Menu</class> + <name>civicrm_menu</name> + <comment>Table to store menu items for all civicrm components.</comment> + <add>1.1</add> + <field> + <name>id</name> + <title>Menu ID</title> + <type>int unsigned</type> + <required>true</required> + <add>2.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Domain</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this menu item for</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.0</add> + </foreignKey> + <field> + <name>path</name> + <title>Path</title> + <type>varchar</type> + <length>255</length> + <comment>Path Name</comment> + <add>2.1</add> + </field> + <index> + <name>UI_path_domain_id</name> + <fieldName>path</fieldName> + <fieldName>domain_id</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <field> + <name>path_arguments</name> + <title>Arguments</title> + <type>text</type> + <comment>Arguments to pass to the url</comment> + <add>2.1</add> + </field> + <field> + <name>title</name> + <title>Menu Title</title> + <type>varchar</type> + <length>255</length> + <add>2.1</add> + </field> + <field> + <name>access_callback</name> + <title>Access Callback</title> + <type>varchar</type> + <length>255</length> + <comment>Function to call to check access permissions</comment> + <add>2.1</add> + </field> + <field> + <name>access_arguments</name> + <title>Access Arguments</title> + <type>text</type> + <comment>Arguments to pass to access callback</comment> + <add>2.1</add> + </field> + <field> + <name>page_callback</name> + <title>Page Callback</title> + <type>varchar</type> + <length>255</length> + <comment>function to call for this url</comment> + <add>2.1</add> + </field> + <field> + <name>page_arguments</name> + <title>Page Arguments</title> + <type>text</type> + <comment>Arguments to pass to page callback</comment> + <add>2.1</add> + </field> + <field> + <name>breadcrumb</name> + <title>Breadcrumb</title> + <type>text</type> + <comment>Breadcrumb for the path.</comment> + <add>2.1</add> + </field> + <field> + <name>return_url</name> + <type>varchar</type> + <length>255</length> + <comment>Url where a page should redirected to, if next url not known.</comment> + <add>2.1</add> + </field> + <field> + <name>return_url_args</name> + <type>varchar</type> + <length>255</length> + <comment>Arguments to pass to return_url</comment> + <add>2.1</add> + </field> + <field> + <name>component_id</name> + <title>Component</title> + <type>int unsigned</type> + <comment>Component that this menu item belongs to</comment> + <add>2.1</add> + <pseudoconstant> + <table>civicrm_component</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>component_id</name> + <table>civicrm_component</table> + <key>id</key> + <add>2.1</add> + </foreignKey> + <field> + <name>is_active</name> + <title>Enabled?</title> + <type>boolean</type> + <comment>Is this menu item active?</comment> + <add>2.1</add> + </field> + <field> + <name>is_public</name> + <title>Public?</title> + <type>boolean</type> + <comment>Is this menu accessible to the public?</comment> + <add>2.1</add> + </field> + <field> + <name>is_exposed</name> + <title>Exposed?</title> + <type>boolean</type> + <comment>Is this menu exposed to the navigation system?</comment> + <add>2.1</add> + </field> + <field> + <name>is_ssl</name> + <title>Use SSL?</title> + <type>boolean</type> + <comment>Should this menu be exposed via SSL if enabled?</comment> + <add>2.1</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <required>true</required> + <default>1</default> + <comment>Ordering of the menu items in various blocks.</comment> + <add>2.1</add> + </field> + <field> + <name>type</name> + <title>Type</title> + <type>int</type> + <required>true</required> + <default>1</default> + <comment>Drupal menu type.</comment> + <add>2.1</add> + </field> + <field> + <name>page_type</name> + <title>Page Type</title> + <type>int</type> + <required>true</required> + <default>1</default> + <comment>CiviCRM menu type.</comment> + <add>2.1</add> + </field> + <field> + <name>skipBreadcrumb</name> + <title>Hide Breadcrumb?</title> + <type>boolean</type> + <comment>skip this url being exposed to breadcrumb</comment> + <add>2.2</add> + </field> + <field> + <name>module_data</name> + <title>Other menu data</title> + <type>text</type> + <comment>All other menu metadata not stored in other fields</comment> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/MessageTemplate.xml b/civicrm/xml/schema/Core/MessageTemplate.xml new file mode 100644 index 0000000000000000000000000000000000000000..b400d66eea4c0f5a4e8be6f0ca98667637502dad --- /dev/null +++ b/civicrm/xml/schema/Core/MessageTemplate.xml @@ -0,0 +1,111 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>MessageTemplate</class> + <name>civicrm_msg_template</name> + <comment>Users will need a way to save and retrieve templates with tokens for use in recurring email communication tasks</comment> + <add>1.6</add> + <field> + <name>id</name> + <title>Message Template ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Message Template ID</comment> + <add>1.6</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>msg_title</name> + <title>Message Template Title</title> + <type>varchar</type> + <length>255</length> + <comment>Descriptive title of message</comment> + <add>1.6</add> + </field> + <field> + <name>msg_subject</name> + <title>Message Template Subject</title> + <type>text</type> + <comment>Subject for email message.</comment> + <add>1.6</add> + <!-- type changed from VARCHAR(255) to TEXT in 3.1 --> + </field> + <field> + <name>msg_text</name> + <title>Message Template Text</title> + <type>longtext</type> + <html> + <type>TextArea</type> + <rows>10</rows> + <cols>75</cols> + </html> + <comment>Text formatted message</comment> + <add>1.6</add> + <!-- type changed from TEXT to LONGTEXT in 4.3 --> + </field> + <field> + <name>msg_html</name> + <title>Message Template HTML</title> + <type>longtext</type> + <html> + <type>RichTextEditor</type> + <rows>10</rows> + <cols>75</cols> + </html> + <comment>HTML formatted message</comment> + <add>1.6</add> + <!-- type changed from TEXT to LONGTEXT in 4.3 --> + </field> + <field> + <name>is_active</name> + <title>Is Active</title> + <type>boolean</type> + <default>1</default> + <add>1.6</add> + </field> + <field> + <name>workflow_id</name> + <title>Message Template Workflow</title> + <type>int unsigned</type> + <comment>a pseudo-FK to civicrm_option_value</comment> + <add>3.1</add> + </field> + <field> + <name>is_default</name> + <title>Message Template Is Default?</title> + <type>boolean</type> + <default>1</default> + <comment>is this the default message template for the workflow referenced by workflow_id?</comment> + <add>3.1</add> + </field> + <field> + <name>is_reserved</name> + <title>Message Template Is Reserved?</title> + <type>boolean</type> + <comment>is this the reserved message template which we ship for the workflow referenced by workflow_id?</comment> + <add>3.1</add> + </field> + <field> + <name>is_sms</name> + <title>Message Template is used for SMS?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this message template used for sms?</comment> + <add>4.5</add> + </field> + <field> + <name>pdf_format_id</name> + <title>Message Template Format</title> + <type>int unsigned</type> + <comment>a pseudo-FK to civicrm_option_value containing PDF Page Format.</comment> + <pseudoconstant> + <optionGroupName>pdf_format</optionGroupName> + <keyColumn>id</keyColumn> + </pseudoconstant> + <add>3.4</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Navigation.xml b/civicrm/xml/schema/Core/Navigation.xml new file mode 100644 index 0000000000000000000000000000000000000000..8a60e331656812d737daac4eb6de596e7b349d13 --- /dev/null +++ b/civicrm/xml/schema/Core/Navigation.xml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Navigation</class> + <name>civicrm_navigation</name> + <comment>Table to store navigation.</comment> + <add>3.0</add> + <field> + <name>id</name> + <title>Navigation ID</title> + <type>int unsigned</type> + <required>true</required> + <add>3.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Navigation Domain</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this navigation item for</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.0</add> + </foreignKey> + <field> + <name>label</name> + <title>Navigation Item Label</title> + <type>varchar</type> + <length>255</length> + <comment>Navigation Title</comment> + <add>3.0</add> + </field> + <field> + <name>name</name> + <title>Navigation Item Machine Name</title> + <type>varchar</type> + <length>255</length> + <comment>Internal Name</comment> + <add>3.0</add> + </field> + <field> + <name>url</name> + <title>Url</title> + <type>varchar</type> + <length>255</length> + <comment>url in case of custom navigation link</comment> + <add>3.0</add> + </field> + <field> + <name>icon</name> + <title>Icon</title> + <type>varchar</type> + <length>255</length> + <comment>CSS class name for an icon</comment> + <default>NULL</default> + <required>false</required> + <add>4.7</add> + </field> + <field> + <name>permission</name> + <title>Required Permission</title> + <type>varchar</type> + <length>255</length> + <comment>Permission for menu item</comment> + <add>3.0</add> + </field> + <field> + <name>permission_operator</name> + <title>Permission Operator</title> + <type>varchar</type> + <length>3</length> + <comment>Permission Operator</comment> + <add>3.0</add> + </field> + <field> + <name>parent_id</name> + <title>Navigation parent ID</title> + <type>int unsigned</type> + <comment>Parent navigation item, used for grouping</comment> + <pseudoconstant> + <table>civicrm_navigation</table> + <keyColumn>id</keyColumn> + <nameColumn>name</nameColumn> + <labelColumn>label</labelColumn> + </pseudoconstant> + <add>3.0</add> + </field> + <foreignKey> + <name>parent_id</name> + <table>civicrm_navigation</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>3.0</add> + </foreignKey> + <field> + <name>is_active</name> + <title>Is Active</title> + <type>boolean</type> + <comment>Is this navigation item active?</comment> + <add>3.0</add> + </field> + <field> + <name>has_separator</name> + <title>Use separator</title> + <type>boolean</type> + <comment>If separator needs to be added after this menu item</comment> + <add>3.0</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <comment>Ordering of the navigation items in various blocks.</comment> + <add>3.0</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Note.xml b/civicrm/xml/schema/Core/Note.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6e60dfb17f8ef51cc33b1f3ee82ec50a1b99ff3 --- /dev/null +++ b/civicrm/xml/schema/Core/Note.xml @@ -0,0 +1,112 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Note</class> + <name>civicrm_note</name> + <comment>Notes can be linked to any object in the application.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Note ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Note ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Note Entity</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name of table where item being referenced is stored.</comment> + <pseudoconstant> + <callback>CRM_Core_BAO_Note::entityTables</callback> + </pseudoconstant> + <add>1.1</add> + </field> + <field> + <name>entity_id</name> + <title>Note Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the referenced item.</comment> + <add>1.1</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.1</add> + </dynamicForeignKey> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>1.1</add> + </index> + <field> + <name>note</name> + <title>Note</title> + <type>text</type> + <comment>Note and/or Comment.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <import>true</import> + <headerPattern>/Note|Comment/i</headerPattern> + <dataPattern>//</dataPattern> + <add>1.1</add> + </field> + <field> + <name>contact_id</name> + <title>Note Created By</title> + <type>int unsigned</type> + <comment>FK to Contact ID creator</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>modified_date</name> + <title>Note Modified By</title> + <type>date</type> + <comment>When was this note last modified/edited</comment> + <add>1.1</add> + </field> + <field> + <name>subject</name> + <title>Subject</title> + <type>varchar</type> + <length>255</length> + <comment>subject of note description</comment> + <html> + <type>Text</type> + <size>60</size> + </html> + <add>1.5</add> + </field> + <field> + <name>privacy</name> + <title>Privacy</title> + <type>varchar</type> + <length>255</length> + <comment>Foreign Key to Note Privacy Level (which is an option value pair and hence an implicit FK)</comment> + <add>3.3</add> + <pseudoconstant> + <optionGroupName>note_privacy</optionGroupName> + </pseudoconstant> + </field> +</table> diff --git a/civicrm/xml/schema/Core/OpenID.xml b/civicrm/xml/schema/Core/OpenID.xml new file mode 100644 index 0000000000000000000000000000000000000000..a7b2e2aba9f6615bdb33ebda522f7c783fef96ed --- /dev/null +++ b/civicrm/xml/schema/Core/OpenID.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Core</base> + <class>OpenID</class> + <name>civicrm_openid</name> + <comment>OpenID information for a specific location.</comment> + <add>2.0</add> + <field> + <name>id</name> + <title>Open ID identifier</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique OpenID ID</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>OpenID Contact</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>location_type_id</name> + <title>OpenID Location Type</title> + <type>int unsigned</type> + <comment>Which Location does this email belong to.</comment> + <add>2.0</add> + </field> + <index> + <name>index_location_type</name> + <fieldName>location_type_id</fieldName> + <add>2.0</add> + </index> + <field> + <name>openid</name> + <title>OpenID</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <headerPattern>/^Open.?ID|u(niq\w*)?.?ID/i</headerPattern> + <dataPattern>/^[\w\/\:\.]+$/</dataPattern> + <comment>the OpenID (or OpenID-style http://username.domain/) unique identifier for this contact mainly used for logging in to CiviCRM</comment> + <rule>url</rule> + <comment>OpenID</comment> + <add>2.0</add> + </field> + <index> + <name>UI_openid</name> + <fieldName>openid</fieldName> + <unique>true</unique> + <add>2.0</add> + </index> + <field> + <name>allowed_to_login</name> + <title>Allowed to login?</title> + <type>boolean</type> + <required>true</required> + <default>0</default> + <comment>Whether or not this user is allowed to login</comment> + <add>2.0</add> + </field> + <field> + <name>is_primary</name> + <title>Is OpenID Primary?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the primary email for this contact and location.</comment> + <add>2.0</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/OptionGroup.xml b/civicrm/xml/schema/Core/OptionGroup.xml new file mode 100644 index 0000000000000000000000000000000000000000..013e76dde9886221f95b92e27156a6c66ec5776e --- /dev/null +++ b/civicrm/xml/schema/Core/OptionGroup.xml @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>OptionGroup</class> + <name>civicrm_option_group</name> + <add>1.5</add> + <log>true</log> + <field> + <name>id</name> + <title>Option Group ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Option Group ID</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Option Group Name</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Option group name. Used as selection key by class properties which lookup options in civicrm_option_value.</comment> + <add>1.5</add> + </field> + <field> + <name>title</name> + <title>Option Group title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Option Group title.</comment> + <add>1.5</add> + </field> + <field> + <name>description</name> + <title>Option Group Description</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Option group description.</comment> + <add>1.5</add> + </field> + <field> + <name>data_type</name> + <title>Data Type for this option group</title> + <type>varchar</type> + <length>128</length> + <comment>Option group description.</comment> + <pseudoconstant> + <callback>CRM_Utils_Type::dataTypes</callback> + </pseudoconstant> + <add>4.7</add> + </field> + <field> + <name>is_reserved</name> + <title>Option Group Is Reserved?</title> + <type>boolean</type> + <default>1</default> + <comment>Is this a predefined system option group (i.e. it can not be deleted)?</comment> + <add>1.5</add> + </field> + <field> + <name>is_active</name> + <title>Option Group Is Active?</title> + <type>boolean</type> + <comment>Is this option group active?</comment> + <add>1.5</add> + </field> + <field> + <name>is_locked</name> + <title>Option Group Is Locked</title> + <type>boolean</type> + <comment>A lock to remove the ability to add new options via the UI.</comment> + <add>4.5</add> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/OptionValue.xml b/civicrm/xml/schema/Core/OptionValue.xml new file mode 100644 index 0000000000000000000000000000000000000000..ac469d7cdcecd119d0fefc5785de1a0291926f4f --- /dev/null +++ b/civicrm/xml/schema/Core/OptionValue.xml @@ -0,0 +1,216 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>OptionValue</class> + <name>civicrm_option_value</name> + <add>1.5</add> + <log>true</log> + <field> + <name>id</name> + <title>Option Value ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Option ID</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>option_group_id</name> + <title>Option Group ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Group which this option belongs to.</comment> + <add>1.5</add> + <pseudoconstant> + <table>civicrm_option_group</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>option_group_id</name> + <table>civicrm_option_group</table> + <key>id</key> + <add>1.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>label</name> + <title>Option Label</title> + <type>varchar</type> + <required>true</required> + <length>512</length> + <localizable>true</localizable> + <comment>Option string as displayed to users - e.g. the label in an HTML OPTION tag.</comment> + <add>1.5</add> + </field> + <field> + <name>value</name> + <title>Option Value</title> + <type>varchar</type> + <length>512</length> + <required>true</required> + <comment>The actual value stored (as a foreign key) in the data record. Functions which need lookup option_value.title should use civicrm_option_value.option_group_id plus civicrm_option_value.value as the key.</comment> + <add>1.5</add> + <change>3.3</change> + </field> + <field> + <name>name</name> + <title>Option Name</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <comment>Stores a fixed (non-translated) name for this option value. Lookup functions should use the name as the key for the option value row.</comment> + <add>1.5</add> + </field> + <field> + <name>grouping</name> + <title>Option Grouping Name</title> + <type>varchar</type> + <length>255</length> + <comment>Use to sort and/or set display properties for sub-set(s) of options within an option group. EXAMPLE: Use for college_interest field, to differentiate partners from non-partners.</comment> + <add>1.5</add> + </field> + <field> + <name>filter</name> + <type>int unsigned</type> + <comment>Bitwise logic can be used to create subsets of options within an option_group for different uses.</comment> + <add>1.5</add> + </field> + <field> + <name>is_default</name> + <title>Option is Default?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the default option for the group?</comment> + <add>1.5</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int unsigned</type> + <required>true</required> + <comment>Controls display sort order.</comment> + <add>1.5</add> + </field> + <field> + <name>description</name> + <title>Option Description</title> + <type>text</type> + <html> + <type>TextArea</type> + <rows>8</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>Optional description.</comment> + <add>1.5</add> + </field> + <field> + <name>is_optgroup</name> + <title>Option is Header?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this row simply a display header? Expected usage is to render these as OPTGROUP tags within a SELECT field list of options?</comment> + <add>1.5</add> + </field> + <field> + <name>is_reserved</name> + <title>Option Is Reserved?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this a predefined system object?</comment> + <add>1.5</add> + </field> + <field> + <name>is_active</name> + <title>Option Is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this option active?</comment> + <add>1.5</add> + </field> + <field> + <name>component_id</name> + <title>Option Component</title> + <type>int unsigned</type> + <comment>Component that this option value belongs/caters to.</comment> + <add>2.0</add> + <pseudoconstant> + <table>civicrm_component</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>component_id</name> + <table>civicrm_component</table> + <key>id</key> + <add>2.0</add> + </foreignKey> + <field> + <name>domain_id</name> + <title>Option Domain</title> + <type>int unsigned</type> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this option value for</comment> + <add>3.1</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.1</add> + </foreignKey> + <field> + <name>visibility_id</name> + <title>Option Visibility</title> + <type>int unsigned</type> + <default>NULL</default> + <add>2.2</add> + </field> + <field> + <name>icon</name> + <title>Icon</title> + <type>varchar</type> + <length>255</length> + <default>NULL</default> + <comment>crm-i icon class</comment> + <add>4.7</add> + </field> + <field> + <name>color</name> + <title>Color</title> + <type>varchar</type> + <length>255</length> + <comment>Hex color value e.g. #ffffff</comment> + <default>NULL</default> + <add>4.7</add> + </field> + <index> + <name>index_option_group_id_value</name> + <fieldName length="128">value</fieldName> + <fieldName>option_group_id</fieldName> + <add>1.5</add> + </index> + <index> + <name>index_option_group_id_name</name> + <fieldName length="128">name</fieldName> + <fieldName>option_group_id</fieldName> + <add>2.2</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/Persistent.xml b/civicrm/xml/schema/Core/Persistent.xml new file mode 100644 index 0000000000000000000000000000000000000000..4ea044d140d4252c182050fa15ebcc524555fa76 --- /dev/null +++ b/civicrm/xml/schema/Core/Persistent.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Core</base> + <class>Persistent</class> + <name>civicrm_persistent</name> + <comment>DB Template Customization strings</comment> + <add>3.2</add> + <field> + <name>id</name> + <title>Persistent ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Persistent Record Id</comment> + <add>3.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>false</autoincrement> + </primaryKey> + <field> + <name>context</name> + <title>Context</title> + <type>varchar</type> + <length>255</length> + <comment>Context for which name data pair is to be stored</comment> + <required>true</required> + <add>3.2</add> + </field> + <field> + <name>name</name> + <title>Name</title> + <type>varchar</type> + <length>255</length> + <comment>Name of Context</comment> + <required>true</required> + <add>3.2</add> + </field> + <field> + <name>data</name> + <title>Data</title> + <type>longtext</type> + <comment>data associated with name</comment> + <add>3.2</add> + </field> + <field> + <name>is_config</name> + <title>Is Configuration?</title> + <type>boolean</type> + <default>0</default> + <comment>Config Settings</comment> + <required>true</required> + <add>3.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Phone.xml b/civicrm/xml/schema/Core/Phone.xml new file mode 100644 index 0000000000000000000000000000000000000000..29b17c1df38aa935d4c2b7acb08f5cdf5b960829 --- /dev/null +++ b/civicrm/xml/schema/Core/Phone.xml @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Phone</class> + <name>civicrm_phone</name> + <comment>Phone information for a specific location.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Phone ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique Phone ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Phone Contact</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>location_type_id</name> + <title>Phone Location Type</title> + <type>int unsigned</type> + <comment>Which Location does this phone belong to.</comment> + <pseudoconstant> + <table>civicrm_location_type</table> + <keyColumn>id</keyColumn> + <labelColumn>display_name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>2.0</add> + </field> + <index> + <name>index_location_type</name> + <fieldName>location_type_id</fieldName> + <add>2.0</add> + </index> + <field> + <name>is_primary</name> + <title>Is Phone Primary?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the primary phone for this contact and location.</comment> + <add>1.1</add> + </field> + <index> + <name>index_is_primary</name> + <fieldName>is_primary</fieldName> + <add>2.0</add> + </index> + <field> + <name>is_billing</name> + <title>Is Billing Phone</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the billing?</comment> + <add>2.0</add> + </field> + <index> + <name>index_is_billing</name> + <fieldName>is_billing</fieldName> + <add>2.0</add> + </index> + <field> + <name>mobile_provider_id</name> + <title>Mobile Provider</title> + <type>int unsigned</type> + <comment>Which Mobile Provider does this phone belong to.</comment> + <add>1.1</add> + </field> + <index> + <name>UI_mobile_provider_id</name> + <fieldName>mobile_provider_id</fieldName> + <add>1.6</add> + </index> + <field> + <name>phone</name> + <type>varchar</type> + <length>32</length> + <import>true</import> + <headerPattern>/phone/i</headerPattern> + <dataPattern>/^[\d\(\)\-\.\s]+$/</dataPattern> + <comment>Complete phone number.</comment> + <add>1.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>phone_ext</name> + <title>Phone Extension</title> + <type>varchar</type> + <length>16</length> + <html> + <type>Text</type> + <size>4</size> + </html> + <import>true</import> + <export>true</export> + <headerPattern>/extension/i</headerPattern> + <dataPattern>/^\d+$/</dataPattern> + <comment>Optional extension for a phone number.</comment> + <add>3.3</add> + </field> + <field> + <name>phone_numeric</name> + <type>varchar</type> + <length>32</length> + <comment>Phone number stripped of all whitespace, letters, and punctuation.</comment> + <add>4.3</add> + </field> + <index> + <name>index_phone_numeric</name> + <fieldName>phone_numeric</fieldName> + <add>4.3</add> + </index> + <field> + <name>phone_type</name> + <type>enum</type> + <values>Phone, Mobile, Fax, Pager</values> + <headerPattern>/phone\s+type/i</headerPattern> + <dataPattern>/phone|mobile|fax|pager/i</dataPattern> + <comment>What type of telecom device is this.</comment> + <add>1.1</add> + <drop>2.2</drop> + </field> + <field> + <name>phone_type_id</name> + <title>Phone Type</title> + <type>int unsigned</type> + <comment>Which type of phone does this number belongs.</comment> + <pseudoconstant> + <optionGroupName>phone_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>2.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Preferences.xml b/civicrm/xml/schema/Core/Preferences.xml new file mode 100644 index 0000000000000000000000000000000000000000..985b71ab3c1eecd458b9f5bd7fbed2bcd31a510a --- /dev/null +++ b/civicrm/xml/schema/Core/Preferences.xml @@ -0,0 +1,204 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Preferences</class> + <name>civicrm_preferences</name> + <comment>Define preferences for the site and users</comment> + <add>1.8</add> + <drop>4.1</drop> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Which Domain is this menu item for</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>3.0</add> + </foreignKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>1.8</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>1.8</add> + </foreignKey> + <field> + <name>is_domain</name> + <type>boolean</type> + <comment>Is this the record for the domain setting?</comment> + <add>1.8</add> + </field> + <field> + <name>location_count</name> + <type>int unsigned</type> + <comment>Number of locations to be displayed on edit page?</comment> + <add>1.8</add> + <drop>3.0</drop> + </field> + <field> + <name>contact_view_options</name> + <type>varchar</type> + <length>128</length> + <comment>What tabs are displayed in the contact summary</comment> + <add>1.8</add> + </field> + <index> + <name>index_contact_view_options</name> + <fieldName>contact_view_options</fieldName> + <add>1.8</add> + </index> + <field> + <name>contact_edit_options</name> + <type>varchar</type> + <length>128</length> + <comment>What tabs are displayed in the contact edit</comment> + <add>1.8</add> + </field> + <index> + <name>index_contact_edit_options</name> + <fieldName>contact_edit_options</fieldName> + <add>1.8</add> + </index> + <field> + <name>advanced_search_options</name> + <type>varchar</type> + <length>128</length> + <comment>What tabs are displayed in the advanced search screen</comment> + <add>1.8</add> + </field> + <index> + <name>index_advanced_search_options</name> + <fieldName>advanced_search_options</fieldName> + <add>1.8</add> + </index> + <field> + <name>user_dashboard_options</name> + <type>varchar</type> + <length>128</length> + <comment>What tabs are displayed in the contact edit</comment> + <add>1.8</add> + </field> + <index> + <name>index_user_dashboard_options</name> + <fieldName>user_dashboard_options</fieldName> + <add>1.8</add> + </index> + <field> + <name>address_options</name> + <type>varchar</type> + <length>128</length> + <comment>What fields are displayed from the address table</comment> + <add>1.8</add> + </field> + <index> + <name>index_address_options</name> + <fieldName>address_options</fieldName> + <add>1.8</add> + </index> + <field> + <name>address_format</name> + <type>text</type> + <comment>Format to display the address</comment> + <add>1.8</add> + </field> + <field> + <name>mailing_format</name> + <type>text</type> + <comment>Format to display a mailing label</comment> + <add>1.8</add> + </field> + <field> + <name>display_name_format</name> + <type>text</type> + <comment>Format to display contact display name</comment> + <add>3.2</add> + </field> + <field> + <name>sort_name_format</name> + <type>text</type> + <comment>Format to display contact sort name</comment> + <add>3.2</add> + </field> + <field> + <name>individual_name_format</name> + <type>text</type> + <comment>Format to display a individual name</comment> + <add>1.8</add> + <drop>3.0</drop> + </field> + <field> + <name>address_standardization_provider</name> + <type>varchar</type> + <length>64</length> + <comment>object name of provider for address standarization</comment> + <add>1.8</add> + </field> + <field> + <name>address_standardization_userid</name> + <type>varchar</type> + <length>64</length> + <comment>user id for provider login</comment> + <add>1.8</add> + </field> + <field> + <name>address_standardization_url</name> + <type>varchar</type> + <length>255</length> + <comment>url of address standardization service</comment> + <add>1.8</add> + </field> + <field> + <name>editor_id</name> + <type>int unsigned</type> + <length>4</length> + <comment>ID of the editor</comment> + <add>2.1</add> + </field> + <field> + <name>mailing_backend</name> + <type>text</type> + <comment>Smtp Backend configuration.</comment> + <html> + <type>TextArea</type> + <rows>20</rows> + <cols>80</cols> + </html> + <add>2.2</add> + </field> + <field> + <name>navigation</name> + <type>text</type> + <comment>Store navigation for the Contact</comment> + <add>3.0</add> + </field> + <field> + <name>contact_autocomplete_options</name> + <type>varchar</type> + <length>255</length> + <comment>What Autocomplete has to return</comment> + <add>3.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/PreferencesDate.xml b/civicrm/xml/schema/Core/PreferencesDate.xml new file mode 100644 index 0000000000000000000000000000000000000000..90949567ec4a041f057cfe16278cfa98d0e244dd --- /dev/null +++ b/civicrm/xml/schema/Core/PreferencesDate.xml @@ -0,0 +1,78 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>PreferencesDate</class> + <name>civicrm_preferences_date</name> + <comment>Define date preferences for the site</comment> + <add>2.0</add> + <log>true</log> + <field> + <name>id</name> + <title>Date Preference ID</title> + <type>int unsigned</type> + <required>true</required> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Date Preference Name</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>The meta name for this date (fixed in code)</comment> + <add>2.0</add> + </field> + <index> + <name>index_name</name> + <fieldName>name</fieldName> + <add>2.0</add> + </index> + <field> + <name>description</name> + <type>varchar</type> + <length>255</length> + <comment>Description of this date type.</comment> + <add>2.0</add> + </field> + <field> + <name>start</name> + <type>int</type> + <required>true</required> + <comment>The start offset relative to current year</comment> + <add>2.0</add> + </field> + <field> + <name>end</name> + <title>End Offset</title> + <type>int</type> + <required>true</required> + <comment>The end offset relative to current year, can be negative</comment> + <add>2.0</add> + </field> + <field> + <name>minute_increment</name> + <type>int</type> + <comment>The minute increment number</comment> + <add>2.0</add> + <drop>3.1</drop> + </field> + <field> + <name>date_format</name> + <type>varchar</type> + <length>64</length> + <comment>The date type</comment> + <add>2.0</add> + </field> + <field> + <name>time_format</name> + <type>varchar</type> + <length>64</length> + <comment>time format</comment> + <add>3.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/PrevNextCache.xml b/civicrm/xml/schema/Core/PrevNextCache.xml new file mode 100644 index 0000000000000000000000000000000000000000..5fda09bd84eb7e62c5ad7b2d314277c8687983db --- /dev/null +++ b/civicrm/xml/schema/Core/PrevNextCache.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>PrevNextCache</class> + <name>civicrm_prevnext_cache</name> + <comment>Table to cache items for navigation on civicrm searched results.</comment> + <add>3.4</add> + <field> + <name>id</name> + <title>Prev Next Cache ID</title> + <type>int unsigned</type> + <required>true</required> + <add>3.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Prev Next Entity Table</title> + <type>varchar</type> + <length>64</length> + <comment>physical tablename for entity being joined to discount, e.g. civicrm_event</comment> + <add>3.4</add> + </field> + <field> + <name>entity_id1</name> + <title>Prev Next Entity ID 1</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to entity table specified in entity_table column.</comment> + <add>3.4</add> + </field> + <field> + <name>entity_id2</name> + <title>Prev Next Entity ID 2</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to entity table specified in entity_table column.</comment> + <add>3.4</add> + </field> + <field> + <name>cacheKey</name> + <title>Cache Key</title> + <type>varchar</type> + <length>255</length> + <comment>Unique path name for cache element of the searched item</comment> + <add>3.4</add> + </field> + <field> + <name>data</name> + <title>Prev Next Data</title> + <type>longtext</type> + <comment>cached snapshot of the serialized data</comment> + <serialize>PHP</serialize> + <add>3.4</add> + </field> + <field> + <name>is_selected</name> + <title>Is Selected</title> + <type>boolean</type> + <default>0</default> + <add>4.2</add> + </field> + <index> + <name>index_all</name> + <fieldName>cacheKey</fieldName> + <fieldName>entity_id1</fieldName> + <fieldName>entity_id2</fieldName> + <fieldName>entity_table</fieldName> + <fieldName>is_selected</fieldName> + </index> +</table> diff --git a/civicrm/xml/schema/Core/PrintLabel.xml b/civicrm/xml/schema/Core/PrintLabel.xml new file mode 100644 index 0000000000000000000000000000000000000000..06b1684163075f30e492ff381d42f08334a509cf --- /dev/null +++ b/civicrm/xml/schema/Core/PrintLabel.xml @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>PrintLabel</class> + <name>civicrm_print_label</name> + <comment>Table to store the labels created by user.</comment> + <add>4.4</add> + <field> + <name>id</name> + <title>Print Label ID</title> + <type>int unsigned</type> + <required>true</required> + <add>4.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>title</name> + <title>Title</title> + <type>varchar</type> + <length>255</length> + <comment>User title for for this label layout</comment> + <add>4.4</add> + </field> + <field> + <name>name</name> + <title>Name</title> + <type>varchar</type> + <length>255</length> + <comment>variable name/programmatic handle for this field.</comment> + <add>4.4</add> + </field> + <field> + <name>description</name> + <type>text</type> + <comment>Description of this label layout</comment> + <add>4.4</add> + </field> + <field> + <name>label_format_name</name> + <title>Label Format</title> + <type>varchar</type> + <length>255</length> + <pseudoconstant> + <optionGroupName>name_badge</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <comment>This refers to name column of civicrm_option_value row in name_badge option group</comment> + <add>4.4</add> + </field> + <field> + <name>label_type_id</name> + <title>Label Type</title> + <type>int unsigned</type> + <pseudoconstant> + <optionGroupName>label_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <comment>Implicit FK to civicrm_option_value row in NEW label_type option group</comment> + <add>4.4</add> + </field> + <field> + <name>data</name> + <type>longtext</type> + <comment>contains json encode configurations options</comment> + <add>4.4</add> + <serialize>JSON</serialize> + </field> + <field> + <name>is_default</name> + <title>Label is Default?</title> + <type>boolean</type> + <default>1</default> + <comment>Is this default?</comment> + <add>4.4</add> + </field> + <field> + <name>is_active</name> + <title>Label Is Active?</title> + <type>boolean</type> + <default>1</default> + <comment>Is this option active?</comment> + <add>4.4</add> + </field> + <field> + <name>is_reserved</name> + <title>Is Label Reserved?</title> + <type>boolean</type> + <default>1</default> + <comment>Is this reserved label?</comment> + <add>4.4</add> + </field> + <field> + <name>created_id</name> + <title>Label Created By</title> + <type>int unsigned</type> + <title>Created By Contact ID</title> + <comment>FK to civicrm_contact, who created this label layout</comment> + <add>4.4</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.4</add> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Core/RecurringEntity.xml b/civicrm/xml/schema/Core/RecurringEntity.xml new file mode 100644 index 0000000000000000000000000000000000000000..f90c5e4092d549b9673ee97499931c283a3e7df5 --- /dev/null +++ b/civicrm/xml/schema/Core/RecurringEntity.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>RecurringEntity</class> + <name>civicrm_recurring_entity</name> + <add>4.6</add> + <log>true</log> + <field> + <name>id</name> + <title>ID</title> + <type>int unsigned</type> + <length>10</length> + <required>true</required> + <add>4.6</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>parent_id</name> + <type>int unsigned</type> + <length>10</length> + <title>Parent ID</title> + <required>true</required> + <comment>Recurring Entity Parent ID</comment> + <add>4.6</add> + </field> + <field> + <name>entity_id</name> + <type>int unsigned</type> + <length>10</length> + <title>Entity ID</title> + <comment>Recurring Entity Child ID</comment> + <add>4.6</add> + </field> + <field> + <name>entity_table</name> + <type>varchar</type> + <length>64</length> + <title>Entity Table</title> + <required>true</required> + <comment>Physical tablename for entity, e.g. civicrm_event</comment> + <add>4.6</add> + </field> + <field> + <name>mode</name> + <type>boolean</type> + <default>1</default> + <title>Cascade Type</title> + <required>true</required> + <comment>1-this entity, 2-this and the following entities, 3-all the entities</comment> + <add>4.6</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Setting.xml b/civicrm/xml/schema/Core/Setting.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a5263fab71c3b0da36a90ab03491c1c367c7da3 --- /dev/null +++ b/civicrm/xml/schema/Core/Setting.xml @@ -0,0 +1,144 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Setting</class> + <name>civicrm_setting</name> + <comment>Table to store civicrm settings for civicrm core and components.</comment> + <add>4.1</add> + <field> + <name>id</name> + <title>Setting ID</title> + <type>int unsigned</type> + <required>true</required> + <add>4.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>group_name</name> + <title>Setting Group</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>group name for setting element, useful in caching setting elements</comment> + <add>4.1</add> + <drop>4.7</drop> + </field> + <field> + <name>name</name> + <title>Setting Name</title> + <type>varchar</type> + <length>255</length> + <comment>Unique name for setting</comment> + <add>4.1</add> + </field> + <index> + <name>index_group_name</name> + <fieldName>group_name</fieldName> + <fieldName>name</fieldName> + <add>4.1</add> + <drop>4.7</drop> + </index> + <field> + <name>value</name> + <type>text</type> + <comment>data associated with this group / name combo</comment> + <serialize>PHP</serialize> + <add>4.1</add> + </field> + <field> + <name>domain_id</name> + <title>Setting Domain</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this menu item for</comment> + <add>4.1</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>4.1</add> + </foreignKey> + <field> + <name>contact_id</name> + <title>Setting Contact</title> + <type>int unsigned</type> + <comment>FK to Contact ID if the setting is localized to a contact</comment> + <add>4.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>4.1</add> + </foreignKey> + <field> + <name>is_domain</name> + <title>Is Domain Setting?</title> + <type>boolean</type> + <comment>Is this setting a contact specific or site wide setting?</comment> + <add>4.1</add> + </field> + <field> + <name>component_id</name> + <title>Setting Component</title> + <type>int unsigned</type> + <comment>Component that this menu item belongs to</comment> + <add>4.1</add> + <pseudoconstant> + <table>civicrm_component</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>component_id</name> + <table>civicrm_component</table> + <key>id</key> + <add>4.1</add> + </foreignKey> + <field> + <name>created_date</name> + <title>Setting Created Date</title> + <type>datetime</type> + <comment>When was the setting created</comment> + <add>4.1</add> + </field> + <field> + <name>created_id</name> + <title>Setting Created By</title> + <type>int unsigned</type> + <comment>FK to civicrm_contact, who created this setting</comment> + <add>4.1</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <index> + <name>index_domain_contact_name</name> + <fieldName>domain_id</fieldName> + <fieldName>contact_id</fieldName> + <fieldName>name</fieldName> + <unique>true</unique> + <add>4.7</add> + </index> + +</table> diff --git a/civicrm/xml/schema/Core/StateProvince.xml b/civicrm/xml/schema/Core/StateProvince.xml new file mode 100644 index 0000000000000000000000000000000000000000..53f7aba31fa21cc7fac67af61a5abb652cd694b6 --- /dev/null +++ b/civicrm/xml/schema/Core/StateProvince.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>StateProvince</class> + <name>civicrm_state_province</name> + <add>1.1</add> + <field> + <name>id</name> + <title>State ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>State/Province ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>false</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>State</title> + <type>varchar</type> + <length>64</length> + <import>true</import> + <headerPattern>/state|prov(ince)?/i</headerPattern> + <dataPattern>/[A-Z]{2}/</dataPattern> + <comment>Name of State/Province</comment> + <add>1.1</add> + </field> + <field> + <name>abbreviation</name> + <title>State Abbreviation</title> + <type>varchar</type> + <length>4</length> + <comment>2-4 Character Abbreviation of State/Province</comment> + <add>1.1</add> + </field> + <field> + <name>country_id</name> + <title>Country</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID of Country that State/Province belong</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>country_id</name> + <table>civicrm_country</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <index> + <name>UI_name_country_id</name> + <fieldName>name</fieldName> + <fieldName>country_id</fieldName> + <unique>true</unique> + <add>1.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/StatusPreference.xml b/civicrm/xml/schema/Core/StatusPreference.xml new file mode 100644 index 0000000000000000000000000000000000000000..7e924e641a3047797348cb37d6f001005c062651 --- /dev/null +++ b/civicrm/xml/schema/Core/StatusPreference.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>StatusPreference</class> + <name>civicrm_status_pref</name> + <comment>Preferences controlling status checks called in system.check.</comment> + <add>4.7</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Status Preference ID</title> + <required>true</required> + <comment>Unique Status Preference ID</comment> + <add>4.7</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Setting Domain</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this Status Preference for</comment> + <add>4.7</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>4.7</add> + </foreignKey> + <field> + <name>name</name> + <title>Status Check Name</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <required>true</required> + <comment>Name of the status check this preference references.</comment> + <add>4.7</add> + </field> + <index> + <name>UI_status_pref_name</name> + <fieldName>name</fieldName> + <add>4.7</add> + </index> + <field> + <name>hush_until</name> + <title>Snooze Status Notifications Until</title> + <type>date</type> + <import>true</import> + <comment>expires ignore_severity. NULL never hushes.</comment> + <default>NULL</default> + <add>4.7</add> + </field> + <field> + <name>ignore_severity</name> + <title>Ignore Severity</title> + <type>int unsigned</type> + <import>true</import> + <comment>Hush messages up to and including this severity.</comment> + <default>1</default> + <add>4.7</add> + <pseudoconstant> + <callback>CRM_Utils_Check::getSeverityList</callback> + </pseudoconstant> + </field> + <field> + <name>prefs</name> + <title>Status Preferences</title> + <type>varchar</type> + <length>255</length> + <comment>These settings are per-check, and can't be compared across checks.</comment> + <add>4.7</add> + </field> + <field> + <name>check_info</name> + <title>Check Info</title> + <type>varchar</type> + <length>255</length> + <comment>These values are per-check, and can't be compared across checks.</comment> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/SystemLog.xml b/civicrm/xml/schema/Core/SystemLog.xml new file mode 100644 index 0000000000000000000000000000000000000000..e50a7e4d543ccba625a08cf5521ebb178b25bb8e --- /dev/null +++ b/civicrm/xml/schema/Core/SystemLog.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>SystemLog</class> + <name>civicrm_system_log</name> + <add>4.5</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>System Log ID</title> + <required>true</required> + <comment>Primary key ID</comment> + <add>4.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>message</name> + <title>System Log Message</title> + <required>true</required> + <type>varchar</type> + <length>128</length> + <comment>Standardized message</comment> + <add>4.5</add> + </field> + <field> + <name>context</name> + <title>Detailed Log Data</title> + <type>longtext</type> + <comment>JSON encoded data</comment> + <add>4.5</add> + </field> + <field> + <name>level</name> + <title>Detailed Log Data</title> + <comment>error level per PSR3</comment> + <type>varchar</type> + <length>9</length> + <default>'info'</default> + <add>4.5</add> + </field> + <field> + <name>timestamp</name> + <title>Log Timestamp</title> + <type>timestamp</type> + <comment>Timestamp of when event occurred.</comment> + <default>CURRENT_TIMESTAMP</default> + <add>4.5</add> + </field> + <field> + <name>contact_id</name> + <title>Log Contact ID</title> + <type>int unsigned</type> + <length>11</length> + <comment>Optional Contact ID that created the log. Not an FK as we keep this regardless</comment> + <add>4.5</add> + </field> + <field> + <name>hostname</name> + <title>Log Host</title> + <type>varchar</type> + <length>128</length> + <comment>Optional Name of logging host</comment> + <add>4.5</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Tag.xml b/civicrm/xml/schema/Core/Tag.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b7b047f1816d51d6f7bdfa87a6a9f428631aa34 --- /dev/null +++ b/civicrm/xml/schema/Core/Tag.xml @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Tag</class> + <name>civicrm_tag</name> + <comment>Provides support for flat or hierarchical classification of various types of entities (contacts, groups, actions...).</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Tag ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Tag ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Tag Name</title> + <type>varchar</type> + <required>true</required> + <length>64</length> + <comment>Name of Tag.</comment> + <add>1.1</add> + </field> + <field> + <name>description</name> + <title>Description</title> + <type>varchar</type> + <length>255</length> + <comment>Optional verbose description of the tag.</comment> + <add>1.1</add> + </field> + <field> + <name>parent_id</name> + <title>Parent Tag</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Optional parent id for this tag.</comment> + <add>1.1</add> + </field> + <field> + <name>is_selectable</name> + <title>Display Tag?</title> + <type>boolean</type> + <default>1</default> + <comment>Is this tag selectable / displayed</comment> + <add>2.1</add> + </field> + <foreignKey> + <name>parent_id</name> + <table>civicrm_tag</table> + <key>id</key> + <add>1.1</add> + </foreignKey> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <field> + <name>is_reserved</name> + <title>Reserved</title> + <type>boolean</type> + <default>0</default> + <add>3.2</add> + </field> + <field> + <name>is_tagset</name> + <title>Tagset</title> + <type>boolean</type> + <default>0</default> + <add>3.2</add> + </field> + <field> + <name>used_for</name> + <title>Used For</title> + <type>varchar</type> + <length>64</length> + <default>NULL</default> + <html> + <type>Select</type> + </html> + <pseudoconstant> + <optionGroupName>tag_used_for</optionGroupName> + </pseudoconstant> + <add>3.2</add> + </field> + <field> + <name>created_id</name> + <title>Tag Created By</title> + <type>int unsigned</type> + <comment>FK to civicrm_contact, who created this tag</comment> + <add>3.4</add> + </field> + <field> + <name>color</name> + <title>Color</title> + <type>varchar</type> + <length>255</length> + <comment>Hex color value e.g. #ffffff</comment> + <default>NULL</default> + <add>4.7</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.4</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <type>datetime</type> + <title>Tag Created Date</title> + <comment>Date and time that tag was created.</comment> + <add>3.4</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/Timezone.xml b/civicrm/xml/schema/Core/Timezone.xml new file mode 100644 index 0000000000000000000000000000000000000000..a7930d860930485c139bd2aa73e9539aad453acd --- /dev/null +++ b/civicrm/xml/schema/Core/Timezone.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Timezone</class> + <name>civicrm_timezone</name> + <add>1.8</add> + <field> + <name>id</name> + <title>Timezone ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Timezone Id</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Timezone Name</title> + <type>varchar</type> + <length>64</length> + <comment>Timezone full name</comment> + <add>1.8</add> + </field> + <field> + <name>abbreviation</name> + <title>Timezone Abbreviation</title> + <type>char</type> + <length>3</length> + <comment>ISO Code for timezone abbreviation</comment> + <add>1.8</add> + </field> + <field> + <name>gmt</name> + <title>GMT Name of Timezone</title> + <type>varchar</type> + <length>64</length> + <comment>GMT name of the timezone</comment> + <add>1.8</add> + </field> + <field> + <name>offset</name> + <title>GMT Offset</title> + <type>int</type> + <comment></comment> + <add>1.8</add> + </field> + <field> + <name>country_id</name> + <title>Country</title> + <type>int unsigned</type> + <required>true</required> + <comment>Country Id</comment> + <add>1.8</add> + </field> + <foreignKey> + <name>country_id</name> + <table>civicrm_country</table> + <key>id</key> + <add>1.8</add> + </foreignKey> +</table> + diff --git a/civicrm/xml/schema/Core/UFField.xml b/civicrm/xml/schema/Core/UFField.xml new file mode 100644 index 0000000000000000000000000000000000000000..55eb156e605c45957e22118054a1a0574e036976 --- /dev/null +++ b/civicrm/xml/schema/Core/UFField.xml @@ -0,0 +1,233 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>UFField</class> + <name>civicrm_uf_field</name> + <comment>User Framework fields and their properties.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Profile Field ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique table ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>uf_group_id</name> + <title>Profile ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Which form does this field belong to.</comment> + <add>1.1</add> + <pseudoconstant> + <table>civicrm_uf_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>uf_group_id</name> + <table>civicrm_uf_group</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>field_name</name> + <title>Profile Field Name</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name for CiviCRM field which is being exposed for sharing.</comment> + <add>1.1</add> + </field> + <field> + <name>is_active</name> + <title>Profile Field Is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this field currently shareable? If false, hide the field for all sharing contexts.</comment> + <add>1.1</add> + </field> + <field> + <name>is_view</name> + <title>Profile Is View Only</title> + <type>boolean</type> + <default>0</default> + <comment>the field is view only and not editable in user forms.</comment> + <add>1.1</add> + </field> + <field> + <name>is_required</name> + <title>Profile Field Is Required</title> + <type>boolean</type> + <default>0</default> + <comment>Is this field required when included in a user or registration form?</comment> + <add>1.1</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <required>true</required> + <default>1</default> + <comment>Controls field display order when user framework fields are displayed in registration and account editing forms.</comment> + <add>1.1</add> + </field> + <field> + <name>help_post</name> + <title>Profile Field Post Help</title> + <type>text</type> + <localizable>true</localizable> + <comment>Description and/or help text to display after this field.</comment> + <add>1.1</add> + </field> + <field> + <name>help_pre</name> + <title>Profile Field Pre Help</title> + <type>text</type> + <localizable>true</localizable> + <comment>Description and/or help text to display before this field.</comment> + <add>3.2</add> + </field> + <field> + <name>is_registration</name> + <type>boolean</type> + <default>0</default> + <comment>Is this field included in new user registration forms?</comment> + <add>1.1</add> + <drop>1.3</drop> + </field> + <field> + <name>is_match</name> + <type>boolean</type> + <default>0</default> + <comment>Is this field part of the key for matching users to contacts?</comment> + <add>1.1</add> + <drop>1.3</drop> + </field> + <field> + <name>visibility</name> + <title>Profile Field Visibility</title> + <type>varchar</type> + <length>32</length> + <default>'User and User Admin Only'</default> + <comment>In what context(s) is this field visible.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::ufVisibility</callback> + </pseudoconstant> + <add>1.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>listings_title</name> + <type>varchar</type> + <length>64</length> + <comment>Page title for listings page (users who share a common value for this property).</comment> + <add>1.1</add> + <drop>1.2</drop> + </field> + <field> + <name>in_selector</name> + <title>Profile Field Is a Filter</title> + <type>boolean</type> + <default>0</default> + <comment>Is this field included as a column in the selector table?</comment> + <add>1.2</add> + </field> + <field> + <name>is_searchable</name> + <title>Profile Field Is Searchable</title> + <type>boolean</type> + <default>0</default> + <comment>Is this field included search form of profile?</comment> + <add>1.4</add> + </field> + <field> + <name>location_type_id</name> + <title>Profile Field Location Type</title> + <type>int unsigned</type> + <comment>Location type of this mapping, if required</comment> + <add>1.3</add> + </field> + <foreignKey> + <name>location_type_id</name> + <table>civicrm_location_type</table> + <key>id</key> + <add>1.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>phone_type</name> + <type>varchar</type> + <length>64</length> + <comment>Phone type, if required</comment> + <add>1.3</add> + <drop>2.2</drop> + </field> + <field> + <name>phone_type_id</name> + <title>Profile Field Phone Type</title> + <type>int unsigned</type> + <comment>Phone Type Id, if required</comment> + <add>2.2</add> + </field> + <field> + <name>website_type_id</name> + <title>Profile Field Website Type</title> + <type>int unsigned</type> + <comment>Website Type Id, if required</comment> + <add>4.5</add> + </field> + <field> + <name>label</name> + <title>Profile Field Label</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <localizable>true</localizable> + <comment>To save label for fields.</comment> + <add>1.4</add> + </field> + <field> + <name>field_type</name> + <title>Profile Field Type</title> + <type>varchar</type> + <length>255</length> + <comment>This field saves field type (ie individual,household.. field etc).</comment> + <add>1.4</add> + </field> + <field> + <name>is_reserved</name> + <title>Profile Field Is Reserved</title> + <type>boolean</type> + <comment>Is this field reserved for use by some other CiviCRM functionality?</comment> + <add>3.0</add> + </field> + <field> + <name>is_multi_summary</name> + <title>Profile Field Supports Multiple</title> + <type>boolean</type> + <default>0</default> + <comment>Include in multi-record listing?</comment> + <add>4.3</add> + </field> + <index> + <name>IX_website_type_id</name> + <title>Profile Field Website Type</title> + <fieldName>website_type_id</fieldName> + <add>4.5</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/UFGroup.xml b/civicrm/xml/schema/Core/UFGroup.xml new file mode 100644 index 0000000000000000000000000000000000000000..22faceb79cbc915addc9fe5470d157b54b74e268 --- /dev/null +++ b/civicrm/xml/schema/Core/UFGroup.xml @@ -0,0 +1,284 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>UFGroup</class> + <name>civicrm_uf_group</name> + <comment>User framework groups. Each group represents a form which encompasses a set of fields defined in civicrm_uf_fields table. Initially will be used for CiviCRM Profile form(s). Subsequently we anticipate using this to define other public facing forms (e.g. online donation solicitation forms, mailing list preferences, etc.).</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Profile ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique table ID</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>is_active</name> + <title>Profile Is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this form currently active? If false, hide all related fields for all sharing contexts.</comment> + <add>1.1</add> + </field> + <field> + <name>group_type</name> + <title>Profile Group Type</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <comment>Comma separated list of the type(s) of profile fields.</comment> + <serialize>COMMA</serialize> + <add>2.1</add> + </field> + <field> + <name>form_type</name> + <type>enum</type> + <values>CiviCRM Profile</values> + <comment>Type of form.</comment> + <drop>2.1</drop> + </field> + <field> + <name>title</name> + <type>varchar</type> + <length>64</length> + <localizable>true</localizable> + <required>true</required> + <comment>Form title.</comment> + <add>1.1</add> + </field> + <field> + <name>frontend_title</name> + <type>varchar</type> + <length>64</length> + <localizable>true</localizable> + <comment>Profile Form Public title</comment> + <add>4.7</add> + </field> + <field> + <name>description</name> + <type>text</type> + <title>Profile Description</title> + <html> + <type>TextArea</type> + <rows>2</rows> + <cols>60</cols> + </html> + <comment>Optional verbose description of the profile.</comment> + <add>4.4</add> + </field> + <field> + <name>collapse_display</name> + <type>int unsigned</type> + <default>0</default> + <comment>Will this group be in collapsed or expanded mode on initial display ?</comment> + <add>1.1</add> + <drop>2.2</drop> + </field> + <field> + <name>help_pre</name> + <type>text</type> + <localizable>true</localizable> + <comment>Description and/or help text to display before fields in form.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>1.2</add> + </field> + <field> + <name>help_post</name> + <title>Profile Post Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>Description and/or help text to display after fields in form.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>1.2</add> + </field> + <field> + <name>weight</name> + <title>Profile Weight</title> + <type>int</type> + <required>true</required> + <default>1</default> + <comment>Controls display order when multiple user framework groups are setup for concurrent display.</comment> + <add>1.2</add> + <drop>1.3</drop> + </field> + <field> + <name>limit_listings_group_id</name> + <title>Profile Search Limit Group</title> + <type>int unsigned</type> + <comment>Group id, foreign key from civicrm_group</comment> + <add>1.4</add> + </field> + <foreignKey> + <name>limit_listings_group_id</name> + <table>civicrm_group</table> + <key>id</key> + <add>1.4</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>post_URL</name> + <type>varchar</type> + <length>255</length> + <comment>Redirect to URL.</comment> + <add>1.4</add> + </field> + <field> + <name>add_to_group_id</name> + <title>Add Contact To Group</title> + <type>int unsigned</type> + <comment>foreign key to civicrm_group_id</comment> + </field> + <foreignKey> + <name>add_to_group_id</name> + <table>civicrm_group</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>add_captcha</name> + <title>Show Captcha On Profile</title> + <type>boolean</type> + <default>0</default> + <comment>Should a CAPTCHA widget be included this Profile form.</comment> + <add>1.1</add> + </field> + <field> + <name>is_map</name> + <title>Map Profile</title> + <type>boolean</type> + <default>0</default> + <comment>Do we want to map results from this profile.</comment> + <add>1.5</add> + </field> + <field> + <name>is_edit_link</name> + <title>Show Edit Link?</title> + <type>boolean</type> + <default>0</default> + <comment>Should edit link display in profile selector</comment> + <add>1.6</add> + </field> + <field> + <name>is_uf_link</name> + <title>Show Link to CMS User</title> + <type>boolean</type> + <default>0</default> + <comment>Should we display a link to the website profile in profile selector</comment> + <add>1.7</add> + </field> + <field> + <name>is_update_dupe</name> + <title>Update on Duplicate</title> + <type>boolean</type> + <default>0</default> + <comment>Should we update the contact record if we find a duplicate</comment> + <add>1.7</add> + </field> + <field> + <name>cancel_URL</name> + <title>Profile Cancel URL</title> + <type>varchar</type> + <length>255</length> + <comment>Redirect to URL when Cancle button clik .</comment> + <add>1.4</add> + </field> + <field> + <name>is_cms_user</name> + <title>Create CMS User?</title> + <type>boolean</type> + <default>0</default> + <comment>Should we create a cms user for this profile </comment> + <add>1.8</add> + </field> + <field> + <name>notify</name> + <title>Notify on Profile Submit</title> + <type>text</type> + <add>1.8</add> + </field> + <field> + <name>is_reserved</name> + <title>Profile Is Reserved</title> + <type>boolean</type> + <comment>Is this group reserved for use by some other CiviCRM functionality?</comment> + <add>3.0</add> + </field> + <field> + <name>name</name> + <title>Profile Name</title> + <type>varchar</type> + <length>64</length> + <comment>Name of the UF group for directly addressing it in the codebase</comment> + <add>3.0</add> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>4.7</add> + </index> + <field> + <name>created_id</name> + <title>Profile Created By</title> + <type>int unsigned</type> + <comment>FK to civicrm_contact, who created this UF group</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <type>datetime</type> + <title>UF Group Created Date</title> + <comment>Date and time this UF group was created.</comment> + <add>3.0</add> + </field> + <field> + <name>is_proximity_search</name> + <title>Include Proximity Search?</title> + <type>boolean</type> + <default>0</default> + <comment>Should we include proximity search feature in this profile search form?</comment> + <add>3.2</add> + </field> + <field> + <name>cancel_button_text</name> + <title>Cancel Button Text</title> + <type>varchar</type> + <length>64</length> + <comment>Custom Text to display on the Cancel button when used in create or edit mode</comment> + <default>NULL</default> + <localizable>true</localizable> + <add>4.7</add> + </field> + <field> + <name>submit_button_text</name> + <title>Submit Button Text</title> + <type>varchar</type> + <length>64</length> + <comment>Custom Text to display on the submit button on profile edit/create screens</comment> + <default>NULL</default> + <localizable>true</localizable> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/UFJoin.xml b/civicrm/xml/schema/Core/UFJoin.xml new file mode 100644 index 0000000000000000000000000000000000000000..368a3e0c0a3070fc2119c52fda6693076374b047 --- /dev/null +++ b/civicrm/xml/schema/Core/UFJoin.xml @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>UFJoin</class> + <name>civicrm_uf_join</name> + <comment>User framework join table. This links various internal civicrm object with a profile. Initial use cases are the donation object and the user module</comment> + <add>1.3</add> + <log>true</log> + <field> + <name>id</name> + <title>UF Join ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique table ID</comment> + <add>1.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>is_active</name> + <title>Profile Use is active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this join currently active?</comment> + <add>1.3</add> + </field> + <field> + <name>module</name> + <title>Profile Module</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Module which owns this uf_join instance, e.g. User Registration, CiviDonate, etc.</comment> + <add>1.3</add> + </field> + <field> + <name>entity_table</name> + <title>Profile Entity Table</title> + <type>varchar</type> + <length>64</length> + <comment>Name of table where item being referenced is stored. Modules which only need a single collection of uf_join instances may choose not to populate entity_table and entity_id.</comment> + <pseudoconstant> + <callback>CRM_Core_BAO_UFJoin::entityTables</callback> + </pseudoconstant> + <add>1.3</add> + </field> + <field> + <name>entity_id</name> + <title>Profile Entity ID</title> + <type>int unsigned</type> + <comment>Foreign key to the referenced item.</comment> + <add>1.3</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.3</add> + </dynamicForeignKey> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>1.3</add> + </index> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <required>true</required> + <default>1</default> + <comment>Controls display order when multiple user framework groups are setup for concurrent display.</comment> + <add>1.3</add> + </field> + <field> + <name>uf_group_id</name> + <title>Profile ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Which form does this field belong to.</comment> + <add>1.3</add> + <pseudoconstant> + <table>civicrm_uf_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>uf_group_id</name> + <table>civicrm_uf_group</table> + <key>id</key> + <add>1.3</add> + </foreignKey> + <field> + <name>module_data</name> + <title>Profile Use Data</title> + <type>longtext</type> + <comment>Json serialized array of data used by the ufjoin.module</comment> + <serialize>JSON</serialize> + <add>4.5</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/UFMatch.xml b/civicrm/xml/schema/Core/UFMatch.xml new file mode 100644 index 0000000000000000000000000000000000000000..fb3a05425dfb6af68856c6c1ecf9bd288bd5a8ef --- /dev/null +++ b/civicrm/xml/schema/Core/UFMatch.xml @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>UFMatch</class> + <name>civicrm_uf_match</name> + <comment>The mapping from an user framework (UF) object to a CRM object.</comment> + <add>1.1</add> + <log>true</log> + <field> + <name>id</name> + <title>UF Match ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>System generated ID.</comment> + <add>1.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>UF Match Domain ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Which Domain is this match entry for</comment> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <add>3.0</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.0</add> + </foreignKey> + <field> + <name>uf_id</name> + <title>CMS ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>UF ID</comment> + <add>1.1</add> + </field> + <index> + <name>I_civicrm_uf_match_uf_id</name> + <fieldName>uf_id</fieldName> + <add>3.3</add> + </index> + <field> + <name>uf_name</name> + <title>CMS Unique Identifier</title> + <type>varchar</type> + <length>128</length> + <comment>UF Name</comment> + <add>1.9.kabissa</add> + </field> + <field> + <name>contact_id</name> + <title>CiviCRM Contact ID</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>email</name> + <type>varchar</type> + <length>64</length> + <rule>email</rule> + <comment>Email address</comment> + <add>1.1</add> + <drop>2.0</drop> + </field> + <field> + <name>language</name> + <title>Preferred Language</title> + <type>varchar</type> + <length>5</length> + <comment>UI language preferred by the given user/contact</comment> + <add>2.1</add> + </field> + <index> + <name>UI_uf_id_domain_id</name> + <fieldName>uf_id</fieldName> + <fieldName>domain_id</fieldName> + <unique>true</unique> + <add>1.5</add> + <drop>1.7</drop> + </index> + <index> + <name>UI_uf_name_domain_id</name> + <fieldName>uf_name</fieldName> + <fieldName>domain_id</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <index> + <name>UI_contact_domain_id</name> + <fieldName>contact_id</fieldName> + <fieldName>domain_id</fieldName> + <unique>true</unique> + <add>1.6</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/Website.xml b/civicrm/xml/schema/Core/Website.xml new file mode 100644 index 0000000000000000000000000000000000000000..7eda447a1081ef57eb44983ffe2e50d4775de29d --- /dev/null +++ b/civicrm/xml/schema/Core/Website.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Website</class> + <name>civicrm_website</name> + <comment>Website information for a specific location.</comment> + <add>3.2</add> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Website ID</title> + <required>true</required> + <comment>Unique Website ID</comment> + <add>3.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Contact</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>3.2</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.2</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>url</name> + <title>Website</title> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + <size>30</size> + </html> + <import>true</import> + <headerPattern>/Website/i</headerPattern> + <dataPattern>/^[A-Za-z][0-9A-Za-z]{20,}$/</dataPattern> + <comment>Website</comment> + <add>3.2</add> + </field> + <field> + <name>website_type_id</name> + <title>Website Type</title> + <type>int unsigned</type> + <comment>Which Website type does this website belong to.</comment> + <add>3.2</add> + <pseudoconstant> + <optionGroupName>website_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>UI_website_type_id</name> + <fieldName>website_type_id</fieldName> + <add>3.2</add> + </index> +</table> diff --git a/civicrm/xml/schema/Core/WordReplacement.xml b/civicrm/xml/schema/Core/WordReplacement.xml new file mode 100644 index 0000000000000000000000000000000000000000..e3a544ce29d8fcacd27676f539eb604b5124466f --- /dev/null +++ b/civicrm/xml/schema/Core/WordReplacement.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>WordReplacement</class> + <name>civicrm_word_replacement</name> + <comment>Top-level hierarchy to support word replacement.</comment> + <add>4.4</add> + <field> + <name>id</name> + <title>Word Replacement ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Word replacement ID</comment> + <add>4.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>find_word</name> + <title>Replaced Word</title> + <type>varchar</type> + <length>255</length> + <collate>utf8_bin</collate> + <comment>Word which need to be replaced</comment> + <add>4.4</add> + </field> + <field> + <name>replace_word</name> + <title>Replacement Word</title> + <type>varchar</type> + <length>255</length> + <collate>utf8_bin</collate> + <comment>Word which will replace the word in find</comment> + <add>4.4</add> + </field> + <field> + <name>is_active</name> + <title>Word Replacement is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this entry active?</comment> + <add>4.4</add> + </field> + <index> + <name>UI_domain_find</name> + <fieldName>domain_id</fieldName> + <fieldName>find_word</fieldName> + <unique>true</unique> + <add>4.4</add> + </index> + <field> + <name>match_type</name> + <title>Word Replacement Match Type</title> + <type>varchar</type> + <length>16</length> + <default>"wildcardMatch"</default> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getWordReplacementMatchType</callback> + </pseudoconstant> + <add>4.4</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>domain_id</name> + <title>Word Replacement Domain ID</title> + <type>int unsigned</type> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>FK to Domain ID. This is for Domain specific word replacement</comment> + <add>1.1</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>1.1</add> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Core/Worldregion.xml b/civicrm/xml/schema/Core/Worldregion.xml new file mode 100644 index 0000000000000000000000000000000000000000..5b0f06706bf5ad2439958852947f706a9fcfd75e --- /dev/null +++ b/civicrm/xml/schema/Core/Worldregion.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Core</base> + <class>Worldregion</class> + <name>civicrm_worldregion</name> + <add>1.8</add> + <field> + <name>id</name> + <title>World Region ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Country Id</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <uniqueName>world_region</uniqueName> + <title>World Region</title> + <type>varchar</type> + <length>128</length> + <comment>Region name to be associated with countries</comment> + <export>true</export> + <add>1.8</add> + </field> +</table> diff --git a/civicrm/xml/schema/Core/files.xml b/civicrm/xml/schema/Core/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..51a0ba7ebec0f0fdcad94d2fa0861562bb9b1a4b --- /dev/null +++ b/civicrm/xml/schema/Core/files.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="Address.xml" parse="xml" /> + <xi:include href="AddressFormat.xml" parse="xml" /> + <xi:include href="Cache.xml" parse="xml" /> + <xi:include href="Country.xml" parse="xml" /> + <xi:include href="County.xml" parse="xml" /> + <xi:include href="CustomGroup.xml" parse="xml" /> + <xi:include href="CustomField.xml" parse="xml" /> + <xi:include href="Dashboard.xml" parse="xml" /> + <xi:include href="Discount.xml" parse="xml" /> + <xi:include href="Domain.xml" parse="xml" /> + <xi:include href="Email.xml" parse="xml" /> + <xi:include href="EntityFile.xml" parse="xml" /> + <xi:include href="EntityTag.xml" parse="xml" /> + <xi:include href="Extension.xml" parse="xml" /> + <xi:include href="File.xml" parse="xml" /> + <xi:include href="IM.xml" parse="xml" /> + <xi:include href="Job.xml" parse="xml" /> + <xi:include href="JobLog.xml" parse="xml" /> + <xi:include href="LocBlock.xml" parse="xml" /> + <xi:include href="LocationType.xml" parse="xml" /> + <xi:include href="Log.xml" parse="xml" /> + <xi:include href="MailSettings.xml" parse="xml" /> + <xi:include href="Managed.xml" parse="xml" /> + <xi:include href="Mapping.xml" parse="xml" /> + <xi:include href="MappingField.xml" parse="xml" /> + <xi:include href="Menu.xml" parse="xml" /> + <xi:include href="MessageTemplate.xml" parse="xml" /> + <xi:include href="Navigation.xml" parse="xml" /> + <xi:include href="Note.xml" parse="xml" /> + <xi:include href="OptionGroup.xml" parse="xml" /> + <xi:include href="OptionValue.xml" parse="xml" /> + <xi:include href="Phone.xml" parse="xml" /> + <xi:include href="PreferencesDate.xml" parse="xml" /> + <xi:include href="StateProvince.xml" parse="xml" /> + <xi:include href="SystemLog.xml" parse="xml" /> + <xi:include href="Tag.xml" parse="xml" /> + <xi:include href="UFGroup.xml" parse="xml" /> + <xi:include href="UFField.xml" parse="xml" /> + <xi:include href="UFMatch.xml" parse="xml" /> + <xi:include href="UFJoin.xml" parse="xml" /> + <xi:include href="Timezone.xml" parse="xml" /> + <xi:include href="Worldregion.xml" parse="xml" /> + <xi:include href="OpenID.xml" parse="xml" /> + <xi:include href="Component.xml" parse="xml" /> + <xi:include href="Website.xml" parse="xml" /> + <xi:include href="Persistent.xml" parse="xml" /> + <xi:include href="PrevNextCache.xml" parse="xml" /> + <xi:include href="ActionMapping.xml" parse="xml" /> + <xi:include href="ActionSchedule.xml" parse="xml" /> + <xi:include href="ActionLog.xml" parse="xml" /> + <xi:include href="Setting.xml" parse="xml" /> + <xi:include href="PrintLabel.xml" parse="xml" /> + <xi:include href="WordReplacement.xml" parse="xml" /> + <xi:include href="RecurringEntity.xml" parse="xml" /> + <xi:include href="StatusPreference.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Cxn/Cxn.xml b/civicrm/xml/schema/Cxn/Cxn.xml new file mode 100644 index 0000000000000000000000000000000000000000..f8d7ee2c22ed139f68ddfa23bb4348b20b992dbc --- /dev/null +++ b/civicrm/xml/schema/Cxn/Cxn.xml @@ -0,0 +1,113 @@ +<table> + <base>CRM/Cxn</base> + <class>Cxn</class> + <name>civicrm_cxn</name> + <add>4.6</add> + <field> + <name>id</name> + <title>Connection ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Connection ID</comment> + <add>4.6</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>false</autoincrement> + </primaryKey> + + <!-- Application identification --> + + <field> + <name>app_guid</name> + <title>Application GUID</title> + <type>varchar</type> + <length>128</length> + <comment>Application GUID</comment> + <add>4.6</add> + </field> + <index> + <name>UI_appid</name> + <fieldName>app_guid</fieldName> + <unique>true</unique> + <add>4.6</add> + </index> + <field> + <name>app_meta</name> + <title>Application Metadata (JSON)</title> + <type>text</type> + <comment>Application Metadata (JSON)</comment> + <add>4.6</add> + </field> + + <!-- Connection details --> + + <field> + <name>cxn_guid</name> + <title>Connection GUID</title> + <type>varchar</type> + <length>128</length> + <comment>Connection GUID</comment> + <add>4.6</add> + </field> + <index> + <name>UI_keypair_cxnid</name> + <fieldName>cxn_guid</fieldName> + <unique>true</unique> + <add>4.6</add> + </index> + <field> + <name>secret</name> + <type>text</type> + <comment>Shared secret</comment> + <add>4.6</add> + </field> + <field> + <name>perm</name> + <type>text</type> + <comment>Permissions approved for the service (JSON)</comment> + <add>4.6</add> + </field> + <field> + <name>options</name> + <type>text</type> + <comment>Options for the service (JSON)</comment> + <serialize>JSON</serialize> + <add>4.6</add> + </field> + + <!-- Connection lifecycle --> + + <field> + <name>is_active</name> + <title>Is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is connection currently enabled?</comment> + <add>4.6</add> + </field> + <field> + <name>created_date</name> + <type>timestamp</type> + <comment>When was the connection was created.</comment> + <required>false</required> + <default>NULL</default> + <add>4.6</add> + </field> + <field> + <name>modified_date</name> + <type>timestamp</type> + <comment>When the connection was created or modified.</comment> + <required>false</required> + <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> + <add>4.6</add> + </field> + <field> + <name>fetched_date</name> + <type>timestamp</type> + <comment>The last time the application metadata was fetched.</comment> + <required>false</required> + <default>NULL</default> + <add>4.6</add> + </field> +</table> diff --git a/civicrm/xml/schema/Cxn/files.xml b/civicrm/xml/schema/Cxn/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..d11fb7d298a470c98ef1dfd46e1ce45e90348c02 --- /dev/null +++ b/civicrm/xml/schema/Cxn/files.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="Cxn.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Dedupe/Exception.xml b/civicrm/xml/schema/Dedupe/Exception.xml new file mode 100644 index 0000000000000000000000000000000000000000..bf65f319de0faf57cd700bad57320f51b5c725b3 --- /dev/null +++ b/civicrm/xml/schema/Dedupe/Exception.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Dedupe</base> + <class>Exception</class> + <name>civicrm_dedupe_exception</name> + <comment>Dedupe exceptions</comment> + <add>3.3</add> + <field> + <name>id</name> + <title>Dedupe Exception ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique dedupe exception id</comment> + <add>3.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id1</name> + <title>First Dupe Contact ID</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>contact_id1</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.3</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id2</name> + <title>Second Dupe Contact ID</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>contact_id2</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.3</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_contact_id1_contact_id2</name> + <fieldName>contact_id1</fieldName> + <fieldName>contact_id2</fieldName> + <unique>true</unique> + <add>3.3</add> + </index> + </table> diff --git a/civicrm/xml/schema/Dedupe/Rule.xml b/civicrm/xml/schema/Dedupe/Rule.xml new file mode 100644 index 0000000000000000000000000000000000000000..858c0ff8c40a233a0b7bf0064065fe877178e1f8 --- /dev/null +++ b/civicrm/xml/schema/Dedupe/Rule.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Dedupe</base> + <class>Rule</class> + <name>civicrm_dedupe_rule</name> + <comment>Dedupe rules for use by rule groups</comment> + <add>1.8</add> + <field> + <name>id</name> + <title>Dedupe Rule ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique dedupe rule id</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>dedupe_rule_group_id</name> + <title>Dedupe Rule Group</title> + <type>int unsigned</type> + <required>true</required> + <comment>The id of the rule group this rule belongs to</comment> + <add>1.8</add> + </field> + <foreignKey> + <name>dedupe_rule_group_id</name> + <table>civicrm_dedupe_rule_group</table> + <key>id</key> + <add>1.8</add> + </foreignKey> + <field> + <name>rule_table</name> + <title>Rule Table</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>The name of the table this rule is about</comment> + <add>1.8</add> + </field> + <field> + <name>rule_field</name> + <title>Rule Field</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>The name of the field of the table referenced in rule_table</comment> + <add>1.8</add> + </field> + <field> + <name>rule_length</name> + <title>Rule Length</title> + <type>int unsigned</type> + <comment>The length of the matching substring</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>rule_weight</name> + <title>Order</title> + <type>int</type> + <required>true</required> + <comment>The weight of the rule</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Dedupe/RuleGroup.xml b/civicrm/xml/schema/Dedupe/RuleGroup.xml new file mode 100644 index 0000000000000000000000000000000000000000..6adbe3dba41e236ab8f87cc6d9cc552d59fa1e3b --- /dev/null +++ b/civicrm/xml/schema/Dedupe/RuleGroup.xml @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Dedupe</base> + <class>RuleGroup</class> + <name>civicrm_dedupe_rule_group</name> + <comment>Dedupe rule groups</comment> + <add>1.8</add> + <field> + <name>id</name> + <title>Rule Group ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Unique dedupe rule group id</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_type</name> + <title>Contact Type</title> + <type>varchar</type> + <length>12</length> + <comment>The type of contacts this group applies to</comment> + <pseudoconstant> + <table>civicrm_contact_type</table> + <keyColumn>name</keyColumn> + <labelColumn>label</labelColumn> + <condition>parent_id IS NULL</condition> + </pseudoconstant> + <add>1.8</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>threshold</name> + <title>Threshold</title> + <type>int</type> + <required>true</required> + <comment>The weight threshold the sum of the rule weights has to cross to consider two contacts the same</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>level</name> + <title>Level</title> + <type>enum</type> + <values>Strict, Fuzzy</values> + <comment>Whether the rule should be used for cases where strict matching of the given contact type is required or a fuzzy one</comment> + <add>2.1</add> + <drop>4.3</drop> + </field> + <field> + <name>used</name> + <type>varchar</type> + <title>Length</title> + <length>12</length> + <required>true</required> + <comment>Whether the rule should be used for cases where usage is Unsupervised, Supervised OR General(programatically)</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getDedupeRuleTypes</callback> + </pseudoconstant> + <add>4.3</add> + <html> + <type>Radio</type> + </html> + </field> + <field> + <name>is_default</name> + <title>Default></title> + <type>boolean</type> + <comment>Is this a default rule (one rule for every contact type + level combination should be default)</comment> + <add>2.1</add> + <drop>4.3</drop> + </field> + <field> + <name>name</name> + <title>Name</title> + <type>varchar</type> + <length>64</length> + <comment>Name of the rule group</comment> + <add>2.1</add> + </field> + <field> + <name>title</name> + <title>Title</title> + <type>varchar</type> + <length>255</length> + <comment>Label of the rule group</comment> + <add>4.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_reserved</name> + <title>Reserved?</title> + <type>boolean</type> + <comment>Is this a reserved rule - a rule group that has been optimized and cannot be changed by the admin</comment> + <add>4.1</add> + <html> + <type>CheckBox</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Dedupe/files.xml b/civicrm/xml/schema/Dedupe/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..7321e4ce9a38d6c36f324d721b7cb99eaa7a5398 --- /dev/null +++ b/civicrm/xml/schema/Dedupe/files.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="RuleGroup.xml" parse="xml" /> +<xi:include href="Rule.xml" parse="xml" /> +<xi:include href="Exception.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Event/Cart/Cart.xml b/civicrm/xml/schema/Event/Cart/Cart.xml new file mode 100644 index 0000000000000000000000000000000000000000..35a96bfb3a9a681123a01b7c9a3d84a2d5df45d9 --- /dev/null +++ b/civicrm/xml/schema/Event/Cart/Cart.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Event/Cart</base> + <class>Cart</class> + <name>civicrm_event_carts</name> + <field> + <name>id</name> + <title>Cart ID</title> + <uniqueName>cart_id</uniqueName> + <type>int unsigned</type> + <required>true</required> + <comment>Cart Id</comment> + <add>4.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>user_id</name> + <title>Created By</title> + <type>int unsigned</type> + <comment>FK to civicrm_contact who created this cart</comment> + <add>4.1</add> + </field> + <field> + <name>completed</name> + <title>Complete?</title> + <type>boolean</type> + <default>0</default> + <add>4.1</add> + </field> + <foreignKey> + <name>user_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> + diff --git a/civicrm/xml/schema/Event/Cart/EventInCart.xml b/civicrm/xml/schema/Event/Cart/EventInCart.xml new file mode 100644 index 0000000000000000000000000000000000000000..6fd487202d7dfa9b949c5df9ff52e735d5a91bd3 --- /dev/null +++ b/civicrm/xml/schema/Event/Cart/EventInCart.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Event/Cart</base> + <class>EventInCart</class> + <name>civicrm_events_in_carts</name> + <field> + <name>id</name> + <title>Event In Cart</title> + <uniqueName>event_in_cart_id</uniqueName> + <type>int unsigned</type> + <required>true</required> + <comment>Event In Cart Id</comment> + <add>4.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_id</name> + <title>Event</title> + <type>int unsigned</type> + <comment>FK to Event ID</comment> + <add>4.1</add> + </field> + <foreignKey> + <name>event_id</name> + <table>civicrm_event</table> + <key>id</key> + <add>4.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>event_cart_id</name> + <title>Event In Cart</title> + <type>int unsigned</type> + <comment>FK to Event Cart ID</comment> + <add>4.1</add> + </field> + <foreignKey> + <name>event_cart_id</name> + <table>civicrm_event_carts</table> + <key>id</key> + <add>4.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> +</table> + diff --git a/civicrm/xml/schema/Event/Cart/files.xml b/civicrm/xml/schema/Event/Cart/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..221e1d1004f51d5a3f7709e8b55d0720922007e2 --- /dev/null +++ b/civicrm/xml/schema/Event/Cart/files.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="Cart.xml" parse="xml" /> + <xi:include href="EventInCart.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Event/Event.xml b/civicrm/xml/schema/Event/Event.xml new file mode 100644 index 0000000000000000000000000000000000000000..200eed0159d8568defc82d20fa64e27f597b66a4 --- /dev/null +++ b/civicrm/xml/schema/Event/Event.xml @@ -0,0 +1,881 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Event</base> + <class>Event</class> + <name>civicrm_event</name> + <add>1.7</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Event ID</title> + <required>true</required> + <comment>Event</comment> + <add>1.7</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>title</name> + <uniqueName>event_title</uniqueName> + <type>varchar</type> + <import>true</import> + <title>Event Title</title> + <headerPattern>/(event.)?title$/i</headerPattern> + <length>255</length> + <localizable>true</localizable> + <comment>Event Title (e.g. Fall Fundraiser Dinner)</comment> + <html> + <type>Text</type> + </html> + <add>1.7</add> + </field> + <field> + <name>summary</name> + <type>text</type> + <title>Event Summary</title> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>Brief summary of event. Text and html allowed. Displayed on Event Registration form and can be used on other CMS pages which need an event summary.</comment> + <add>1.7</add> + </field> + <field> + <name>description</name> + <type>text</type> + <uniqueName>event_description</uniqueName> + <title>Event Description</title> + <html> + <type>TextArea</type> + <rows>8</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>Full description of event. Text and html allowed. Displayed on built-in Event Information screens.</comment> + <add>1.7</add> + </field> + <field> + <name>event_type_id</name> + <type>int unsigned</type> + <uniqueName>event_type_id</uniqueName> + <title>Event Type</title> + <default>0</default> + <pseudoconstant> + <optionGroupName>event_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <comment>Event Type ID.Implicit FK to civicrm_option_value where option_group = event_type.</comment> + <add>1.7</add> + </field> + <index> + <name>index_event_type_id</name> + <fieldName>event_type_id</fieldName> + <add>1.8</add> + </index> + <field> + <name>participant_listing_id</name> + <type>int unsigned</type> + <uniqueName>participant_listing_id</uniqueName> + <title>Participant Listing</title> + <default>0</default> + <pseudoconstant> + <optionGroupName>participant_listing</optionGroupName> + </pseudoconstant> + <comment>Should we expose the participant list? Implicit FK to civicrm_option_value where option_group = participant_listing.</comment> + <add>2.0</add> + <html> + <type>Select</type> + </html> + </field> + <index> + <name>index_participant_listing_id</name> + <fieldName>participant_listing_id</fieldName> + <add>2.0</add> + </index> + <field> + <name>is_public</name> + <type>boolean</type> + <title>Is Event Public</title> + <default>1</default> + <comment>Public events will be included in the iCal feeds. Access to private event information may be limited using ACLs.</comment> + <add>1.7</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>start_date</name> + <type>datetime</type> + <uniqueName>event_start_date</uniqueName> + <title>Event Start Date</title> + <headerPattern>/^start|(s(tart\s)?date)$/i</headerPattern> + <import>true</import> + <comment>Date and time that event starts.</comment> + <add>1.7</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>end_date</name> + <type>datetime</type> + <uniqueName>event_end_date</uniqueName> + <title>Event End Date</title> + <headerPattern>/^end|(e(nd\s)?date)$/i</headerPattern> + <import>true</import> + <comment>Date and time that event ends. May be NULL if no defined end date/time</comment> + <add>1.7</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>is_online_registration</name> + <type>boolean</type> + <title>Is Online Registration</title> + <default>0</default> + <comment>If true, include registration link on Event Info page.</comment> + <add>1.7</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>registration_link_text</name> + <type>varchar</type> + <title>Event Registration Link Text</title> + <length>255</length> + <localizable>true</localizable> + <comment>Text for link to Event Registration form which is displayed on Event Information screen when is_online_registration is true.</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>registration_start_date</name> + <type>datetime</type> + <comment>Date and time that online registration starts.</comment> + <add>1.8</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>registration_end_date</name> + <type>datetime</type> + <comment>Date and time that online registration ends.</comment> + <add>1.8</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>max_participants</name> + <type>int unsigned</type> + <title>Max Participants</title> + <default>NULL</default> + <comment>Maximum number of registered participants to allow. After max is reached, a custom Event Full message is displayed. If NULL, allow unlimited number of participants.</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>event_full_text</name> + <type>text</type> + <title>Event Information</title> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>Message to display on Event Information page and INSTEAD OF Event Registration form if maximum participants are signed up. Can include email address/info about getting on a waiting list, etc. Text and html allowed.</comment> + <add>1.7</add> + </field> + <field> + <name>is_monetary</name> + <title>Is this a PAID event?</title> + <type>boolean</type> + <default>0</default> + <comment>If true, one or more fee amounts must be set and a Payment Processor must be configured for Online Event Registration.</comment> + <add>1.7</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>contribution_type_id</name> + <type>int unsigned</type> + <default>0</default> + <comment>Contribution type assigned to paid event registrations for this event. Required if is_monetary is true.</comment> + <add>1.7</add> + <drop>4.3</drop> + </field> + <field> + <name>financial_type_id</name> + <type>int unsigned</type> + <title>Financial Type</title> + <default>NULL</default> + <comment>Financial type assigned to paid event registrations for this event. Required if is_monetary is true.</comment> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.3</add> + </field> + <field> + <name>payment_processor</name> + <type>varchar</type> + <length>128</length> + <comment>Payment Processors configured for this Event (if is_monetary is true)</comment> + <pseudoconstant> + <table>civicrm_payment_processor</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.8</add> + </field> + <field> + <name>is_map</name> + <title>Map Enabled</title> + <type>boolean</type> + <default>0</default> + <comment>Include a map block on the Event Information page when geocode info is available and a mapping provider has been specified?</comment> + <add>1.7</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_active</name> + <title>Is Active</title> + <type>boolean</type> + <default>0</default> + <comment>Is this Event enabled or disabled/cancelled?</comment> + <add>1.7</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>fee_label</name> + <type>varchar</type> + <import>true</import> + <title>Fee Label</title> + <headerPattern>/^fee|(f(ee\s)?label)$/i</headerPattern> + <length>255</length> + <localizable>true</localizable> + <html> + <type>Text</type> + </html> + <add>1.8</add> + </field> + <field> + <name>is_show_location</name> + <type>boolean</type> + <title>show location</title> + <default>1</default> + <comment>If true, show event location.</comment> + <add>1.7</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>loc_block_id</name> + <type>int unsigned</type> + <title>Location Block ID</title> + <comment>FK to Location Block ID</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>loc_block_id</name> + <table>civicrm_loc_block</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>2.0</add> + </foreignKey> + <field> + <name>receipt_text</name> + <type>varchar</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <length>255</length> + <comment>Receipt Text for off-line event participation</comment> + <add>2.0</add> + <drop>2.1</drop> + </field> + <field> + <name>default_role_id</name> + <uniqueName>default_role_id</uniqueName> + <title>Default Role</title> + <import>true</import> + <type>int unsigned</type> + <default>1</default> + <pseudoconstant> + <optionGroupName>participant_role</optionGroupName> + </pseudoconstant> + <comment>Participant role ID. Implicit FK to civicrm_option_value where option_group = participant_role.</comment> + <add>2.0</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>intro_text</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <title>Introductory Message</title> + <localizable>true</localizable> + <comment>Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event Registration form.</comment> + <add>1.7</add> + </field> + <field> + <name>footer_text</name> + <title>Footer Message</title> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event Registration form.</comment> + <add>1.7</add> + </field> + <field> + <name>confirm_title</name> + <type>varchar</type> + <title>Confirmation Title</title> + <length>255</length> + <default>NULL</default> + <localizable>true</localizable> + <comment>Title for Confirmation page.</comment> + <html> + <type>Text</type> + </html> + <add>1.7</add> + </field> + <field> + <name>confirm_text</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <title>Confirm Text</title> + <localizable>true</localizable> + <comment>Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event Registration form.</comment> + <add>1.7</add> + </field> + <field> + <name>confirm_footer_text</name> + <type>text</type> + <title>Footer Text</title> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event Registration form.</comment> + <add>1.7</add> + </field> + <field> + <name>is_email_confirm</name> + <type>boolean</type> + <title>Is confirm email</title> + <default>0</default> + <comment>If true, confirmation is automatically emailed to contact on successful registration.</comment> + <add>1.7</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>confirm_email_text</name> + <type>text</type> + <title>Confirmation Email Text</title> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>text to include above standard event info on confirmation email. emails are text-only, so do not allow html for now</comment> + <add>1.7</add> + </field> + <field> + <name>confirm_from_name</name> + <type>varchar</type> + <title>Confirm From Name</title> + <length>255</length> + <localizable>true</localizable> + <comment>FROM email name used for confirmation emails.</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>confirm_from_email</name> + <type>varchar</type> + <title>Confirm From Email</title> + <length>255</length> + <comment>FROM email address used for confirmation emails.</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>cc_confirm</name> + <type>varchar</type> + <length>255</length> + <comment>comma-separated list of email addresses to cc each time a confirmation is sent</comment> + <html> + <type>Text</type> + </html> + <add>1.7</add> + </field> + <field> + <name>bcc_confirm</name> + <type>varchar</type> + <length>255</length> + <comment>comma-separated list of email addresses to bcc each time a confirmation is sent</comment> + <html> + <type>Text</type> + </html> + <add>1.7</add> + </field> + <field> + <name>default_fee_id</name> + <type>int unsigned</type> + <title>Default Fee ID</title> + <comment>FK to civicrm_option_value.</comment> + <add>1.7</add> + </field> + <field> + <name>default_discount_fee_id</name> + <type>int unsigned</type> + <title>Default Discount Fee ID</title> + <comment>FK to civicrm_option_value.</comment> + <add>1.7</add> + </field> + <field> + <name>thankyou_title</name> + <type>varchar</type> + <title>ThankYou Title</title> + <length>255</length> + <default>NULL</default> + <localizable>true</localizable> + <comment>Title for ThankYou page.</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>thankyou_text</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <title>ThankYou Text</title> + <localizable>true</localizable> + <comment>ThankYou Text.</comment> + <add>1.7</add> + </field> + <field> + <name>thankyou_footer_text</name> + <type>text</type> + <title>Footer Text</title> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>Footer message.</comment> + <add>1.7</add> + </field> + <field> + <name>is_pay_later</name> + <title>Pay Later Allowed</title> + <type>boolean</type> + <default>0</default> + <comment>if true - allows the user to send payment directly to the org later</comment> + <add>2.0</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>pay_later_text</name> + <title>Pay Later Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>The text displayed to the user in the main form</comment> + <add>2.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>pay_later_receipt</name> + <title>Pay Later Receipt Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>The receipt sent to the user instead of the normal receipt text</comment> + <add>2.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_partial_payment</name> + <title>Partial Payments Enabled</title> + <type>boolean</type> + <default>0</default> + <comment>is partial payment enabled for this event</comment> + <add>4.3</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>initial_amount_label</name> + <title>Initial Amount Label</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Initial amount label for partial payment</comment> + <add>4.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>initial_amount_help_text</name> + <title>Initial Amount Help Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>Initial amount help text for partial payment</comment> + <add>4.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>min_initial_amount</name> + <title>Minimum Initial Amount</title> + <type>decimal</type> + <comment>Minimum initial amount for partial payment</comment> + <add>4.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_multiple_registrations</name> + <title>Allow Multiple Registrations</title> + <type>boolean</type> + <default>0</default> + <comment>if true - allows the user to register multiple participants for event</comment> + <add>2.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>max_additional_participants</name> + <type>int unsigned</type> + <title>Maximum number of additional participants per registration</title> + <default>0</default> + <comment>Maximum number of additional participants that can be registered on a single booking</comment> + <add>4.7</add> + </field> + <field> + <name>allow_same_participant_emails</name> + <type>boolean</type> + <title>Does Event allow multiple registrations from same email address?</title> + <default>0</default> + <comment>if true - allows the user to register multiple registrations from same email address.</comment> + <add>2.2</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>has_waitlist</name> + <title>Waitlist Enabled</title> + <type>boolean</type> + <comment>Whether the event has waitlist support.</comment> + <add>3.0</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>requires_approval</name> + <type>boolean</type> + <comment>Whether participants require approval before they can finish registering.</comment> + <add>3.0</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>expiration_time</name> + <type>int unsigned</type> + <comment>Expire pending but unconfirmed registrations after this many hours.</comment> + <add>3.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>allow_selfcancelxfer</name> + <type>boolean</type> + <default>0</default> + <title>Allow Self-service Cancellation or Transfer</title> + <comment>Allow self service cancellation or transfer for event?</comment> + <add>4.7</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>selfcancelxfer_time</name> + <type>int unsigned</type> + <default>0</default> + <title>Self-service Cancellation or Transfer Time</title> + <comment>Number of hours prior to event start date to allow self-service cancellation or transfer.</comment> + <add>4.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>waitlist_text</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>Text to display when the event is full, but participants can signup for a waitlist.</comment> + <add>3.0</add> + </field> + <field> + <name>approval_req_text</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <localizable>true</localizable> + <comment>Text to display when the approval is required to complete registration for an event.</comment> + <add>3.0</add> + </field> + <field> + <name>is_template</name> + <title>Is an Event Template</title> + <type>boolean</type> + <default>0</default> + <required>true</required> + <comment>whether the event has template</comment> + <add>3.0</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>template_title</name> + <uniqueName>template_title</uniqueName> + <type>varchar</type> + <import>true</import> + <title>Event Template Title</title> + <headerPattern>/(template.)?title$/i</headerPattern> + <length>255</length> + <localizable>true</localizable> + <comment>Event Template Title</comment> + <html> + <type>Text</type> + </html> + <add>3.0</add> + </field> + <field> + <name>created_id</name> + <type>int unsigned</type> + <title>Created By Contact ID</title> + <comment>FK to civicrm_contact, who created this event</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>3.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <type>datetime</type> + <title>Event Created Date</title> + <comment>Date and time that event was created.</comment> + <add>3.0</add> + </field> + <field> + <name>currency</name> + <type>varchar</type> + <length>3</length> + <import>true</import> + <headerPattern>/cur(rency)?/i</headerPattern> + <dataPattern>/^[A-Z]{3}$/i</dataPattern> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.3</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>campaign_id</name> + <type>int unsigned</type> + <title>Campaign</title> + <comment>The campaign for which this event has been created.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.4</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_share</name> + <title>Is shared through social media</title> + <type>boolean</type> + <default>1</default> + <comment>Can people share the event through social media?</comment> + <add>4.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_confirm_enabled</name> + <title>Is the booking confirmation screen enabled?</title> + <type>boolean</type> + <default>1</default> + <comment>If false, the event booking confirmation screen gets skipped</comment> + <add>4.5</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>parent_event_id</name> + <type>int unsigned</type> + <title>Parent Event ID</title> + <default>NULL</default> + <comment>Implicit FK to civicrm_event: parent event</comment> + <html> + <type>EntityRef</type> + </html> + <add>4.1</add> + </field> + <index> + <name>index_parent_event_id</name> + <fieldName>parent_event_id</fieldName> + <add>4.1</add> + </index> + <field> + <name>slot_label_id</name> + <type>int unsigned</type> + <title>Subevent Slot Label ID</title> + <default>NULL</default> + <comment>Subevent slot label. Implicit FK to civicrm_option_value where option_group = conference_slot.</comment> + <add>4.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>dedupe_rule_group_id</name> + <type>int unsigned</type> + <title>Dedupe Rule</title> + <default>NULL</default> + <comment>Rule to use when matching registrations for this event</comment> + <pseudoconstant> + <table>civicrm_dedupe_rule_group</table> + <keyColumn>id</keyColumn> + <nameColumn>name</nameColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>4.5</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>dedupe_rule_group_id</name> + <table>civicrm_dedupe_rule_group</table> + <key>id</key> + <add>4.5</add> + </foreignKey> + <field> + <name>is_billing_required</name> + <title>Is billing block required</title> + <type>boolean</type> + <default>0</default> + <comment>if true than billing block is required this event</comment> + <add>4.6</add> + <html> + <type>CheckBox</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Event/EventPage.xml b/civicrm/xml/schema/Event/EventPage.xml new file mode 100644 index 0000000000000000000000000000000000000000..1969f6191070588f3844f35392bf66546abfbc39 --- /dev/null +++ b/civicrm/xml/schema/Event/EventPage.xml @@ -0,0 +1,233 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Event</base> + <class>EventPage</class> + <name>civicrm_event_page</name> + <add>1.7</add> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>Event Page ID</comment> + <add>1.7</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_id</name> + <title>Event</title> + <type>int unsigned</type> + <required>true</required> + <comment>Event which this page belongs to.</comment> + <add>1.7</add> + </field> + <foreignKey> + <name>event_id</name> + <table>civicrm_event</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>intro_text</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <title>Introductory Message</title> + <localizable>true</localizable> + <comment>Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event + Registration form. + </comment> + <add>1.7</add> + </field> + <field> + <name>footer_text</name> + <title>Footer Message</title> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event + Registration form. + </comment> + <add>1.7</add> + </field> + <field> + <name>confirm_title</name> + <type>varchar</type> + <title>Confirmation Title</title> + <length>255</length> + <default>NULL</default> + <localizable>true</localizable> + <comment>Title for Confirmation page.</comment> + <add>1.7</add> + </field> + <field> + <name>confirm_text</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <title>Confirm Text</title> + <localizable>true</localizable> + <comment>Introductory message for Event Registration page. Text and html allowed. Displayed at the top of Event + Registration form. + </comment> + <add>1.7</add> + </field> + <field> + <name>confirm_footer_text</name> + <type>text</type> + <title>Footer Text</title> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>Footer message for Event Registration page. Text and html allowed. Displayed at the bottom of Event + Registration form. + </comment> + <add>1.7</add> + </field> + <field> + <name>is_email_confirm</name> + <type>boolean</type> + <title>Is confirm email</title> + <default>0</default> + <comment>If true, confirmation is automatically emailed to contact on successful registration.</comment> + <add>1.7</add> + </field> + <field> + <name>confirm_email_text</name> + <type>text</type> + <title>Confirmation Email Text</title> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>text to include above standard event info on confirmation email. emails are text-only, so do not allow html + for now + </comment> + <add>1.7</add> + </field> + <field> + <name>confirm_from_name</name> + <type>varchar</type> + <title>Confirm From Name</title> + <length>255</length> + <localizable>true</localizable> + <comment>FROM email name used for confirmation emails.</comment> + <add>1.7</add> + </field> + <field> + <name>confirm_from_email</name> + <type>varchar</type> + <title>Confirm From Email</title> + <length>255</length> + <comment>FROM email address used for confirmation emails.</comment> + <add>1.7</add> + </field> + <field> + <name>cc_confirm</name> + <type>varchar</type> + <length>255</length> + <comment>comma-separated list of email addresses to cc each time a confirmation is sent</comment> + <add>1.7</add> + </field> + <field> + <name>bcc_confirm</name> + <type>varchar</type> + <length>255</length> + <comment>comma-separated list of email addresses to bcc each time a confirmation is sent</comment> + <add>1.7</add> + </field> + <field> + <name>default_fee_id</name> + <type>int unsigned</type> + <comment>FK to civicrm_option_value.</comment> + <add>1.7</add> + </field> + <field> + <name>default_discount_id</name> + <type>int unsigned</type> + <comment>FK to civicrm_option_value.</comment> + <add>1.7</add> + </field> + <field> + <name>thankyou_title</name> + <type>varchar</type> + <title>ThankYou Title</title> + <length>255</length> + <default>NULL</default> + <localizable>true</localizable> + <comment>Title for ThankYou page.</comment> + <add>1.7</add> + </field> + <field> + <name>thankyou_text</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <title>ThankYou Text</title> + <localizable>true</localizable> + <comment>ThankYou Text.</comment> + <add>1.7</add> + </field> + <field> + <name>thankyou_footer_text</name> + <type>text</type> + <title>Footer Text</title> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <localizable>true</localizable> + <comment>Footer message.</comment> + <add>1.7</add> + </field> + <field> + <name>is_pay_later</name> + <type>boolean</type> + <default>0</default> + <comment>if true - allows the user to send payment directly to the org later</comment> + <add>2.0</add> + </field> + <field> + <name>pay_later_text</name> + <type>text</type> + <localizable>true</localizable> + <comment>The text displayed to the user in the main form</comment> + <add>2.0</add> + </field> + <field> + <name>pay_later_receipt</name> + <type>text</type> + <localizable>true</localizable> + <comment>The receipt sent to the user instead of the normal receipt text</comment> + <add>2.0</add> + </field> + <field> + <name>is_multiple_registrations</name> + <type>boolean</type> + <default>0</default> + <comment>if true - allows the user to register multiple participants for event</comment> + <add>2.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Event/Participant.xml b/civicrm/xml/schema/Event/Participant.xml new file mode 100644 index 0000000000000000000000000000000000000000..5d341014f22ee4dd94b7483b5e7ae85659100ce0 --- /dev/null +++ b/civicrm/xml/schema/Event/Participant.xml @@ -0,0 +1,304 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Event</base> + <class>Participant</class> + <name>civicrm_participant</name> + <add>1.7</add> + <log>true</log> + <field> + <name>id</name> + <uniqueName>participant_id</uniqueName> + <title>Participant ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Participant Id</comment> + <import>true</import> + <headerPattern>/(^(participant(.)?)?id$)/i</headerPattern> + <add>1.7</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <uniqueName>participant_contact_id</uniqueName> + <type>int unsigned</type> + <title>Contact ID</title> + <headerPattern>/contact(.?id)?/i</headerPattern> + <import>true</import> + <required>true</required> + <comment>FK to Contact ID</comment> + <add>1.7</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>event_id</name> + <type>int unsigned</type> + <title>Event</title> + <import>true</import> + <headerPattern>/event id$/i</headerPattern> + <required>true</required> + <comment>FK to Event ID</comment> + <add>1.7</add> + </field> + <foreignKey> + <name>event_id</name> + <table>civicrm_event</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>status_id</name> + <uniqueName>participant_status_id</uniqueName> + <title>Participant Status</title> + <headerPattern>/(participant.)?(status)$/i</headerPattern> + <import>true</import> + <type>int unsigned</type> + <export>true</export> + <required>true</required> + <default>1</default> + <comment>Participant status ID. FK to civicrm_participant_status_type. Default of 1 should map to status = Registered.</comment> + <add>1.7</add> + <pseudoconstant> + <table>civicrm_participant_status_type</table> + <keyColumn>id</keyColumn> + <labelColumn>label</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>status_id</name> + <table>civicrm_participant_status_type</table> + <key>id</key> + <add>3.0</add> + </foreignKey> + <index> + <name>index_status_id</name> + <fieldName>status_id</fieldName> + <add>1.8</add> + </index> + <field> + <name>role_id</name> + <uniqueName>participant_role_id</uniqueName> + <title>Participant Role</title> + <pseudoconstant> + <optionGroupName>participant_role</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + <multiple>1</multiple> + </html> + <serialize>SEPARATOR_TRIMMED</serialize> + <headerPattern>/(participant.)?(role)$/i</headerPattern> + <import>true</import> + <type>varchar</type> + <length>128</length> + <export>true</export> + <default>NULL</default> + <comment>Participant role ID. Implicit FK to civicrm_option_value where option_group = participant_role.</comment> + <add>1.7</add> + </field> + <index> + <name>index_role_id</name> + <fieldName>role_id</fieldName> + <add>1.8</add> + </index> + <field> + <name>register_date</name> + <uniqueName>participant_register_date</uniqueName> + <title>Register date</title> + <headerPattern>/^(r(egister\s)?date)$/i</headerPattern> + <import>true</import> + <type>datetime</type> + <comment>When did contact register for event?</comment> + <add>1.7</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>source</name> + <uniqueName>participant_source</uniqueName> + <title>Participant Source</title> + <headerPattern>/(participant.)?(source)$/i</headerPattern> + <import>true</import> + <type>varchar</type> + <length>128</length> + <comment>Source of this event registration.</comment> + <add>1.7</add> + </field> + <field> + <name>fee_level</name> + <uniqueName>participant_fee_level</uniqueName> + <title>Fee level</title> + <headerPattern>/^(f(ee\s)?level)$/i</headerPattern> + <type>text</type> + <import>true</import> + <serialize>SEPARATOR_BOOKEND</serialize> + <comment>Populate with the label (text) associated with a fee level for paid events with multiple levels. Note that + we store the label value and not the key + </comment> + <add>1.7</add> + </field> + <field> + <name>is_test</name> + <uniqueName>participant_is_test</uniqueName> + <title>Test</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <add>1.7</add> + </field> + <field> + <name>is_pay_later</name> + <uniqueName>participant_is_pay_later</uniqueName> + <title>Is Pay Later</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <headerPattern>/(is.)?(pay(.)?later)$/i</headerPattern> + <add>2.1</add> + </field> + + <field> + <name>fee_amount</name> + <uniqueName>participant_fee_amount</uniqueName> + <title>Fee Amount</title> + <type>decimal</type> + <import>true</import> + <headerPattern>/fee(.?am(ou)?nt)?/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>actual processor fee if known - may be 0.</comment> + <add>2.1</add> + </field> + <field> + <name>registered_by_id</name> + <uniqueName>participant_registered_by_id</uniqueName> + <type>int unsigned</type> + <title>Registered By ID</title> + <import>true</import> + <default>NULL</default> + <comment>FK to Participant ID</comment> + <add>2.1</add> + <export>true</export> + </field> + <foreignKey> + <name>registered_by_id</name> + <table>civicrm_participant</table> + <key>id</key> + <add>2.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>discount_id</name> + <uniqueName>participant_discount_id</uniqueName> + <type>int unsigned</type> + <title>Discount ID</title> + <default>NULL</default> + <comment>FK to Discount ID</comment> + <add>2.1</add> + </field> + <foreignKey> + <name>discount_id</name> + <table>civicrm_discount</table> + <key>id</key> + <add>2.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>fee_currency</name> + <uniqueName>participant_fee_currency</uniqueName> + <title>Fee Currency</title> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <import>true</import> + <headerPattern>/(fee)?.?cur(rency)?/i</headerPattern> + <dataPattern>/^[A-Z]{3}$/i</dataPattern> + <comment>3 character string, value derived from config setting.</comment> + <add>3.0</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>campaign_id</name> + <uniqueName>participant_campaign_id</uniqueName> + <type>int unsigned</type> + <title>Campaign</title> + <import>true</import> + <comment>The campaign for which this participant has been registered.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.4</add> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>discount_amount</name> + <type>int unsigned</type> + <title>Discount Amount</title> + <comment>Discount Amount</comment> + <add>4.1</add> + </field> + <field> + <name>cart_id</name> + <type>int unsigned</type> + <title>Event Cart ID</title> + <comment>FK to civicrm_event_carts</comment> + <add>4.1</add> + </field> + <foreignKey> + <name>cart_id</name> + <table>civicrm_event_carts</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>must_wait</name> + <type>int</type> + <title>Must Wait on List</title> + <comment>On Waiting List</comment> + <add>4.1</add> + </field> + <field> + <name>transferred_to_contact_id</name> + <uniqueName>transferred_to_contact_id</uniqueName> + <type>int unsigned</type> + <default>NULL</default> + <title>Transferred to Contact ID</title> + <headerPattern>/transfer(.?id)?/i</headerPattern> + <import>true</import> + <comment>FK to Contact ID</comment> + <add>4.7</add> + </field> + <foreignKey> + <name>transferred_to_contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Event/ParticipantPayment.xml b/civicrm/xml/schema/Event/ParticipantPayment.xml new file mode 100644 index 0000000000000000000000000000000000000000..00edfcde042a9bbc80bc430a4f54af46ca90a2d0 --- /dev/null +++ b/civicrm/xml/schema/Event/ParticipantPayment.xml @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Event</base> + <class>ParticipantPayment</class> + <name>civicrm_participant_payment</name> + <add>1.7</add> + <log>true</log> + <field> + <name>id</name> + <title>Payment ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Participant Payment Id</comment> + <add>1.7</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>participant_id</name> + <title>Participant ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Participant Id (FK)</comment> + <add>1.7</add> + </field> + <foreignKey> + <name>participant_id</name> + <table>civicrm_participant</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contribution_id</name> + <title>Contribution</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to contribution table.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>contribution_id</name> + <table>civicrm_contribution</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_contribution_participant</name> + <unique>true</unique> + <fieldName>contribution_id</fieldName> + <fieldName>participant_id</fieldName> + <add>2.0</add> + </index> +</table> + diff --git a/civicrm/xml/schema/Event/ParticipantStatusType.xml b/civicrm/xml/schema/Event/ParticipantStatusType.xml new file mode 100644 index 0000000000000000000000000000000000000000..17dad28221b311850fcfd2d460e65b5ea97e3a60 --- /dev/null +++ b/civicrm/xml/schema/Event/ParticipantStatusType.xml @@ -0,0 +1,99 @@ +<?xml version="1.0" encoding="utf-8" ?> +<table> + <base>CRM/Event</base> + <class>ParticipantStatusType</class> + <name>civicrm_participant_status_type</name> + <comment>various types of CiviEvent participant statuses</comment> + <add>3.0</add> + <log>true</log> + <field> + <name>id</name> + <title>Participant Status Type ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>unique participant status type id</comment> + <add>3.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <uniqueName>participant_status</uniqueName> + <title>Participant Status</title> + <type>varchar</type> + <length>64</length> + <import>true</import> + <unique>true</unique> + <comment>non-localized name of the status type</comment> + <add>3.0</add> + </field> + <field> + <name>label</name> + <title>Participant Status Label</title> + <type>varchar</type> + <length>255</length> + <unique>true</unique> + <localizable>true</localizable> + <comment>localized label for display of this status type</comment> + <add>3.0</add> + </field> + <field> + <name>class</name> + <title>Participant Status Class</title> + <type>varchar</type> + <length>8</length> + <comment>the general group of status type this one belongs to</comment> + <pseudoconstant> + <callback>CRM_Event_PseudoConstant::participantStatusClassOptions</callback> + </pseudoconstant> + <add>3.0</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>is_reserved</name> + <title>Participant Status Is Reserved?></title> + <type>boolean</type> + <comment>whether this is a status type required by the system</comment> + <add>3.0</add> + </field> + <field> + <name>is_active</name> + <title>Participant Status is Active</title> + <type>boolean</type> + <default>1</default> + <comment>whether this status type is active</comment> + <add>3.0</add> + </field> + <field> + <name>is_counted</name> + <title>Participant Status Counts?</title> + <type>boolean</type> + <comment>whether this status type is counted against event size limit</comment> + <add>3.0</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int unsigned</type> + <required>true</required> + <comment>controls sort order</comment> + <add>3.0</add> + </field> + <field> + <name>visibility_id</name> + <title>Participant Status Visibility</title> + <type>int unsigned</type> + <comment>whether the status type is visible to the public, an implicit foreign key to option_value.value related to the `visibility` option_group</comment> + <add>3.0</add> + <pseudoconstant> + <optionGroupName>visibility</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Event/files.xml b/civicrm/xml/schema/Event/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..56a732e75ed774941c009144adc4c46012507fac --- /dev/null +++ b/civicrm/xml/schema/Event/files.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + <xi:include href="Event.xml" parse="xml" /> + <xi:include href="Participant.xml" parse="xml" /> + <xi:include href="ParticipantPayment.xml" parse="xml" /> + <xi:include href="ParticipantStatusType.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Financial/Currency.xml b/civicrm/xml/schema/Financial/Currency.xml new file mode 100644 index 0000000000000000000000000000000000000000..28060cd1c20f3ceb5a7f5cd363f5c08449f67b10 --- /dev/null +++ b/civicrm/xml/schema/Financial/Currency.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>Currency</class> + <name>civicrm_currency</name> + <add>1.7</add> + <log>true</log> + <field> + <name>id</name> + <title>Currency ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Currency Id</comment> + <add>1.7</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Currency</title> + <type>varchar</type> + <length>64</length> + <import>true</import> + <comment>Currency Name</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>symbol</name> + <title>Currency Symbol</title> + <type>varchar</type> + <length>8</length> + <comment>Currency Symbol</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>numeric_code</name> + <title>Currency Numeric Code</title> + <type>varchar</type> + <length>3</length> + <import>true</import> + <comment>Numeric currency code</comment> + <add>1.9</add> + </field> + <field> + <name>full_name</name> + <title>Full Currency Name</title> + <type>varchar</type> + <length>64</length> + <comment>Full currency name</comment> + <html> + <type>Text</type> + </html> + <add>1.9</add> + </field> +</table> diff --git a/civicrm/xml/schema/Financial/EntityFinancialAccount.xml b/civicrm/xml/schema/Financial/EntityFinancialAccount.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d20ca8d2ecb8b05a65adc1dfbee28933c9b422b --- /dev/null +++ b/civicrm/xml/schema/Financial/EntityFinancialAccount.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>EntityFinancialAccount</class> + <name>civicrm_entity_financial_account</name> + <add>4.3</add> + <comment>Map between an entity and a financial account, where there is a specific relationship between the financial account and the entity, e.g. Income Account for or AR Account for</comment> + <log>true</log> + <field> + <name>id</name> + <title>Entity Financial Account ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID</comment> + <add>4.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <import>true</import> + <add>4.3</add> + <comment>Links to an entity_table like civicrm_financial_type</comment> + </field> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <add>4.3</add> + <comment>Links to an id in the entity_table, such as vid in civicrm_financial_type</comment> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>4.3</add> + </dynamicForeignKey> + <field> + <name>account_relationship</name> + <title>Account Relationship</title> + <type>int unsigned</type> + <required>true</required> + <add>4.3</add> + <comment>FK to a new civicrm_option_value (account_relationship)</comment> + <pseudoconstant> + <optionGroupName>account_relationship</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>financial_account_id</name> + <type>int unsigned</type> + <title>Financial Account</title> + <required>true</required> + <add>4.3</add> + <comment>FK to the financial_account_id</comment> + <pseudoconstant> + <table>civicrm_financial_account</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>financial_account_id</name> + <table>civicrm_financial_account</table> + <key>id</key> + <add>4.3</add> + <onDelete>RESTRICT</onDelete> + </foreignKey> + <index> + <name>index_entity_id_entity_table_account_relationship</name> + <fieldName>entity_id</fieldName> + <fieldName>entity_table</fieldName> + <fieldName>account_relationship</fieldName> + <unique>true</unique> + <add>4.7</add> + </index> +</table> diff --git a/civicrm/xml/schema/Financial/EntityFinancialTrxn.xml b/civicrm/xml/schema/Financial/EntityFinancialTrxn.xml new file mode 100644 index 0000000000000000000000000000000000000000..653fc792d5d61bd4705ce81d6a6214248d216821 --- /dev/null +++ b/civicrm/xml/schema/Financial/EntityFinancialTrxn.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>EntityFinancialTrxn</class> + <name>civicrm_entity_financial_trxn</name> + <add>3.2</add> + <field> + <name>id</name> + <title>Entity Financial Transaction ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID</comment> + <add>3.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <import>true</import> + <add>3.2</add> + <comment>May contain civicrm_financial_item, civicrm_contribution, civicrm_financial_trxn, civicrm_grant, etc</comment> + </field> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <add>3.2</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>3.2</add> + </dynamicForeignKey> + <field> + <name>financial_trxn_id</name> + <title>Financial Transaction Id</title> + <type>int unsigned</type> + <add>3.2</add> + </field> + <foreignKey> + <name>financial_trxn_id</name> + <table>civicrm_financial_trxn</table> + <key>id</key> + <add>3.2</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>amount</name> + <title>Amount</title> + <type>decimal</type> + <required>true</required> + <import>true</import> + <headerPattern>/amount/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>allocated amount of transaction to this entity</comment> + <add>3.2</add> + </field> + <field> + <name>currency</name> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <drop>4.3</drop> + </field> + <index> + <name>UI_entity_financial_trxn_entity_table</name> + <fieldName>entity_table</fieldName> + <add>4.3</add> + </index> + <index> + <name>UI_entity_financial_trxn_entity_id</name> + <fieldName>entity_id</fieldName> + <add>4.3</add> + </index> +</table> + diff --git a/civicrm/xml/schema/Financial/FinancialAccount.xml b/civicrm/xml/schema/Financial/FinancialAccount.xml new file mode 100644 index 0000000000000000000000000000000000000000..eedf5c621069640207403b413993446f6d62fba4 --- /dev/null +++ b/civicrm/xml/schema/Financial/FinancialAccount.xml @@ -0,0 +1,165 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>FinancialAccount</class> + <name>civicrm_financial_account</name> + <add>3.2</add> + <log>true</log> + <field> + <name>id</name> + <title>Financial Account ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>ID</comment> + <add>3.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Financial Account Name</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <comment>Financial Account Name.</comment> + <add>3.2</add> + </field> + <field> + <name>contact_id</name> + <uniqueName>financial_account_contact_id</uniqueName> + <title>Contact ID</title> + <type>int unsigned</type> + <comment>FK to Contact ID that is responsible for the funds in this account</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>account_type_id</name> + <type>int unsigned</type> + <required>true</required> + <add>3.2</add> + <drop>4.3</drop> + </field> + <field> + <name>financial_account_type_id</name> + <type>int unsigned</type> + <title>Financial Account Type</title> + <required>true</required> + <default>3</default> + <add>4.3</add> + <comment>pseudo FK into civicrm_option_value.</comment> + <pseudoconstant> + <optionGroupName>financial_account_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>accounting_code</name> + <title>Accounting Code</title> + <type>varchar</type> + <length>64</length> + <export>true</export> + <comment>Optional value for mapping monies owed and received to accounting system codes.</comment> + <add>4.3</add> + </field> + <field> + <name>account_type_code</name> + <title>Account Type Code</title> + <type>varchar</type> + <length>64</length> + <export>true</export> + <comment>Optional value for mapping account types to accounting system account categories (QuickBooks Account Type Codes for example).</comment> + <add>4.3</add> + </field> + <field> + <name>description</name> + <type>varchar</type> + <title>Financial Account Description</title> + <length>255</length> + <comment>Financial Type Description.</comment> + <add>4.3</add> + </field> + <field> + <name>parent_id</name> + <type>int unsigned</type> + <title>Financial Account Parent</title> + <comment>Parent ID in account hierarchy</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>parent_id</name> + <table>civicrm_financial_account</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>is_header_account</name> + <type>boolean</type> + <title>Header Financial Account?</title> + <default>0</default> + <comment>Is this a header account which does not allow transactions to be posted against it directly, but only to its sub-accounts?</comment> + <add>4.3</add> + </field> + <field> + <name>is_deductible</name> + <type>boolean</type> + <title>Deductible Financial Account?</title> + <default>1</default> + <comment>Is this account tax-deductible?</comment> + <add>4.3</add> + </field> + <field> + <name>is_tax</name> + <type>boolean</type> + <title>Tax Financial Account?</title> + <default>0</default> + <comment>Is this account for taxes?</comment> + <add>4.3</add> + </field> + <field> + <name>tax_rate</name> + <type>decimal</type> + <title>Financial Account Tax Rate</title> + <length>10,8</length> + <comment>The percentage of the total_amount that is due for this tax.</comment> + <add>4.3</add> + </field> + <field> + <name>is_reserved</name> + <type>boolean</type> + <title>Reserved Financial Account?</title> + <comment>Is this a predefined system object?</comment> + <add>4.3</add> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Financial Account is Active</title> + <comment>Is this property active?</comment> + <add>4.3</add> + </field> + <field> + <name>is_default</name> + <type>boolean</type> + <title>Default Financial Account</title> + <comment>Is this account the default one (or default tax one) for its financial_account_type?</comment> + <add>4.3</add> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>4.3</add> + </index> +</table> diff --git a/civicrm/xml/schema/Financial/FinancialItem.xml b/civicrm/xml/schema/Financial/FinancialItem.xml new file mode 100644 index 0000000000000000000000000000000000000000..c9c241f9a337a211fea28eaf5d716e67e392fa4e --- /dev/null +++ b/civicrm/xml/schema/Financial/FinancialItem.xml @@ -0,0 +1,178 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>FinancialItem</class> + <name>civicrm_financial_item</name> + <add>4.3</add> + <comment>Financial data for civicrm_line_item, etc.</comment> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Financial Item ID</title> + <length>10</length> + <required>true</required> + <comment></comment> + <add>4.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>created_date</name> + <type>timestamp</type> + <title>Financial Item Created Date</title> + <required>true</required> + <default>CURRENT_TIMESTAMP</default> + <comment>Date and time the item was created</comment> + <add>4.3</add> + </field> + <field> + <name>transaction_date</name> + <type>datetime</type> + <title>Financial Item Transaction Date</title> + <required>true</required> + <comment>Date and time of the source transaction</comment> + <add>4.3</add> + </field> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <title>Financial Item Contact ID</title> + <required>true</required> + <export>true</export> + <comment>FK to Contact ID of contact the item is from</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + <add>4.3</add> + </foreignKey> + <field> + <name>description</name> + <type>varchar</type> + <title>Financial Item Description</title> + <length>255</length> + <comment>Human readable description of this item, to ease display without lookup of source item.</comment> + <add>4.3</add> + </field> + <field> + <name>amount</name> + <title>Amount</title> + <type>decimal</type> + <default>0</default> + <required>true</required> + <headerPattern>/unit?.?amoun/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>Total amount of this item</comment> + <add>4.3</add> + </field> + <field> + <name>currency</name> + <export>true</export> + <type>varchar</type> + <title>Financial Item Currency</title> + <length>3</length> + <comment>Currency for the amount</comment> + <add>4.3</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>financial_account_id</name> + <type>int unsigned</type> + <title>Financial Account ID</title> + <comment>FK to civicrm_financial_account</comment> + <add>4.3</add> + <pseudoconstant> + <table>civicrm_financial_account</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>financial_account_id</name> + <table>civicrm_financial_account</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>status_id</name> + <export>true</export> + <title>Financial Item Status ID</title> + <type>int unsigned</type> + <comment>Payment status: test, paid, part_paid, unpaid (if empty assume unpaid)</comment> + <add>4.3</add> + <pseudoconstant> + <optionGroupName>financial_item_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>entity_table</name> + <type>varchar</type> + <title>Entity Table</title> + <length>64</length> + <comment>The table providing the source of this item such as civicrm_line_item</comment> + <add>4.3</add> + </field> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <comment>The specific source item that is responsible for the creation of this financial_item</comment> + <add>4.3</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>4.3</add> + </dynamicForeignKey> + <index> + <name>UI_id</name> + <fieldName>id</fieldName> + <unique>true</unique> + <add>4.3</add> + <drop>4.7</drop> + </index> + <index> + <name>IX_created_date</name> + <fieldName>created_date</fieldName> + <add>4.3</add> + </index> + <index> + <name>IX_transaction_date</name> + <fieldName>transaction_date</fieldName> + <add>4.3</add> + </index> + <index> + <name>IX_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>4.3</add> + <drop>4.7</drop> + </index> + <index> + <name>index_entity_id_entity_table</name> + <fieldName>entity_id</fieldName> + <fieldName>entity_table</fieldName> + <add>4.7</add> + </index> +</table> diff --git a/civicrm/xml/schema/Financial/FinancialTrxn.xml b/civicrm/xml/schema/Financial/FinancialTrxn.xml new file mode 100644 index 0000000000000000000000000000000000000000..d0d9ce8572b53a672bf19604af1a2d9535233b32 --- /dev/null +++ b/civicrm/xml/schema/Financial/FinancialTrxn.xml @@ -0,0 +1,288 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>FinancialTrxn</class> + <name>civicrm_financial_trxn</name> + <add>1.3</add> + <log>true</log> + <field> + <name>id</name> + <title>Financial Transaction ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>from_account_id</name> + <type>int unsigned</type> + <comment>FK to financial_account table.</comment> + <add>3.2</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>from_account_id</name> + <table>civicrm_financial_account</table> + <key>id</key> + <add>3.2</add> + <drop>4.3</drop> + </foreignKey> + <field> + <name>to_account_id</name> + <type>int unsigned</type> + <comment>FK to financial_account table.</comment> + <add>3.2</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>to_account_id</name> + <table>civicrm_financial_account</table> + <key>id</key> + <add>3.2</add> + <drop>4.3</drop> + </foreignKey> + <field> + <name>from_financial_account_id</name> + <type>int unsigned</type> + <title>Financial Transaction From Account</title> + <comment>FK to financial_account table.</comment> + <add>4.3</add> + <pseudoconstant> + <table>civicrm_financial_account</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>from_financial_account_id</name> + <table>civicrm_financial_account</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>to_financial_account_id</name> + <title>Financial Transaction To Account</title> + <type>int unsigned</type> + <comment>FK to financial_financial_account table.</comment> + <add>4.3</add> + <pseudoconstant> + <table>civicrm_financial_account</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>to_financial_account_id</name> + <table>civicrm_financial_account</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>trxn_date</name> + <title>Financial Transaction Date</title> + <type>datetime</type> + <default>NULL</default> + <comment>date transaction occurred</comment> + <add>1.3</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>trxn_type</name> + <title>Financial Transaction Type</title> + <type>enum</type> + <values>Debit,Credit</values> + <required>true</required> + <add>1.3</add> + <drop>4.3</drop> + </field> + <field> + <name>total_amount</name> + <title>Financial Total Amount</title> + <type>decimal</type> + <required>true</required> + <comment>amount of transaction</comment> + <add>1.3</add> + </field> + <field> + <name>fee_amount</name> + <title>Financial Fee Amount</title> + <type>decimal</type> + <comment>actual processor fee if known - may be 0.</comment> + <add>1.3</add> + </field> + <field> + <name>net_amount</name> + <title>Financial Net Amount</title> + <type>decimal</type> + <comment>actual funds transfer amount. total less fees. if processor does not report actual fee during transaction, this is set to total_amount.</comment> + <add>1.3</add> + </field> + <field> + <name>currency</name> + <title>Financial Currency</title> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <import>true</import> + <headerPattern>/cur(rency)?/i</headerPattern> + <dataPattern>/^[A-Z]{3}$/</dataPattern> + <comment>3 character string, value from config setting or input via user.</comment> + <add>1.3</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>is_payment</name> + <title>Is Payment?</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <comment>Is this entry either a payment or a reversal of a payment?</comment> + <add>4.7</add> + </field> + <field> + <name>payment_processor</name> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>derived from Processor setting in civicrm.settings.php.</comment> + <add>1.3</add> + <drop>4.3</drop> + </field> + <field> + <name>trxn_id</name> + <title>Transaction ID</title> + <type>varchar</type> + <length>255</length> + <comment>Transaction id supplied by external processor. This may not be unique.</comment> + <html> + <type>Text</type> + <size>10</size> + </html> + <add>1.3</add> + </field> + <index> + <name>UI_ftrxn_trxn_id</name> + <fieldName>trxn_id</fieldName> + <add>4.7</add> + </index> + <field> + <name>trxn_result_code</name> + <title>Transaction Result Code</title> + <type>varchar</type> + <length>255</length> + <comment>processor result code</comment> + <add>1.3</add> + </field> + <field> + <name>status_id</name> + <title>Financial Transaction Status Id</title> + <type>int unsigned</type> + <import>true</import> + <export>true</export> + <pseudoconstant> + <optionGroupName>contribution_status</optionGroupName> + </pseudoconstant> + <comment>pseudo FK to civicrm_option_value of contribution_status_id option_group</comment> + <headerPattern>/status/i</headerPattern> + <add>4.3</add> + </field> + <field> + <name>payment_processor_id</name> + <title>Payment Processor</title> + <type>int unsigned</type> + <comment>Payment Processor for this financial transaction</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>payment_processor_id</name> + <table>civicrm_payment_processor</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.3</add> + </foreignKey> + <field> + <name>payment_instrument_id</name> + <uniqueName>financial_trxn_payment_instrument_id</uniqueName> + <title>Payment Method</title> + <type>int unsigned</type> + <comment>FK to payment_instrument option group values</comment> + <pseudoconstant> + <optionGroupName>payment_instrument</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.3</add> + </field> + <index> + <name>UI_ftrxn_payment_instrument_id</name> + <fieldName>payment_instrument_id</fieldName> + <add>4.3</add> + </index> + <field> + <name>card_type_id</name> + <uniqueName>financial_trxn_card_type_id</uniqueName> + <title>Card Type ID</title> + <type>int unsigned</type> + <comment>FK to accept_creditcard option group values</comment> + <pseudoconstant> + <optionGroupName>accept_creditcard</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>4.7</add> + </field> + <field> + <name>check_number</name> + <uniqueName>financial_trxn_check_number</uniqueName> + <title>Check Number</title> + <comment>Check number</comment> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + <size>6</size> + </html> + <add>4.3</add> + </field> + <index> + <name>UI_ftrxn_check_number</name> + <fieldName>check_number</fieldName> + <add>4.3</add> + </index> + <field> + <name>pan_truncation</name> + <uniqueName>financial_trxn_pan_truncation</uniqueName> + <title>Pan Truncation</title> + <type>varchar</type> + <length>4</length> + <html> + <type>Text</type> + <size>4</size> + </html> + <comment>Last 4 digits of credit card</comment> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Financial/FinancialType.xml b/civicrm/xml/schema/Financial/FinancialType.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5a7197155dc07f00bda6cab76715a3655a05fab --- /dev/null +++ b/civicrm/xml/schema/Financial/FinancialType.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>FinancialType</class> + <name>civicrm_financial_type</name> + <add>1.3</add> + <comment>Formerly civicrm_contribution_type merged into this table in 4.3</comment> + <log>true</log> + <field> + <name>id</name> + <title>Financial Type ID</title> + <type>int unsigned</type> + <length>10</length> + <required>true</required> + <comment>ID of original financial_type so you can search this table by the financial_type.id and then select the relevant version based on the timestamp</comment> + <add>1.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <uniqueName>financial_type</uniqueName> + <title>Financial Type</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <import>true</import> + <headerPattern>/(finan(cial)?)?type/i</headerPattern> + <dataPattern>/donation|member|campaign/i</dataPattern> + <comment>Financial Type Name.</comment> + <add>1.3</add> + </field> + <field> + <name>accounting_code</name> + <title>Accounting Code</title> + <type>varchar</type> + <length>64</length> + <export>true</export> + <comment>Optional value for mapping contributions to accounting system codes for each type/category of contribution.</comment> + <add>1.3</add> + <drop>4.3</drop> + </field> + <field> + <name>description</name> + <type>varchar</type> + <length>255</length> + <comment>Financial Type Description.</comment> + <add>1.3</add> + </field> + <field> + <name>is_deductible</name> + <title>Is Tax Deductible?</title> + <type>boolean</type> + <length>4</length> + <default>1</default> + <comment>Is this financial type tax-deductible? If true, contributions of this type may be fully OR partially deductible - non-deductible amount is stored in the Contribution record.</comment> + <add>1.3</add> + </field> + <field> + <name>is_reserved</name> + <title>Financial Type is Reserved?</title> + <type>boolean</type> + <length>4</length> + <comment>Is this a predefined system object?</comment> + <add>1.3</add> + </field> + <field> + <name>is_active</name> + <type>boolean</type> + <title>Financial Type Is Active?</title> + <length>4</length> + <comment>Is this property active?</comment> + <add>1.3</add> + </field> + <index> + <name>UI_id</name> + <fieldName>id</fieldName> + <unique>true</unique> + <add>4.3</add> + </index> +</table> diff --git a/civicrm/xml/schema/Financial/PaymentProcessor.xml b/civicrm/xml/schema/Financial/PaymentProcessor.xml new file mode 100644 index 0000000000000000000000000000000000000000..0538fcc6983d9897b4019bc1cb3595a527819120 --- /dev/null +++ b/civicrm/xml/schema/Financial/PaymentProcessor.xml @@ -0,0 +1,244 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>PaymentProcessor</class> + <name>civicrm_payment_processor</name> + <add>1.8</add> + <field> + <name>id</name> + <title>Payment Processor ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Payment Processor ID</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Payment Processor Domain</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this match entry for</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.0</add> + </foreignKey> + <field> + <name>name</name> + <title>Payment Processor</title> + <type>varchar</type> + <length>64</length> + <comment>Payment Processor Name.</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>description</name> + <title>Processor Description</title> + <type>varchar</type> + <length>255</length> + <comment>Payment Processor Description.</comment> + <add>1.8</add> + </field> + <field> + <name>payment_processor_type</name> + <type>varchar</type> + <length>255</length> + <comment>Payment Processor Type.</comment> + <add>1.8</add> + <drop>4.3</drop> + </field> + <field> + <name>payment_processor_type_id</name> + <title>Payment Processor Type ID</title> + <type>int unsigned</type> + <pseudoconstant> + <table>civicrm_payment_processor_type</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <length>10</length> + <add>4.3</add> + </field> + <foreignKey> + <name>payment_processor_type_id</name> + <table>civicrm_payment_processor_type</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>is_active</name> + <title>Processor is Active?</title> + <type>boolean</type> + <comment>Is this processor active?</comment> + <add>1.8</add> + </field> + <field> + <name>is_default</name> + <title>Processor Is Default?</title> + <type>boolean</type> + <comment>Is this processor the default?</comment> + <add>1.8</add> + </field> + <field> + <name>is_test</name> + <title>Is Test Processor?</title> + <type>boolean</type> + <comment>Is this processor for a test site?</comment> + <add>1.8</add> + </field> + <index> + <name>UI_name_test_domain_id</name> + <fieldName>name</fieldName> + <fieldName>is_test</fieldName> + <fieldName>domain_id</fieldName> + <unique>true</unique> + <add>1.8</add> + </index> + <field> + <name>user_name</name> + <title>User Name</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>password</name> + <title>Password</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + <html> + <type>Password</type> + </html> + </field> + <field> + <name>signature</name> + <title>Signature</title> + <type>text</type> + <add>1.8</add> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>40</cols> + </html> + </field> + <field> + <name>url_site</name> + <title>Site URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>url_api</name> + <title>API URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>url_recur</name> + <title>Recurring Payments URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>url_button</name> + <title>Button URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>subject</name> + <title>Subject</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>class_name</name> + <title>Suffix for PHP class name implementation</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>billing_mode</name> + <title>Processor Billing Mode</title> + <type>int unsigned</type> + <required>true</required> + <comment>Billing Mode (deprecated)</comment> + <add>1.8</add> + </field> + <field> + <name>is_recur</name> + <title>Processor Supports Recurring?</title> + <type>boolean</type> + <comment>Can process recurring contributions</comment> + <add>1.8</add> + </field> + <field> + <name>payment_type</name> + <title>Payment Type</title> + <type>int unsigned</type> + <default>1</default> + <comment>Payment Type: Credit or Debit (deprecated)</comment> + <add>3.0</add> + </field> + <field> + <name>payment_instrument_id</name> + <title>Payment Method</title> + <type>int unsigned</type> + <default>1</default> + <comment>Payment Instrument ID</comment> + <pseudoconstant> + <optionGroupName>payment_instrument</optionGroupName> + </pseudoconstant> + <add>4.7</add> + </field> +<field> + <name>accepted_credit_cards</name> + <title>Accepted Credit Cards</title> + <type>text</type> + <default>NULL</default> + <comment>array of accepted credit card types</comment> + <serialize>JSON</serialize> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Financial/PaymentProcessorType.xml b/civicrm/xml/schema/Financial/PaymentProcessorType.xml new file mode 100644 index 0000000000000000000000000000000000000000..3e5de52682177e672cd760d741ec17e2c42a1c2c --- /dev/null +++ b/civicrm/xml/schema/Financial/PaymentProcessorType.xml @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>PaymentProcessorType</class> + <name>civicrm_payment_processor_type</name> + <add>1.8</add> + <field> + <name>id</name> + <title>Payment Processor Type ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Payment Processor Type ID</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Payment Processor variable name to be used in code</title> + <type>varchar</type> + <length>64</length> + <comment>Payment Processor Name.</comment> + <add>1.8</add> + </field> + <field> + <name>title</name> + <title>Payment Processor Title</title> + <type>varchar</type> + <length>127</length> + <comment>Payment Processor Name.</comment> + <add>1.8</add> + </field> + <field> + <name>description</name> + <title>Processor Type Description</title> + <type>varchar</type> + <length>255</length> + <comment>Payment Processor Description.</comment> + <add>1.8</add> + </field> + <field> + <name>is_active</name> + <title>Processor Type Is Active?</title> + <type>boolean</type> + <comment>Is this processor active?</comment> + <add>1.8</add> + </field> + <field> + <name>is_default</name> + <title>Processor Type is Default?</title> + <type>boolean</type> + <comment>Is this processor the default?</comment> + <add>1.8</add> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>2.1</add> + </index> + <field> + <name>user_name_label</name> + <title>Label for User Name if used</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>password_label</name> + <title>Label for password</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>signature_label</name> + <title>Label for Signature</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>subject_label</name> + <title>Label for Subject</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>class_name</name> + <title>Suffix for PHP class name implementation</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>url_site_default</name> + <title>Default Live Site URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>url_api_default</name> + <title>Default API Site URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>url_recur_default</name> + <title>Default Live Recurring Payments URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>url_button_default</name> + <title>Default Live Button URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>url_site_test_default</name> + <title>Default Test Site URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>url_api_test_default</name> + <title>Default Test API URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>url_recur_test_default</name> + <title>Default Test Recurring Payment URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>url_button_test_default</name> + <title>Default Test Button URL</title> + <type>varchar</type> + <length>255</length> + <add>1.8</add> + </field> + <field> + <name>billing_mode</name> + <type>int unsigned</type> + <required>true</required> + <comment>Billing Mode (deprecated)</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::billingMode</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.8</add> + </field> + <field> + <name>is_recur</name> + <title>Processor Type Supports Recurring?</title> + <type>boolean</type> + <comment>Can process recurring contributions</comment> + <add>1.8</add> + </field> + <field> + <name>payment_type</name> + <title>Processor Type Payment Type</title> + <type>int unsigned</type> + <default>1</default> + <comment>Payment Type: Credit or Debit (deprecated)</comment> + <add>3.0</add> + </field> + <field> + <name>payment_instrument_id</name> + <title>Payment Method</title> + <type>int unsigned</type> + <default>1</default> + <comment>Payment Instrument ID</comment> + <pseudoconstant> + <optionGroupName>payment_instrument</optionGroupName> + </pseudoconstant> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Financial/PaymentToken.xml b/civicrm/xml/schema/Financial/PaymentToken.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd7c2b60b8d47e67ad70b073881917174717e344 --- /dev/null +++ b/civicrm/xml/schema/Financial/PaymentToken.xml @@ -0,0 +1,138 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Financial</base> + <class>PaymentToken</class> + <name>civicrm_payment_token</name> + <comment>Payment Token</comment> + <add>4.6</add> + <field> + <name>id</name> + <uniqueName>payment_token_id</uniqueName> + <title>Payment Token ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Payment Token ID</comment> + <add>4.6</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Contact ID for the owner of the token</comment> + <add>4.6</add> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.6</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>payment_processor_id</name> + <title>Payment Processor ID</title> + <type>int unsigned</type> + <required>true</required> + <comment></comment> + <add>4.6</add> + </field> + <foreignKey> + <name>payment_processor_id</name> + <table>civicrm_payment_processor</table> + <key>id</key> + <add>4.6</add> + <onDelete>RESTRICT</onDelete> + </foreignKey> + <field> + <name>token</name> + <type>varchar</type> + <title>Token</title> + <length>255</length> + <required>true</required> + <comment>Externally provided token string</comment> + <add>4.6</add> + </field> + <field> + <name>created_date</name> + <title>Created Date</title> + <type>timestamp</type> + <comment>Date created</comment> + <default>CURRENT_TIMESTAMP</default> + <add>4.6</add> + </field> + <field> + <name>created_id</name> + <title>Created ID</title> + <type>int unsigned</type> + <comment>Contact ID of token creator</comment> + <add>4.6</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.6</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>expiry_date</name> + <title>Expiry Date</title> + <type>datetime</type> + <comment>Date this token expires</comment> + <add>4.6</add> + </field> + <field> + <name>email</name> + <title>Email</title> + <length>255</length> + <type>varchar</type> + <comment>Email at the time of token creation. Useful for fraud forensics</comment> + <add>4.6</add> + </field> + <field> + <name>billing_first_name</name> + <title>Billing First Name</title> + <type>varchar</type> + <length>255</length> + <comment>Billing first name at the time of token creation. Useful for fraud forensics</comment> + <add>4.6</add> + </field> + <field> + <name>billing_middle_name</name> + <title>Billing Middle Name</title> + <type>varchar</type> + <length>255</length> + <comment>Billing middle name at the time of token creation. Useful for fraud forensics</comment> + <add>4.6</add> + </field> + <field> + <name>billing_last_name</name> + <title>Billing Last Name</title> + <type>varchar</type> + <length>255</length> + <comment>Billing last name at the time of token creation. Useful for fraud forensics</comment> + <add>4.6</add> + </field> + <field> + <name>masked_account_number</name> + <title>Masked Account Number</title> + <type>varchar</type> + <length>255</length> + <comment>Holds the part of the card number or account details that may be retained or displayed</comment> + <add>4.6</add> + </field> + <field> + <name>ip_address</name> + <title>IP Address</title> + <type>varchar</type> + <length>255</length> + <comment>IP used when creating the token. Useful for fraud forensics</comment> + <add>4.6</add> + </field> +</table> diff --git a/civicrm/xml/schema/Financial/files.xml b/civicrm/xml/schema/Financial/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..6792a8401ac40714c02dc4af653437bf907ae01a --- /dev/null +++ b/civicrm/xml/schema/Financial/files.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="Currency.xml" parse="xml" /> +<xi:include href="EntityFinancialTrxn.xml" parse="xml" /> +<xi:include href="FinancialAccount.xml" parse="xml" /> +<xi:include href="FinancialTrxn.xml" parse="xml" /> +<xi:include href="PaymentProcessor.xml" parse="xml" /> +<xi:include href="PaymentToken.xml" parse="xml" /> +<xi:include href="PaymentProcessorType.xml" parse="xml" /> +<xi:include href="FinancialType.xml" parse="xml" /> +<xi:include href="EntityFinancialAccount.xml" parse="xml" /> +<xi:include href="FinancialItem.xml" parse="xml" /> + +</tables> diff --git a/civicrm/xml/schema/Friend/Friend.xml b/civicrm/xml/schema/Friend/Friend.xml new file mode 100644 index 0000000000000000000000000000000000000000..1894e806a0e1d07527a7f5950a3c873882459958 --- /dev/null +++ b/civicrm/xml/schema/Friend/Friend.xml @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Friend</base> + <class>Friend</class> + <name>civicrm_tell_friend</name> + <add>2.0</add> + <field> + <name>id</name> + <title>Friend ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Friend ID</comment> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name of table where item being referenced is stored.</comment> + <add>2.0</add> + </field> + <field> + <name>entity_id</name> + <title>Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the referenced item.</comment> + <add>2.0</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>2.0</add> + </dynamicForeignKey> + <field> + <name>title</name> + <title>Title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <html> + <type>Text</type> + </html> + <add>2.0</add> + </field> + <field> + <name>intro</name> + <title>Intro</title> + <type>text</type> + <localizable>true</localizable> + <comment>Introductory message to contributor or participant displayed on the Tell a Friend form.</comment> + <html> + <type>Text</type> + </html> + <add>2.0</add> + </field> + <field> + <name>suggested_message</name> + <title>Suggested Message</title> + <type>text</type> + <localizable>true</localizable> + <comment>Suggested message to friends, provided as default on the Tell A Friend form.</comment> + <html> + <type>Text</type> + </html> + <add>2.0</add> + </field> + <field> + <name>general_link</name> + <title>General Link</title> + <type>varchar</type> + <length>255</length> + <import>true</import> + <comment>URL for general info about the organization - included in the email sent to friends.</comment> + <html> + <type>Text</type> + </html> + <add>2.0</add> + </field> + <field> + <name>thankyou_title</name> + <title>Thank You Title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Text for Tell a Friend thank you page header and HTML title.</comment> + <html> + <type>Text</type> + </html> + <add>2.0</add> + </field> + <field> + <name>thankyou_text</name> + <title>Thank You Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>Thank you message displayed on success page.</comment> + <add>2.0</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_active</name> + <title>Enabled?</title> + <type>boolean</type> + <add>2.0</add> + <html> + <type>CheckBox</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Friend/files.xml b/civicrm/xml/schema/Friend/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..ac64ed08f54b709e278c5f3179f66acfd8d3ce27 --- /dev/null +++ b/civicrm/xml/schema/Friend/files.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="Friend.xml" parse="xml" /> + +</tables> diff --git a/civicrm/xml/schema/Grant/Grant.xml b/civicrm/xml/schema/Grant/Grant.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d09f0c13c13199c7a962841c0c8ce6198a09fa7 --- /dev/null +++ b/civicrm/xml/schema/Grant/Grant.xml @@ -0,0 +1,242 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Grant</base> + <class>Grant</class> + <name>civicrm_grant</name> + <comment>This table stores information about grants given to a contact.</comment> + <add>1.8</add> + <log>true</log> + <field> + <name>id</name> + <type>int unsigned</type> + <uniqueName>grant_id</uniqueName> + <title>Grant ID</title> + <required>true</required> + <comment>Unique Grant id</comment> + <import>true</import> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <uniqueName>grant_contact_id</uniqueName> + <title>Contact ID</title> + <export>true</export> + <required>true</required> + <comment>Contact ID of contact record given grant belongs to.</comment> + <add>1.8</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.8</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>application_received_date</name> + <title>Application received date</title> + <type>date</type> + <export>true</export> + <import>true</import> + <comment>Date on which grant application was received by donor.</comment> + <add>1.8</add> + <html> + <type>Select Date</type> + <formatType>activityDate</formatType> + </html> + </field> + <field> + <name>decision_date</name> + <title>Decision date</title> + <type>date</type> + <comment>Date on which grant decision was made.</comment> + <import>true</import> + <add>1.8</add> + <html> + <type>Select Date</type> + <formatType>activityDate</formatType> + </html> + </field> + <field> + <name>money_transfer_date</name> + <uniqueName>grant_money_transfer_date</uniqueName> + <title>Grant Money transfer date</title> + <type>date</type> + <comment>Date on which grant money transfer was made.</comment> + <import>true</import> + <add>1.8</add> + <html> + <type>Select Date</type> + <formatType>activityDate</formatType> + </html> + </field> + <field> + <name>grant_due_date</name> + <type>date</type> + <title>Grant Due Date</title> + <comment>Date on which grant report is due.</comment> + <add>1.8</add> + <import>true</import> + <html> + <type>Select Date</type> + <formatType>activityDate</formatType> + </html> + </field> + <field> + <name>grant_report_received</name> + <title>Grant report received</title> + <type>boolean</type> + <comment>Yes/No field stating whether grant report was received by donor.</comment> + <import>true</import> + <add>1.8</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>grant_type_id</name> + <type>int unsigned</type> + <title>Grant Type</title> + <pseudoconstant> + <optionGroupName>grant_type</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <export>true</export> + <required>true</required> + <comment>Type of grant. Implicit FK to civicrm_option_value in grant_type option_group.</comment> + <add>1.8</add> + </field> + <index> + <name>index_grant_type_id</name> + <fieldName>grant_type_id</fieldName> + <add>1.8</add> + </index> + <field> + <name>amount_total</name> + <title>Total Amount</title> + <type>decimal</type> + <required>true</required> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <import>true</import> + <comment>Requested grant amount, in default currency.</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>amount_requested</name> + <title>Amount Requested</title> + <type>decimal</type> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>Requested grant amount, in original currency (optional).</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>amount_granted</name> + <title>Amount granted</title> + <type>decimal</type> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <import>true</import> + <comment>Granted amount, in default currency.</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>currency</name> + <title>Grant Currency</title> + <type>varchar</type> + <length>3</length> + <required>true</required> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>currency</name> + <type>varchar</type> + <length>8</length> + <default>NULL</default> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <drop>4.3</drop> + </field> + <field> + <name>rationale</name> + <type>text</type> + <title>Grant Rationale</title> + <comment>Grant rationale.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <import>true</import> + <add>1.8</add> + </field> + <field> + <name>status_id</name> + <type>int unsigned</type> + <title>Grant Status</title> + <uniqueName>grant_status_id</uniqueName> + <required>true</required> + <import>true</import> + <export>false</export> + <comment>Id of Grant status.</comment> + <pseudoconstant> + <optionGroupName>grant_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.8</add> + </field> + <index> + <name>index_status_id</name> + <fieldName>status_id</fieldName> + <add>1.8</add> + </index> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <default>NULL</default> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>FK to Financial Type.</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.3</add> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Grant/files.xml b/civicrm/xml/schema/Grant/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..b87a6e51c6459d62739ddae5bdcbd4910c89c7cb --- /dev/null +++ b/civicrm/xml/schema/Grant/files.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="Grant.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Mailing/BouncePattern.xml b/civicrm/xml/schema/Mailing/BouncePattern.xml new file mode 100644 index 0000000000000000000000000000000000000000..3715febd2d0b3a38c3e8fcef2746fad81b187945 --- /dev/null +++ b/civicrm/xml/schema/Mailing/BouncePattern.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>BouncePattern</class> + <name>civicrm_mailing_bounce_pattern</name> + <comment>Pseudo-constant table of patterns for bounce classification</comment> + <field> + <name>id</name> + <title>Bounce Pattern ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>bounce_type_id</name> + <title>Bounce Type</title> + <type>int unsigned</type> + <required>true</required> + <comment>Type of bounce</comment> + </field> + <foreignKey> + <name>bounce_type_id</name> + <table>civicrm_mailing_bounce_type</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>pattern</name> + <title>Pattern</title> + <type>varchar</type> + <length>255</length> + <comment>A regexp to match a message to a bounce type</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/BounceType.xml b/civicrm/xml/schema/Mailing/BounceType.xml new file mode 100644 index 0000000000000000000000000000000000000000..e24f7fe44c62a6279043fbe1382ef9de5382c25f --- /dev/null +++ b/civicrm/xml/schema/Mailing/BounceType.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>BounceType</class> + <name>civicrm_mailing_bounce_type</name> + <comment>Table to index the various bounce types and their properties</comment> + <field> + <name>id</name> + <title>Bounce Type ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Bounce Type Name</title> + <type>varchar</type> + <length>24</length> + <required>true</required> + <comment>Type of bounce</comment> + </field> + <field> + <name>description</name> + <title>Bounce Type Description</title> + <type>varchar</type> + <length>255</length> + <comment>A description of this bounce type</comment> + </field> + <field> + <name>hold_threshold</name> + <title>Hold Threshold</title> + <type>int unsigned</type> + <required>true</required> + <comment>Number of bounces of this type required before the email address is put on bounce hold</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Component.xml b/civicrm/xml/schema/Mailing/Component.xml new file mode 100644 index 0000000000000000000000000000000000000000..76a27f027b9cc456b00827aca1ea840c865ea391 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Component.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>Component</class> + <name>civicrm_mailing_component</name> + <comment>Stores information about the mailing components (header/footer).</comment> + <field> + <name>id</name> + <title>Mailing Component ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>Component Name</title> + <type>varchar</type> + <length>64</length> + <comment>The name of this component</comment> + </field> + <field> + <name>component_type</name> + <title>Mailing Component Type</title> + <type>varchar</type> + <length>12</length> + <comment>Type of Component.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::mailingComponents</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>subject</name> + <type>varchar</type> + <length>255</length> + </field> + <field> + <name>body_html</name> + <title>Mailing Component Body HTML</title> + <type>text</type> + <comment>Body of the component in html format.</comment> + <html> + <type>TextArea</type> + <rows>8</rows> + <cols>80</cols> + </html> + </field> + <field> + <name>body_text</name> + <type>text</type> + <comment>Body of the component in text format.</comment> + <html> + <type>TextArea</type> + <rows>8</rows> + <cols>80</cols> + </html> + </field> + <field> + <name>is_default</name> + <title>Mailing Component is Default?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this the default component for this component_type?</comment> + </field> + <field> + <name>is_active</name> + <title>Mailing Component Is Active?</title> + <type>boolean</type> + <comment>Is this property active?</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Bounce.xml b/civicrm/xml/schema/Mailing/Event/Bounce.xml new file mode 100644 index 0000000000000000000000000000000000000000..c2b6aa40e4d0be5d064219c0b2e9499f75d8954e --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Bounce.xml @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Bounce</class> + <name>civicrm_mailing_event_bounce</name> + <comment>Tracks when and why an email bounced.</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Bounce ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_queue_id</name> + <title>Event Queue</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to EventQueue</comment> + </field> + <foreignKey> + <name>event_queue_id</name> + <table>civicrm_mailing_event_queue</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>bounce_type_id</name> + <title>Bounce Type</title> + <type>int unsigned</type> + <comment>What type of bounce was it?</comment> + <pseudoconstant> + <table>civicrm_mailing_bounce_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>bounce_reason</name> + <title>Bounce Reason</title> + <type>varchar</type> + <length>255</length> + <comment>The reason the email bounced.</comment> + </field> + <field> + <name>time_stamp</name> + <title>Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this bounce event occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Confirm.xml b/civicrm/xml/schema/Mailing/Event/Confirm.xml new file mode 100644 index 0000000000000000000000000000000000000000..338b06eebb4358cf5b68033adf4a4d1e4df0e147 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Confirm.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Confirm</class> + <name>civicrm_mailing_event_confirm</name> + <comment>Tracks when a subscription event is confirmed by email</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Mailing Confirmation ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_subscribe_id</name> + <title>Mailing Subscribe ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_mailing_event_subscribe</comment> + </field> + <foreignKey> + <name>event_subscribe_id</name> + <table>civicrm_mailing_event_subscribe</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>time_stamp</name> + <title>Confirm Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this confirmation event occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Delivered.xml b/civicrm/xml/schema/Mailing/Event/Delivered.xml new file mode 100644 index 0000000000000000000000000000000000000000..a38b0c5b773ec47eef0533be130fffcb73970b5f --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Delivered.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Delivered</class> + <name>civicrm_mailing_event_delivered</name> + <comment>Tracks when a queued email is actually delivered to the MTA</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Delivered ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_queue_id</name> + <title>Event Queue</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to EventQueue</comment> + </field> + <foreignKey> + <name>event_queue_id</name> + <table>civicrm_mailing_event_queue</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>time_stamp</name> + <title>Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this delivery event occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Forward.xml b/civicrm/xml/schema/Mailing/Event/Forward.xml new file mode 100644 index 0000000000000000000000000000000000000000..442d8c8b95a8e6da3aa27734653448f0e4fcb041 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Forward.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Forward</class> + <name>civicrm_mailing_event_forward</name> + <comment>Tracks when a contact forwards a mailing to a (new) contact</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Forward ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_queue_id</name> + <title>Mailing Event Queue</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to EventQueue</comment> + </field> + <foreignKey> + <name>event_queue_id</name> + <table>civicrm_mailing_event_queue</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>dest_queue_id</name> + <title>Destination Queue</title> + <type>int unsigned</type> + <comment>FK to EventQueue for destination</comment> + </field> + <foreignKey> + <name>dest_queue_id</name> + <table>civicrm_mailing_event_queue</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>time_stamp</name> + <title>Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this forward event occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Opened.xml b/civicrm/xml/schema/Mailing/Event/Opened.xml new file mode 100644 index 0000000000000000000000000000000000000000..814fcb365f8f8ea9ac77b069510efdc0e94fb6a9 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Opened.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Opened</class> + <name>civicrm_mailing_event_opened</name> + <comment>Tracks when a delivered email is opened by the recipient</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Mailing Opened ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_queue_id</name> + <title>Event Queue</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to EventQueue</comment> + </field> + <foreignKey> + <name>event_queue_id</name> + <table>civicrm_mailing_event_queue</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>time_stamp</name> + <title>Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this open event occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Queue.xml b/civicrm/xml/schema/Mailing/Event/Queue.xml new file mode 100644 index 0000000000000000000000000000000000000000..db4774035add725012250e96a870e2405439df45 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Queue.xml @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Queue</class> + <name>civicrm_mailing_event_queue</name> + <comment>A collection of all intended recipients of a job</comment> + <archive>true</archive> + <field> + <name>id</name> + <type>int unsigned</type> + <title>Mailing Event Queue ID</title> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>job_id</name> + <type>int unsigned</type> + <required>true</required> + <title>Job ID</title> + <comment>FK to Job</comment> + </field> + <foreignKey> + <name>job_id</name> + <table>civicrm_mailing_job</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>email_id</name> + <type>int unsigned</type> + <default>NULL</default> + <title>Email ID</title> + <comment>FK to Email</comment> + </field> + <foreignKey> + <name>email_id</name> + <table>civicrm_email</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <required>true</required> + <title>Contact ID</title> + <comment>FK to Contact</comment> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>hash</name> + <type>varchar</type> + <length>255</length> + <required>true</required> + <title>Security Hash</title> + <comment>Security hash</comment> + </field> + <index> + <name>index_hash</name> + <fieldName>hash</fieldName> + <add>4.7</add> + </index> + <field> + <name>phone_id</name> + <type>int unsigned</type> + <default>NULL</default> + <title>Phone ID</title> + <comment>FK to Phone</comment> + </field> + <foreignKey> + <name>phone_id</name> + <table>civicrm_phone</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Reply.xml b/civicrm/xml/schema/Mailing/Event/Reply.xml new file mode 100644 index 0000000000000000000000000000000000000000..d4084592e96590f659bd55934119cc38373f64e8 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Reply.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Reply</class> + <name>civicrm_mailing_event_reply</name> + <comment>Tracks when a contact replies to a mailing</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Reply ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_queue_id</name> + <title>Event Queue</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to EventQueue</comment> + </field> + <foreignKey> + <name>event_queue_id</name> + <table>civicrm_mailing_event_queue</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>time_stamp</name> + <title>Reply Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this reply event occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Subscribe.xml b/civicrm/xml/schema/Mailing/Event/Subscribe.xml new file mode 100644 index 0000000000000000000000000000000000000000..67f50439efbe414e94599d4650bd0b4b3b07cc6a --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Subscribe.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Subscribe</class> + <name>civicrm_mailing_event_subscribe</name> + <comment>Tracks when a (new) contact subscribes to a group by email</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Mailing Subscribe ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>group_id</name> + <title>Mailing Subscribe Group</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Group</comment> + <pseudoconstant> + <table>civicrm_group</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>group_id</name> + <table>civicrm_group</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <title>Mailing Subscribe Contact</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Contact</comment> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>hash</name> + <title>Mailing Subscribe Hash</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <comment>Security hash</comment> + </field> + <field> + <name>time_stamp</name> + <title>Mailing Subscribe Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this subscription event occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/TrackableURLOpen.xml b/civicrm/xml/schema/Mailing/Event/TrackableURLOpen.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd1150f4634444011665c325b2281f49444ede25 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/TrackableURLOpen.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>TrackableURLOpen</class> + <name>civicrm_mailing_event_trackable_url_open</name> + <comment>Tracks when a TrackableURL is clicked by a recipient.</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Trackable URL Open ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_queue_id</name> + <title>Event Queue</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to EventQueue</comment> + </field> + <foreignKey> + <name>event_queue_id</name> + <table>civicrm_mailing_event_queue</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>trackable_url_id</name> + <title>Trackable Url</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to TrackableURL</comment> + </field> + <foreignKey> + <name>trackable_url_id</name> + <table>civicrm_mailing_trackable_url</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>time_stamp</name> + <title>Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this trackable URL open occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/Unsubscribe.xml b/civicrm/xml/schema/Mailing/Event/Unsubscribe.xml new file mode 100644 index 0000000000000000000000000000000000000000..1dde5f09861201b6742d51487b9e47680acc7a7e --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/Unsubscribe.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing/Event</base> + <class>Unsubscribe</class> + <name>civicrm_mailing_event_unsubscribe</name> + <comment>Tracks when a recipient unsubscribes from a group/domain</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Unsubscribe ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>event_queue_id</name> + <title>Mailing Event Queue</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to EventQueue</comment> + </field> + <foreignKey> + <name>event_queue_id</name> + <table>civicrm_mailing_event_queue</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>org_unsubscribe</name> + <title>Unsubscribe is for Organization?</title> + <type>boolean</type> + <required>true</required> + <comment>Unsubscribe at org- or group-level</comment> + </field> + <field> + <name>time_stamp</name> + <title>Unsubscribe Timestamp</title> + <type>timestamp</type> + <default>CURRENT_TIMESTAMP</default> + <required>true</required> + <comment>When this delivery event occurred.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Event/files.xml b/civicrm/xml/schema/Mailing/Event/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d82160452c37ef59aea46b2b8f28fba42079676 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Event/files.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="Queue.xml" parse="xml" /> +<xi:include href="Bounce.xml" parse="xml" /> +<xi:include href="Delivered.xml" parse="xml" /> +<xi:include href="Forward.xml" parse="xml" /> +<xi:include href="Opened.xml" parse="xml" /> +<xi:include href="Reply.xml" parse="xml" /> +<xi:include href="Subscribe.xml" parse="xml" /> +<xi:include href="Confirm.xml" parse="xml" /> +<xi:include href="TrackableURLOpen.xml" parse="xml" /> +<xi:include href="Unsubscribe.xml" parse="xml" /> + +</tables> diff --git a/civicrm/xml/schema/Mailing/Mailing.xml b/civicrm/xml/schema/Mailing/Mailing.xml new file mode 100644 index 0000000000000000000000000000000000000000..0ef0930f0a87702b6b5907387abfa703fafba538 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Mailing.xml @@ -0,0 +1,500 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>Mailing</class> + <name>civicrm_mailing</name> + <comment>Stores information about a mailing.</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Mailing ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Mailing Domain</title> + <type>int unsigned</type> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which site is this mailing for</comment> + <add>3.4</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>3.4</add> + </foreignKey> + <field> + <name>header_id</name> + <title>Mailing Header</title> + <type>int unsigned</type> + <comment>FK to the header component.</comment> + </field> + <foreignKey> + <name>header_id</name> + <table>civicrm_mailing_component</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>footer_id</name> + <title>Mailing Footer</title> + <type>int unsigned</type> + <comment>FK to the footer component.</comment> + </field> + <foreignKey> + <name>footer_id</name> + <table>civicrm_mailing_component</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>reply_id</name> + <title>Mailing Reply</title> + <type>int unsigned</type> + <comment>FK to the auto-responder component.</comment> + </field> + <foreignKey> + <name>reply_id</name> + <table>civicrm_mailing_component</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>unsubscribe_id</name> + <title>Mailing Unsubscribe</title> + <type>int unsigned</type> + <comment>FK to the unsubscribe component.</comment> + </field> + <foreignKey> + <name>unsubscribe_id</name> + <table>civicrm_mailing_component</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>resubscribe_id</name> + <title>Mailing Resubscribe</title> + <type>int unsigned</type> + </field> + <foreignKey> + <name>optout_id</name> + <table>civicrm_mailing_component</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>optout_id</name> + <title>Mailing Opt Out</title> + <type>int unsigned</type> + <comment>FK to the opt-out component.</comment> + </field> + <foreignKey> + <name>optout_id</name> + <table>civicrm_mailing_component</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>name</name> + <title>Mailing Name</title> + <type>varchar</type> + <length>128</length> + <comment>Mailing Name.</comment> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>mailing_type</name> + <type>varchar</type> + <title>Mailing Type</title> + <length>32</length> + <comment>differentiate between standalone mailings, A/B tests, and A/B final-winner</comment> + <pseudoconstant> + <callback>CRM_Mailing_PseudoConstant::mailingTypes</callback> + </pseudoconstant> + <add>4.6</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>from_name</name> + <title>Mailing From Name</title> + <type>varchar</type> + <length>128</length> + <comment>From Header of mailing</comment> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>from_email</name> + <title>Mailing From Email</title> + <type>varchar</type> + <length>128</length> + <comment>From Email of mailing</comment> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>replyto_email</name> + <type>varchar</type> + <length>128</length> + <comment>Reply-To Email of mailing</comment> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>template_type</name> + <title>Template Type</title> + <type>varchar</type> + <length>64</length> + <default>'traditional'</default> + <required>true</required> + <comment>The language/processing system used for email templates.</comment> + <pseudoconstant> + <callback>CRM_Mailing_BAO_Mailing::getTemplateTypeNames</callback> + </pseudoconstant> + </field> + <field> + <name>template_options</name> + <title>Template Options (JSON)</title> + <type>longtext</type> + <comment>Advanced options used by the email templating system. (JSON encoded)</comment> + </field> + <field> + <name>subject</name> + <type>varchar</type> + <length>128</length> + <comment>Subject of mailing</comment> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>body_text</name> + <type>longtext</type> + <comment>Body of the mailing in text format.</comment> + </field> + <field> + <name>body_html</name> + <type>longtext</type> + <comment>Body of the mailing in html format.</comment> + </field> + <field> + <name>url_tracking</name> + <type>boolean</type> + <comment>Should we track URL click-throughs for this mailing?</comment> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>forward_replies</name> + <type>boolean</type> + <comment>Should we forward replies back to the author?</comment> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>auto_responder</name> + <type>boolean</type> + <comment>Should we enable the auto-responder?</comment> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>open_tracking</name> + <title>Track Mailing?</title> + <type>boolean</type> + <comment>Should we track when recipients open/read this mailing?</comment> + </field> + <field> + <name>is_completed</name> + <title>Mailing Completed</title> + <type>boolean</type> + <comment>Has at least one job associated with this mailing finished?</comment> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>msg_template_id</name> + <title>Mailing Message Template</title> + <type>int unsigned</type> + <comment>FK to the message template.</comment> + </field> + <foreignKey> + <name>msg_template_id</name> + <table>civicrm_msg_template</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>override_verp</name> + <type>boolean</type> + <default>0</default> + <add>2.2</add> + <comment>Should we overrite VERP address in Reply-To</comment> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>created_id</name> + <title>Mailing Creator</title> + <type>int unsigned</type> + <comment>FK to Contact ID who first created this mailing</comment> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <title>Mailing Created Date</title> + <comment>Date and time this mailing was created.</comment> + <add>3.0</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>modified_date</name> + <uniqueName>mailing_modified_date</uniqueName> + <type>timestamp</type> + <comment>When the mailing (or closely related entity) was created or modified or deleted.</comment> + <required>false</required> + <export>true</export> + <default>CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</default> + <add>4.7</add> + </field> + <field> + <name>scheduled_id</name> + <title>Scheduled By</title> + <type>int unsigned</type> + <comment>FK to Contact ID who scheduled this mailing</comment> + </field> + <foreignKey> + <name>scheduled_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>scheduled_date</name> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <title>Mailing Scheduled Date</title> + <comment>Date and time this mailing was scheduled.</comment> + <add>3.3</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>approver_id</name> + <title>Approved By</title> + <type>int unsigned</type> + <comment>FK to Contact ID who approved this mailing</comment> + </field> + <foreignKey> + <name>approver_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>approval_date</name> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <title>Mailing Approved Date</title> + <comment>Date and time this mailing was approved.</comment> + <add>3.3</add> + <html> + <type>Select Date</type> + <formatType>activityDateTime</formatType> + </html> + </field> + <field> + <name>approval_status_id</name> + <type>int unsigned</type> + <title>Approval Status</title> + <comment>The status of this mailing. Values: none, approved, rejected</comment> + <pseudoconstant> + <optionGroupName>mail_approval_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>3.3</add> + </field> + <field> + <name>approval_note</name> + <type>longtext</type> + <title>Approval Note</title> + <comment>Note behind the decision.</comment> + <add>3.3</add> + <html> + <type>TextArea</type> + </html> + </field> + <field> + <name>is_archived</name> + <type>boolean</type> + <title>Is Mailing Archived?</title> + <default>0</default> + <comment>Is this mailing archived?</comment> + <html> + <type>CheckBox</type> + </html> + <add>2.2</add> + </field> + <field> + <name>visibility</name> + <type>varchar</type> + <title>Mailing Visibility</title> + <length>40</length> + <default>'Public Pages'</default> + <comment>In what context(s) is the mailing contents visible (online viewing)</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::groupVisibility</callback> + </pseudoconstant> + <add>3.3</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>campaign_id</name> + <type>int unsigned</type> + <title>Mailing Campaign</title> + <comment>The campaign for which this mailing has been initiated.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.4</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>dedupe_email</name> + <type>boolean</type> + <title>No Duplicate emails?</title> + <default>0</default> + <add>4.1</add> + <comment>Remove duplicate emails?</comment> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>sms_provider_id</name> + <title>Mailing SMS Provider</title> + <type>int unsigned</type> + <add>4.2</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>sms_provider_id</name> + <table>civicrm_sms_provider</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.2</add> + </foreignKey> + <field> + <name>hash</name> + <title>Mailing Hash</title> + <type>varchar</type> + <length>16</length> + <comment>Key for validating requests related to this mailing.</comment> + <add>4.5</add> + </field> + <index> + <name>index_hash</name> + <fieldName>hash</fieldName> + <add>4.5</add> + </index> + <field> + <name>location_type_id</name> + <title>Location Type</title> + <type>int unsigned</type> + <comment>With email_selection_method, determines which email address to use</comment> + <pseudoconstant> + <table>civicrm_location_type</table> + <keyColumn>id</keyColumn> + <labelColumn>display_name</labelColumn> + </pseudoconstant> + <add>4.6</add> + </field> + <foreignKey> + <name>location_type_id</name> + <table>civicrm_location_type</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.6</add> + </foreignKey> + <field> + <name>email_selection_method</name> + <type>varchar</type> + <length>20</length> + <default>'automatic'</default> + <comment>With location_type_id, determine how to choose the email address to use.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::emailSelectMethods</callback> + </pseudoconstant> + <add>4.6</add> + </field> + <field> + <name>language</name> + <title>Mailing Language</title> + <type>varchar</type> + <length>5</length> + <comment>Language of the content of the mailing. Useful for tokens.</comment> + <add>4.6</add> + <pseudoconstant> + <optionGroupName>languages</optionGroupName> + <keyColumn>name</keyColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/MailingAB.xml b/civicrm/xml/schema/Mailing/MailingAB.xml new file mode 100644 index 0000000000000000000000000000000000000000..8bacee1aa718fe0a41965e4247d0d8827f39b590 --- /dev/null +++ b/civicrm/xml/schema/Mailing/MailingAB.xml @@ -0,0 +1,133 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>MailingAB</class> + <name>civicrm_mailing_abtest</name> + <comment>Stores information about abtesting</comment> + <archive>true</archive> + <field> + <name>id</name> + <type>int unsigned</type> + <title>MailingAB ID</title> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <type>varchar</type> + <length>128</length> + <title>Name</title> + <comment>Name of the A/B test</comment> + <add>4.6</add> + </field> + <field> + <name>status</name> + <type>varchar</type> + <length>32</length> + <title>Status</title> + <comment>Status</comment> + <pseudoconstant> + <callback>CRM_Mailing_PseudoConstant::abStatus</callback> + </pseudoconstant> + <add>4.6</add> + </field> + <field> + <name>mailing_id_a</name> + <type>int unsigned</type> + <title>Mailing ID (A)</title> + <comment>The first experimental mailing ("A" condition)</comment> + <add>4.6</add> + </field> + <field> + <name>mailing_id_b</name> + <type>int unsigned</type> + <title>Mailing ID (B)</title> + <comment>The second experimental mailing ("B" condition)</comment> + <add>4.6</add> + </field> + <field> + <name>mailing_id_c</name> + <type>int unsigned</type> + <title>Mailing ID (C)</title> + <comment>The final, general mailing (derived from A or B)</comment> + <add>4.6</add> + </field> + <field> + <name>domain_id</name> + <type>int unsigned</type> + <title>Domain ID</title> + <comment>Which site is this mailing for</comment> + <add>4.6</add> + </field> + <field> + <name>testing_criteria</name> + <type>varchar</type> + <length>32</length> + <title>Testing Criteria</title> + <pseudoconstant> + <callback>CRM_Mailing_PseudoConstant::abTestCriteria</callback> + </pseudoconstant> + <add>4.6</add> + </field> + <field> + <name>winner_criteria</name> + <type>varchar</type> + <length>32</length> + <title>Winner Criteria</title> + <pseudoconstant> + <callback>CRM_Mailing_PseudoConstant::abWinnerCriteria</callback> + </pseudoconstant> + <add>4.6</add> + </field> + <field> + <name>specific_url</name> + <type>varchar</type> + <title>URL for Winner Criteria</title> + <length>255</length> + <comment>What specific url to track</comment> + <add>4.6</add> + </field> + <field> + <name>declare_winning_time</name> + <type>datetime</type> + <title>Declaration Time</title> + <comment>In how much time to declare winner</comment> + <add>4.6</add> + </field> + <field> + <name>group_percentage</name> + <type>int unsigned</type> + <title>Group Percentage</title> + <add>4.6</add> + </field> + <field> + <name>created_id</name> + <title>AB Test Created By</title> + <type>int unsigned</type> + <comment>FK to Contact ID</comment> + <add>4.6</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.6</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>created_date</name> + <title>AB Test Created Date</title> + <type>timestamp</type> + <required>false</required> + <default>CURRENT_TIMESTAMP</default> + <comment>When was this item created</comment> + <add>4.6</add> + <html> + <type>Select Date</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/MailingGroup.xml b/civicrm/xml/schema/Mailing/MailingGroup.xml new file mode 100644 index 0000000000000000000000000000000000000000..0bb3bde4e6ed591285bb5279e1edf483554b1a3d --- /dev/null +++ b/civicrm/xml/schema/Mailing/MailingGroup.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>MailingGroup</class> + <name>civicrm_mailing_group</name> + <comment>Stores information about the groups that participate in this mailing..</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Mailing Group ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>mailing_id</name> + <title>Mailing</title> + <type>int unsigned</type> + <required>true</required> + <comment>The ID of a previous mailing to include/exclude recipients.</comment> + </field> + <foreignKey> + <name>mailing_id</name> + <table>civicrm_mailing</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>group_type</name> + <title>Mailing Group Type</title> + <type>varchar</type> + <length>8</length> + <comment>Are the members of the group included or excluded?.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getMailingGroupTypes</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>entity_table</name> + <title>Mailing Group Entity Table</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Name of table where item being referenced is stored.</comment> + <pseudoconstant> + <callback>CRM_Mailing_BAO_Mailing::mailingGroupEntityTables</callback> + </pseudoconstant> + </field> + <field> + <name>entity_id</name> + <title>Mailing Group Entity</title> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to the referenced item.</comment> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + </dynamicForeignKey> + <field> + <name>search_id</name> + <title>Mailing Group Search</title> + <type>int</type> + <comment>The filtering search. custom search id or -1 for civicrm api search</comment> + </field> + <field> + <name>search_args</name> + <title>Mailing Group Search Arguments</title> + <type>text</type> + <comment>The arguments to be sent to the search function</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/MailingJob.xml b/civicrm/xml/schema/Mailing/MailingJob.xml new file mode 100644 index 0000000000000000000000000000000000000000..07319d16c481bc42dc1654e17044de03e14c44a7 --- /dev/null +++ b/civicrm/xml/schema/Mailing/MailingJob.xml @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>MailingJob</class> + <name>civicrm_mailing_job</name> + <comment>Stores information about the job that executes this mailing</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Mailing Job ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>mailing_id</name> + <title>Mailing</title> + <type>int unsigned</type> + <required>true</required> + <comment>The ID of the mailing this Job will send.</comment> + </field> + <foreignKey> + <name>mailing_id</name> + <table>civicrm_mailing</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>scheduled_date</name> + <title>Mailing Scheduled Date</title> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <comment>date on which this job was scheduled.</comment> + </field> + <field> + <name>start_date</name> + <title>Mailing Job Start Date</title> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <comment>date on which this job was started.</comment> + </field> + <field> + <name>end_date</name> + <title>Mailing Job End Date</title> + <type>timestamp</type> + <default>NULL</default> + <required>false</required> + <comment>date on which this job ended.</comment> + </field> + <field> + <name>status</name> + <title>Mailing Job Status</title> + <type>varchar</type> + <length>12</length> + <comment>The state of this job</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::getMailingJobStatus</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>is_test</name> + <title>Mailing Job Is Test?</title> + <type>boolean</type> + <default>0</default> + <comment>Is this job for a test mail?</comment> + <add>1.9</add> + </field> + <field> + <name>job_type</name> + <title>Mailing Job Type</title> + <type>varchar</type> + <length>255</length> + <comment>Type of mailling job: null | child </comment> + <add>3.3</add> + </field> + <field> + <name>parent_id</name> + <title>Mailing Job Parent</title> + <type>int unsigned</type> + <comment>Parent job id</comment> + <default>NULL</default> + <add>3.3</add> + </field> + <foreignKey> + <name>parent_id</name> + <table>civicrm_mailing_job</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>job_offset</name> + <title>Mailing Job Offset</title> + <type>int</type> + <comment>Offset of the child job</comment> + <default>0</default> + <add>3.3</add> + </field> + <field> + <name>job_limit</name> + <title>Mailing Job Limit</title> + <type>int</type> + <comment>Queue size limit for each child job</comment> + <default>0</default> + <add>3.3</add> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/Recipients.xml b/civicrm/xml/schema/Mailing/Recipients.xml new file mode 100644 index 0000000000000000000000000000000000000000..729354c184b0a3ce1bbb7047e43bba2a6eac7f7d --- /dev/null +++ b/civicrm/xml/schema/Mailing/Recipients.xml @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>Recipients</class> + <name>civicrm_mailing_recipients</name> + <comment>Stores information about the recipients of a mailing.</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Mailing Recipients ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>mailing_id</name> + <title>Mailing</title> + <type>int unsigned</type> + <required>true</required> + <comment>The ID of the mailing this Job will send.</comment> + </field> + <foreignKey> + <name>mailing_id</name> + <table>civicrm_mailing</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contact_id</name> + <title>Mailing Recipient</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Contact</comment> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>email_id</name> + <title>Recipient Email</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>FK to Email</comment> + </field> + <foreignKey> + <name>email_id</name> + <table>civicrm_email</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>phone_id</name> + <title>Recipient Phone</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>FK to Phone</comment> + </field> + <foreignKey> + <name>phone_id</name> + <table>civicrm_phone</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Mailing/Spool.xml b/civicrm/xml/schema/Mailing/Spool.xml new file mode 100644 index 0000000000000000000000000000000000000000..a3f26cf950e663f8155b086533f6646bf86c3718 --- /dev/null +++ b/civicrm/xml/schema/Mailing/Spool.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>Spool</class> + <name>civicrm_mailing_spool</name> + <comment>Stores the outbond mails</comment> + <field> + <name>id</name> + <title>Spool ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>job_id</name> + <title>Mailing Job</title> + <type>int unsigned</type> + <required>true</required> + <comment>The ID of the Job .</comment> + </field> + <foreignKey> + <name>job_id</name> + <table>civicrm_mailing_job</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>recipient_email</name> + <title>Recipient Email</title> + <type>text</type> + <comment>The email of the receipients this mail is to be sent.</comment> + </field> + <field> + <name>headers</name> + <title>Headers</title> + <type>text</type> + <comment>The header information of this mailing .</comment> + </field> + <field> + <name>body</name> + <title>Body</title> + <type>text</type> + <comment>The body of this mailing.</comment> + </field> + <field> + <name>added_at</name> + <title>Added</title> + <type>timestamp</type> + <required>false</required> + <default>NULL</default> + <comment>date on which this job was added.</comment> + </field> + <field> + <name>removed_at</name> + <title>Removed</title> + <type>timestamp</type> + <required>false</required> + <default>NULL</default> + <comment>date on which this job was removed.</comment> + </field> +</table> diff --git a/civicrm/xml/schema/Mailing/TrackableURL.xml b/civicrm/xml/schema/Mailing/TrackableURL.xml new file mode 100644 index 0000000000000000000000000000000000000000..f1b510a1d4593fee358372385926de2a470e9443 --- /dev/null +++ b/civicrm/xml/schema/Mailing/TrackableURL.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Mailing</base> + <class>TrackableURL</class> + <name>civicrm_mailing_trackable_url</name> + <comment>Stores URLs for which we should track click-throughs from mailings</comment> + <archive>true</archive> + <field> + <name>id</name> + <title>Trackable URL ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>url</name> + <title>Url</title> + <type>text</type> + <required>true</required> + <comment>The URL to be tracked.</comment> + </field> + <field> + <name>mailing_id</name> + <title>Mailing</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to the mailing</comment> + </field> + <foreignKey> + <name>mailing_id</name> + <table>civicrm_mailing</table> + <key>id</key> + <onDelete>CASCADE</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Mailing/files.xml b/civicrm/xml/schema/Mailing/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..22a924c9baea4d2fd3fd2ae818b18231a3b02a95 --- /dev/null +++ b/civicrm/xml/schema/Mailing/files.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="Component.xml" parse="xml" /> +<xi:include href="Mailing.xml" parse="xml" /> +<xi:include href="MailingAB.xml" parse="xml" /> +<xi:include href="MailingGroup.xml" parse="xml" /> +<xi:include href="TrackableURL.xml" parse="xml" /> +<xi:include href="MailingJob.xml" parse="xml" /> +<xi:include href="Recipients.xml" parse="xml" /> +<xi:include href="BounceType.xml" parse="xml" /> +<xi:include href="BouncePattern.xml" parse="xml" /> +<xi:include href="Spool.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Member/Membership.xml b/civicrm/xml/schema/Member/Membership.xml new file mode 100644 index 0000000000000000000000000000000000000000..3be81314907cca0e95133af84d6de3e67ebe6b33 --- /dev/null +++ b/civicrm/xml/schema/Member/Membership.xml @@ -0,0 +1,272 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Member</base> + <class>Membership</class> + <name>civicrm_membership</name> + <comment>Contact Membership records.</comment> + <add>1.5</add> + <log>true</log> + <field> + <name>id</name> + <uniqueName>membership_id</uniqueName> + <type>int unsigned</type> + <required>true</required> + <import>true</import> + <title>Membership ID</title> + <headerPattern>/^(m(embership\s)?id)$/i</headerPattern> + <comment>Membership Id</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + + <field> + <name>contact_id</name> + <uniqueName>membership_contact_id</uniqueName> + <type>int unsigned</type> + <required>true</required> + <title>Contact ID</title> + <headerPattern>/contact(.?id)?/i</headerPattern> + <dataPattern>/^\d+$/</dataPattern> + <import>true</import> + <comment>FK to Contact ID</comment> + <add>1.5</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>membership_type_id</name> + <type>int unsigned</type> + <title>Membership Type Id</title> + <import>true</import> + <headerPattern>/^(m(embership\s)?type)$/i</headerPattern> + <export>false</export> + <required>true</required> + <comment>FK to Membership Type</comment> + <pseudoconstant> + <table>civicrm_membership_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.5</add> + </field> + <foreignKey> + <name>membership_type_id</name> + <table>civicrm_membership_type</table> + <key>id</key> + <add>1.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>join_date</name> + <title>Member Since</title> + <type>date</type> + <import>true</import> + <headerPattern>/^join|(j(oin\s)?date)$/i</headerPattern> + <dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern> + <comment>Beginning of initial membership period (member since...).</comment> + <add>1.5</add> + <html> + <type>Select Date</type> + <formatType>activityDate</formatType> + </html> + </field> + <field> + <name>start_date</name> + <uniqueName>membership_start_date</uniqueName> + <title>Membership Start Date</title> + <type>date</type> + <import>true</import> + <headerPattern>/(member(ship)?.)?start(s)?(.date$)?/i</headerPattern> + <dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern> + <comment>Beginning of current uninterrupted membership period.</comment> + <add>1.5</add> + <html> + <type>Select Date</type> + <formatType>activityDate</formatType> + </html> + </field> + <field> + <name>end_date</name> + <uniqueName>membership_end_date</uniqueName> + <title>Membership Expiration Date</title> + <type>date</type> + <import>true</import> + <headerPattern>/(member(ship)?.)?end(s)?(.date$)?/i</headerPattern> + <dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern> + <comment>Current membership period expire date.</comment> + <add>1.5</add> + <html> + <type>Select Date</type> + <formatType>activityDate</formatType> + </html> + </field> + <field> + <name>source</name> + <uniqueName>membership_source</uniqueName> + <title>Source</title> + <import>true</import> + <headerPattern>/^(member(ship?))?source$/i</headerPattern> + <type>varchar</type> + <length>128</length> + <add>1.5</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>status_id</name> + <title>Membership Status Id</title> + <import>true</import> + <headerPattern>/(member(ship|).)?(status)$/i</headerPattern> + <type>int unsigned</type> + <export>false</export> + <required>true</required> + <comment>FK to Membership Status</comment> + <pseudoconstant> + <table>civicrm_membership_status</table> + <keyColumn>id</keyColumn> + <labelColumn>label</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + <add>1.5</add> + </field> + <foreignKey> + <name>status_id</name> + <table>civicrm_membership_status</table> + <key>id</key> + <add>1.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>is_override</name> + <title>Status Override</title> + <import>true</import> + <headerPattern>/override$/i</headerPattern> + <type>boolean</type> + <comment>Admin users may set a manual status which overrides the calculated status. When this flag is true, automated status update scripts should NOT modify status for the record.</comment> + <html> + <type>CheckBox</type> + </html> + <add>1.5</add> + </field> + <field> + <name>status_override_end_date</name> + <title>Status Override End Date</title> + <type>date</type> + <default>NULL</default> + <import>true</import> + <comment>Then end date of membership status override if 'Override until selected date' override type is selected.</comment> + <add>4.7</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>owner_membership_id</name> + <type>int unsigned</type> + <title>Primary Member ID</title> + <comment>Optional FK to Parent Membership.</comment> + <export>true</export> + <add>1.7</add> + </field> + <foreignKey> + <name>owner_membership_id</name> + <table>civicrm_membership</table> + <key>id</key> + <add>1.7</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <index> + <name>index_owner_membership_id</name> + <fieldName>owner_membership_id</fieldName> + <add>1.7</add> + </index> + <field> + <name>max_related</name> + <type>int</type> + <comment>Maximum number of related memberships (membership_type override).</comment> + <add>4.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_test</name> + <title>Test</title> + <uniqueName>member_is_test</uniqueName> + <type>boolean</type> + <default>0</default> + <import>true</import> + <headerPattern>/(is.)?test(.member(ship)?)?/i</headerPattern> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_pay_later</name> + <uniqueName>member_is_pay_later</uniqueName> + <title>Is Pay Later</title> + <type>boolean</type> + <default>0</default> + <import>true</import> + <headerPattern>/(is.)?(pay(.)?later)$/i</headerPattern> + <add>2.1</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>contribution_recur_id</name> + <title>Membership Recurring Contribution</title> + <type>int unsigned</type> + <comment>Conditional foreign key to civicrm_contribution_recur id. Each membership in connection with a recurring contribution carries a foreign key to the recurring contribution record. This assumes we can track these processor initiated events.</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>contribution_recur_id</name> + <table>civicrm_contribution_recur</table> + <key>id</key> + <add>3.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>campaign_id</name> + <uniqueName>member_campaign_id</uniqueName> + <type>int unsigned</type> + <title>Campaign</title> + <import>true</import> + <comment>The campaign for which this membership is attached.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.4</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Member/MembershipBlock.xml b/civicrm/xml/schema/Member/MembershipBlock.xml new file mode 100644 index 0000000000000000000000000000000000000000..89503bb66b1f5d4e0098f7b1f2e7b95aa4b00be1 --- /dev/null +++ b/civicrm/xml/schema/Member/MembershipBlock.xml @@ -0,0 +1,134 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Member</base> + <class>MembershipBlock</class> + <name>civicrm_membership_block</name> + <comment>A Membership Block stores admin configurable status options and rules</comment> + <add>1.5</add> + <log>true</log> + <field> + <name>id</name> + <title>Membership Block ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Membership Id</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Membership Block Entity Table</title> + <type>varchar</type> + <length>64</length> + <comment>Name for Membership Status</comment> + <add>1.5</add> + </field> + <field> + <name>entity_id</name> + <title>Membership Block Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_contribution_page.id</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>entity_id</name> + <table>civicrm_contribution_page</table> + <key>id</key> + <add>1.5</add> + </foreignKey> + <field> + <name>membership_types</name> + <title>Membership Block Membership Types</title> + <type>varchar</type> + <length>1024</length> + <comment>Membership types to be exposed by this block</comment> + <serialize>PHP</serialize> + <add>1.5</add> + <!-- changed from varchar 255 to 1024 in 4.6 beta 2 --> + <change>4.6</change> + </field> + <field> + <name>membership_type_default</name> + <title>Membership Block Default Type</title> + <type>int unsigned</type> + <comment>Optional foreign key to membership_type</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>membership_type_default</name> + <table>civicrm_membership_type</table> + <key>id</key> + <add>1.5</add> + </foreignKey> + <field> + <name>display_min_fee</name> + <title>Membership Block Display Minimum Fee</title> + <type>boolean</type> + <default>1</default> + <comment>Display minimum membership fee</comment> + <add>1.5</add> + </field> + <field> + <name>is_separate_payment</name> + <title>Membership Block Is Separate Payment</title> + <type>boolean</type> + <default>1</default> + <comment>Should membership transactions be processed separately</comment> + <add>1.5</add> + </field> + <field> + <name>new_title</name> + <title>Membership Block New Title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Title to display at top of block</comment> + <add>1.5</add> + </field> + <field> + <name>new_text</name> + <title>Membership Block New Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>Text to display below title</comment> + <add>1.5</add> + </field> + <field> + <name>renewal_title</name> + <title>Membership Block Renewal Title</title> + <type>varchar</type> + <length>255</length> + <localizable>true</localizable> + <comment>Title for renewal</comment> + <add>1.5</add> + </field> + <field> + <name>renewal_text</name> + <title>Membership Block Renewal Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>Text to display for member renewal</comment> + <add>1.5</add> + </field> + <field> + <name>is_required</name> + <title>Is Required</title> + <type>boolean</type> + <default>0</default> + <comment>Is membership sign up optional</comment> + <add>1.5</add> + </field> + <field> + <name>is_active</name> + <title>Is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this membership_block enabled</comment> + <add>1.5</add> + </field> +</table> diff --git a/civicrm/xml/schema/Member/MembershipLog.xml b/civicrm/xml/schema/Member/MembershipLog.xml new file mode 100644 index 0000000000000000000000000000000000000000..51dd870a1f440143ab5a980a2b3d546349f24230 --- /dev/null +++ b/civicrm/xml/schema/Member/MembershipLog.xml @@ -0,0 +1,110 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Member</base> + <class>MembershipLog</class> + <name>civicrm_membership_log</name> + <log>true</log> + <comment>Logs actions which affect a Membership record (signup, status override, renewal, etc.)</comment> + <add>1.5</add> + <field> + <name>id</name> + <title>Membership Log ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>membership_id</name> + <title>Membership ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Membership table</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>membership_id</name> + <table>civicrm_membership</table> + <key>id</key> + <add>1.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>status_id</name> + <title>Membership Status</title> + <type>int unsigned</type> + <required>true</required> + <comment>New status assigned to membership by this action. FK to Membership Status</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>status_id</name> + <table>civicrm_membership_status</table> + <key>id</key> + <add>1.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>start_date</name> + <title>Membership Log Start Date</title> + <type>date</type> + <dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern> + <comment>New membership period start date</comment> + <add>1.5</add> + </field> + <field> + <name>end_date</name> + <title>Membership Log End Date</title> + <type>date</type> + <dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern> + <comment>New membership period expiration date.</comment> + <add>1.5</add> + </field> + <field> + <name>modified_id</name> + <title>Membership Log modified By</title> + <type>int unsigned</type> + <comment>FK to Contact ID of person under whose credentials this data modification was made.</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>modified_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.5</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>modified_date</name> + <title>Membership Change Date</title> + <type>date</type> + <dataPattern>/\d{4}-?\d{2}-?\d{2}/</dataPattern> + <comment>Date this membership modification action was logged.</comment> + <add>1.5</add> + </field> + <field> + <name>membership_type_id</name> + <title>Membership Type ID</title> + <type>int unsigned</type> + <comment>FK to Membership Type.</comment> + <add>3.4</add> + </field> + <foreignKey> + <name>membership_type_id</name> + <table>civicrm_membership_type</table> + <key>id</key> + <add>3.4</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>max_related</name> + <title>Maximum Related Memberships</title> + <type>int</type> + <comment>Maximum number of related memberships.</comment> + <add>4.3</add> + </field> +</table> diff --git a/civicrm/xml/schema/Member/MembershipPayment.xml b/civicrm/xml/schema/Member/MembershipPayment.xml new file mode 100644 index 0000000000000000000000000000000000000000..3f8a7399cd73e5f8941bf9e2a5ccebffc8e2908c --- /dev/null +++ b/civicrm/xml/schema/Member/MembershipPayment.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Member</base> + <class>MembershipPayment</class> + <name>civicrm_membership_payment</name> + <comment>Membership Payment</comment> + <add>1.5</add> + <log>true</log> + <field> + <name>id</name> + <title>Membership Payment ID</title> + <type>int unsigned</type> + <required>true</required> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>membership_id</name> + <title>Membership</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Membership table</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>membership_id</name> + <table>civicrm_membership</table> + <key>id</key> + <add>1.5</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contribution_id</name> + <title>Contribution</title> + <type>int unsigned</type> + <comment>FK to contribution table.</comment> + <add>2.0</add> + </field> + <foreignKey> + <name>contribution_id</name> + <table>civicrm_contribution</table> + <key>id</key> + <add>2.0</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>UI_contribution_membership</name> + <unique>true</unique> + <fieldName>contribution_id</fieldName> + <fieldName>membership_id</fieldName> + <add>2.0</add> + </index> +</table> diff --git a/civicrm/xml/schema/Member/MembershipStatus.xml b/civicrm/xml/schema/Member/MembershipStatus.xml new file mode 100644 index 0000000000000000000000000000000000000000..b25d44f45327e224e65451bad4eb66fce7d35246 --- /dev/null +++ b/civicrm/xml/schema/Member/MembershipStatus.xml @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Member</base> + <class>MembershipStatus</class> + <name>civicrm_membership_status</name> + <comment>Membership Status stores admin configurable rules for assigning status to memberships.</comment> + <add>1.5</add> + <log>true</log> + <field> + <name>id</name> + <title>Membership Status ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Membership Id</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <uniqueName>membership_status</uniqueName> + <title>Membership Status</title> + <type>varchar</type> + <import>true</import> + <length>128</length> + <comment>Name for Membership Status</comment> + <add>1.5</add> + </field> + <field> + <name>label</name> + <type>varchar</type> + <length>128</length> + <localizable>true</localizable> + <comment>Label for Membership Status</comment> + <add>3.2</add> + </field> + <field> + <name>start_event</name> + <type>varchar</type> + <length>12</length> + <comment>Event when this status starts.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::eventDate</callback> + </pseudoconstant> + <add>1.5</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>start_event_adjust_unit</name> + <type>varchar</type> + <length>8</length> + <comment>Unit used for adjusting from start_event.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::unitList</callback> + </pseudoconstant> + <add>1.5</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>start_event_adjust_interval</name> + <type>int</type> + <comment>Status range begins this many units from start_event.</comment> + <add>1.5</add> + </field> + <field> + <name>end_event</name> + <type>varchar</type> + <length>12</length> + <comment>Event after which this status ends.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::eventDate</callback> + </pseudoconstant> + <add>1.5</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>end_event_adjust_unit</name> + <type>varchar</type> + <length>8</length> + <comment>Unit used for adjusting from the ending event.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::unitList</callback> + </pseudoconstant> + <add>1.5</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>end_event_adjust_interval</name> + <type>int</type> + <comment>Status range ends this many units from end_event.</comment> + <add>1.5</add> + </field> + <field> + <name>is_current_member</name> + <title>Current Membership?</title> + <type>boolean</type> + <comment>Does this status aggregate to current members (e.g. New, Renewed, Grace might all be TRUE... while Unrenewed, Lapsed, Inactive would be FALSE).</comment> + <add>1.5</add> + </field> + <field> + <name>is_admin</name> + <title>Admin Assigned Only?</title> + <type>boolean</type> + <comment>Is this status for admin/manual assignment only.</comment> + <add>1.5</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <add>1.5</add> + </field> + <field> + <name>is_default</name> + <title>Default Status?</title> + <type>boolean</type> + <comment>Assign this status to a membership record if no other status match is found.</comment> + <add>1.5</add> + </field> + <field> + <name>is_active</name> + <title>Is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this membership_status enabled.</comment> + <add>1.5</add> + </field> + <field> + <name>is_reserved</name> + <title>Is Reserved</title> + <type>boolean</type> + <default>0</default> + <comment>Is this membership_status reserved.</comment> + <add>2.1</add> + </field> +</table> diff --git a/civicrm/xml/schema/Member/MembershipType.xml b/civicrm/xml/schema/Member/MembershipType.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b6f92682292c55ea8e266ccc6f5bffbc3a55795 --- /dev/null +++ b/civicrm/xml/schema/Member/MembershipType.xml @@ -0,0 +1,266 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Member</base> + <class>MembershipType</class> + <name>civicrm_membership_type</name> + <comment>Sites can configure multiple types of memberships. They encode the owner organization, fee, and the rules needed to set start and end (expire) dates when a member signs up for that type.</comment> + <add>1.5</add> + <log>true</log> + <field> + <name>id</name> + <title>Membership Type ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Membership Id</comment> + <add>1.5</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Membership Type Domain</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this match entry for</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.0</add> + </foreignKey> + <field> + <name>name</name> + <uniqueName>membership_type</uniqueName> + <title>Membership Type</title> + <type>varchar</type> + <import>true</import> + <length>128</length> + <localizable>true</localizable> + <comment>Name of Membership Type</comment> + <add>1.5</add> + </field> + <field> + <name>description</name> + <title>Membership Type Description</title> + <type>varchar</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <length>255</length> + <localizable>true</localizable> + <comment>Description of Membership Type</comment> + <add>1.5</add> + </field> + <field> + <name>member_of_contact_id</name> + <title>Membership Type Organization</title> + <type>int unsigned</type> + <required>true</required> + <comment>Owner organization for this membership type. FK to Contact ID</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>member_of_contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.5</add> + <onDelete>RESTRICT</onDelete> + </foreignKey> + <field> + <name>contribution_type_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>If membership is paid by a contribution - what contribution type should be used. FK to Contribution Type ID</comment> + <add>1.5</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>contribution_type_id</name> + <table>civicrm_contribution_type</table> + <key>id</key> + <add>1.5</add> + <drop>4.3</drop> + </foreignKey> + <field> + <name>financial_type_id</name> + <title>Membership Financial Type</title> + <type>int unsigned</type> + <required>true</required> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>If membership is paid by a contribution - what financial type should be used. FK to civicrm_financial_type.id</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>minimum_fee</name> + <title>membership Type Minimum Fee</title> + <type>decimal</type> + <length>18,9</length> + <comment>Minimum fee for this membership (0 for free/complimentary memberships).</comment> + <default>0</default> + <add>1.5</add> + </field> + <field> + <name>duration_unit</name> + <title>Membership Type Duration Unit</title> + <type>varchar</type> + <length>8</length> + <comment>Unit in which membership period is expressed.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::membershipTypeUnitList</callback> + </pseudoconstant> + <add>1.5</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>duration_interval</name> + <title>Membership Type Duration Interval</title> + <type>int</type> + <comment>Number of duration units in membership period (e.g. 1 year, 12 months).</comment> + <add>1.5</add> + </field> + <field> + <name>period_type</name> + <title>Membership Type Plan</title> + <type>varchar</type> + <length>8</length> + <comment>Rolling membership period starts on signup date. Fixed membership periods start on fixed_period_start_day.</comment> + <pseudoconstant> + <callback>CRM_Core_SelectValues::periodType</callback> + </pseudoconstant> + <add>1.5</add> + </field> + <field> + <name>fixed_period_start_day</name> + <title>Fixed Period Start Day</title> + <type>int</type> + <comment>For fixed period memberships, month and day (mmdd) on which subscription/membership will start. Period start is back-dated unless after rollover day.</comment> + <add>1.5</add> + </field> + <field> + <name>fixed_period_rollover_day</name> + <title>Fixed Period Rollover Day</title> + <type>int</type> + <comment>For fixed period memberships, signups after this day (mmdd) rollover to next period.</comment> + <add>1.5</add> + </field> + <field> + <name>relationship_type_id</name> + <title>Membership Type Relationship</title> + <type>varchar</type> + <length>64</length> + <comment>FK to Relationship Type ID</comment> + <add>1.5</add> + </field> + <foreignKey> + <name>relationship_type_id</name> + <table>civicrm_relationship_type</table> + <key>id</key> + <add>1.5</add> + <drop>3.3</drop> + </foreignKey> + <index> + <name>index_relationship_type_id</name> + <fieldName>relationship_type_id</fieldName> + <add>3.3</add> + </index> + <field> + <name>relationship_direction</name> + <type>varchar</type> + <length>128</length> + <add>1.7</add> + </field> + <field> + <name>max_related</name> + <title>Max Related Members for Type</title> + <type>int</type> + <comment>Maximum number of related memberships.</comment> + <add>4.3</add> + </field> + <field> + <name>visibility</name> + <title>Visible</title> + <type>varchar</type> + <length>64</length> + <add>1.5</add> + <pseudoconstant> + <callback>CRM_Core_SelectValues::memberVisibility</callback> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <add>1.5</add> + </field> + <field> + <name>receipt_text_signup</name> + <title>Membership Type Receipt Text</title> + <type>varchar</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <length>255</length> + <comment>Receipt Text for membership signup</comment> + <add>2.0</add> + </field> + <field> + <name>receipt_text_renewal</name> + <title>Membership Type Renewal Text</title> + <type>varchar</type> + <html> + <type>TextArea</type> + <rows>6</rows> + <cols>50</cols> + </html> + <length>255</length> + <comment>Receipt Text for membership renewal</comment> + <add>2.0</add> + </field> + <field> + <name>auto_renew</name> + <type>boolean</type> + <default>0</default> + <pseudoconstant> + <callback>CRM_Core_SelectValues::memberAutoRenew</callback> + </pseudoconstant> + <comment>0 = No auto-renew option; 1 = Give option, but not required; 2 = Auto-renew required;</comment> + <add>3.3</add> + </field> + <field> + <name>is_active</name> + <title>Is Active</title> + <type>boolean</type> + <default>1</default> + <comment>Is this membership_type enabled</comment> + <add>1.5</add> + </field> +</table> diff --git a/civicrm/xml/schema/Member/files.xml b/civicrm/xml/schema/Member/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..35587670556d56e7bba052c91b77dda515525c6a --- /dev/null +++ b/civicrm/xml/schema/Member/files.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="MembershipType.xml" parse="xml" /> +<xi:include href="Membership.xml" parse="xml" /> +<xi:include href="MembershipStatus.xml" parse="xml" /> +<xi:include href="MembershipPayment.xml" parse="xml" /> +<xi:include href="MembershipBlock.xml" parse="xml" /> +<xi:include href="MembershipLog.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/PCP/PCP.xml b/civicrm/xml/schema/PCP/PCP.xml new file mode 100644 index 0000000000000000000000000000000000000000..9ccd2b3c4087502a9cf599476af7b952d5565997 --- /dev/null +++ b/civicrm/xml/schema/PCP/PCP.xml @@ -0,0 +1,215 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/PCP</base> + <class>PCP</class> + <name>civicrm_pcp</name> + <add>2.2</add> + <log>true</log> + <field> + <name>id</name> + <uniqueName>pcp_id</uniqueName> + <type>int unsigned</type> + <required>true</required> + <title>Personal Campaign Page ID</title> + <comment>Personal Campaign Page ID</comment> + <add>2.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <uniqueName>pcp_contact_id</uniqueName> + <title>Contact ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Contact ID</comment> + <add>2.2</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.2</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>status_id</name> + <title>Personal Campaign Page Status</title> + <required>true</required> + <type>int unsigned</type> + <add>2.2</add> + <pseudoconstant> + <optionGroupName>pcp_status</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>title</name> + <title>Personal Campaign Page Title</title> + <type>varchar</type> + <length>255</length> + <default>NULL</default> + <add>2.2</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>intro_text</name> + <type>text</type> + <default>NULL</default> + <add>2.2</add> + <html> + <type>TextArea</type> + </html> + </field> + <field> + <name>page_text</name> + <type>text</type> + <default>NULL</default> + <add>2.2</add> + <html> + <type>TextArea</type> + </html> + </field> + <field> + <name>donate_link_text</name> + <title>Donate Link Text</title> + <type>varchar</type> + <length>255</length> + <default>NULL</default> + <add>2.2</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>contribution_page_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>The Contribution Page which triggered this pcp</comment> + <add>2.2</add> + <drop>4.1</drop> + </field> + <foreignKey> + <name>contribution_page_id</name> + <table>civicrm_contribution_page</table> + <key>id</key> + <drop>4.1</drop> + </foreignKey> + <field> + <name>page_id</name> + <title>Contribution Page</title> + <type>int unsigned</type> + <required>true</required> + <comment>The Contribution or Event Page which triggered this pcp</comment> + <add>4.1</add> + </field> + <field> + <name>page_type</name> + <title>PCP Page Type</title> + <comment>The type of PCP this is: contribute or event</comment> + <type>varchar</type> + <length>64</length> + <default>'contribute'</default> + <html> + <type>Select</type> + </html> + <add>2.2</add> + </field> + <field> + <name>pcp_block_id</name> + <title>PCP Block</title> + <comment>The pcp block that this pcp page was created from</comment> + <type>int unsigned</type> + <required>true</required> + <add>4.1</add> + </field> + <field> + <name>is_thermometer</name> + <title>Use Thermometer?</title> + <type>int unsigned</type> + <default>0</default> + <html> + <type>CheckBox</type> + </html> + <add>2.2</add> + </field> + <field> + <name>is_honor_roll</name> + <title>Show Honor Roll?</title> + <type>int unsigned</type> + <default>0</default> + <add>2.2</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>goal_amount</name> + <title>Goal Amount</title> + <type>decimal</type> + <comment>Goal amount of this Personal Campaign Page.</comment> + <add>2.2</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>currency</name> + <title>Currency</title> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>referer</name> + <title>Referer</title> + <type>varchar</type> + <length>255</length> + <default>NULL</default> + <add>2.2</add> + <drop>4.1</drop> + </field> + <field> + <name>is_active</name> + <title>Enabled?</title> + <type>boolean</type> + <comment>Is Personal Campaign Page enabled/active?</comment> + <default>0</default> + <add>2.2</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_notify</name> + <title>Notify Owner?</title> + <type>boolean</type> + <comment>Notify owner via email when someone donates to page?</comment> + <default>0</default> + <add>4.6</add> + <html> + <type>CheckBox</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/PCP/PCPBlock.xml b/civicrm/xml/schema/PCP/PCPBlock.xml new file mode 100644 index 0000000000000000000000000000000000000000..b07bc5b035556ca14c48574688a879614af825f3 --- /dev/null +++ b/civicrm/xml/schema/PCP/PCPBlock.xml @@ -0,0 +1,153 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/PCP</base> + <class>PCPBlock</class> + <name>civicrm_pcp_block</name> + <comment>A Personal Campaign Page Block stores admin configurable status options and rules</comment> + <add>2.2</add> + <log>true</log> + <field> + <name>id</name> + <title>PCP Block ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>PCP block Id</comment> + <add>2.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <add>2.2</add> + </field> + <field> + <name>entity_id</name> + <title>Entity</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_contribution_page.id OR civicrm_event.id</comment> + <add>2.2</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>2.2</add> + </dynamicForeignKey> + <foreignKey> + <name>entity_id</name> + <table>civicrm_contribution_page</table> + <key>id</key> + <add>2.2</add> + <drop>4.1</drop> + </foreignKey> + <field> + <name>target_entity_type</name> + <title>Target Entity</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <default>'contribute'</default> + <comment>The type of entity that this pcp targets</comment> + <add>4.1</add> + </field> + <field> + <name>target_entity_id</name> + <title>Target Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>The entity that this pcp targets</comment> + <add>4.1</add> + </field> + <dynamicForeignKey> + <idColumn>target_entity_id</idColumn> + <!-- FIXME: typename and not tablename? --> + <typeColumn>target_entity_type</typeColumn> + <add>4.1</add> + </dynamicForeignKey> + <field> + <name>supporter_profile_id</name> + <title>Supporter Profile</title> + <type>int unsigned</type> + <comment>FK to civicrm_uf_group.id. Does Personal Campaign Page require manual activation by administrator? (is inactive by default after setup)?</comment> + <default>NULL</default> + <add>2.2</add> + </field> + <foreignKey> + <name>supporter_profile_id</name> + <table>civicrm_uf_group</table> + <key>id</key> + <add>3.1</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>owner_notify_id</name> + <title>Owner Notification</title> + <type>int unsigned</type> + <default>0</default> + <comment>FK to civicrm_option_group with name = PCP owner notifications</comment> + <add>4.6</add> + <pseudoconstant> + <optionGroupName>pcp_owner_notify</optionGroupName> + </pseudoconstant> + <html> + <type>Radio</type> + </html> + </field> + <field> + <name>is_approval_needed</name> + <title>Approval Required?</title> + <type>boolean</type> + <comment>Does Personal Campaign Page require manual activation by administrator? (is inactive by default after setup)?</comment> + <default>NULL</default> + <add>2.2</add> + </field> + <field> + <name>is_tellfriend_enabled</name> + <title>Tell a Friend Enabled?</title> + <type>boolean</type> + <comment>Does Personal Campaign Page allow using tell a friend?</comment> + <default>NULL</default> + <add>2.2</add> + </field> + <field> + <name>tellfriend_limit</name> + <title>Tell A Friend Limit</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Maximum recipient fields allowed in tell a friend</comment> + <add>2.2</add> + </field> + <field> + <name>link_text</name> + <title>Link Text</title> + <type>varchar</type> + <length>255</length> + <default>NULL</default> + <localizable>true</localizable> + <comment>Link text for PCP.</comment> + <add>2.2</add> + </field> + <field> + <name>is_active</name> + <title>Enabled?</title> + <type>boolean</type> + <comment>Is Personal Campaign Page Block enabled/active?</comment> + <default>1</default> + <add>2.2</add> + </field> + <field> + <name>notify_email</name> + <title>Notification Email</title> + <type>varchar</type> + <length>255</length> + <comment>If set, notification is automatically emailed to this email-address on create/update Personal Campaign Page</comment> + <default>NULL</default> + <add>2.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/PCP/files.xml b/civicrm/xml/schema/PCP/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..f647624e242064cfefe079fb9d7ae00123baee34 --- /dev/null +++ b/civicrm/xml/schema/PCP/files.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="PCP.xml" parse="xml" /> +<xi:include href="PCPBlock.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Pledge/Pledge.xml b/civicrm/xml/schema/Pledge/Pledge.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d4e15e519fcd3dde1efc909bd8cae26255241e5 --- /dev/null +++ b/civicrm/xml/schema/Pledge/Pledge.xml @@ -0,0 +1,339 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Pledge</base> + <class>Pledge</class> + <name>civicrm_pledge</name> + <add>2.1</add> + <log>true</log> + <field> + <name>id</name> + <uniqueName>pledge_id</uniqueName> + <title>Pledge ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Pledge ID</comment> + <import>true</import> + <add>2.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>contact_id</name> + <uniqueName>pledge_contact_id</uniqueName> + <title>Contact ID</title> + <import>true</import> + <type>int unsigned</type> + <required>true</required> + <comment>Foreign key to civicrm_contact.id .</comment> + <add>2.1</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>2.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contribution_type_id</name> + <uniqueName>pledge_contribution_type_id</uniqueName> + <export>false</export> + <type>int unsigned</type> + <comment>FK to Contribution Type. This is propagated to contribution record when pledge payments are made.</comment> + <add>2.1</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>contribution_type_id</name> + <table>civicrm_contribution_type</table> + <key>id</key> + <add>2.1</add> + <drop>4.3</drop> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>financial_type_id</name> + <title>Type</title> + <uniqueName>pledge_financial_type_id</uniqueName> + <type>int unsigned</type> + <comment>FK to Financial Type</comment> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <add>4.3</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <add>4.3</add> + </foreignKey> + <field> + <name>contribution_page_id</name> + <uniqueName>pledge_contribution_page_id</uniqueName> + <title>Pledge Contribution Page</title> + <type>int unsigned</type> + <comment>The Contribution Page which triggered this contribution</comment> + <add>2.1</add> + </field> + <foreignKey> + <name>contribution_page_id</name> + <table>civicrm_contribution_page</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>amount</name> + <uniqueName>pledge_amount</uniqueName> + <title>Total Pledged</title> + <type>decimal</type> + <required>true</required> + <import>true</import> + <comment>Total pledged amount.</comment> + <add>2.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>original_installment_amount</name> + <uniqueName>pledge_original_installment_amount</uniqueName> + <title>Original Installment Amount</title> + <type>decimal</type> + <required>true</required> + <comment>Original amount for each of the installments.</comment> + <add>3.2</add> + <html> + <type>Text</type> + </html> + <export>true</export> + </field> + <field> + <name>currency</name> + <type>varchar</type> + <title>Pledge Currency</title> + <length>3</length> + <default>NULL</default> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>frequency_unit</name> + <uniqueName>pledge_frequency_unit</uniqueName> + <title>Pledge Frequency Unit</title> + <type>varchar</type> + <length>8</length> + <default>'month'</default> + <comment>Time units for recurrence of pledge payments.</comment> + <pseudoconstant> + <optionGroupName>recur_frequency_units</optionGroupName> + <keyColumn>name</keyColumn> + </pseudoconstant> + <add>2.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>frequency_interval</name> + <uniqueName>pledge_frequency_interval</uniqueName> + <title>Pledge Frequency Interval</title> + <type>int unsigned</type> + <required>true</required> + <default>1</default> + <comment>Number of time units for recurrence of pledge payments.</comment> + <add>2.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>frequency_day</name> + <type>int unsigned</type> + <title>Pledge day</title> + <default>3</default> + <required>true</required> + <comment>Day in the period when the pledge payment is due e.g. 1st of month, 15th etc. Use this to set the scheduled dates for pledge payments.</comment> + <add>2.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>installments</name> + <type>int unsigned</type> + <title>Pledge Number of Installments</title> + <default>1</default> + <comment>Total number of payments to be made.</comment> + <add>2.1</add> + <html> + <type>Text</type> + </html> + <export>true</export> + </field> + <field> + <name>start_date</name> + <type>datetime</type> + <title>Pledge Start Date</title> + <required>true</required> + <comment>The date the first scheduled pledge occurs.</comment> + <add>2.1</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>create_date</name> + <type>datetime</type> + <uniqueName>pledge_create_date</uniqueName> + <title>Pledge Made</title> + <required>true</required> + <import>true</import> + <comment>When this pledge record was created.</comment> + <add>2.1</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>acknowledge_date</name> + <type>datetime</type> + <title>Pledge Acknowledged</title> + <comment>When a pledge acknowledgement message was sent to the contributor.</comment> + <add>2.1</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>modified_date</name> + <type>datetime</type> + <title>Pledge Modified Date</title> + <comment>Last updated date for this pledge record.</comment> + <add>2.1</add> + </field> + <field> + <name>cancel_date</name> + <type>datetime</type> + <title>Pledge Cancelled Date</title> + <comment>Date this pledge was cancelled by contributor.</comment> + <add>2.1</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>end_date</name> + <type>datetime</type> + <title>Pledge End Date</title> + <comment>Date this pledge finished successfully (total pledge payments equal to or greater than pledged amount).</comment> + <add>2.1</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>max_reminders</name> + <title>Maximum Number of Reminders</title> + <type>int unsigned</type> + <default>1</default> + <comment>The maximum number of payment reminders to send for any given payment.</comment> + <html> + <type>Text</type> + </html> + <add>2.1</add> + </field> + <field> + <name>initial_reminder_day</name> + <title>Initial Reminder Day</title> + <type>int unsigned</type> + <default>5</default> + <comment>Send initial reminder this many days prior to the payment due date.</comment> + <add>2.1</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>additional_reminder_day</name> + <title>Additional Reminder Days</title> + <type>int unsigned</type> + <default>5</default> + <comment>Send additional reminder this many days after last one sent, up to maximum number of reminders.</comment> + <add>2.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>status_id</name> + <title>Pledge Status Id</title> + <uniqueName>pledge_status_id</uniqueName> + <import>true</import> + <export>false</export> + <type>int unsigned</type> + <pseudoconstant> + <optionGroupName>pledge_status</optionGroupName> + </pseudoconstant> + <comment>Implicit foreign key to civicrm_option_values in the pledge_status option group.</comment> + <add>2.1</add> + </field> + <index> + <name>index_status</name> + <fieldName>status_id</fieldName> + <add>2.1</add> + </index> + <field> + <name>is_test</name> + <uniqueName>pledge_is_test</uniqueName> + <import>true</import> + <title>Test</title> + <type>boolean</type> + <default>0</default> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>campaign_id</name> + <uniqueName>pledge_campaign_id</uniqueName> + <type>int unsigned</type> + <title>Campaign</title> + <import>true</import> + <comment>The campaign for which this pledge has been initiated.</comment> + <pseudoconstant> + <table>civicrm_campaign</table> + <keyColumn>id</keyColumn> + <labelColumn>title</labelColumn> + </pseudoconstant> + <add>3.4</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>campaign_id</name> + <table>civicrm_campaign</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/Pledge/PledgeBlock.xml b/civicrm/xml/schema/Pledge/PledgeBlock.xml new file mode 100644 index 0000000000000000000000000000000000000000..6dd3b8a659ce46e0618e632e1e635909a044dd8a --- /dev/null +++ b/civicrm/xml/schema/Pledge/PledgeBlock.xml @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<table> + <base>CRM/Pledge</base> + <class>PledgeBlock</class> + <name>civicrm_pledge_block</name> + <add>2.1</add> + <log>true</log> + <field> + <name>id</name> + <title>Pledge Block ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Pledge ID</comment> + <add>2.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <comment>physical tablename for entity being joined to pledge, e.g. civicrm_contact</comment> + <add>2.1</add> + </field> + <field> + <name>entity_id</name> + <title>Entity Id</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to entity table specified in entity_table column.</comment> + <add>2.1</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>2.1</add> + </dynamicForeignKey> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>2.1</add> + </index> + <field> + <name>pledge_frequency_unit</name> + <title>Pledge Frequency Unit</title> + <type>varchar</type> + <length>128</length> + <comment>Delimited list of supported frequency units</comment> + <serialize>SEPARATOR_TRIMMED</serialize> + <add>2.1</add> + </field> + <field> + <name>is_pledge_interval</name> + <title>Expose Frequency Interval?</title> + <type>boolean</type> + <default>0</default> + <comment>Is frequency interval exposed on the contribution form.</comment> + <add>2.1</add> + </field> + <field> + <name>max_reminders</name> + <title>Maximum Number of Reminders</title> + <type>int unsigned</type> + <default>1</default> + <comment>The maximum number of payment reminders to send for any given payment.</comment> + <add>2.1</add> + </field> + <field> + <name>initial_reminder_day</name> + <title>Initial Reminder Day</title> + <type>int unsigned</type> + <default>5</default> + <comment>Send initial reminder this many days prior to the payment due date.</comment> + <add>2.1</add> + </field> + <field> + <name>additional_reminder_day</name> + <title>Additional Reminder Days</title> + <type>int unsigned</type> + <default>5</default> + <comment>Send additional reminder this many days after last one sent, up to maximum number of reminders.</comment> + <add>2.1</add> + </field> + <field> + <name>pledge_start_date</name> + <type>varchar</type> + <length>64</length> + <title>Pledge Start Date</title> + <comment>The date the first scheduled pledge occurs.</comment> + <add>4.7</add> + </field> + <field> + <name>is_pledge_start_date_visible</name> + <type>boolean</type> + <title>Show Recurring Donation Start Date?</title> + <default>0</default> + <required>true</required> + <comment>If true - recurring start date is shown.</comment> + <add>4.7</add> + </field> + <field> + <name>is_pledge_start_date_editable</name> + <type>boolean</type> + <title>Allow Edits to Recurring Donation Start Date?</title> + <default>0</default> + <required>true</required> + <comment>If true - recurring start date is editable.</comment> + <add>4.7</add> + </field> +</table> diff --git a/civicrm/xml/schema/Pledge/PledgePayment.xml b/civicrm/xml/schema/Pledge/PledgePayment.xml new file mode 100644 index 0000000000000000000000000000000000000000..a428661d590de191d0de2a8aa731ec3de59b8c58 --- /dev/null +++ b/civicrm/xml/schema/Pledge/PledgePayment.xml @@ -0,0 +1,141 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Pledge</base> + <class>PledgePayment</class> + <name>civicrm_pledge_payment</name> + <comment>Pledge Payment</comment> + <add>2.1</add> + <log>true</log> + <field> + <name>id</name> + <uniqueName>pledge_payment_id</uniqueName> + <title>Payment ID</title> + <type>int unsigned</type> + <required>true</required> + <import>true</import> + <add>2.1</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>pledge_id</name> + <title>Pledge</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Pledge table</comment> + <add>2.1</add> + </field> + <foreignKey> + <name>pledge_id</name> + <table>civicrm_pledge</table> + <key>id</key> + <add>2.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <field> + <name>contribution_id</name> + <title>Contribution</title> + <type>int unsigned</type> + <comment>FK to contribution table.</comment> + <add>2.1</add> + </field> + <foreignKey> + <name>contribution_id</name> + <table>civicrm_contribution</table> + <key>id</key> + <add>2.1</add> + <onDelete>CASCADE</onDelete> + </foreignKey> + <index> + <name>index_contribution_pledge</name> + <fieldName>contribution_id</fieldName> + <fieldName>pledge_id</fieldName> + <add>2.1</add> + </index> + <field> + <name>scheduled_amount</name> + <uniqueName>pledge_payment_scheduled_amount</uniqueName> + <title>Scheduled Amount</title> + <import>true</import> + <type>decimal</type> + <required>true</required> + <comment>Pledged amount for this payment (the actual contribution amount might be different).</comment> + <add>2.1</add> + </field> + <field> + <name>actual_amount</name> + <uniqueName>pledge_payment_actual_amount</uniqueName> + <title>Actual Amount</title> + <import>true</import> + <type>decimal</type> + <comment>Actual amount that is paid as the Pledged installment amount.</comment> + <add>3.2</add> + </field> + <field> + <name>currency</name> + <title>Currency</title> + <type>varchar</type> + <length>3</length> + <default>NULL</default> + <comment>3 character string, value from config setting or input via user.</comment> + <add>3.2</add> + <pseudoconstant> + <table>civicrm_currency</table> + <keyColumn>name</keyColumn> + <labelColumn>full_name</labelColumn> + <nameColumn>name</nameColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>scheduled_date</name> + <uniqueName>pledge_payment_scheduled_date</uniqueName> + <title>Scheduled Date</title> + <import>true</import> + <type>datetime</type> + <required>true</required> + <comment>The date the pledge payment is supposed to happen.</comment> + <add>2.1</add> + </field> + <field> + <name>reminder_date</name> + <uniqueName>pledge_payment_reminder_date</uniqueName> + <title>Last Reminder</title> + <import>true</import> + <type>datetime</type> + <comment>The date that the most recent payment reminder was sent.</comment> + <add>2.1</add> + </field> + <field> + <name>reminder_count</name> + <uniqueName>pledge_payment_reminder_count</uniqueName> + <title>Reminders Sent</title> + <import>true</import> + <type>int unsigned</type> + <default>0</default> + <comment>The number of payment reminders sent.</comment> + <add>2.1</add> + </field> + <field> + <name>status_id</name> + <title>Payment Status</title> + <uniqueName>pledge_payment_status_id</uniqueName> + <import>true</import> + <export>false</export> + <type>int unsigned</type> + <add>2.1</add> + <pseudoconstant> + <optionGroupName>contribution_status</optionGroupName> + </pseudoconstant> + </field> + <index> + <name>index_status</name> + <fieldName>status_id</fieldName> + <add>2.1</add> + </index> +</table> diff --git a/civicrm/xml/schema/Pledge/files.xml b/civicrm/xml/schema/Pledge/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..cbed05c34e6123c15822e911dcfe73f93e0ba188 --- /dev/null +++ b/civicrm/xml/schema/Pledge/files.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="Pledge.xml" parse="xml" /> +<xi:include href="PledgePayment.xml" parse="xml" /> +<xi:include href="PledgeBlock.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Price/LineItem.xml b/civicrm/xml/schema/Price/LineItem.xml new file mode 100644 index 0000000000000000000000000000000000000000..a1f006c9b53520ffa1e9024dab2b95344cdcd61c --- /dev/null +++ b/civicrm/xml/schema/Price/LineItem.xml @@ -0,0 +1,216 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Price</base> + <class>LineItem</class> + <name>civicrm_line_item</name> + <add>1.7</add> + <log>true</log> + <field> + <name>id</name> + <title>Line Item ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Line Item</comment> + <add>1.7</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Line Item Entity Type</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>table which has the transaction</comment> + <add>1.7</add> + </field> + <field> + <name>entity_id</name> + <title>Line Item Entity</title> + <type>int unsigned</type> + <required>true</required> + <comment>entry in table</comment> + <add>1.7</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.7</add> + </dynamicForeignKey> + <field> + <name>contribution_id</name> + <title>Line Item Contribution</title> + <type>int unsigned</type> + <comment>FK to civicrm_contribution</comment> + <add>4.5</add> + </field> + <foreignKey> + <name>contribution_id</name> + <table>civicrm_contribution</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>price_field_id</name> + <title>Line Item Price Field</title> + <type>int unsigned</type> + <comment>FK to civicrm_price_field</comment> + <!-- changed to not required in 4.3 in order to change ON DELETE CASCADE FK constraint to SET NULL --> + <add>1.7</add> + </field> + <foreignKey> + <name>price_field_id</name> + <table>civicrm_price_field</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>option_group_id</name> + <title>Line Item Option Group</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to option group</comment> + <add>1.7</add> + <drop>3.3</drop> + </field> + <field> + <name>label</name> + <title>Line Item Label</title> + <type>varchar</type> + <length>255</length> + <default>NULL</default> + <!-- changed to not required in 4.2.3 --> + <comment>descriptive label for item - from price_field_value.label</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>qty</name> + <title>Line Item Quantity</title> + <type>decimal</type> + <required>true</required> + <comment>How many items ordered</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>unit_price</name> + <type>decimal</type> + <required>true</required> + <comment>price of each item</comment> + <add>1.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>line_total</name> + <title>Line Item Total</title> + <type>decimal</type> + <required>true</required> + <comment>qty * unit_price</comment> + <add>1.7</add> + </field> + <field> + <name>participant_count</name> + <title>Line Item Participant Count</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>Participant count for field</comment> + <html> + <type>Text</type> + </html> + <add>3.2</add> + + </field> + <index> + <name>index_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <add>1.7</add> + </index> + <index> + <name>UI_line_item_value</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <fieldName>contribution_id</fieldName> + <fieldName>price_field_value_id</fieldName> + <fieldName>price_field_id</fieldName> + <unique>true</unique> + <add>3.3</add> + <change>4.5</change> + <!-- Add contribution_id to unique index in 4.5 --> + </index> + <field> + <name>price_field_value_id</name> + <title>Line Item Option</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>FK to civicrm_price_field_value</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>price_field_value_id</name> + <table>civicrm_price_field_value</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <default>NULL</default> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>FK to Financial Type.</comment> + <add>4.3</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.3</add> + </foreignKey> + <field> + <name>non_deductible_amount</name> + <title>Non-deductible Amount</title> + <type>decimal</type> + <default>0.0</default> + <headerPattern>/non?.?deduct/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <required>true</required> + <comment>Portion of total amount which is NOT tax deductible.</comment> + <add>4.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>tax_amount</name> + <title>Tax Amount</title> + <type>decimal</type> + <import>true</import> + <headerPattern>/tax(.?am(ou)?nt)?/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <comment>tax of each item</comment> + <add>4.6</add> + <html> + <type>Text</type> + </html> + </field> +</table> + diff --git a/civicrm/xml/schema/Price/PriceField.xml b/civicrm/xml/schema/Price/PriceField.xml new file mode 100644 index 0000000000000000000000000000000000000000..ea9bd977aae4b14333f8d056d8b166bb83cc11ca --- /dev/null +++ b/civicrm/xml/schema/Price/PriceField.xml @@ -0,0 +1,225 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Price</base> + <class>PriceField</class> + <name>civicrm_price_field</name> + <add>1.8</add> + <log>true</log> + <field> + <name>id</name> + <title>Price Field ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Price Field</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>price_set_id</name> + <title>Price Set</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_price_set</comment> + <add>1.8</add> + </field> + <foreignKey> + <name>price_set_id</name> + <table>civicrm_price_set</table> + <key>id</key> + <add>1.8</add> + </foreignKey> + <field> + <name>name</name> + <type>varchar</type> + <title>Name</title> + <length>255</length> + <required>true</required> + <comment>Variable name/programmatic handle for this field.</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>index_name</name> + <fieldName>name</fieldName> + <add>1.8</add> + </index> + <field> + <name>label</name> + <type>varchar</type> + <title>Label</title> + <length>255</length> + <required>true</required> + <localizable>true</localizable> + <comment>Text for form field label (also friendly name for administering this field).</comment> + <html> + <type>Text</type> + </html> + <add>1.8</add> + </field> + <field> + <name>html_type</name> + <type>varchar</type> + <length>12</length> + <required>true</required> + <pseudoconstant> + <callback>CRM_Price_BAO_PriceField::htmlTypes</callback> + </pseudoconstant> + <add>1.8</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>is_enter_qty</name> + <title>Price Field Quantity Required?</title> + <type>boolean</type> + <default>0</default> + <comment>Enter a quantity for this field?</comment> + <add>1.8</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>help_pre</name> + <title>Price Field Pre Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>Description and/or help text to display before this field.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>1.8</add> + </field> + <field> + <name>help_post</name> + <title>Price Field Post Text</title> + <type>text</type> + <localizable>true</localizable> + <comment>Description and/or help text to display after this field.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>1.8</add> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <default>1</default> + <comment>Order in which the fields should appear</comment> + <add>1.8</add> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>is_display_amounts</name> + <title>Price Field Show Amounts?</title> + <type>boolean</type> + <default>1</default> + <comment>Should the price be displayed next to the label for each option?</comment> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>options_per_line</name> + <title>Price Field Options per Row</title> + <type>int unsigned</type> + <default>1</default> + <comment>number of options per line for checkbox and radio</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_active</name> + <title>Price Field Is Active?</title> + <type>boolean</type> + <comment>Is this price field active</comment> + <default>1</default> + <add>1.8</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_required</name> + <title>Price Field is Required?</title> + <type>boolean</type> + <comment>Is this price field required (value must be > 1)</comment> + <default>1</default> + <add>1.8</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>active_on</name> + <title>Price Field Start Date</title> + <type>datetime</type> + <default>NULL</default> + <comment>If non-zero, do not show this field before the date specified</comment> + <add>1.8</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>expire_on</name> + <title>Price Field End Date</title> + <type>datetime</type> + <default>NULL</default> + <comment>If non-zero, do not show this field after the date specified</comment> + <add>1.8</add> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>javascript</name> + <title>Price Field Javascript</title> + <type>varchar</type> + <length>255</length> + <comment>Optional scripting attributes for field</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>visibility_id</name> + <title>Price Field Visibility</title> + <type>int unsigned</type> + <default>1</default> + <comment>Implicit FK to civicrm_option_group with name = 'visibility'</comment> + <add>3.2</add> + <pseudoconstant> + <optionGroupName>visibility</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <field> + <name>count</name> + <type>int unsigned</type> + <default>NULL</default> + <comment>Number of Participants Per field</comment> + <add>3.2</add> + <drop>3.3</drop> + </field> +</table> + diff --git a/civicrm/xml/schema/Price/PriceFieldValue.xml b/civicrm/xml/schema/Price/PriceFieldValue.xml new file mode 100644 index 0000000000000000000000000000000000000000..03cc83453d5f800ad838d4ad08a0e34ba702257e --- /dev/null +++ b/civicrm/xml/schema/Price/PriceFieldValue.xml @@ -0,0 +1,238 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Price</base> + <class>PriceFieldValue</class> + <name>civicrm_price_field_value</name> + <add>3.3</add> + <field> + <name>id</name> + <title>Price Field Value ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Price Field Value</comment> + <add>3.3</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>price_field_id</name> + <title>Price Field</title> + <type>int unsigned</type> + <required>true</required> + <comment>FK to civicrm_price_field</comment> + <add>3.3</add> + </field> + <foreignKey> + <name>price_field_id</name> + <table>civicrm_price_field</table> + <key>id</key> + <add>3.3</add> + </foreignKey> + <field> + <name>name</name> + <type>varchar</type> + <title>Name</title> + <length>255</length> + <comment>Price field option name</comment> + <html> + <type>Text</type> + </html> + <add>3.3</add> + </field> + <field> + <name>label</name> + <type>varchar</type> + <title>Label</title> + <length>255</length> + <localizable>true</localizable> + <comment>Price field option label</comment> + <html> + <type>Text</type> + </html> + <add>3.3</add> + </field> + <field> + <name>description</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>2</rows> + <cols>60</cols> + </html> + <default>NULL</default> + <localizable>true</localizable> + <comment>>Price field option description.</comment> + <add>3.3</add> + </field> + <field> + <name>help_pre</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>2</rows> + <cols>60</cols> + </html> + <default>NULL</default> + <localizable>true</localizable> + <comment>Price field option pre help text.</comment> + <add>4.7</add> + </field> + <field> + <name>help_post</name> + <type>text</type> + <html> + <type>TextArea</type> + <rows>2</rows> + <cols>60</cols> + </html> + <default>NULL</default> + <localizable>true</localizable> + <comment>Price field option post field help.</comment> + <add>4.7</add> + </field> + <field> + <name>amount</name> + <type>decimal</type> + <title>Amount</title> + <length>18,9</length> + <html> + <type>Text</type> + <size>8</size> + </html> + <required>true</required> + <comment>Price field option amount</comment> + <add>3.3</add> + </field> + <field> + <name>count</name> + <type>int unsigned</type> + <default>NULL</default> + <comment>Number of participants per field option</comment> + <add>3.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>max_value</name> + <type>int unsigned</type> + <default>NULL</default> + <comment>Max number of participants per field options</comment> + <add>3.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <default>1</default> + <comment>Order in which the field options should appear</comment> + <add>3.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>membership_type_id</name> + <title>Membership Type</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>FK to Membership Type</comment> + <html> + <type>Select</type> + </html> + <add>3.4</add> + </field> + <foreignKey> + <name>membership_type_id</name> + <table>civicrm_membership_type</table> + <key>id</key> + <add>3.4</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>membership_num_terms</name> + <type>int unsigned</type> + <default>NULL</default> + <comment>Number of terms for this membership</comment> + <add>4.3</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_default</name> + <title>Is Default Price Field Option?</title> + <type>boolean</type> + <comment>Is this default price field option</comment> + <default>0</default> + <add>3.3</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_active</name> + <title>Price Field Value is Active</title> + <type>boolean</type> + <comment>Is this price field value active</comment> + <default>1</default> + <add>3.3</add> + </field> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <default>NULL</default> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>FK to Financial Type.</comment> + <add>4.3</add> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <onDelete>SET NULL</onDelete> + <add>4.3</add> + </foreignKey> + <field> + <name>non_deductible_amount</name> + <title>Non-deductible Amount</title> + <type>decimal</type> + <default>0.0</default> + <headerPattern>/non?.?deduct/i</headerPattern> + <dataPattern>/^\d+(\.\d{2})?$/</dataPattern> + <required>true</required> + <comment>Portion of total amount which is NOT tax deductible.</comment> + <add>4.7</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>visibility_id</name> + <title>Price Field Option Visibility</title> + <type>int unsigned</type> + <default>1</default> + <comment>Implicit FK to civicrm_option_group with name = 'visibility'</comment> + <add>4.7</add> + <pseudoconstant> + <optionGroupName>visibility</optionGroupName> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Price/PriceSet.xml b/civicrm/xml/schema/Price/PriceSet.xml new file mode 100644 index 0000000000000000000000000000000000000000..27b8852eb932c22a5a9bf78670a525808a335f3d --- /dev/null +++ b/civicrm/xml/schema/Price/PriceSet.xml @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Price</base> + <class>PriceSet</class> + <name>civicrm_price_set</name> + <add>1.8</add> + <log>true</log> + <field> + <name>id</name> + <title>Price Set ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Price Set</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Price Set Domain</title> + <type>int unsigned</type> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this price-set for</comment> + <add>3.1</add> + <html> + <type>Text</type> + </html> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.1</add> + </foreignKey> + <field> + <name>name</name> + <type>varchar</type> + <length>255</length> + <required>true</required> + <comment>Variable name/programmatic handle for this set of price fields.</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <index> + <name>UI_name</name> + <fieldName>name</fieldName> + <unique>true</unique> + <add>1.8</add> + </index> + <field> + <name>title</name> + <title>Price Set Title</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <localizable>true</localizable> + <comment>Displayed title for the Price Set.</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>is_active</name> + <title>Price Set Is Active?</title> + <type>boolean</type> + <default>1</default> + <comment>Is this price set active</comment> + <add>1.8</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>help_pre</name> + <title>Price Set Pre Help</title> + <type>text</type> + <localizable>true</localizable> + <comment>Description and/or help text to display before fields in form.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>1.8</add> + </field> + <field> + <name>help_post</name> + <title>Price Set Post Help</title> + <type>text</type> + <localizable>true</localizable> + <comment>Description and/or help text to display after fields in form.</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>80</cols> + </html> + <add>1.8</add> + </field> + <field> + <name>javascript</name> + <title>Price Set Javascript</title> + <type>varchar</type> + <length>64</length> + <comment>Optional Javascript script function(s) included on the form with this price_set. Can be used for conditional</comment> + <add>1.8</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>extends</name> + <title>Price Set Extends</title> + <type>varchar</type> + <length>255</length> + <required>true</required> + <comment>What components are using this price set?</comment> + <pseudoconstant> + <table>civicrm_component</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <add>3.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>contribution_type_id</name> + <title>Price Set Contribution Type</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>FK to Contribution Type(for membership price sets only).</comment> + <add>3.4</add> + <drop>4.3</drop> + </field> + <foreignKey> + <name>contribution_type_id</name> + <table>civicrm_contribution_type</table> + <key>id</key> + <add>3.4</add> + <drop>4.3</drop> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>financial_type_id</name> + <title>Financial Type</title> + <type>int unsigned</type> + <default>NULL</default> + <comment>FK to Financial Type(for membership price sets only).</comment> + <add>4.3</add> + <pseudoconstant> + <table>civicrm_financial_type</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <html> + <type>Select</type> + </html> + </field> + <foreignKey> + <name>financial_type_id</name> + <table>civicrm_financial_type</table> + <key>id</key> + <add>4.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_quick_config</name> + <title>Is Price Set Quick Config?</title> + <type>boolean</type> + <default>0</default> + <comment>Is set if edited on Contribution or Event Page rather than through Manage Price Sets</comment> + <html> + <type>CheckBox</type> + </html> + <add>4.1</add> + </field> + <field> + <name>is_reserved</name> + <title>Price Set Is Reserved</title> + <type>boolean</type> + <default>0</default> + <comment>Is this a predefined system price set (i.e. it can not be deleted, edited)?</comment> + <add>4.2</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>min_amount</name> + <title>Minimum Amount</title> + <type>int unsigned</type> + <default>0</default> + <comment>Minimum Amount required for this set.</comment> + <add>4.7</add> + <html> + <type>Text</type> + </html> + </field> +</table> diff --git a/civicrm/xml/schema/Price/PriceSetEntity.xml b/civicrm/xml/schema/Price/PriceSetEntity.xml new file mode 100644 index 0000000000000000000000000000000000000000..3ec1dbd0580d811c23bd68fea91757aa9f0717b1 --- /dev/null +++ b/civicrm/xml/schema/Price/PriceSetEntity.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Price</base> + <class>PriceSetEntity</class> + <name>civicrm_price_set_entity</name> + <add>1.8</add> + <log>true</log> + <field> + <name>id</name> + <title>Price Set Entity ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Price Set Entity</comment> + <add>1.8</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>entity_table</name> + <title>Entity Table</title> + <type>varchar</type> + <length>64</length> + <required>true</required> + <comment>Table which uses this price set</comment> + <add>1.8</add> + </field> + <field> + <name>entity_id</name> + <title>Entity IF</title> + <type>int unsigned</type> + <required>true</required> + <comment>Item in table</comment> + <add>1.8</add> + </field> + <dynamicForeignKey> + <idColumn>entity_id</idColumn> + <typeColumn>entity_table</typeColumn> + <add>1.8</add> + </dynamicForeignKey> + <field> + <name>price_set_id</name> + <title>Price Set</title> + <type>int unsigned</type> + <required>true</required> + <comment>price set being used</comment> + <add>1.8</add> + </field> + <foreignKey> + <name>price_set_id</name> + <table>civicrm_price_set</table> + <key>id</key> + </foreignKey> + <index> + <name>UI_entity</name> + <fieldName>entity_table</fieldName> + <fieldName>entity_id</fieldName> + <unique>true</unique> + <add>1.8</add> + </index> +</table> + diff --git a/civicrm/xml/schema/Price/files.xml b/civicrm/xml/schema/Price/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..450952f69d0279fbfd7f0342a99521810c2fd71b --- /dev/null +++ b/civicrm/xml/schema/Price/files.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="PriceField.xml" parse="xml" /> +<xi:include href="PriceFieldValue.xml" parse="xml" /> +<xi:include href="LineItem.xml" parse="xml" /> +<xi:include href="PriceSet.xml" parse="xml" /> +<xi:include href="PriceSetEntity.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Queue/QueueItem.xml b/civicrm/xml/schema/Queue/QueueItem.xml new file mode 100644 index 0000000000000000000000000000000000000000..e67bca990a07ec5b4b59cee1f94f5f83a09eb685 --- /dev/null +++ b/civicrm/xml/schema/Queue/QueueItem.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <!-- + NOTE: To facilitate upgrades, manually copy the CREATE TABLE statement + from sql/civicrm.mysql to sql/civicrm_queue_item.mysql + --> + <base>CRM/Queue</base> + <class>QueueItem</class> + <name>civicrm_queue_item</name> + <comment>Stores a list of queue items</comment> + <add>4.2</add> + <field> + <name>id</name> + <title>Queue ID</title> + <type>int unsigned</type> + <required>true</required> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>queue_name</name> + <title>Queue Name</title> + <type>varchar</type> + <length>64</length> + <comment>Name of the queue which includes this item</comment> + <required>true</required> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>weight</name> + <title>Order</title> + <type>int</type> + <required>true</required> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>submit_time</name> + <title>Submit Time</title> + <type>datetime</type> + <comment>date on which this item was submitted to the queue</comment> + <required>true</required> + <html> + <type>Select Date</type> + </html> + </field> + <field> + <name>release_time</name> + <title>Release Time</title> + <type>datetime</type> + <comment>date on which this job becomes available; null if ASAP</comment> + <html> + <type>Select Date</type> + </html> + </field> + + <field> + <name>data</name> + <title>Queue item data</title> + <type>text</type> + <comment>Serialized queue data</comment> + <serialize>PHP</serialize> + </field> + <index> + <name>index_queueids</name> + <fieldName>queue_name</fieldName> + <fieldName>weight</fieldName> + <fieldName>id</fieldName> + </index> +</table> diff --git a/civicrm/xml/schema/Queue/files.xml b/civicrm/xml/schema/Queue/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..50b023f899aff268aebf97a85f3e9c5c971ccbdd --- /dev/null +++ b/civicrm/xml/schema/Queue/files.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> +<xi:include href="QueueItem.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/Report/ReportInstance.xml b/civicrm/xml/schema/Report/ReportInstance.xml new file mode 100644 index 0000000000000000000000000000000000000000..9961b9028ef46fa56cf9ad7d97b55abef68ca5f5 --- /dev/null +++ b/civicrm/xml/schema/Report/ReportInstance.xml @@ -0,0 +1,259 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Report</base> + <class>ReportInstance</class> + <name>civicrm_report_instance</name> + <comment>Users can save their report instance and put in a cron tab etc.</comment> + <add>2.2</add> + <field> + <name>id</name> + <title>Report Instance ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>Report Instance ID</comment> + <add>2.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>false</autoincrement> + </primaryKey> + <field> + <name>domain_id</name> + <title>Report Instance Domain ID</title> + <type>int unsigned</type> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <required>true</required> + <comment>Which Domain is this instance for</comment> + <add>3.1</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>3.1</add> + </foreignKey> + <field> + <name>title</name> + <title>Report Instance Title</title> + <type>varchar</type> + <length>255</length> + <comment>Report Instance Title.</comment> + <html> + <type>Text</type> + </html> + <add>2.2</add> + </field> + <field> + <name>report_id</name> + <title>Report template ID</title> + <type>varchar</type> + <length>512</length> + <required>true</required> + <comment>FK to civicrm_option_value for the report template</comment> + <html> + <type>Select</type> + </html> + <add>2.2</add> + </field> + <field> + <name>name</name> + <title>Report instance Name</title> + <type>varchar</type> + <length>255</length> + <comment>when combined with report_id/template uniquely identifies the instance</comment> + <html> + <type>Text</type> + </html> + <add>3.2</add> + </field> + <field> + <name>args</name> + <title>Report Instance Arguments</title> + <type>varchar</type> + <length>255</length> + <comment>arguments that are passed in the url when invoking the instance</comment> + <add>3.2</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>description</name> + <title>Report Instance description</title> + <type>varchar</type> + <length>255</length> + <comment>Report Instance description.</comment> + <html> + <type>Text</type> + </html> + <add>2.2</add> + </field> + <field> + <name>permission</name> + <title>Report Instance Permissions</title> + <type>varchar</type> + <length>255</length> + <comment>permission required to be able to run this instance</comment> + <html> + <type>Text</type> + </html> + <add>2.2</add> + </field> + <field> + <name>grouprole</name> + <title>Report Instance Assigned to Roles</title> + <type>varchar</type> + <length>1024</length> + <comment>role required to be able to run this instance</comment> + <add>4.1</add> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>form_values</name> + <title>Submitted Form Values</title> + <type>text</type> + <import>true</import> + <comment>Submitted form values for this report</comment> + <serialize>PHP</serialize> + <add>2.2</add> + </field> + <field> + <name>is_active</name> + <title>Report Instance is Active</title> + <type>boolean</type> + <comment>Is this entry active?</comment> + <html> + <type>CheckBox</type> + </html> + <add>2.2</add> + </field> + <field> + <name>created_id</name> + <type>int unsigned</type> + <title>Report Instance Created By</title> + <comment>FK to contact table.</comment> + <add>4.6</add> + </field> + <foreignKey> + <name>created_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.6</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>owner_id</name> + <type>int unsigned</type> + <title>Report Instance Owned By</title> + <comment>FK to contact table.</comment> + <add>4.6</add> + </field> + <foreignKey> + <name>owner_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>4.6</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>email_subject</name> + <title>Report Instance email Subject</title> + <type>varchar</type> + <length>255</length> + <comment>Subject of email</comment> + <html> + <type>Text</type> + </html> + </field> + <field> + <name>email_to</name> + <title>Email Report Instance To</title> + <type>text</type> + <comment>comma-separated list of email addresses to send the report to</comment> + <html> + <type>Text</type> + </html> + <add>2.2</add> + </field> + <field> + <name>email_cc</name> + <title>cc Email Report Instance To</title> + <type>text</type> + <comment>comma-separated list of email addresses to send the report to</comment> + <html> + <type>Text</type> + </html> + <add>2.2</add> + </field> + <field> + <name>header</name> + <title>Report Instance Header</title> + <type>text</type> + <comment>comma-separated list of email addresses to send the report to</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <add>2.2</add> + </field> + <field> + <name>footer</name> + <title>Report Instance Footer</title> + <type>text</type> + <comment>comma-separated list of email addresses to send the report to</comment> + <html> + <type>TextArea</type> + <rows>4</rows> + <cols>60</cols> + </html> + <add>2.2</add> + </field> + <field> + <name>navigation_id</name> + <title>Navigation ID</title> + <type>int unsigned</type> + <import>true</import> + <comment>FK to navigation ID</comment> + <add>3.0</add> + </field> + <foreignKey> + <name>navigation_id</name> + <table>civicrm_navigation</table> + <key>id</key> + <add>3.0</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>drilldown_id</name> + <title>Drilldown Report ID</title> + <type>int unsigned</type> + <import>true</import> + <comment>FK to instance ID drilldown to</comment> + <add>4.3</add> + </field> + <foreignKey> + <name>drilldown_id</name> + <table>civicrm_report_instance</table> + <key>id</key> + <add>4.3</add> + <onDelete>SET NULL</onDelete> + </foreignKey> + <field> + <name>is_reserved</name> + <title>Instance is Reserved</title> + <type>boolean</type> + <default>0</default> + <html> + <type>CheckBox</type> + </html> + <add>4.2</add> + </field> +</table> diff --git a/civicrm/xml/schema/Report/files.xml b/civicrm/xml/schema/Report/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..a52670f4013e95ff8836cd57dc8cabc955fa6ffa --- /dev/null +++ b/civicrm/xml/schema/Report/files.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="ReportInstance.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/schema/SMS/History.xml b/civicrm/xml/schema/SMS/History.xml new file mode 100644 index 0000000000000000000000000000000000000000..0cd60b2ae43593549f5761b2adaa0142a5734e24 --- /dev/null +++ b/civicrm/xml/schema/SMS/History.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/SMS</base> + <class>History</class> + <name>civicrm_sms_history</name> + <comment>SMS History can be linked to any object in the application.</comment> + <add>1.4</add> + <drop>2.0</drop> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <comment>SMS History ID</comment> + <add>1.4</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>message</name> + <type>text</type> + <comment>Contents of the SMS.</comment> + <html> + <type>TextArea</type> + <rows>5</rows> + <cols>80</cols> + </html> + <add>1.4</add> + </field> + <field> + <name>contact_id</name> + <type>int unsigned</type> + <required>true</required> + <comment>FK to Contact who is sending this SMS</comment> + <add>1.4</add> + <html> + <type>EntityRef</type> + </html> + </field> + <foreignKey> + <name>contact_id</name> + <table>civicrm_contact</table> + <key>id</key> + <add>1.4</add> + </foreignKey> + <field> + <name>sent_date</name> + <type>date</type> + <comment>When was this SMS sent</comment> + <add>1.4</add> + </field> +</table> diff --git a/civicrm/xml/schema/SMS/Provider.xml b/civicrm/xml/schema/SMS/Provider.xml new file mode 100644 index 0000000000000000000000000000000000000000..354c14cf17b15a51bfa823ef03ac918af968c7f7 --- /dev/null +++ b/civicrm/xml/schema/SMS/Provider.xml @@ -0,0 +1,130 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/SMS</base> + <class>Provider</class> + <name>civicrm_sms_provider</name> + <comment>Table to add different sms providers </comment> + <add>4.2</add> + <field> + <name>id</name> + <title>SMS Provider ID</title> + <type>int unsigned</type> + <required>true</required> + <comment>SMS Provider ID</comment> + <add>4.2</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>name</name> + <title>SMS Provider Name</title> + <type>varchar</type> + <length>64</length> + <comment>Provider internal name points to option_value of option_group sms_provider_name</comment> + <add>4.2</add> + </field> + <field> + <name>title</name> + <title>SMS Provider Title</title> + <type>varchar</type> + <length>64</length> + <comment>Provider name visible to user</comment> + <html> + <type>Text</type> + </html> + <add>4.2</add> + </field> + <field> + <name>username</name> + <title>SMS Provider Username</title> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + </html> + <add>4.2</add> + </field> + <field> + <name>password</name> + <title>SMS Provider Password</title> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + </html> + <add>4.2</add> + </field> + <field> + <name>api_type</name> + <title>SMS Provider API</title> + <type>int unsigned</type> + <required>true</required> + <comment>points to value in civicrm_option_value for group sms_api_type</comment> + <html> + <type>Select</type> + </html> + <add>4.2</add> + </field> + <field> + <name>api_url</name> + <title>SMS Provider API URL</title> + <type>varchar</type> + <length>128</length> + <html> + <type>Text</type> + </html> + <add>4.2</add> + </field> + <field> + <name>api_params</name> + <title>SMS Provider API Params</title> + <type>text</type> + <comment>the api params in xml, http or smtp format</comment> + <html> + <type>Text</type> + </html> + <add>4.2</add> + </field> + <field> + <name>is_default</name> + <title>SMS Provider is Default?</title> + <type>boolean</type> + <default>0</default> + <add>4.2</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>is_active</name> + <title>SMS Provider is Active?</title> + <type>boolean</type> + <default>0</default> + <add>4.2</add> + <html> + <type>CheckBox</type> + </html> + </field> + <field> + <name>domain_id</name> + <title>SMS Domain</title> + <type>int unsigned</type> + <pseudoconstant> + <table>civicrm_domain</table> + <keyColumn>id</keyColumn> + <labelColumn>name</labelColumn> + </pseudoconstant> + <comment>Which Domain is this sms provider for</comment> + <add>4.7</add> + </field> + <foreignKey> + <name>domain_id</name> + <table>civicrm_domain</table> + <key>id</key> + <add>4.7</add> + <onDelete>SET NULL</onDelete> + </foreignKey> +</table> diff --git a/civicrm/xml/schema/SMS/files.xml b/civicrm/xml/schema/SMS/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..3cb65b07bf54cde5d899095fad812985b4c5a011 --- /dev/null +++ b/civicrm/xml/schema/SMS/files.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="History.xml" parse="xml" /> +<xi:include href="Provider.xml" parse="xml" /> + +</tables> diff --git a/civicrm/xml/schema/Schema.xml b/civicrm/xml/schema/Schema.xml new file mode 100644 index 0000000000000000000000000000000000000000..19def883b4fd321349e46dc50aa499a7e895dd83 --- /dev/null +++ b/civicrm/xml/schema/Schema.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<database xmlns:xi="http://www.w3.org/2001/XInclude"> +<name>civicrm</name> +<character_set>utf8</character_set> +<collate>utf8_unicode_ci</collate> +<table_type>InnoDB</table_type> +<comment>Schema for CiviCRM</comment> + +<xi:include href="Core/files.xml" parse="xml" /> +<xi:include href="ACL/files.xml" parse="xml" /> +<xi:include href="Contact/files.xml" parse="xml" /> +<xi:include href="Batch/files.xml" parse="xml" /> +<xi:include href="Mailing/files.xml" parse="xml" /> +<xi:include href="Mailing/Event/files.xml" parse="xml" /> +<xi:include href="Contribute/files.xml" parse="xml" /> +<xi:include href="Financial/files.xml" parse="xml" /> +<xi:include href="SMS/files.xml" parse="xml" /> +<xi:include href="Member/files.xml" parse="xml" /> +<xi:include href="Campaign/files.xml" parse="xml" /> +<xi:include href="Activity/files.xml" parse="xml" /> +<xi:include href="Event/files.xml" parse="xml" /> +<xi:include href="Event/Cart/files.xml" parse="xml" /> +<xi:include href="Dedupe/files.xml" parse="xml" /> +<xi:include href="Case/files.xml" parse="xml" /> +<xi:include href="Grant/files.xml" parse="xml" /> +<xi:include href="Friend/files.xml" parse="xml" /> +<xi:include href="Pledge/files.xml" parse="xml" /> +<xi:include href="Queue/files.xml" parse="xml" /> +<xi:include href="Report/files.xml" parse="xml" /> +<xi:include href="Price/files.xml" parse="xml" /> +<xi:include href="PCP/files.xml" parse="xml" /> +<xi:include href="Cxn/files.xml" parse="xml" /> +</database> diff --git a/civicrm/xml/schema/Standalone/OpenID/Associations.xml b/civicrm/xml/schema/Standalone/OpenID/Associations.xml new file mode 100644 index 0000000000000000000000000000000000000000..b4f693fbe9c93c216f4acf5af0306b353781d015 --- /dev/null +++ b/civicrm/xml/schema/Standalone/OpenID/Associations.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Standalone/OpenID</base> + <class>Associations</class> + <name>civicrm_openid_associations</name> + <comment>The OpenID associations store for standalone login.</comment> + <add>2.0</add> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>server_url</name> + <type>blob</type> + <add>2.0</add> + </field> + <field> + <name>handle</name> + <type>varchar</type> + <length>255</length> + <html> + <type>Text</type> + </html> + <add>2.0</add> + </field> + <field> + <name>secret</name> + <type>blob</type> + <add>2.0</add> + </field> + <field> + <name>issued</name> + <type>int</type> + <add>2.0</add> + </field> + <field> + <name>lifetime</name> + <type>int</type> + <add>2.0</add> + </field> + <field> + <name>assoc_type</name> + <type>varchar</type> + <length>64</length> + <html> + <type>Text</type> + </html> + <add>2.0</add> + </field> + <index> + <name>server_url_handle_index</name> + <fieldName length="166">server_url</fieldName> + <fieldName length="166">handle</fieldName> + <unique>true</unique> + <add>2.0</add> + </index> +</table> diff --git a/civicrm/xml/schema/Standalone/OpenID/Nonce.xml b/civicrm/xml/schema/Standalone/OpenID/Nonce.xml new file mode 100644 index 0000000000000000000000000000000000000000..60b502a1e29d3eddb0206e3d471c20d61e7245e4 --- /dev/null +++ b/civicrm/xml/schema/Standalone/OpenID/Nonce.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<table> + <base>CRM/Standalone/OpenID</base> + <class>Nonce</class> + <name>civicrm_openid_nonces</name> + <comment>The OpenID nonce store for standalone login.</comment> + <add>2.0</add> + <field> + <name>id</name> + <type>int unsigned</type> + <required>true</required> + <add>2.0</add> + </field> + <primaryKey> + <name>id</name> + <autoincrement>true</autoincrement> + </primaryKey> + <field> + <name>server_url</name> + <type>blob</type> + <add>2.0</add> + </field> + <field> + <name>timestamp</name> + <type>int</type> + <add>2.0</add> + </field> + <field> + <name>salt</name> + <type>char</type> + <length>40</length> + <add>2.0</add> + </field> + <index> + <name>nonce_index</name> + <fieldName length="255">server_url</fieldName> + <fieldName>timestamp</fieldName> + <fieldName>salt</fieldName> + <unique>true</unique> + <add>2.0</add> + </index> +</table> diff --git a/civicrm/xml/schema/Standalone/OpenID/files.xml b/civicrm/xml/schema/Standalone/OpenID/files.xml new file mode 100644 index 0000000000000000000000000000000000000000..a1ae573cdf1c8398c3f4383c1cb7112e0e2b13c0 --- /dev/null +++ b/civicrm/xml/schema/Standalone/OpenID/files.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> + +<tables xmlns:xi="http://www.w3.org/2001/XInclude"> + +<xi:include href="Nonce.xml" parse="xml" /> +<xi:include href="Associations.xml" parse="xml" /> +</tables> diff --git a/civicrm/xml/templates/access.tpl b/civicrm/xml/templates/access.tpl new file mode 100644 index 0000000000000000000000000000000000000000..13a9593f17e4d87719eb12eb8e6a272ca211ca1c --- /dev/null +++ b/civicrm/xml/templates/access.tpl @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<access component="com_civicrm"> + <section name="component"> + <action name="core.admin" title="Configure Joomla! ACL" description="Manage CiviCRM Joomla! ACL." /> + <action name="core.manage" title="See CiviCRM is installed" description="CiviCRM will be shown in list of installed components." /> +{foreach from=$permissions item=perm key=name} + <action name="civicrm.{$name}" title="{$perm.title}" description="{$perm.description}" /> +{/foreach} + </section> +</access> diff --git a/civicrm/xml/templates/case_sample.tpl b/civicrm/xml/templates/case_sample.tpl new file mode 100644 index 0000000000000000000000000000000000000000..cdcb7e3f61f63775334dea9c8edbbcbfb9095775 --- /dev/null +++ b/civicrm/xml/templates/case_sample.tpl @@ -0,0 +1,87 @@ +-- /********************************************************************** +-- * +-- * Configuration Data for CiviCase Component +-- * For: Sample Case Types - Housing Support and Adult Day Care Referral +-- * +-- **********************************************************************/ + +SELECT @caseCompId := id FROM `civicrm_component` where `name` like 'CiviCase'; + +-- /******************************************************* +-- * +-- * Case Types +-- * +-- *******************************************************/ +SELECT @max_wt := COALESCE( max(weight), 0 ) from civicrm_case_type; + +INSERT IGNORE INTO `civicrm_case_type` ( `title`, `name`, `description`, `weight`, `is_reserved`, `is_active`) VALUES + ('{ts}Housing Support{/ts}', 'housing_support', '{ts}Help homeless individuals obtain temporary and long-term housing{/ts}', @max_wt + 1, 0, 1), + ('{ts}Adult Day Care Referral{/ts}', 'adult_day_care_referral', '{ts}Arranging adult day care for senior individuals{/ts}', @max_wt + 2, 0, 1); + +-- /******************************************************* +-- * +-- * Case Status - Set names for Open and Closed +-- * +-- *******************************************************/ +SELECT @csgId := max(id) from civicrm_option_group where name = 'case_status'; +UPDATE civicrm_option_value SET name = 'Open' where option_group_id = @csgId AND label = 'Ongoing'; +UPDATE civicrm_option_value SET name = 'Closed' where option_group_id = @csgId AND label = 'Resolved'; + +-- /******************************************************* +-- * +-- * Activity Types +-- * +-- *******************************************************/ +SELECT @option_group_id_activity_type := max(id) from civicrm_option_group where name = 'activity_type'; + +SELECT @max_val := MAX(ROUND(op.value)) FROM civicrm_option_value op WHERE op.option_group_id = @option_group_id_activity_type; + +INSERT INTO `civicrm_option_value` ( `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id` ) +(SELECT @option_group_id_activity_type, 'Medical evaluation', (SELECT @max_val := @max_val+1), 'Medical evaluation', NULL, 0, 0, (SELECT @max_val := @max_val+1), '', 0, 0, 1, @caseCompId + FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_option_value` WHERE `name` = 'Medical evaluation')); + +INSERT INTO `civicrm_option_value` ( `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id` ) +(SELECT @option_group_id_activity_type, 'Mental health evaluation', (SELECT @max_val := @max_val+1), 'Mental health evaluation', NULL, 0, 0, (SELECT @max_val := @max_val+1), '', 0, 0, 1, @caseCompId + FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_option_value` WHERE `name` = 'Mental health evaluation')); + +INSERT INTO `civicrm_option_value` ( `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id` ) +(SELECT @option_group_id_activity_type, 'Secure temporary housing', (SELECT @max_val := @max_val+1), 'Secure temporary housing', NULL, 0, 0, (SELECT @max_val := @max_val+1), '', 0, 0, 1, @caseCompId + FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_option_value` WHERE `name` = 'Secure temporary housing')); + +INSERT INTO `civicrm_option_value` ( `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id` ) +(SELECT @option_group_id_activity_type, 'Income and benefits stabilization', (SELECT @max_val := @max_val+1), 'Income and benefits stabilization', NULL, 0, 0, (SELECT @max_val := @max_val+1), '', 0, 0, 1, @caseCompId + FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_option_value` WHERE `name` = 'Income and benefits stabilization')); + +INSERT INTO `civicrm_option_value` ( `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id` ) +(SELECT @option_group_id_activity_type, 'Long-term housing plan', (SELECT @max_val := @max_val+1), 'Long-term housing plan', NULL, 0, 0, (SELECT @max_val := @max_val+1), '', 0, 0, 1, @caseCompId + FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_option_value` WHERE `name` = 'Long-term housing plan')); + +INSERT INTO `civicrm_option_value` ( `option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id` ) +(SELECT @option_group_id_activity_type, 'ADC referral', (SELECT @max_val := @max_val+1), 'ADC referral', NULL, 0, 0, (SELECT @max_val := @max_val+1), '', 0, 0, 1, @caseCompId + FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_option_value` WHERE `name` = 'ADC referral')); + +-- /******************************************************* +-- * +-- * Relationship Types +-- * +-- *******************************************************/ +INSERT INTO `civicrm_relationship_type` ( `name_a_b`, `label_a_b`, `name_b_a`, `label_b_a`, `description`, `contact_type_a`, `contact_type_b`, `is_reserved`, `is_active` ) (SELECT 'Homeless Services Coordinator is', 'Homeless Services Coordinator is', 'Homeless Services Coordinator', 'Homeless Services Coordinator', 'Homeless Services Coordinator', 'Individual', 'Individual', 0, 1 FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_relationship_type` WHERE `name_a_b` = 'Homeless Services Coordinator is')); + + +INSERT INTO `civicrm_relationship_type` ( `name_a_b`, `label_a_b`, `name_b_a`, `label_b_a`, `description`, `contact_type_a`, `contact_type_b`, `is_reserved`, `is_active` ) ( +SELECT 'Health Services Coordinator is', 'Health Services Coordinator is', 'Health Services Coordinator', 'Health Services Coordinator', 'Health Services Coordinator', 'Individual', 'Individual', 0, 1 FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_relationship_type` WHERE `name_a_b` = 'Health Services Coordinator is')); + + +INSERT INTO `civicrm_relationship_type` ( `name_a_b`, `label_a_b`, `name_b_a`, `label_b_a`, `description`, `contact_type_a`, `contact_type_b`, `is_reserved`, `is_active` ) ( +SELECT 'Senior Services Coordinator is', 'Senior Services Coordinator is', 'Senior Services Coordinator', 'Senior Services Coordinator', 'Senior Services Coordinator', 'Individual', 'Individual', 0, 1 FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_relationship_type` WHERE `name_a_b` = 'Senior Services Coordinator is')); + +INSERT INTO `civicrm_relationship_type` ( `name_a_b`, `label_a_b`, `name_b_a`, `label_b_a`, `description`, `contact_type_a`, `contact_type_b`, `is_reserved`, `is_active` ) ( +SELECT 'Benefits Specialist is', 'Benefits Specialist is', 'Benefits Specialist', 'Benefits Specialist', 'Benefits Specialist', 'Individual', 'Individual', 0, 1 FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_relationship_type` WHERE `name_a_b` = 'Benefits Specialist is')); + +-- /******************************************************* +-- * +-- * Case Resources Group +-- * +-- *******************************************************/ + +INSERT INTO `civicrm_group` ( `name`, `title`, `description`, `source`, `saved_search_id`, `is_active`, `visibility`, `where_clause`, `select_tables`, `where_tables`, `group_type`, `cache_date`, `parents`, `children`, `is_hidden` ) (SELECT 'Case_Resources', 'Case Resources', 'Contacts in this group are listed with their phone number and email when viewing case. You also can send copies of case activities to these contacts.', NULL, NULL, 1, 'User and User Admin Only', ' ( `civicrm_group_contact-5`.group_id IN ( 5 ) AND `civicrm_group_contact-5`.status IN ("Added") ) ', 'a:10:{ldelim}s:15:"civicrm_contact";i:1;s:15:"civicrm_address";i:1;s:22:"civicrm_state_province";i:1;s:15:"civicrm_country";i:1;s:13:"civicrm_email";i:1;s:13:"civicrm_phone";i:1;s:10:"civicrm_im";i:1;s:19:"civicrm_worldregion";i:1;s:25:"`civicrm_group_contact-5`";s:114:" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5` ON contact_a.id = `civicrm_group_contact-5`.contact_id ";s:6:"gender";i:1;{rdelim}', 'a:2:{ldelim}s:15:"civicrm_contact";i:1;s:25:"`civicrm_group_contact-5`";s:114:" LEFT JOIN civicrm_group_contact `civicrm_group_contact-5` ON contact_a.id = `civicrm_group_contact-5`.contact_id ";{rdelim}', '2', NULL, NULL, NULL, 0 FROM dual WHERE NOT EXISTS (SELECT * FROM `civicrm_group` WHERE `name` = 'Case_Resources')); diff --git a/civicrm/xml/templates/civicrm_acl.tpl b/civicrm/xml/templates/civicrm_acl.tpl new file mode 100644 index 0000000000000000000000000000000000000000..9ee1d39568d346c573accc94d30f2215378eefdc --- /dev/null +++ b/civicrm/xml/templates/civicrm_acl.tpl @@ -0,0 +1,106 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +-- sample acl entries + +-- Create ACL to edit and view contacts in all groups +INSERT INTO civicrm_acl (name, deny, entity_table, entity_id, operation, object_table, object_id, acl_table, acl_id, is_active) +VALUES +('Edit All Contacts', 0, 'civicrm_acl_role', 1, 'Edit', 'civicrm_saved_search', 0, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 0, 'All', 'access CiviMail subscribe/unsubscribe pages', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 0, 'All', 'access all custom data', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 0, 'All', 'make online contributions', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 0, 'All', 'make online pledges', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 0, 'All', 'profile listings and forms', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 0, 'All', 'view event info', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 0, 'All', 'register for events', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviCRM', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviContribute', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviEvent', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviMail', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviMail subscribe/unsubscribe pages', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviMember', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviPledge', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'administer CiviCase', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access my cases and activities', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access all cases and activities', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'delete in CiviCase', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviGrant', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access Contact Dashboard', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'administer Multiple Organizations', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'delete activities', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'delete in CiviContribute', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'delete in CiviMail', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'delete in CiviPledge', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'delete contacts', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'delete in CiviEvent', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'delete in CiviMember', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'translate CiviCRM', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'edit grants', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access all custom data', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access uploaded files', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'add contacts', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'administer CiviCRM', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'edit all contacts', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'edit contributions', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'edit event participants', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'edit groups', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'edit memberships', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'edit pledges', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access CiviReport', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'access Report Criteria', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'administer Reports', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'import contacts', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'make online contributions', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'make online pledges', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'profile listings and forms', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'profile create', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'profile edit', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'profile listings', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'profile view', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'register for events', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'view all activities', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'view all contacts', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'view event info', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'view event participants', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 1, 'All', 'edit all events', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 2, 'All', 'access CiviMail subscribe/unsubscribe pages', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 2, 'All', 'access all custom data', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 2, 'All', 'make online contributions', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 2, 'All', 'make online pledges', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 2, 'All', 'profile listings and forms', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 2, 'All', 'register for events', NULL, NULL, NULL, 1), +('Core ACL', 0, 'civicrm_acl_role', 2, 'All', 'view event info', NULL, NULL, NULL, 1); + +-- Create default Groups for User Permissioning +INSERT INTO civicrm_group (`id`, `name`, `title`, `description`, `source`, `saved_search_id`, `is_active`, `visibility`, `group_type`) VALUES (1, 'Administrators', '{ts escape="sql"}Administrators{/ts}', '{ts escape="sql"}Contacts in this group are assigned Administrator role permissions.{/ts}', NULL, NULL, 1, 'User and User Admin Only', '1'); + +-- Assign above Group (entity) to the Administrator Role +INSERT INTO civicrm_acl_entity_role + (`acl_role_id`, `entity_table`, `entity_id`, `is_active`) +VALUES + (1, 'civicrm_group', 1, 1); diff --git a/civicrm/xml/templates/civicrm_country.tpl b/civicrm/xml/templates/civicrm_country.tpl new file mode 100644 index 0000000000000000000000000000000000000000..5a1779cfb829dbd614c4355658d8debdbf44ea07 --- /dev/null +++ b/civicrm/xml/templates/civicrm_country.tpl @@ -0,0 +1,296 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +/*!40101 SET NAMES utf8 */; + +/******************************************************* +* +* civicrm_county +* +*******************************************************/ + + +INSERT INTO civicrm_worldregion (id, name) VALUES("1", "Europe and Central Asia"); +INSERT INTO civicrm_worldregion (id, name) VALUES("2", "America South, Central, North and Caribbean"); +INSERT INTO civicrm_worldregion (id, name) VALUES("3", "Middle East and North Africa"); +INSERT INTO civicrm_worldregion (id, name) VALUES("4", "Asia-Pacific"); +INSERT INTO civicrm_worldregion (id, name) VALUES("5", "Africa West, East, Central and Southern"); +INSERT INTO civicrm_worldregion (id, name) VALUES("99", "unassigned"); + + +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1001", "Afghanistan", "AF", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1002", "Albania", "AL", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1003", "Algeria", "DZ", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1004", "American Samoa", "AS", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1005", "Andorra", "AD", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1006", "Angola", "AO", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1007", "Anguilla", "AI", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1008", "Antarctica", "AQ", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1009", "Antigua and Barbuda", "AG", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1010", "Argentina", "AR", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1011", "Armenia", "AM", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1012", "Aruba", "AW", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1013", "Australia", "AU", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1014", "Austria", "AT", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1015", "Azerbaijan", "AZ", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1016", "Bahrain", "BH", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1017", "Bangladesh", "BD", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1018", "Barbados", "BB", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1019", "Belarus", "BY", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1020", "Belgium", "BE", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1021", "Belize", "BZ", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1022", "Benin", "BJ", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1023", "Bermuda", "BM", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1024", "Bhutan", "BT", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1025", "Bolivia", "BO", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1026", "Bosnia and Herzegovina", "BA", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1027", "Botswana", "BW", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1028", "Bouvet Island", "BV", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1029", "Brazil", "BR", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1030", "British Indian Ocean Territory", "IO", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1031", "Virgin Islands, British", "VG", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1032", "Brunei Darussalam", "BN", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1033", "Bulgaria", "BG", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1034", "Burkina Faso", "BF", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1035", "Myanmar", "MM", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1036", "Burundi", "BI", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1037", "Cambodia", "KH", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1038", "Cameroon", "CM", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1039", "Canada", "CA", "2", "1"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1040", "Cape Verde", "CV", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1041", "Cayman Islands", "KY", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1042", "Central African Republic", "CF", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1043", "Chad", "TD", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1044", "Chile", "CL", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1045", "China", "CN", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1046", "Christmas Island", "CX", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1047", "Cocos (Keeling) Islands", "CC", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1048", "Colombia", "CO", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1049", "Comoros", "KM", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1050", "Congo, The Democratic Republic of the", "CD", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1051", "Congo, Republic of the", "CG", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1052", "Cook Islands", "CK", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1053", "Costa Rica", "CR", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1054", "Côte d’Ivoire", "CI", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1055", "Croatia", "HR", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1056", "Cuba", "CU", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1057", "Cyprus", "CY", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1058", "Czech Republic", "CZ", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1059", "Denmark", "DK", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1060", "Djibouti", "DJ", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1061", "Dominica", "DM", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1062", "Dominican Republic", "DO", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1063", "Timor-Leste", "TL", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1064", "Ecuador", "EC", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1065", "Egypt", "EG", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1066", "El Salvador", "SV", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1067", "Equatorial Guinea", "GQ", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1068", "Eritrea", "ER", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1069", "Estonia", "EE", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1070", "Ethiopia", "ET", "5", "0"); +-- INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1071", "European Union", "EU", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1072", "Falkland Islands (Malvinas)", "FK", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1073", "Faroe Islands", "FO", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1074", "Fiji", "FJ", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1075", "Finland", "FI", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1076", "France", "FR", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1077", "French Guiana", "GF", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1078", "French Polynesia", "PF", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1079", "French Southern Territories", "TF", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1080", "Gabon", "GA", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1081", "Georgia", "GE", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1082", "Germany", "DE", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1083", "Ghana", "GH", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1084", "Gibraltar", "GI", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1085", "Greece", "GR", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1086", "Greenland", "GL", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1087", "Grenada", "GD", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1088", "Guadeloupe", "GP", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1089", "Guam", "GU", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1090", "Guatemala", "GT", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1091", "Guinea", "GN", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1092", "Guinea-Bissau", "GW", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1093", "Guyana", "GY", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1094", "Haiti", "HT", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1095", "Heard Island and McDonald Islands", "HM", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1096", "Holy See (Vatican City State)", "VA", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1097", "Honduras", "HN", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1098", "Hong Kong", "HK", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1099", "Hungary", "HU", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1100", "Iceland", "IS", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1101", "India", "IN", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1102", "Indonesia", "ID", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1103", "Iran, Islamic Republic Of", "IR", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1104", "Iraq", "IQ", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1105", "Ireland", "IE", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1106", "Israel", "IL", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1107", "Italy", "IT", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1108", "Jamaica", "JM", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1109", "Japan", "JP", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1110", "Jordan", "JO", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1111", "Kazakhstan", "KZ", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1112", "Kenya", "KE", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1113", "Kiribati", "KI", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1114", "Korea, Democratic People\'s Republic of", "KP", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1115", "Korea, Republic of", "KR", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1116", "Kuwait", "KW", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1117", "Kyrgyzstan", "KG", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1118", "Lao People\'s Democratic Republic", "LA", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1119", "Latvia", "LV", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1120", "Lebanon", "LB", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1121", "Lesotho", "LS", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1122", "Liberia", "LR", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1123", "Libya", "LY", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1124", "Liechtenstein", "LI", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1125", "Lithuania", "LT", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1126", "Luxembourg", "LU", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1127", "Macao", "MO", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1128", "Macedonia, Republic Of", "MK", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1129", "Madagascar", "MG", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1130", "Malawi", "MW", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1131", "Malaysia", "MY", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1132", "Maldives", "MV", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1133", "Mali", "ML", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1134", "Malta", "MT", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1135", "Marshall Islands", "MH", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1136", "Martinique", "MQ", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1137", "Mauritania", "MR", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1138", "Mauritius", "MU", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1139", "Mayotte", "YT", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1140", "Mexico", "MX", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1141", "Micronesia, Federated States of", "FM", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1142", "Moldova", "MD", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1143", "Monaco", "MC", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1144", "Mongolia", "MN", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1145", "Montserrat", "MS", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1146", "Morocco", "MA", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1147", "Mozambique", "MZ", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1148", "Namibia", "NA", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1149", "Nauru", "NR", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1150", "Nepal", "NP", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1152", "Netherlands", "NL", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1153", "New Caledonia", "NC", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1154", "New Zealand", "NZ", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1155", "Nicaragua", "NI", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1156", "Niger", "NE", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1157", "Nigeria", "NG", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1158", "Niue", "NU", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1159", "Norfolk Island", "NF", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1160", "Northern Mariana Islands", "MP", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1161", "Norway", "NO", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1162", "Oman", "OM", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1163", "Pakistan", "PK", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1164", "Palau", "PW", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1165", "Palestine, State of", "PS", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1166", "Panama", "PA", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1167", "Papua New Guinea", "PG", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1168", "Paraguay", "PY", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1169", "Peru", "PE", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1170", "Philippines", "PH", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1171", "Pitcairn", "PN", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1172", "Poland", "PL", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1173", "Portugal", "PT", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1174", "Puerto Rico", "PR", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1175", "Qatar", "QA", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1176", "Romania", "RO", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1177", "Russian Federation", "RU", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1178", "Rwanda", "RW", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1179", "Reunion", "RE", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1180", "Saint Helena", "SH", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1181", "Saint Kitts and Nevis", "KN", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1182", "Saint Lucia", "LC", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1183", "Saint Pierre and Miquelon", "PM", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1184", "Saint Vincent and the Grenadines", "VC", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1185", "Samoa", "WS", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1186", "San Marino", "SM", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1187", "Saudi Arabia", "SA", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1188", "Senegal", "SN", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1189", "Seychelles", "SC", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1190", "Sierra Leone", "SL", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1191", "Singapore", "SG", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1192", "Slovakia", "SK", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1193", "Slovenia", "SI", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1194", "Solomon Islands", "SB", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1195", "Somalia", "SO", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1196", "South Africa", "ZA", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1197", "South Georgia and the South Sandwich Islands", "GS", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1198", "Spain", "ES", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1199", "Sri Lanka", "LK", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1200", "Sudan", "SD", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1201", "Suriname", "SR", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1202", "Svalbard and Jan Mayen", "SJ", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1203", "Swaziland", "SZ", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1204", "Sweden", "SE", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1205", "Switzerland", "CH", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1206", "Syrian Arab Republic", "SY", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1207", "Sao Tome and Principe", "ST", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1208", "Taiwan", "TW", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1209", "Tajikistan", "TJ", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1210", "Tanzania, United Republic of", "TZ", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1211", "Thailand", "TH", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1212", "Bahamas", "BS", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1213", "Gambia", "GM", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1214", "Togo", "TG", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1215", "Tokelau", "TK", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1216", "Tonga", "TO", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1217", "Trinidad and Tobago", "TT", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1218", "Tunisia", "TN", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1219", "Turkey", "TR", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1220", "Turkmenistan", "TM", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1221", "Turks and Caicos Islands", "TC", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1222", "Tuvalu", "TV", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1223", "Uganda", "UG", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1224", "Ukraine", "UA", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1225", "United Arab Emirates", "AE", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1226", "United Kingdom", "GB", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1227", "United States Minor Outlying Islands", "UM", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1228", "United States", "US", "2", "1"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1229", "Uruguay", "UY", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1230", "Uzbekistan", "UZ", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1231", "Vanuatu", "VU", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1232", "Venezuela", "VE", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1233", "Viet Nam", "VN", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1234", "Virgin Islands, U.S.", "VI", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1235", "Wallis and Futuna", "WF", "4", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1236", "Western Sahara", "EH", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1237", "Yemen", "YE", "3", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1238", "Serbia and Montenegro", "CS", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1239", "Zambia", "ZM", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1240", "Zimbabwe", "ZW", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1241", "Ã…land Islands", "AX", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1242", "Serbia", "RS", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1243", "Montenegro", "ME", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1244", "Jersey", "JE", "99", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1245", "Guernsey", "GG", "99", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1246", "Isle of Man", "IM", "99", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1247", "South Sudan", "SS", "5", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1248", "Curaçao", "CW", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1249", "Sint Maarten (Dutch Part)", "SX", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1250", "Bonaire, Saint Eustatius and Saba", "BQ", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1251", "Kosovo", "XK", "1", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1252", "Saint Barthélemy", "BL", "2", "0"); +INSERT INTO civicrm_country (id, name,iso_code,region_id,is_province_abbreviated) VALUES("1253", "Saint Martin (French part)", "MF", "2", "0"); diff --git a/civicrm/xml/templates/civicrm_currency.tpl b/civicrm/xml/templates/civicrm_currency.tpl new file mode 100644 index 0000000000000000000000000000000000000000..09d0c033f912f2ef95f765aae56d247211cffd3c --- /dev/null +++ b/civicrm/xml/templates/civicrm_currency.tpl @@ -0,0 +1,213 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +-- currencies +INSERT INTO civicrm_currency (id, name, symbol, numeric_code, full_name) VALUES +( 1, "AUD", "$", "036", "Australian Dollar"), +( 2, "CAD", "$", "124", "Canadian Dollar"), +( 3, "EUR", "€", "978", "Euro"), +( 4, "GBP", "£", "826", "Pound Sterling"), +( 5, "ILS", "₪", "826", "New Israeli Shekel"), +( 6, "INR", "₨", "356", "Indian Rupee"), +( 7, "JPY", "Â¥", "392", "Japanese Yen"), +( 8, "KRW", "â‚©", "410", "South Korean Won"), +( 9, "LAK", "â‚", "418", "Lao Kip"), +( 10, "MNT", "â‚®", "496", "Mongolian Tugrik"), +( 11, "NGN", "₦", "566", "Nigerian Naira"), +( 12, "PLN", "zÅ‚", "985", "Polish ZÅ‚oty"), +( 13, "THB", "฿", "764", "Thai Baht"), +( 14, "USD", "$", "840", "US Dollar"), +( 15, "VND", "â‚«", "704", "Viet Nam Dong"), +( 16, "ZAR", "R", "710", "South African Rand"), +( 17, "AED", NULL, "784", "UAE Dirham"), +( 18, "AFN", "Ø‹", "971", "Afghani"), +( 19, "ALL","Lek", "008", "Albanian Lek"), +( 20, "AMD", NULL, "051", "Armenian Dram"), +( 21, "ANG", "Æ’", "532", "Netherlands Antillian Guilder"), +( 22, "AOA", NULL, "973", "Angola Kwanza"), +( 23, "ARS", "$", "032", "Argentine Peso"), +( 24, "AWG", "Æ’", "533", "Aruban Guilder"), +( 25, "AZN","ман", "944", "Azerbaijanian Manat"), +( 26, "BAM", "KM", "977", "Convertible Marks"), +( 27, "BBD", "$", "052", "Barbados Dollar"), +( 28, "BDT", NULL, "050", "Bangladeshi Taka"), +( 29, "BGN", "лв", "975", "Bulgarian Lev"), +( 30, "BHD", NULL, "048", "Bahraini Dinar"), +( 31, "BIF", NULL, "108", "Burundi Franc"), +( 32, "BMD", "$", "060", "Bermudian Dollar"), +( 33, "BND", "$", "096", "Brunei Dollar"), +( 34, "BOB", "$b", "068", "Boliviano"), +( 35, "BOV", NULL, "984", "Bolivian Mvdol"), +( 36, "BRL", "R$", "986", "Brazilian Real"), +( 37, "BSD", "$", "044", "Bahamian Dollar"), +( 38, "BTN", NULL, "064", "Bhutan Ngultrum"), +( 39, "BWP", "P", "072", "Botswana Pula"), +( 40, "BYR", "p.", "974", "Belarussian Rouble"), +( 41, "BZD","BZ$", "084", "Belize Dollar"), +( 42, "CDF", NULL, "976", "Franc Congolais"), +( 43, "CHE", NULL, "947", "WIR Euro"), +( 44, "CHF","CHF", "756", "Swiss Franc"), +( 45, "CHW", NULL, "948", "WIR Franc"), +( 46, "CLF", NULL, "990", "Unidades de fomento"), +( 47, "CLP", "$", "152", "Chilean Peso"), +( 48, "CNY", "å…ƒ", "156", "Chinese Yuan Renminbi"), +( 49, "COP", "$", "170", "Colombian Peso"), +( 50, "COU", NULL, "970", "Unidad de Valor Real"), +( 51, "CRC", "â‚¡", "188", "Costa Rican Colon"), +( 52, "RSD", "Дин.","941", "Serbian Dinar"), +( 53, "CUP", "₱", "192", "Cuban Peso"), +( 54, "CVE", NULL, "132", "Cape Verde Escudo"), +( 55, "CYP", "£", "196", "Cyprus Pound"), +( 56, "CZK", "KÄ", "203", "Czech Koruna"), +( 57, "DJF", NULL, "262", "Djibouti Franc"), +( 58, "DKK", "kr", "208", "Danish Krone"), +( 59, "DOP","RD$", "214", "Dominican Peso"), +( 60, "DZD", NULL, "012", "Algerian Dinar"), +( 62, "EGP", "£", "818", "Egyptian Pound"), +( 63, "ERN", NULL, "232", "Eritrean Nakfa"), +( 64, "ETB", NULL, "230", "Ethiopian Birr"), +( 65, "FJD", "$", "242", "Fiji Dollar"), +( 66, "FKP", "£", "238", "Falkland Islands Pound"), +( 67, "GEL", NULL, "981", "Georgian Lari"), +( 68, "GHC", "¢", "288", "Ghanaian Cedi"), +( 69, "GIP", "£", "292", "Gibraltar Pound"), +( 70, "GMD", NULL, "270", "Gambian Dalasi"), +( 71, "GNF", NULL, "324", "Guinea Franc"), +( 72, "GTQ", "Q", "320", "Guatemalan Quetzal"), +( 73, "GWP", NULL, "624", "Guinea-Bissau Peso"), +( 74, "GYD", "$", "328", "Guyana Dollar"), +( 75, "HKD","HK$", "344", "Hong Kong Dollar"), +( 76, "HNL", "L", "340", "Honduran Lempira"), +( 77, "HRK", "kn", "191", "Croatian Kuna"), +( 78, "HTG", NULL, "332", "Haitian Gourde"), +( 79, "HUF", "Ft", "348", "Hungarian Forint"), +( 80, "IDR", "Rp", "360", "Indonesian Rupiah"), +( 81, "IQD", NULL, "368", "Iraqi Dinar"), +( 82, "IRR", "ï·¼", "364", "Iranian Rial"), +( 83, "ISK", "kr", "352", "Iceland Krona"), +( 84, "JMD", "J$", "388", "Jamaican Dollar"), +( 85, "JOD", NULL, "400", "Jordanian Dinar"), +( 86, "KES", NULL, "404", "Kenyan Shilling"), +( 87, "KGS", "лв", "417", "Kyrgyzstan Som"), +( 88, "KHR", "៛", "116", "Cambodian Riel"), +( 89, "KMF", NULL, "174", "Comoro Franc"), +( 90, "KPW", "â‚©", "408", "North Korean Won"), +( 91, "KWD", NULL, "414", "Kuwaiti Dinar"), +( 92, "KYD", "$", "136", "Cayman Islands Dollar"), +( 93, "KZT", "лв", "398", "Kazakhstan Tenge"), +( 94, "LBP", "£", "422", "Lebanese Pound"), +( 95, "LKR", "₨", "144", "Sri Lanka Rupee"), +( 96, "LRD", "$", "430", "Liberian Dollar"), +( 97, "LSL", NULL, "426", "Lesotho Loti"), +( 98, "LTL", "Lt", "440", "Lithuanian Litas"), +( 99, "LVL", "Ls", "428", "Latvian Lats"), +(100, "LYD", NULL, "434", "Libyan Dinar"), +(101, "MAD", NULL, "504", "Moroccan Dirham"), +(102, "MDL", NULL, "498", "Moldovan Leu"), +(103, "MGA", NULL, "969", "Malagascy Ariary"), +(104, "MKD","ден", "807", "Macedonian Denar"), +(105, "MMK", NULL, "104", "Myanmar Kyat"), +(106, "MOP", NULL, "446", "Macao Pataca"), +(107, "MRO", NULL, "478", "Mauritanian Ouguiya"), +(108, "MTL", "Lm", "470", "Maltese Lira"), +(109, "MUR", "₨", "480", "Mauritius Rupee"), +(110, "MVR", NULL, "462", "Maldive Rufiyaa"), +(111, "MWK", NULL, "454", "Malawi Kwacha"), +(112, "MXN", "$", "484", "Mexican Peso"), +(113, "MXV", NULL, "979", "Mexican Unidad de Inversion (UID)"), +(114, "MYR", "RM", "458", "Malaysian Ringgit"), +(115, "MZN", "MT", "943", "Mozambique Metical"), +(116, "NAD", "N$", "516", "Namibian Dollar"), +(117, "NIO", "C$", "558", "Nicaraguan Cordoba Oro"), +(118, "NOK", "kr", "578", "Norwegian Krone"), +(119, "NPR", "₨", "524", "Nepalese Rupee"), +(120, "NZD", "$", "554", "New Zealand Dollar"), +(121, "OMR", "ï·¼", "512", "Rial Omani"), +(122, "PAB","B/.", "590", "Panamanian Balboa"), +(123, "PEN","S/.", "604", "Peruvian Nuevo Sol"), +(124, "PGK", NULL, "598", "Papua New Guinea Kina"), +(125, "PHP","Php", "608", "Philippine Peso"), +(126, "PKR", "₨", "586", "Pakistan Rupee"), +(127, "PYG", "Gs", "600", "Paraguay Guarani"), +(128, "QAR", "ï·¼", "634", "Qatari Rial"), +(129, "ROL", NULL, "642", "Romanian Old Leu"), +(130, "RON","lei", "946", "Romanian New Leu"), +(131, "RUB","руб", "643", "Russian Rouble"), +(132, "RWF", NULL, "646", "Rwanda Franc"), +(133, "SAR", "ï·¼", "682", "Saudi Riyal"), +(134, "SBD", "$", "090", "Solomon Islands Dollar"), +(135, "SCR", "₨", "690", "Seychelles Rupee"), +(136, "SDD", NULL, "736", "Sudanese Dinar"), +(137, "SEK", "kr", "752", "Swedish Krona"), +(138, "SGD", "$", "702", "Singapore Dollar"), +(139, "SHP", "£", "654", "Saint Helena Pound"), +(140, "SIT", NULL, "705", "Slovenian Tolar"), +(141, "SKK","SIT", "703", "Slovak Koruna"), +(142, "SLL", NULL, "694", "Leone"), +(143, "SOS", "S", "706", "Somali Shilling"), +(144, "SRD", "$", "968", "Surinam Dollar"), +(145, "STD", NULL, "678", "São Tome and Principe Dobra"), +(146, "SVC", "$", "222", "El Salvador Colon"), +(147, "SYP", "£", "760", "Syrian Pound"), +(148, "SZL", NULL, "748", "Swaziland Lilangeni"), +(149, "TJS", NULL, "972", "Tajik Somoni"), +(150, "TMM", NULL, "795", "Turkmenistan Manat"), +(151, "TND", NULL, "788", "Tunisian Dinar"), +(152, "TOP", NULL, "776", "Tongan Pa'anga"), +(153, "TRY","YTL", "949", "New Turkish Lira"), +(154, "TTD","TT$", "780", "Trinidad and Tobago Dollar"), +(155, "TWD","NT$", "901", "New Taiwan Dollar"), +(156, "TZS", NULL, "834", "Tanzanian Shilling"), +(157, "UAH", "â‚´", "980", "Ukrainian Hryvnia"), +(158, "UGX", NULL, "800", "Ugandan Shilling"), +(159, "USN", NULL, "997", "US Dollar (Next day)"), +(160, "USS", NULL, "998", "US Dollar (Same day)"), +(161, "UYU", "$U", "858", "Peso Uruguayo"), +(162, "UZS", "лв", "860", "Uzbekistan Sum"), +(163, "VEF", "Bs", "937", "Venezuela Bolivar"), +(164, "VUV", NULL, "548", "Vanuatu Vatu"), +(165, "WST", NULL, "882", "Samoan Tala"), +(166, "XAF", NULL, "950", "CFA Franc BEAC"), +(167, "XAG", NULL, "961", "Silver"), +(168, "XAU", NULL, "959", "Gold"), +(169, "XBA", NULL, "955", "Bond Markets Units European Composite Unit (EURCO)"), +(170, "XBB", NULL, "956", "European Monetary Unit (E.M.U.-6)"), +(171, "XBC", NULL, "957", "European Unit of Account 9 (E.U.A.-9)"), +(172, "XBD", NULL, "958", "European Unit of Account 17 (E.U.A.-17)"), +(173, "XCD", "$", "951", "East Caribbean Dollar"), +(174, "XDR", NULL, "960", "Special Drawing Right"), +(175, "XFO", NULL, NULL, "Gold-Franc"), +(176, "XFU", NULL, NULL, "UIC-Franc"), +(177, "XOF", NULL, "952", "CFA Franc BCEAO"), +(178, "XPD", NULL, "964", "Palladium"), +(179, "XPF", NULL, "953", "CFP Franc"), +(180, "XPT", NULL, "962", "Platinum"), +(181, "XTS", NULL, "963", "Code for testing purposes"), +(182, "XXX", NULL, "999", "No currency involved"), +(183, "YER", "ï·¼", "886", "Yemeni Rial"), +(184, "ZMK", NULL, "894", "Zambian Kwacha"), +(185, "ZWD", "Z$", "716", "Zimbabwe Dollar"); diff --git a/civicrm/xml/templates/civicrm_data.tpl b/civicrm/xml/templates/civicrm_data.tpl new file mode 100644 index 0000000000000000000000000000000000000000..fd913a1050c9470060f7e174bbe4d87e8b40eb65 --- /dev/null +++ b/civicrm/xml/templates/civicrm_data.tpl @@ -0,0 +1,1769 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +-- This file provides template to civicrm_data.mysql. Inserts all base data needed for a new CiviCRM DB + +SET @domainName := 'Default Domain Name'; +SET @defaultOrganization := 'Default Organization'; + +-- Add components to system wide registry +-- We're doing it early to avoid constraint errors. +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviEvent' , 'CRM_Event' ); +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviContribute', 'CRM_Contribute' ); +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviMember' , 'CRM_Member' ); +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviMail' , 'CRM_Mailing' ); +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviGrant' , 'CRM_Grant' ); +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviPledge' , 'CRM_Pledge' ); +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviCase' , 'CRM_Case' ); +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviReport' , 'CRM_Report' ); +INSERT INTO civicrm_component (name, namespace) VALUES ('CiviCampaign' , 'CRM_Campaign' ); + +-- Create organization contact +INSERT INTO civicrm_contact( `contact_type`, `sort_name`, `display_name`, `legal_name`, `organization_name`) +VALUES ('Organization', @defaultOrganization, @defaultOrganization, @defaultOrganization, @defaultOrganization); +SET @contactID := LAST_INSERT_ID(); + +INSERT INTO civicrm_email (contact_id, location_type_id, email, is_primary, is_billing, on_hold, hold_date, reset_date) +VALUES +(@contactID, 1, 'fixme.domainemail@example.org', 0, 0, 0, NULL, NULL); + +INSERT INTO civicrm_domain (name, version, contact_id) VALUES (@domainName, '2.2', @contactID); +SELECT @domainID := id FROM civicrm_domain where name = 'Default Domain Name'; + +-- Sample location types +-- CRM-9120 for legacy reasons we are continuing to translate the 'name', but this +-- field is used mainly as an ID, and display_name will be shown to the user, but +-- we have not yet finished modifying all places where the 'name' is shown. +INSERT INTO civicrm_location_type( name, display_name, vcard_name, description, is_reserved, is_active, is_default ) VALUES( '{ts escape="sql"}Home{/ts}', '{ts escape="sql"}Home{/ts}', 'HOME', '{ts escape="sql"}Place of residence{/ts}', 0, 1, 1 ); +INSERT INTO civicrm_location_type( name, display_name, vcard_name, description, is_reserved, is_active ) VALUES( '{ts escape="sql"}Work{/ts}', '{ts escape="sql"}Work{/ts}', 'WORK', '{ts escape="sql"}Work location{/ts}', 0, 1 ); +INSERT INTO civicrm_location_type( name, display_name, vcard_name, description, is_reserved, is_active ) VALUES( '{ts escape="sql"}Main{/ts}', '{ts escape="sql"}Main{/ts}', NULL, '{ts escape="sql"}Main office location{/ts}', 0, 1 ); +INSERT INTO civicrm_location_type( name, display_name, vcard_name, description, is_reserved, is_active ) VALUES( '{ts escape="sql"}Other{/ts}', '{ts escape="sql"}Other{/ts}', NULL, '{ts escape="sql"}Other location{/ts}', 0, 1 ); +-- the following location must stay with the untranslated Billing name, CRM-2064 +INSERT INTO civicrm_location_type( name, display_name, vcard_name, description, is_reserved, is_active ) VALUES( 'Billing', '{ts escape="sql"}Billing{/ts}', NULL, '{ts escape="sql"}Billing Address location{/ts}', 1, 1 ); + +-- Sample relationship types +INSERT INTO civicrm_relationship_type( name_a_b,label_a_b, name_b_a,label_b_a, description, contact_type_a, contact_type_b, is_reserved ) + VALUES( 'Child of', '{ts escape="sql"}Child of{/ts}', 'Parent of', '{ts escape="sql"}Parent of{/ts}', '{ts escape="sql"}Parent/child relationship.{/ts}', 'Individual', 'Individual', 0 ), + ( 'Spouse of', '{ts escape="sql"}Spouse of{/ts}', 'Spouse of', '{ts escape="sql"}Spouse of{/ts}', '{ts escape="sql"}Spousal relationship.{/ts}', 'Individual', 'Individual', 0 ), + ( 'Partner of', '{ts escape="sql"}Partner of{/ts}', 'Partner of', '{ts escape="sql"}Partner of{/ts}', '{ts escape="sql"}Partner relationship.{/ts}', 'Individual', 'Individual', 0 ), + ( 'Sibling of', '{ts escape="sql"}Sibling of{/ts}', 'Sibling of', '{ts escape="sql"}Sibling of{/ts}', '{ts escape="sql"}Sibling relationship.{/ts}', 'Individual','Individual', 0 ), + ( 'Employee of', '{ts escape="sql"}Employee of{/ts}', 'Employer of', '{ts escape="sql"}Employer of{/ts}', '{ts escape="sql"}Employment relationship.{/ts}','Individual','Organization', 1 ), + ( 'Volunteer for', '{ts escape="sql"}Volunteer for{/ts}', 'Volunteer is', '{ts escape="sql"}Volunteer is{/ts}', '{ts escape="sql"}Volunteer relationship.{/ts}','Individual','Organization', 0 ), + ( 'Head of Household for', '{ts escape="sql"}Head of Household for{/ts}', 'Head of Household is', '{ts escape="sql"}Head of Household is{/ts}', '{ts escape="sql"}Head of household.{/ts}','Individual','Household', 1 ), + ( 'Household Member of', '{ts escape="sql"}Household Member of{/ts}', 'Household Member is', '{ts escape="sql"}Household Member is{/ts}', '{ts escape="sql"}Household membership.{/ts}','Individual','Household', 1 ); + +-- Relationship Types for CiviCase +INSERT INTO civicrm_relationship_type( name_a_b,label_a_b, name_b_a,label_b_a, description, contact_type_a, contact_type_b, is_reserved ) + VALUES( 'Case Coordinator is', 'Case Coordinator is', 'Case Coordinator', 'Case Coordinator', 'Case Coordinator', 'Individual', 'Individual', 0 ); +INSERT INTO civicrm_relationship_type( name_a_b,label_a_b, name_b_a,label_b_a, description, contact_type_a, contact_type_b, is_reserved ) + VALUES( 'Supervised by', 'Supervised by', 'Supervisor', 'Supervisor', 'Immediate workplace supervisor', 'Individual', 'Individual', 0 ); + + +-- Sample Tags +INSERT INTO civicrm_tag( name, description, parent_id,used_for ) + VALUES + ( '{ts escape="sql"}Non-profit{/ts}', '{ts escape="sql"}Any not-for-profit organization.{/ts}', NULL,'civicrm_contact'), + ( '{ts escape="sql"}Company{/ts}', '{ts escape="sql"}For-profit organization.{/ts}', NULL,'civicrm_contact'), + ( '{ts escape="sql"}Government Entity{/ts}', '{ts escape="sql"}Any governmental entity.{/ts}', NULL,'civicrm_contact'), + ( '{ts escape="sql"}Major Donor{/ts}', '{ts escape="sql"}High-value supporter of our organization.{/ts}', NULL,'civicrm_contact'), + ( '{ts escape="sql"}Volunteer{/ts}', '{ts escape="sql"}Active volunteers.{/ts}', NULL,'civicrm_contact' ); + +{capture assign=subgroup}{ldelim}subscribe.group{rdelim}{/capture} +{capture assign=suburl}{ldelim}subscribe.url{rdelim}{/capture} +{capture assign=welgroup}{ldelim}welcome.group{rdelim}{/capture} +{capture assign=unsubgroup}{ldelim}unsubscribe.group{rdelim}{/capture} +{capture assign=actresub}{ldelim}action.resubscribe{rdelim}{/capture} +{capture assign=actresuburl}{ldelim}action.resubscribeUrl{rdelim}{/capture} +{capture assign=resubgroup}{ldelim}resubscribe.group{rdelim}{/capture} +{capture assign=actunsub}{ldelim}action.unsubscribe{rdelim}{/capture} +{capture assign=actunsuburl}{ldelim}action.unsubscribeUrl{rdelim}{/capture} +{capture assign=domname}{ldelim}domain.name{rdelim}{/capture} + +-- sample CiviCRM mailing components +INSERT INTO civicrm_mailing_component + (name,component_type,subject,body_html,body_text,is_default,is_active) +VALUES + ('{ts escape="sql"}Mailing Header{/ts}','Header','{ts escape="sql"}Descriptive Title for this Header{/ts}','{ts escape="sql"}Sample Header for HTML formatted content.{/ts}','{ts escape="sql"}Sample Header for TEXT formatted content.{/ts}',1,1), + ('{ts escape="sql"}Mailing Footer{/ts}','Footer','{ts escape="sql"}Descriptive Title for this Footer.{/ts}','{ts escape="sql"}Sample Footer for HTML formatted content<br/><a href="{ldelim}action.optOutUrl{rdelim}">Unsubscribe</a> <br/> {ldelim}domain.address{rdelim}{/ts}','{ts escape="sql"}to unsubscribe: {ldelim}action.optOutUrl{rdelim} +{ldelim}domain.address{rdelim}{/ts}',1,1), + ('{ts escape="sql"}Subscribe Message{/ts}','Subscribe','{ts escape="sql"}Subscription Confirmation Request{/ts}','{ts escape="sql" 1=$subgroup 2=$suburl}You have a pending subscription to the %1 mailing list. To confirm this subscription, reply to this email or click <a href="%2">here</a>.{/ts}','{ts escape="sql" 1=$subgroup 2=$suburl}You have a pending subscription to the %1 mailing list. To confirm this subscription, reply to this email or click on this link: %2{/ts}',1,1), + ('{ts escape="sql"}Welcome Message{/ts}','Welcome','{ts escape="sql"}Your Subscription has been Activated{/ts}','{ts escape="sql" 1=$welgroup}Welcome. Your subscription to the %1 mailing list has been activated.{/ts}','{ts escape="sql" 1=$welgroup}Welcome. Your subscription to the %1 mailing list has been activated.{/ts}',1,1), + ('{ts escape="sql"}Unsubscribe Message{/ts}','Unsubscribe','{ts escape="sql"}Un-subscribe Confirmation{/ts}','{ts escape="sql" 1=$unsubgroup 2=$actresub 3=$actresuburl}You have been un-subscribed from the following groups: %1. You can re-subscribe by mailing %2 or clicking <a href="%3">here</a>.{/ts}','{ts escape="sql" 1=$unsubgroup 2=$actresub}You have been un-subscribed from the following groups: %1. You can re-subscribe by mailing %2 or clicking %3{/ts}',1,1), + ('{ts escape="sql"}Resubscribe Message{/ts}','Resubscribe','{ts escape="sql"}Re-subscribe Confirmation{/ts}','{ts escape="sql" 1=$resubgroup 2=$actunsub 3=$actunsuburl}You have been re-subscribed to the following groups: %1. You can un-subscribe by mailing %2 or clicking <a href="%3">here</a>.{/ts}','{ts escape="sql" 1=$resubgroup 2=$actunsub 3=$actunsuburl}You have been re-subscribed to the following groups: %1. You can un-subscribe by mailing %2 or clicking %3{/ts}',1,1), + ('{ts escape="sql"}Opt-out Message{/ts}','OptOut','{ts escape="sql"}Opt-out Confirmation{/ts}','{ts escape="sql" 1=$domname}Your email address has been removed from %1 mailing lists.{/ts}','{ts escape="sql" 1=$domname}Your email address has been removed from %1 mailing lists.{/ts}',1,1), + ('{ts escape="sql"}Auto-responder{/ts}','Reply','{ts escape="sql"}Please Send Inquiries to Our Contact Email Address{/ts}','{ts escape="sql"}This is an automated reply from an un-attended mailbox. Please send any inquiries to the contact email address listed on our web-site.{/ts}','{ts escape="sql"}This is an automated reply from an un-attended mailbox. Please send any inquiries to the contact email address listed on our web-site.{/ts}',1,1); + + +-- contribution types +INSERT INTO + civicrm_financial_type(name, is_reserved, is_active, is_deductible) +VALUES + ( '{ts escape="sql"}Donation{/ts}' , 0, 1, 1 ), + ( '{ts escape="sql"}Member Dues{/ts}' , 0, 1, 1 ), + ( '{ts escape="sql"}Campaign Contribution{/ts}', 0, 1, 0 ), + ( '{ts escape="sql"}Event Fee{/ts}' , 0, 1, 0 ); + +-- option groups and values for 'preferred communication methods' , 'activity types', 'gender', etc. + +INSERT INTO + `civicrm_option_group` (`name`, `title`, `data_type`, `is_reserved`, `is_active`, `is_locked`) +VALUES + ('preferred_communication_method', '{ts escape="sql"}Preferred Communication Method{/ts}' , NULL, 1, 1, 0), + ('activity_type' , '{ts escape="sql"}Activity Type{/ts}' , 'Integer', 1, 1, 0), + ('gender' , '{ts escape="sql"}Gender{/ts}' , 'Integer', 1, 1, 0), + ('instant_messenger_service' , '{ts escape="sql"}Instant Messenger (IM) screen-names{/ts}', NULL, 1, 1, 0), + ('mobile_provider' , '{ts escape="sql"}Mobile Phone Providers{/ts}' , NULL, 1, 1, 0), + ('individual_prefix' , '{ts escape="sql"}Individual contact prefixes{/ts}' , NULL, 1, 1, 0), + ('individual_suffix' , '{ts escape="sql"}Individual contact suffixes{/ts}' , NULL, 1, 1, 0), + ('acl_role' , '{ts escape="sql"}ACL Role{/ts}' , NULL, 1, 1, 0), + ('accept_creditcard' , '{ts escape="sql"}Accepted Credit Cards{/ts}' , NULL, 1, 1, 0), + ('payment_instrument' , '{ts escape="sql"}Payment Methods{/ts}' , 'Integer', 1, 1, 0), + ('contribution_status' , '{ts escape="sql"}Contribution Status{/ts}' , NULL, 1, 1, 1), + ('pcp_status' , '{ts escape="sql"}PCP Status{/ts}' , NULL, 1, 1, 1), + ('pcp_owner_notify' , '{ts escape="sql"}PCP owner notifications{/ts}' , NULL, 1, 1, 1), + ('participant_role' , '{ts escape="sql"}Participant Role{/ts}' , 'Integer', 1, 1, 0), + ('event_type' , '{ts escape="sql"}Event Type{/ts}' , 'Integer', 1, 1, 0), + ('contact_view_options' , '{ts escape="sql"}Contact View Options{/ts}' , NULL, 1, 1, 1), + ('contact_smart_group_display' , '{ts escape="sql"}Contact Smart Group View Options{/ts}' , NULL, 1, 1, 1), + ('contact_edit_options' , '{ts escape="sql"}Contact Edit Options{/ts}' , NULL, 1, 1, 1), + ('advanced_search_options' , '{ts escape="sql"}Advanced Search Options{/ts}' , NULL, 1, 1, 1), + ('user_dashboard_options' , '{ts escape="sql"}User Dashboard Options{/ts}' , NULL, 1, 1, 1), + ('address_options' , '{ts escape="sql"}Addressing Options{/ts}' , NULL, 1, 1, 0), + ('group_type' , '{ts escape="sql"}Group Type{/ts}' , NULL, 1, 1, 0), + ('grant_status' , '{ts escape="sql"}Grant status{/ts}' , NULL, 1, 1, 0), + ('grant_type' , '{ts escape="sql"}Grant Type{/ts}' , NULL, 1, 1, 0), + ('custom_search' , '{ts escape="sql"}Custom Search{/ts}' , NULL, 1, 1, 0), + ('activity_status' , '{ts escape="sql"}Activity Status{/ts}' , 'Integer', 1, 1, 0), + ('case_type' , '{ts escape="sql"}Case Type{/ts}' , NULL, 1, 1, 0), + ('case_status' , '{ts escape="sql"}Case Status{/ts}' , NULL, 1, 1, 0), + ('participant_listing' , '{ts escape="sql"}Participant Listing{/ts}' , NULL, 1, 1, 0), + ('safe_file_extension' , '{ts escape="sql"}Safe File Extension{/ts}' , NULL, 1, 1, 0), + ('from_email_address' , '{ts escape="sql"}From Email Address{/ts}' , NULL, 1, 1, 0), + ('mapping_type' , '{ts escape="sql"}Mapping Type{/ts}' , NULL, 1, 1, 1), + ('wysiwyg_editor' , '{ts escape="sql"}WYSIWYG Editor{/ts}' , NULL, 1, 1, 0), + ('recur_frequency_units' , '{ts escape="sql"}Recurring Frequency Units{/ts}' , NULL, 1, 1, 0), + ('phone_type' , '{ts escape="sql"}Phone Type{/ts}' , NULL, 1, 1, 0), + ('custom_data_type' , '{ts escape="sql"}Custom Data Type{/ts}' , NULL, 1, 1, 0), + ('visibility' , '{ts escape="sql"}Visibility{/ts}' , NULL, 1, 1, 0), + ('mail_protocol' , '{ts escape="sql"}Mail Protocol{/ts}' , NULL, 1, 1, 0), + ('priority' , '{ts escape="sql"}Priority{/ts}' , NULL, 1, 1, 0), + ('redaction_rule' , '{ts escape="sql"}Redaction Rule{/ts}' , NULL, 1, 1, 0), + ('report_template' , '{ts escape="sql"}Report Template{/ts}' , NULL, 1, 1, 0), + ('email_greeting' , '{ts escape="sql"}Email Greeting Type{/ts}' , NULL, 1, 1, 0), + ('postal_greeting' , '{ts escape="sql"}Postal Greeting Type{/ts}' , NULL, 1, 1, 0), + ('addressee' , '{ts escape="sql"}Addressee Type{/ts}' , NULL, 1, 1, 0), + ('contact_autocomplete_options' , '{ts escape="sql"}Autocomplete Contact Search{/ts}' , NULL, 1, 1, 1), + ('contact_reference_options' , '{ts escape="sql"}Contact Reference Autocomplete Options{/ts}', NULL, 1, 1, 1), + ('website_type' , '{ts escape="sql"}Website Type{/ts}' , NULL, 1, 1, 0), + ('tag_used_for' , '{ts escape="sql"}Tag Used For{/ts}' , NULL, 1, 1, 1), + ('currencies_enabled' , '{ts escape="sql"}Currencies Enabled{/ts}' , NULL, 1, 1, 0), + ('event_badge' , '{ts escape="sql"}Event Name Badge{/ts}' , NULL, 1, 1, 0), + ('note_privacy' , '{ts escape="sql"}Privacy levels for notes{/ts}' , NULL, 1, 1, 0), + ('campaign_type' , '{ts escape="sql"}Campaign Type{/ts}' , NULL, 1, 1, 0), + ('campaign_status' , '{ts escape="sql"}Campaign Status{/ts}' , NULL, 1, 1, 0), + ('system_extensions' , '{ts escape="sql"}CiviCRM Extensions{/ts}' , NULL, 1, 1, 0), + ('mail_approval_status' , '{ts escape="sql"}CiviMail Approval Status{/ts}' , NULL, 1, 1, 0), + ('engagement_index' , '{ts escape="sql"}Engagement Index{/ts}' , NULL, 1, 1, 0), + ('cg_extend_objects' , '{ts escape="sql"}Objects a custom group extends to{/ts}' , NULL, 1, 1, 0), + ('paper_size' , '{ts escape="sql"}Paper Size{/ts}' , NULL, 1, 1, 0), + ('pdf_format' , '{ts escape="sql"}PDF Page Format{/ts}' , NULL, 1, 1, 0), + ('label_format' , '{ts escape="sql"}Mailing Label Format{/ts}' , NULL, 1, 1, 0), + ('activity_contacts' , '{ts escape="sql"}Activity Contacts{/ts}' , NULL, 1, 1, 1), + ('account_relationship' , '{ts escape="sql"}Account Relationship{/ts}' , NULL, 1, 1, 0), + ('event_contacts' , '{ts escape="sql"}Event Recipients{/ts}' , NULL, 1, 1, 0), + ('conference_slot' , '{ts escape="sql"}Conference Slot{/ts}' , NULL, 1, 1, 0), + ('batch_type' , '{ts escape="sql"}Batch Type{/ts}' , NULL, 1, 1, 1), + ('batch_mode' , '{ts escape="sql"}Batch Mode{/ts}' , NULL, 1, 1, 1), + ('batch_status' , '{ts escape="sql"}Batch Status{/ts}' , NULL, 1, 1, 1), + ('sms_api_type' , '{ts escape="sql"}Api Type{/ts}' , NULL, 1, 1, 0), + ('sms_provider_name' , '{ts escape="sql"}Sms Provider Internal Name{/ts}' , NULL, 1, 1, 0), + ('auto_renew_options' , '{ts escape="sql"}Auto Renew Options{/ts}' , NULL, 1, 1, 1), + ('financial_account_type' , '{ts escape="sql"}Financial Account Type{/ts}' , NULL, 1, 1, 0), + ('financial_item_status' , '{ts escape="sql"}Financial Item Status{/ts}' , NULL, 1, 1, 1), + ('label_type' , '{ts escape="sql"}Label Type{/ts}' , NULL, 1, 1, 0), + ('name_badge' , '{ts escape="sql"}Name Badge Format{/ts}' , NULL, 1, 1, 0), + ('communication_style' , '{ts escape="sql"}Communication Style{/ts}' , NULL, 1, 1, 0), + ('msg_mode' , '{ts escape="sql"}Message Mode{/ts}' , NULL, 1, 1, 0), + ('contact_date_reminder_options' , '{ts escape="sql"}Contact Date Reminder Options{/ts}' , NULL, 1, 1, 1), + ('wysiwyg_presets' , '{ts escape="sql"}WYSIWYG Editor Presets{/ts}' , NULL, 1, 1, 0), + ('relative_date_filters' , '{ts escape="sql"}Relative Date Filters{/ts}' , NULL, 1, 1, 0), + ('pledge_status' , '{ts escape="sql"}Pledge Status{/ts}' , NULL, 1, 1, 1), + ('environment' , '{ts escape="sql"}Environment{/ts}' , NULL, 0, 1, 0); + +SELECT @option_group_id_pcm := max(id) from civicrm_option_group where name = 'preferred_communication_method'; +SELECT @option_group_id_act := max(id) from civicrm_option_group where name = 'activity_type'; +SELECT @option_group_id_gender := max(id) from civicrm_option_group where name = 'gender'; +SELECT @option_group_id_IMProvider := max(id) from civicrm_option_group where name = 'instant_messenger_service'; +SELECT @option_group_id_mobileProvider := max(id) from civicrm_option_group where name = 'mobile_provider'; +SELECT @option_group_id_prefix := max(id) from civicrm_option_group where name = 'individual_prefix'; +SELECT @option_group_id_suffix := max(id) from civicrm_option_group where name = 'individual_suffix'; +SELECT @option_group_id_aclRole := max(id) from civicrm_option_group where name = 'acl_role'; +SELECT @option_group_id_acc := max(id) from civicrm_option_group where name = 'accept_creditcard'; +SELECT @option_group_id_pi := max(id) from civicrm_option_group where name = 'payment_instrument'; +SELECT @option_group_id_cs := max(id) from civicrm_option_group where name = 'contribution_status'; +SELECT @option_group_id_pcp := max(id) from civicrm_option_group where name = 'pcp_status'; +SELECT @option_group_id_pcpOwnerNotify := max(id) from civicrm_option_group where name = 'pcp_owner_notify'; +SELECT @option_group_id_pRole := max(id) from civicrm_option_group where name = 'participant_role'; +SELECT @option_group_id_etype := max(id) from civicrm_option_group where name = 'event_type'; +SELECT @option_group_id_cvOpt := max(id) from civicrm_option_group where name = 'contact_view_options'; +SELECT @option_group_id_csgOpt := max(id) from civicrm_option_group where name = 'contact_smart_group_display'; +SELECT @option_group_id_ceOpt := max(id) from civicrm_option_group where name = 'contact_edit_options'; +SELECT @option_group_id_asOpt := max(id) from civicrm_option_group where name = 'advanced_search_options'; +SELECT @option_group_id_udOpt := max(id) from civicrm_option_group where name = 'user_dashboard_options'; +SELECT @option_group_id_adOpt := max(id) from civicrm_option_group where name = 'address_options'; +SELECT @option_group_id_gType := max(id) from civicrm_option_group where name = 'group_type'; +SELECT @option_group_id_grantSt := max(id) from civicrm_option_group where name = 'grant_status'; +SELECT @option_group_id_grantTyp := max(id) from civicrm_option_group where name = 'grant_type'; +SELECT @option_group_id_csearch := max(id) from civicrm_option_group where name = 'custom_search'; +SELECT @option_group_id_acs := max(id) from civicrm_option_group where name = 'activity_status'; +SELECT @option_group_id_ct := max(id) from civicrm_option_group where name = 'case_type'; +SELECT @option_group_id_cas := max(id) from civicrm_option_group where name = 'case_status'; +SELECT @option_group_id_pl := max(id) from civicrm_option_group where name = 'participant_listing'; +SELECT @option_group_id_sfe := max(id) from civicrm_option_group where name = 'safe_file_extension'; +SELECT @option_group_id_mt := max(id) from civicrm_option_group where name = 'mapping_type'; +SELECT @option_group_id_we := max(id) from civicrm_option_group where name = 'wysiwyg_editor'; +SELECT @option_group_id_fu := max(id) from civicrm_option_group where name = 'recur_frequency_units'; +SELECT @option_group_id_pht := max(id) from civicrm_option_group where name = 'phone_type'; +SELECT @option_group_id_fma := max(id) from civicrm_option_group where name = 'from_email_address'; +SELECT @option_group_id_cdt := max(id) from civicrm_option_group where name = 'custom_data_type'; +SELECT @option_group_id_vis := max(id) from civicrm_option_group where name = 'visibility'; +SELECT @option_group_id_mp := max(id) from civicrm_option_group where name = 'mail_protocol'; +SELECT @option_group_id_priority := max(id) from civicrm_option_group where name = 'priority'; +SELECT @option_group_id_rr := max(id) from civicrm_option_group where name = 'redaction_rule'; +SELECT @option_group_id_emailGreeting := max(id) from civicrm_option_group where name = 'email_greeting'; +SELECT @option_group_id_postalGreeting := max(id) from civicrm_option_group where name = 'postal_greeting'; +SELECT @option_group_id_addressee := max(id) from civicrm_option_group where name = 'addressee'; +SELECT @option_group_id_report := max(id) from civicrm_option_group where name = 'report_template'; +SELECT @option_group_id_acsOpt := max(id) from civicrm_option_group where name = 'contact_autocomplete_options'; +SELECT @option_group_id_acConRef := max(id) from civicrm_option_group where name = 'contact_reference_options'; +SELECT @option_group_id_website := max(id) from civicrm_option_group where name = 'website_type'; +SELECT @option_group_id_tuf := max(id) from civicrm_option_group where name = 'tag_used_for'; +SELECT @option_group_id_currency := max(id) from civicrm_option_group where name = 'currencies_enabled'; +SELECT @option_group_id_eventBadge := max(id) from civicrm_option_group where name = 'event_badge'; +SELECT @option_group_id_notePrivacy := max(id) from civicrm_option_group where name = 'note_privacy'; +SELECT @option_group_id_campaignType := max(id) from civicrm_option_group where name = 'campaign_type'; +SELECT @option_group_id_campaignStatus := max(id) from civicrm_option_group where name = 'campaign_status'; +SELECT @option_group_id_extensions := max(id) from civicrm_option_group where name = 'system_extensions'; +SELECT @option_group_id_mail_approval_status := max(id) from civicrm_option_group where name = 'mail_approval_status'; +SELECT @option_group_id_engagement_index := max(id) from civicrm_option_group where name = 'engagement_index'; +SELECT @option_group_id_cgeo := max(id) from civicrm_option_group where name = 'cg_extend_objects'; +SELECT @option_group_id_paperSize := max(id) from civicrm_option_group where name = 'paper_size'; +SELECT @option_group_id_label := max(id) from civicrm_option_group where name = 'label_format'; +SELECT @option_group_id_aco := max(id) from civicrm_option_group where name = 'activity_contacts'; +SELECT @option_group_id_arel := max(id) from civicrm_option_group where name = 'account_relationship'; +SELECT @option_group_id_ere := max(id) from civicrm_option_group where name = 'event_contacts'; +SELECT @option_group_id_conference_slot := max(id) from civicrm_option_group where name = 'conference_slot'; +SELECT @option_group_id_batch_type := max(id) from civicrm_option_group where name = 'batch_type'; +SELECT @option_group_id_batch_status := max(id) from civicrm_option_group where name = 'batch_status'; +SELECT @option_group_id_batch_mode := max(id) from civicrm_option_group where name = 'batch_mode'; +SELECT @option_group_id_sms_api_type := max(id) from civicrm_option_group where name = 'sms_api_type'; +SELECT @option_group_id_sms_provider_name := max(id) from civicrm_option_group where name = 'sms_provider_name'; +SELECT @option_group_id_aro := max(id) from civicrm_option_group where name = 'auto_renew_options'; +SELECT @option_group_id_fat := max(id) from civicrm_option_group where name = 'financial_account_type'; +SELECT @option_group_id_financial_item_status := max(id) from civicrm_option_group where name = 'financial_item_status'; +SELECT @option_group_id_label_type := max(id) from civicrm_option_group where name = 'label_type'; +SELECT @option_group_id_name_badge := max(id) from civicrm_option_group where name = 'name_badge'; +SELECT @option_group_id_communication_style := max(id) from civicrm_option_group where name = 'communication_style'; +SELECT @option_group_id_msg_mode := max(id) from civicrm_option_group where name = 'msg_mode'; +SELECT @option_group_id_contactDateMode := max(id) from civicrm_option_group where name = 'contact_date_reminder_options'; +SELECT @option_group_id_date_filter := max(id) from civicrm_option_group where name = 'relative_date_filters'; +SELECT @option_group_id_wysiwyg_presets := max(id) from civicrm_option_group where name = 'wysiwyg_presets'; +SELECT @option_group_id_ps := max(id) from civicrm_option_group where name = 'pledge_status'; +SELECT @option_group_id_env := max(id) from civicrm_option_group where name = 'environment'; + +SELECT @contributeCompId := max(id) FROM civicrm_component where name = 'CiviContribute'; +SELECT @eventCompId := max(id) FROM civicrm_component where name = 'CiviEvent'; +SELECT @memberCompId := max(id) FROM civicrm_component where name = 'CiviMember'; +SELECT @pledgeCompId := max(id) FROM civicrm_component where name = 'CiviPledge'; +SELECT @caseCompId := max(id) FROM civicrm_component where name = 'CiviCase'; +SELECT @grantCompId := max(id) FROM civicrm_component where name = 'CiviGrant'; +SELECT @campaignCompId := max(id) FROM civicrm_component where name = 'CiviCampaign'; +SELECT @mailCompId := max(id) FROM civicrm_component where name = 'CiviMail'; + +INSERT INTO + `civicrm_option_value` (`option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `visibility_id`, `icon`) +VALUES + (@option_group_id_pcm, '{ts escape="sql"}Phone{/ts}', 1, 'Phone', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pcm, '{ts escape="sql"}Email{/ts}', 2, 'Email', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pcm, '{ts escape="sql"}Postal Mail{/ts}', 3, 'Postal Mail', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pcm, '{ts escape="sql"}SMS{/ts}', 4, 'SMS', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pcm, '{ts escape="sql"}Fax{/ts}', 5, 'Fax', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_act, '{ts escape="sql"}Meeting{/ts}', 1, 'Meeting', NULL, 0, NULL, 1, NULL, 0, 1, 1, NULL, NULL, 'fa-slideshare'), + (@option_group_id_act, '{ts escape="sql"}Phone Call{/ts}', 2, 'Phone Call', NULL, 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, 'fa-phone'), + (@option_group_id_act, '{ts escape="sql"}Email{/ts}', 3, 'Email', NULL, 1, NULL, 3, '{ts escape="sql"}Email sent.{/ts}', 0, 1, 1, NULL, NULL, 'fa-envelope-o'), + (@option_group_id_act, '{ts escape="sql"}Outbound SMS{/ts}', 4, 'SMS', NULL, 1, NULL, 4, '{ts escape="sql"}Text message (SMS) sent.{/ts}', 0, 1, 1, NULL, NULL, 'fa-mobile'), + (@option_group_id_act, '{ts escape="sql"}Event Registration{/ts}', 5, 'Event Registration', NULL, 1, NULL, 5, '{ts escape="sql"}Online or offline event registration.{/ts}', 0, 1, 1, @eventCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Contribution{/ts}', 6, 'Contribution', NULL, 1, NULL, 6, '{ts escape="sql"}Online or offline contribution.{/ts}', 0, 1, 1, @contributeCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Membership Signup{/ts}', 7, 'Membership Signup', NULL, 1, NULL, 7, '{ts escape="sql"}Online or offline membership signup.{/ts}', 0, 1, 1, @memberCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Membership Renewal{/ts}', 8, 'Membership Renewal', NULL, 1, NULL, 8, '{ts escape="sql"}Online or offline membership renewal.{/ts}', 0, 1, 1, @memberCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Tell a Friend{/ts}', 9, 'Tell a Friend', NULL, 1, NULL, 9, '{ts escape="sql"}Send information about a contribution campaign or event to a friend.{/ts}', 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Pledge Acknowledgment{/ts}', 10, 'Pledge Acknowledgment', NULL, 1, NULL, 10, '{ts escape="sql"}Send Pledge Acknowledgment.{/ts}', 0, 1, 1, @pledgeCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Pledge Reminder{/ts}', 11, 'Pledge Reminder', NULL, 1, NULL, 11, '{ts escape="sql"}Send Pledge Reminder.{/ts}', 0, 1, 1, @pledgeCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Inbound Email{/ts}', 12, 'Inbound Email', NULL, 1, NULL, 12, '{ts escape="sql"}Inbound Email.{/ts}', 0, 1, 1, NULL, NULL, NULL), + +-- Activity Types for case activities + (@option_group_id_act, '{ts escape="sql"}Open Case{/ts}', 13, 'Open Case', NULL, 0, 0, 13, '', 0, 1, 1, @caseCompId, NULL, 'fa-folder-open-o'), + (@option_group_id_act, '{ts escape="sql"}Follow up{/ts}', 14, 'Follow up', NULL, 0, 0, 14, '', 0, 1, 1, @caseCompId, NULL, 'fa-share-square-o'), + (@option_group_id_act, '{ts escape="sql"}Change Case Type{/ts}', 15, 'Change Case Type', NULL, 0, 0, 15, '', 0, 1, 1, @caseCompId, NULL, 'fa-random'), + (@option_group_id_act, '{ts escape="sql"}Change Case Status{/ts}', 16, 'Change Case Status', NULL, 0, 0, 16, '', 0, 1, 1, @caseCompId, NULL, 'fa-pencil-square-o'), + (@option_group_id_act, '{ts escape="sql"}Change Case Subject{/ts}',53, 'Change Case Subject',NULL, 0, 0, 53, '', 0, 1, 1, @caseCompId, NULL, 'fa-pencil-square-o'), + (@option_group_id_act, '{ts escape="sql"}Change Custom Data{/ts}', 33, 'Change Custom Data', NULL, 0, 0, 33, '', 0, 1, 1, @caseCompId, NULL, 'fa-table'), + + (@option_group_id_act, '{ts escape="sql"}Membership Renewal Reminder{/ts}', 17, 'Membership Renewal Reminder', NULL, 1, NULL, 17, '{ts escape="sql"}offline membership renewal reminder.{/ts}', 0, 1, 1, @memberCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Change Case Start Date{/ts}', 18, 'Change Case Start Date', NULL, 0, 0, 18, '', 0, 1, 1, @caseCompId, NULL , 'fa-calendar'), + (@option_group_id_act, '{ts escape="sql"}Bulk Email{/ts}', 19, 'Bulk Email', NULL, 1, NULL, 19, '{ts escape="sql"}Bulk Email Sent.{/ts}', 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Assign Case Role{/ts}', 20, 'Assign Case Role', NULL,0, 0, 20, '', 0, 1, 1, @caseCompId, NULL, 'fa-user-plus'), + (@option_group_id_act, '{ts escape="sql"}Remove Case Role{/ts}', 21, 'Remove Case Role', NULL,0, 0, 21, '', 0, 1, 1, @caseCompId, NULL, 'fa-user-times'), + (@option_group_id_act, '{ts escape="sql"}Print/Merge Document{/ts}', 22, 'Print PDF Letter', NULL, 0, NULL, 22, '{ts escape="sql"}Export letters and other printable documents.{/ts}', 0, 1, 1, NULL, NULL, 'fa-file-pdf-o'), + (@option_group_id_act, '{ts escape="sql"}Merge Case{/ts}', 23, 'Merge Case', NULL, 0, NULL, 23, '', 0, 1, 1, @caseCompId, NULL , 'fa-compress'), + (@option_group_id_act, '{ts escape="sql"}Reassigned Case{/ts}', 24, 'Reassigned Case', NULL, 0, NULL, 24, '', 0, 1, 1, @caseCompId, NULL , 'fa-user-circle-o'), + (@option_group_id_act, '{ts escape="sql"}Link Cases{/ts}', 25, 'Link Cases', NULL, 0, NULL, 25, '', 0, 1, 1, @caseCompId, NULL , 'fa-link'), + (@option_group_id_act, '{ts escape="sql"}Change Case Tags{/ts}', 26, 'Change Case Tags', NULL,0, 0, 26, '', 0, 1, 1, @caseCompId, NULL, 'fa-tags'), + (@option_group_id_act, '{ts escape="sql"}Add Client To Case{/ts}', 27, 'Add Client To Case', NULL,0, 0, 26, '', 0, 1, 1, @caseCompId, NULL, 'fa-users'), + +-- Activity Types for CiviCampaign + (@option_group_id_act, '{ts escape="sql"}Survey{/ts}', 28, 'Survey', NULL,0, 0, 27, '', 0, 1, 1, @campaignCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Canvass{/ts}', 29, 'Canvass', NULL,0, 0, 28, '', 0, 1, 1, @campaignCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}PhoneBank{/ts}', 30, 'PhoneBank', NULL,0, 0, 29, '', 0, 1, 1, @campaignCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}WalkList{/ts}', 31, 'WalkList', NULL,0, 0, 30, '', 0, 1, 1, @campaignCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Petition Signature{/ts}', 32, 'Petition', NULL,0, 0, 31, '', 0, 1, 1, @campaignCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Mass SMS{/ts}', 34, 'Mass SMS', NULL, 1, NULL, 34, '{ts escape="sql"}Mass SMS{/ts}', 0, 1, 1, NULL, NULL, NULL), + +-- Additional Membership-related Activity Types + (@option_group_id_act, '{ts escape="sql"}Change Membership Status{/ts}', 35, 'Change Membership Status', NULL, 1, NULL, 35, '{ts escape="sql"}Change Membership Status.{/ts}', 0, 1, 1, @memberCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Change Membership Type{/ts}', 36, 'Change Membership Type', NULL, 1, NULL, 36, '{ts escape="sql"}Change Membership Type.{/ts}', 0, 1, 1, @memberCompId, NULL, NULL), + + (@option_group_id_act, '{ts escape="sql"}Cancel Recurring Contribution{/ts}', 37, 'Cancel Recurring Contribution', NULL,1, 0, 37, '', 0, 1, 1, @contributeCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Update Recurring Contribution Billing Details{/ts}', 38, 'Update Recurring Contribution Billing Details', NULL,1, 0, 38, '', 0, 1, 1, @contributeCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Update Recurring Contribution{/ts}', 39, 'Update Recurring Contribution', NULL,1, 0, 39, '', 0, 1, 1, @contributeCompId, NULL, NULL), + + (@option_group_id_act, '{ts escape="sql"}Reminder Sent{/ts}', 40, 'Reminder Sent', NULL, 1, 0, 40, '', 0, 1, 1, NULL, NULL, NULL), + + -- Activity Types for Financial Transactions Batch + (@option_group_id_act, '{ts escape="sql"}Export Accounting Batch{/ts}', 41, 'Export Accounting Batch', NULL, 1, 0, 41, 'Export Accounting Batch', 0, 1, 1, @contributeCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Create Batch{/ts}', 42, 'Create Batch', NULL, 1, 0, 42, 'Create Batch', 0, 1, 1, @contributeCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Edit Batch{/ts}', 43, 'Edit Batch', NULL, 1, 0, 43, 'Edit Batch', 0, 1, 1, @contributeCompId, NULL, NULL), + +-- new sms options + (@option_group_id_act, '{ts escape="sql"}SMS delivery{/ts}', 44, 'SMS delivery', NULL, 1, NULL, 44, '{ts escape="sql"}SMS delivery{/ts}', 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Inbound SMS{/ts}', 45, 'Inbound SMS', NULL, 1, NULL, 45, '{ts escape="sql"}Inbound SMS{/ts}', 0, 1, 1, NULL, NULL, NULL), + + + -- Activity types for particial payment + (@option_group_id_act, '{ts escape="sql"}Payment{/ts}', 46, 'Payment', NULL, 1, NULL, 46, '{ts escape="sql"}Additional payment recorded for event or membership fee.{/ts}', 0, 1, 1, @contributeCompId, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Refund{/ts}', 47, 'Refund', NULL, 1, NULL, 47, '{ts escape="sql"}Refund recorded for event or membership fee.{/ts}', 0, 1, 1, @contributeCompId, NULL, NULL), + + -- for selection changes + (@option_group_id_act, '{ts escape="sql"}Change Registration{/ts}', 48, 'Change Registration', NULL, 1, NULL, 48, '{ts escape="sql"}Changes to an existing event registration.{/ts}', 0, 1, 1, @eventCompId, NULL, NULL), + -- for Print or Email Contribution Invoices + (@option_group_id_act, '{ts escape="sql"}Downloaded Invoice{/ts}', 49, 'Downloaded Invoice', NULL, 1, NULL, 49, '{ts escape="sql"}Downloaded Invoice.{/ts}',0, 1, 1, NULL, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Emailed Invoice{/ts}', 50, 'Emailed Invoice', NULL, 1, NULL, 50, '{ts escape="sql"}Emailed Invoice.{/ts}',0, 1, 1, NULL, NULL, NULL), + + -- for manual contact merge + (@option_group_id_act, '{ts escape="sql"}Contact Merged{/ts}', 51, 'Contact Merged', NULL, 1, NULL, 51, '{ts escape="sql"}Contact Merged{/ts}',0, 1, 1, NULL, NULL, NULL), + (@option_group_id_act, '{ts escape="sql"}Contact Deleted by Merge{/ts}', 52, 'Contact Deleted by Merge', NULL, 1, NULL, 52, '{ts escape="sql"}Contact was merged into another contact{/ts}',0, 1, 1, NULL, NULL, NULL), + + -- Activity Type for failed payment + (@option_group_id_act, 'Failed Payment', 54, 'Failed Payment', NULL, 1, 0, 54, 'Failed Payment', 0, 1, 1, @contributeCompId, NULL, NULL), + + (@option_group_id_gender, '{ts escape="sql"}Female{/ts}', 1, 'Female', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_gender, '{ts escape="sql"}Male{/ts}', 2, 'Male', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_gender, '{ts escape="sql"}Other{/ts}', 3, 'Other', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_IMProvider, 'Yahoo', 1, 'Yahoo', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_IMProvider, 'MSN', 2, 'Msn', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_IMProvider, 'AIM', 3, 'Aim', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_IMProvider, 'GTalk', 4, 'Gtalk', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_IMProvider, 'Jabber',5, 'Jabber',NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_IMProvider, 'Skype', 6, 'Skype', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_mobileProvider, 'Sprint' , 1, 'Sprint' , NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_mobileProvider, 'Verizon' , 2, 'Verizon' , NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_mobileProvider, 'Cingular', 3, 'Cingular', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_prefix, '{ts escape="sql"}Mrs.{/ts}', 1, 'Mrs.', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_prefix, '{ts escape="sql"}Ms.{/ts}', 2, 'Ms.', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_prefix, '{ts escape="sql"}Mr.{/ts}', 3, 'Mr.', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_prefix, '{ts escape="sql"}Dr.{/ts}', 4, 'Dr.', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_suffix, '{ts escape="sql"}Jr.{/ts}', 1, 'Jr.', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_suffix, '{ts escape="sql"}Sr.{/ts}', 2, 'Sr.', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_suffix, 'II', 3, 'II', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_suffix, 'III', 4, 'III', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_suffix, 'IV', 5, 'IV', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_suffix, 'V', 6, 'V', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_suffix, 'VI', 7, 'VI', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_suffix, 'VII', 8, 'VII', NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_aclRole, '{ts escape="sql"}Administrator{/ts}', 1, 'Admin', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aclRole, '{ts escape="sql"}Authenticated{/ts}', 2, 'Auth' , NULL, 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + + (@option_group_id_acc, 'Visa' , 1, 'Visa' , NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acc, 'MasterCard', 2, 'MasterCard', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acc, 'Amex' , 3, 'Amex' , NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acc, 'Discover' , 4, 'Discover' , NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_pi, '{ts escape="sql"}Credit Card{/ts}', 1, 'Credit Card', NULL, 0, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pi, '{ts escape="sql"}Debit Card{/ts}', 2, 'Debit Card', NULL, 0, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pi, '{ts escape="sql"}Cash{/ts}', 3, 'Cash', NULL, 0, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pi, '{ts escape="sql"}Check{/ts}', 4, 'Check', NULL, 0, 1, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pi, '{ts escape="sql"}EFT{/ts}', 5, 'EFT', NULL, 0, 0, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_cs, '{ts escape="sql"}Completed{/ts}' , 1, 'Completed' , NULL, 0, NULL, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}Pending{/ts}' , 2, 'Pending' , NULL, 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}Cancelled{/ts}' , 3, 'Cancelled' , NULL, 0, NULL, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}Failed{/ts}' , 4, 'Failed' , NULL, 0, NULL, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}In Progress{/ts}', 5, 'In Progress', NULL, 0, NULL, 5, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}Overdue{/ts}' , 6, 'Overdue' , NULL, 0, NULL, 6, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}Refunded{/ts}' , 7, 'Refunded' , NULL, 0, NULL, 7, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}Partially paid{/ts}', 8, 'Partially paid', NULL, 0, NULL, 8, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}Pending refund{/ts}', 9, 'Pending refund', NULL, 0, NULL, 9, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cs, '{ts escape="sql"}Chargeback{/ts}', 10, 'Chargeback', NULL, 0, NULL, 10, NULL, 0, 1, 1, NULL, NULL, NULL), + + (@option_group_id_pcp, '{ts escape="sql"}Waiting Review{/ts}', 1, 'Waiting Review', NULL, 0, NULL, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pcp, '{ts escape="sql"}Approved{/ts}' , 2, 'Approved' , NULL, 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pcp, '{ts escape="sql"}Not Approved{/ts}' , 3, 'Not Approved' , NULL, 0, NULL, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + + (@option_group_id_pcpOwnerNotify, '{ts escape="sql"}Owner chooses whether to receive notifications{/ts}', 1, 'owner_chooses', NULL, 0, 1, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pcpOwnerNotify, '{ts escape="sql"}Notifications are sent to ALL owners{/ts}' , 2, 'all_owners' , NULL, 0, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pcpOwnerNotify, '{ts escape="sql"}Notifications are NOT available{/ts}' , 3, 'no_notifications' , NULL, 0, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + + (@option_group_id_pRole, '{ts escape="sql"}Attendee{/ts}', 1, 'Attendee', NULL, 1, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pRole, '{ts escape="sql"}Volunteer{/ts}', 2, 'Volunteer', NULL, 1, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pRole, '{ts escape="sql"}Host{/ts}', 3, 'Host', NULL, 1, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pRole, '{ts escape="sql"}Speaker{/ts}', 4, 'Speaker', NULL, 1, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_etype, '{ts escape="sql"}Conference{/ts}', 1, 'Conference', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_etype, '{ts escape="sql"}Exhibition{/ts}', 2, 'Exhibition', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_etype, '{ts escape="sql"}Fundraiser{/ts}', 3, 'Fundraiser', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_etype, '{ts escape="sql"}Meeting{/ts}', 4, 'Meeting', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_etype, '{ts escape="sql"}Performance{/ts}',5, 'Performance', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_etype, '{ts escape="sql"}Workshop{/ts}', 6, 'Workshop', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- note that these are not ts'ed since they are used for logic in most cases and not display +-- they are used for display only in the prefernces field settings + (@option_group_id_cvOpt, '{ts escape="sql"}Activities{/ts}' , 1, 'activity', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Relationships{/ts}', 2, 'rel', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Groups{/ts}' , 3, 'group', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Notes{/ts}' , 4, 'note', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Tags{/ts}' , 5, 'tag', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Change Log{/ts}' , 6, 'log', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Contributions{/ts}', 7, 'CiviContribute', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Memberships{/ts}' , 8, 'CiviMember', NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Events{/ts}' , 9, 'CiviEvent', NULL, 0, NULL, 9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Cases{/ts}' , 10, 'CiviCase', NULL, 0, NULL, 10, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Grants{/ts}' , 11, 'CiviGrant', NULL, 0, NULL, 11, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Pledges{/ts}' , 13, 'CiviPledge', NULL, 0, NULL, 13, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cvOpt, '{ts escape="sql"}Mailings{/ts}' , 14, 'CiviMail', NULL, 0, NULL, 14, NULL, 0, 0, 1, NULL, NULL, NULL), + + + (@option_group_id_csgOpt, '{ts escape="sql"}Show Smart Groups on Demand{/ts}',1, 'showondemand', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csgOpt, '{ts escape="sql"}Always Show Smart Groups{/ts}', 2, 'alwaysshow', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csgOpt, '{ts escape="sql"}Hide Smart Groups{/ts}' , 3, 'hide', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_ceOpt, '{ts escape="sql"}Custom Data{/ts}' , 1, 'CustomData', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Address{/ts}' , 2, 'Address', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Communication Preferences{/ts}', 3, 'CommunicationPreferences', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Notes{/ts}' , 4, 'Notes', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Demographics{/ts}' , 5, 'Demographics', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Tags and Groups{/ts}' , 6, 'TagsAndGroups', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Email{/ts}' , 7, 'Email', NULL, 1, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Phone{/ts}' , 8, 'Phone', NULL, 1, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Instant Messenger{/ts}' , 9, 'IM', NULL, 1, NULL, 9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Open ID{/ts}' , 10, 'OpenID', NULL, 1, NULL, 10, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Website{/ts}' , 11, 'Website', NULL, 1, NULL, 11, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Prefix{/ts}' , 12, 'Prefix', NULL, 2, NULL, 12, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Formal Title{/ts}' , 13, 'Formal Title', NULL, 2, NULL, 13, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}First Name{/ts}' , 14, 'First Name', NULL, 2, NULL, 14, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Middle Name{/ts}' , 15, 'Middle Name', NULL, 2, NULL, 15, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Last Name{/ts}' , 16, 'Last Name', NULL, 2, NULL, 16, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_ceOpt, '{ts escape="sql"}Suffix{/ts}' , 17, 'Suffix', NULL, 2, NULL, 17, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_asOpt, '{ts escape="sql"}Address Fields{/ts}' , 1, 'location', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Custom Fields{/ts}' , 2, 'custom', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Activities{/ts}' , 3, 'activity', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Relationships{/ts}' , 4, 'relationship', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Notes{/ts}' , 5, 'notes', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Change{/ts} Log' , 6, 'changeLog', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Contributions{/ts}' , 7, 'CiviContribute', NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Memberships{/ts}' , 8, 'CiviMember', NULL, 0, NULL, 9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Events{/ts}' , 9, 'CiviEvent', NULL, 0, NULL, 10, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Cases{/ts}' , 10, 'CiviCase', NULL, 0, NULL, 11, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, 'Grants' , 12, 'CiviGrant', NULL, 0, NULL, 14, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Demographics{/ts}' , 13, 'demographics', NULL, 0, NULL, 15, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Pledges{/ts}' , 15, 'CiviPledge', NULL, 0, NULL, 17, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Contact Type{/ts}' , 16, 'contactType', NULL, 0, NULL, 18, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Groups{/ts}' , 17, 'groups', NULL, 0, NULL, 19, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Tags{/ts}' , 18, 'tags', NULL, 0, NULL, 20, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_asOpt, '{ts escape="sql"}Mailing{/ts}' , 19, 'CiviMail', NULL, 0, NULL, 21, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_udOpt, '{ts escape="sql"}Groups{/ts}' , 1, 'Groups', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_udOpt, '{ts escape="sql"}Contributions{/ts}' , 2, 'CiviContribute', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_udOpt, '{ts escape="sql"}Memberships{/ts}' , 3, 'CiviMember', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_udOpt, '{ts escape="sql"}Events{/ts}' , 4, 'CiviEvent', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_udOpt, '{ts escape="sql"}My Contacts / Organizations{/ts}', 5, 'Permissioned Orgs', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_udOpt, '{ts escape="sql"}Pledges{/ts}' , 7, 'CiviPledge', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_udOpt, '{ts escape="sql"}Personal Campaign Pages{/ts}' , 8, 'PCP', NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_udOpt, '{ts escape="sql"}Assigned Activities{/ts}' , 9, 'Assigned Activities', NULL, 0, NULL, 9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_udOpt, '{ts escape="sql"}Invoices / Credit Notes{/ts}' , 10, 'Invoices / Credit Notes', NULL, 0, NULL, 10, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_acsOpt, '{ts escape="sql"}Email Address{/ts}' , 2, 'email' , NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acsOpt, '{ts escape="sql"}Phone{/ts}' , 3, 'phone' , NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acsOpt, '{ts escape="sql"}Street Address{/ts}' , 4, 'street_address', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acsOpt, '{ts escape="sql"}City{/ts}' , 5, 'city' , NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acsOpt, '{ts escape="sql"}State/Province{/ts}' , 6, 'state_province', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acsOpt, '{ts escape="sql"}Country{/ts}' , 7, 'country' , NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acsOpt, '{ts escape="sql"}Postal Code{/ts}' , 8, 'postal_code' , NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_acConRef, '{ts escape="sql"}Email Address{/ts}' , 2, 'email' , NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acConRef, '{ts escape="sql"}Phone{/ts}' , 3, 'phone' , NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acConRef, '{ts escape="sql"}Street Address{/ts}' , 4, 'street_address', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acConRef, '{ts escape="sql"}City{/ts}' , 5, 'city' , NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acConRef, '{ts escape="sql"}State/Province{/ts}' , 6, 'state_province', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acConRef, '{ts escape="sql"}Country{/ts}' , 7, 'country' , NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acConRef, '{ts escape="sql"}Postal Code{/ts}' , 8, 'country' , NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_adOpt, '{ts escape="sql"}Street Address{/ts}' , 1, 'street_address', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Supplemental Address 1{/ts}' , 2, 'supplemental_address_1', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Supplemental Address 2{/ts}' , 3, 'supplemental_address_2', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Supplemental Address 3{/ts}' , 4, 'supplemental_address_3', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}City{/ts}' , 5, 'city' , NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Postal Code{/ts}' , 6, 'postal_code' , NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Postal Code Suffix{/ts}', 7, 'postal_code_suffix', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}County{/ts}' , 8, 'county' , NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}State/Province{/ts}' , 9, 'state_province', NULL, 0, NULL, 9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Country{/ts}' , 10, 'country' , NULL, 0, NULL, 10, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Latitude{/ts}' , 11, 'geo_code_1' , NULL, 0, NULL, 11, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Longitude{/ts}' , 12, 'geo_code_2', NULL, 0, NULL, 12, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Address Name{/ts}' , 13, 'address_name', NULL, 0, NULL, 13, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_adOpt, '{ts escape="sql"}Street Address Parsing{/ts}', 14, 'street_address_parsing', NULL, 0, NULL, 14, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_gType, '{ts escape="sql"}Access Control{/ts}', 1, 'Access Control', NULL, 0, NULL, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_gType, '{ts escape="sql"}Mailing List{/ts}', 2, 'Mailing List', NULL, 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + + (@option_group_id_grantSt, '{ts escape="sql"}Submitted{/ts}', 1, 'Submitted', NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_grantSt, '{ts escape="sql"}Eligible{/ts}', 2, 'Eligible', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_grantSt, '{ts escape="sql"}Ineligible{/ts}', 3, 'Ineligible', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_grantSt, '{ts escape="sql"}Paid{/ts}', 4, 'Paid', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_grantSt, '{ts escape="sql"}Awaiting Information{/ts}', 5, 'Awaiting Information', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_grantSt, '{ts escape="sql"}Withdrawn{/ts}', 6, 'Withdrawn', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_grantSt, '{ts escape="sql"}Approved for Payment{/ts}', 7, 'Approved for Payment', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_Sample' , 1, 'CRM_Contact_Form_Search_Custom_Sample' , NULL, 0, NULL, 1, '{ts escape="sql"}Household Name and State{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_ContributionAggregate', 2, 'CRM_Contact_Form_Search_Custom_ContributionAggregate', NULL, 0, NULL, 2, '{ts escape="sql"}Contribution Aggregate{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_Basic' , 3, 'CRM_Contact_Form_Search_Custom_Basic' , NULL, 0, NULL, 3, '{ts escape="sql"}Basic Search{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_Group' , 4, 'CRM_Contact_Form_Search_Custom_Group' , NULL, 0, NULL, 4, '{ts escape="sql"}Include / Exclude Search{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_PostalMailing' , 5, 'CRM_Contact_Form_Search_Custom_PostalMailing', NULL, 0, NULL, 5, '{ts escape="sql"}Postal Mailing{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_Proximity' , 6, 'CRM_Contact_Form_Search_Custom_Proximity', NULL, 0, NULL, 6, '{ts escape="sql"}Proximity Search{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_EventAggregate' , 7, 'CRM_Contact_Form_Search_Custom_EventAggregate', NULL, 0, NULL, 7, '{ts escape="sql"}Event Aggregate{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_ActivitySearch' , 8, 'CRM_Contact_Form_Search_Custom_ActivitySearch', NULL, 0, NULL, 8, '{ts escape="sql"}Activity Search{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_PriceSet' , 9, 'CRM_Contact_Form_Search_Custom_PriceSet', NULL, 0, NULL, 9, '{ts escape="sql"}Price Set Details for Event Participants{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_ZipCodeRange' ,10, 'CRM_Contact_Form_Search_Custom_ZipCodeRange', NULL, 0, NULL, 10, '{ts escape="sql"}Zip Code Range{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_DateAdded' ,11, 'CRM_Contact_Form_Search_Custom_DateAdded', NULL, 0, NULL, 11, '{ts escape="sql"}Date Added to CiviCRM{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_MultipleValues' ,12, 'CRM_Contact_Form_Search_Custom_MultipleValues', NULL, 0, NULL, 12, '{ts escape="sql"}Custom Group Multiple Values Listing{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_ContribSYBNT' ,13, 'CRM_Contact_Form_Search_Custom_ContribSYBNT', NULL, 0, NULL, 13, '{ts escape="sql"}Contributions made in Year X and not Year Y{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_TagContributions' ,14, 'CRM_Contact_Form_Search_Custom_TagContributions', NULL, 0, NULL, 14, '{ts escape="sql"}Find Contribution Amounts by Tag{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_csearch , 'CRM_Contact_Form_Search_Custom_FullText' ,15, 'CRM_Contact_Form_Search_Custom_FullText', NULL, 0, NULL, 15, '{ts escape="sql"}Full-text Search{/ts}', 0, 0, 1, NULL, NULL, NULL), + +-- report templates + (@option_group_id_report , '{ts escape="sql"}Constituent Report (Summary){/ts}', 'contact/summary', 'CRM_Report_Form_Contact_Summary', NULL, 0, NULL, 1, '{ts escape="sql"}Provides a list of address and telephone information for constituent records in your system.{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Constituent Report (Detail){/ts}', 'contact/detail', 'CRM_Report_Form_Contact_Detail', NULL, 0, NULL, 2, '{ts escape="sql"}Provides contact-related information on contributions, memberships, events and activities.{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Activity Details Report{/ts}', 'activity', 'CRM_Report_Form_Activity', NULL, 0, NULL, 3, '{ts escape="sql"}Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required){/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Walk / Phone List Report{/ts}', 'walklist', 'CRM_Report_Form_Walklist_Walklist', NULL, 0, NULL, 4, '{ts escape="sql"}Provides a detailed report for your walk/phonelist for targeted contacts{/ts}', 0, 0, 0, NULL, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Current Employer Report{/ts}', 'contact/currentEmployer', 'CRM_Report_Form_Contact_CurrentEmployer', NULL, 0, NULL, 5, '{ts escape="sql"}Provides detail list of employer employee relationships along with employment details Ex Join Date{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Contribution Summary Report{/ts}', 'contribute/summary', 'CRM_Report_Form_Contribute_Summary', NULL, 0, NULL, 6, '{ts escape="sql"}Groups and totals contributions by criteria including contact, time period, financial type, contributor location, etc.{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Contribution Detail Report{/ts}', 'contribute/detail', 'CRM_Report_Form_Contribute_Detail', NULL, 0, NULL, 7, '{ts escape="sql"}Lists specific contributions by criteria including contact, time period, financial type, contributor location, etc. Contribution summary report points to this report for contribution details.{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Repeat Contributions Report{/ts}', 'contribute/repeat', 'CRM_Report_Form_Contribute_Repeat', NULL, 0, NULL, 8, '{ts escape="sql"}Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Contributions by Organization Report{/ts}', 'contribute/organizationSummary', 'CRM_Report_Form_Contribute_OrganizationSummary', NULL, 0, NULL, 9, '{ts escape="sql"}Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Contributions by Household Report{/ts}', 'contribute/householdSummary', 'CRM_Report_Form_Contribute_HouseholdSummary', NULL, 0, NULL, 10, '{ts escape="sql"}Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Top Donors Report{/ts}', 'contribute/topDonor', 'CRM_Report_Form_Contribute_TopDonor', NULL, 0, NULL, 11, '{ts escape="sql"}Provides a list of the top donors during a time period you define. You can include as many donors as you want (for example, top 100 of your donors).{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}SYBUNT Report{/ts}', 'contribute/sybunt', 'CRM_Report_Form_Contribute_Sybunt', NULL, 0, NULL, 12, '{ts escape="sql"}SYBUNT means some year(s) but not this year. Provides a list of constituents who donated at some time in the history of your organization but did not donate during the time period you specify.{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}LYBUNT Report{/ts}', 'contribute/lybunt', 'CRM_Report_Form_Contribute_Lybunt', NULL, 0, NULL, 13, '{ts escape="sql"}LYBUNT means last year but not this year. Provides a list of constituents who donated last year but did not donate during the time period you specify as the current year.{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Soft Credit Report{/ts}', 'contribute/softcredit', 'CRM_Report_Form_Contribute_SoftCredit', NULL, 0, NULL, 14, '{ts escape="sql"}Shows contributions made by contacts that have been soft-credited to other contacts.{/ts}', 0, 0, 1,@contributeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Membership Report (Summary){/ts}', 'member/summary', 'CRM_Report_Form_Member_Summary', NULL, 0, NULL, 15, '{ts escape="sql"}Provides a summary of memberships by type and join date.{/ts}', 0, 0, 1, @memberCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Membership Report (Detail){/ts}', 'member/detail', 'CRM_Report_Form_Member_Detail', NULL, 0, NULL, 16, '{ts escape="sql"}Provides a list of members along with their membership status and membership details (Join Date, Start Date, End Date). Can also display contributions (payments) associated with each membership.{/ts}', 0, 0, 1, @memberCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Membership Report (Lapsed){/ts}', 'member/lapse', 'CRM_Report_Form_Member_Lapse', NULL, 0, NULL, 17, '{ts escape="sql"}Provides a list of memberships that lapsed or will lapse before the date you specify.{/ts}', 0, 0, 1, @memberCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Event Participant Report (List){/ts}', 'event/participantListing', 'CRM_Report_Form_Event_ParticipantListing', NULL, 0, NULL, 18, '{ts escape="sql"}Provides lists of participants for an event.{/ts}', 0, 0, 1, @eventCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Event Income Report (Summary){/ts}', 'event/summary', 'CRM_Report_Form_Event_Summary', NULL, 0, NULL, 19, '{ts escape="sql"}Provides an overview of event income. You can include key information such as event ID, registration, attendance, and income generated to help you determine the success of an event.{/ts}', 0, 0, 1, @eventCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Event Income Report (Detail){/ts}', 'event/income', 'CRM_Report_Form_Event_Income', NULL, 0, NULL, 20, '{ts escape="sql"}Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.{/ts}', 0, 0, 1, @eventCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Pledge Detail Report{/ts}', 'pledge/detail', 'CRM_Report_Form_Pledge_Detail', NULL, 0, NULL, 21, '{ts escape="sql"}List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.{/ts}', 0, 0, 1, @pledgeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Pledged but not Paid Report{/ts}', 'pledge/pbnp', 'CRM_Report_Form_Pledge_Pbnp', NULL, 0, NULL, 22, '{ts escape="sql"}Pledged but not Paid Report{/ts}', 0, 0, 1, @pledgeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Relationship Report{/ts}', 'contact/relationship', 'CRM_Report_Form_Contact_Relationship', NULL, 0, NULL, 23, '{ts escape="sql"}Relationship Report{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Case Summary Report{/ts}', 'case/summary', 'CRM_Report_Form_Case_Summary', NULL, 0, NULL, 24, '{ts escape="sql"}Provides a summary of cases and their duration by date range, status, staff member and / or case role.{/ts}', 0, 0, 1, @caseCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Case Time Spent Report{/ts}', 'case/timespent', 'CRM_Report_Form_Case_TimeSpent', NULL, 0, NULL, 25, '{ts escape="sql"}Aggregates time spent on case and / or non-case activities by activity type and contact.{/ts}', 0, 0, 1, @caseCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Contact Demographics Report{/ts}', 'case/demographics', 'CRM_Report_Form_Case_Demographics', NULL, 0, NULL, 26, '{ts escape="sql"}Demographic breakdown for case clients (and or non-case contacts) in your database. Includes custom contact fields.{/ts}', 0, 0, 1, @caseCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Database Log Report{/ts}', 'contact/log', 'CRM_Report_Form_Contact_Log', NULL, 0, NULL, 27, '{ts escape="sql"}Log of contact and activity records created or updated in a given date range.{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Activity Summary Report{/ts}', 'activitySummary', 'CRM_Report_Form_ActivitySummary', NULL, 0, NULL, 28, '{ts escape="sql"}Shows activity statistics by type / date{/ts}', 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_report, '{ts escape="sql"}Bookkeeping Transactions Report{/ts}', 'contribute/bookkeeping', 'CRM_Report_Form_Contribute_Bookkeeping', NULL, 0, 0, 29, '{ts escape="sql"}Shows Bookkeeping Transactions Report{/ts}', 0, 0, 1, 2, NULL, NULL), + (@option_group_id_report , {localize}'{ts escape="sql"}Grant Report (Detail){/ts}'{/localize}, 'grant/detail', 'CRM_Report_Form_Grant_Detail', NULL, 0, 0, 30, {localize}'{ts escape="sql"}Grant Report Detail{/ts}'{/localize}, 0, 0, 1, @grantCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Participant list Count Report{/ts}'{/localize}, 'event/participantlist', 'CRM_Report_Form_Event_ParticipantListCount', NULL, 0, 0, 31, {localize}'{ts escape="sql"}Shows the Participant list with Participant Count.{/ts}'{/localize}, 0, 0, 1, @eventCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Income Count Summary Report{/ts}'{/localize}, 'event/incomesummary', 'CRM_Report_Form_Event_IncomeCountSummary', NULL, 0, 0, 32, {localize}'{ts escape="sql"}Shows the Income Summary of events with Count.{/ts}'{/localize}, 0, 0, 1, @eventCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Case Detail Report{/ts}'{/localize}, 'case/detail', 'CRM_Report_Form_Case_Detail', NULL, 0, 0, 33, {localize}'{ts escape="sql"}Case Details{/ts}'{/localize}, 0, 0, 1, @caseCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Mail Bounce Report{/ts}'{/localize}, 'Mailing/bounce', 'CRM_Report_Form_Mailing_Bounce', NULL, 0, NULL, 34, {localize}'{ts escape="sql"}Bounce Report for mailings{/ts}'{/localize}, 0, 0, 1, @mailCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Mail Summary Report{/ts}'{/localize}, 'Mailing/summary', 'CRM_Report_Form_Mailing_Summary', NULL, 0, NULL, 35, {localize}'{ts escape="sql"}Summary statistics for mailings{/ts}'{/localize}, 0, 0, 1, @mailCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Mail Opened Report{/ts}'{/localize}, 'Mailing/opened', 'CRM_Report_Form_Mailing_Opened', NULL, 0, NULL, 36, {localize}'{ts escape="sql"}Display contacts who opened emails from a mailing{/ts}'{/localize}, 0, 0, 1, @mailCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Mail Click-Through Report{/ts}'{/localize}, 'Mailing/clicks', 'CRM_Report_Form_Mailing_Clicks', NULL, 0, NULL, 37, {localize}'{ts escape="sql"}Display clicks from each mailing{/ts}'{/localize}, 0, 0, 1, @mailCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Contact Logging Report (Summary){/ts}'{/localize}, 'logging/contact/summary', 'CRM_Report_Form_Contact_LoggingSummary', NULL, 0, NULL, 38, {localize}'{ts escape="sql"}Contact modification report for the logging infrastructure (summary).{/ts}'{/localize}, 0, 0, 0, NULL, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Contact Logging Report (Detail){/ts}'{/localize}, 'logging/contact/detail', 'CRM_Report_Form_Contact_LoggingDetail', NULL, 0, NULL, 39, {localize}'{ts escape="sql"}Contact modification report for the logging infrastructure (detail).{/ts}'{/localize}, 0, 0, 0, NULL, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Grant Report (Statistics){/ts}'{/localize}, 'grant/statistics', 'CRM_Report_Form_Grant_Statistics', NULL, 0, NULL, 42, {localize}'{ts escape="sql"}Shows statistics for Grants.{/ts}'{/localize}, 0, 0, 1, @grantCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Survey Report (Detail){/ts}'{/localize}, 'survey/detail', 'CRM_Report_Form_Campaign_SurveyDetails', NULL, 0, NULL, 43, {localize}'{ts escape="sql"}Detailed report for canvassing, phone-banking, walk lists or other surveys.{/ts}'{/localize}, 0, 0, 1, @campaignCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Personal Campaign Page Report{/ts}'{/localize}, 'contribute/pcp', 'CRM_Report_Form_Contribute_PCP', NULL, 0, NULL, 44, {localize}'{ts escape="sql"}Summarizes amount raised and number of contributors for each Personal Campaign Page.{/ts}'{/localize}, 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report , {localize}'{ts escape="sql"}Pledge Summary Report{/ts}'{/localize}, 'pledge/summary', 'CRM_Report_Form_Pledge_Summary', NULL, 0, NULL, 45, {localize}'{ts escape="sql"}Groups and totals pledges by criteria including contact, time period, pledge status, location, etc.{/ts}'{/localize}, 0, 0, 1, @pledgeCompId, NULL, NULL), + (@option_group_id_report , '{ts escape="sql"}Contribution Aggregate by Relationship{/ts}', 'contribute/history', 'CRM_Report_Form_Contribute_History', NULL, 0, NULL, 46, '{ts escape="sql"}List contact's donation history, grouped by year, along with contributions attributed to any of the contact's related contacts.{/ts}', 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Mail Detail Report{/ts}'{/localize}, 'mailing/detail', 'CRM_Report_Form_Mailing_Detail', NULL, 0, NULL, 47, {localize}'{ts escape="sql"}Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.{/ts}'{/localize}, 0, 0, 1, @mailCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Contribution and Membership Details{/ts}'{/localize}, 'member/contributionDetail', 'CRM_Report_Form_Member_ContributionDetail', NULL, 0, NULL, 48, {localize}'{ts escape="sql"}Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.{/ts}'{/localize}, 0, 0, 1, @memberCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Recurring Contributions Report{/ts}'{/localize}, 'contribute/recur', 'CRM_Report_Form_Contribute_Recur', NULL, 0, NULL, 49, {localize}'{ts escape="sql"}Provides information about the status of recurring contributions{/ts}'{/localize}, 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Recurring Contributions Summary{/ts}'{/localize}, 'contribute/recursummary', 'CRM_Report_Form_Contribute_RecurSummary', NULL, 0, NULL, 49, {localize}'{ts escape="sql"}Provides simple summary for each payment instrument for which there are recurring contributions (e.g. Credit Card, Standing Order, Direct Debit, etc., NULL), showing within a given date range.{/ts}'{/localize}, 0, 0, 1, @contributeCompId, NULL, NULL), + (@option_group_id_report, {localize}'{ts escape="sql"}Deferred Revenue Details{/ts}'{/localize}, 'contribute/deferredrevenue', 'CRM_Report_Form_Contribute_DeferredRevenue', NULL, 0, NULL, 50, {localize}'{ts escape="sql"}Deferred Revenue Details Report{/ts}'{/localize}, 0, 0, 1, @contributeCompId, NULL, NULL), + + (@option_group_id_acs, '{ts escape="sql"}Scheduled{/ts}', 1, 'Scheduled', NULL, 0, 1, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_acs, '{ts escape="sql"}Completed{/ts}', 2, 'Completed', NULL, 1, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_acs, '{ts escape="sql"}Cancelled{/ts}', 3, 'Cancelled', NULL, 2, NULL, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_acs, '{ts escape="sql"}Left Message{/ts}', 4, 'Left Message', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acs, '{ts escape="sql"}Unreachable{/ts}', 5, 'Unreachable', NULL, 2, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acs, '{ts escape="sql"}Not Required{/ts}', 6, 'Not Required', NULL, 2, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acs, '{ts escape="sql"}Available{/ts}', 7, 'Available', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_acs, '{ts escape="sql"}No-show{/ts}', 8, 'No_show', NULL, 2, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_cas, '{ts escape="sql"}Ongoing{/ts}' , 1, 'Open' , 'Opened', 0, 1, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cas, '{ts escape="sql"}Resolved{/ts}', 2, 'Closed', 'Closed', 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_cas, '{ts escape="sql"}Urgent{/ts}' , 3, 'Urgent', 'Opened', 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_pl, '{ts escape="sql"}Name Only{/ts}' , 1, 'Name Only' , NULL, 0, 0, 1, 'CRM_Event_Page_ParticipantListing_Name', 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pl, '{ts escape="sql"}Name and Email{/ts}', 2, 'Name and Email' , NULL, 0, 0, 2, 'CRM_Event_Page_ParticipantListing_NameAndEmail', 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_pl, '{ts escape="sql"}Name, Status and Register Date{/ts}' , 3, 'Name, Status and Register Date', NULL, 0, 0, 3, 'CRM_Event_Page_ParticipantListing_NameStatusAndDate', 0, 1, 1, NULL, NULL, NULL), + + (@option_group_id_sfe, 'jpg', 1, 'jpg', NULL, 0, 0, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'jpeg', 2, 'jpeg', NULL, 0, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'png', 3, 'png', NULL, 0, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'gif', 4, 'gif', NULL, 0, 0, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'txt', 5, 'txt', NULL, 0, 0, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'pdf', 6, 'pdf', NULL, 0, 0, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'doc', 7, 'doc', NULL, 0, 0, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'xls', 8, 'xls', NULL, 0, 0, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'rtf', 9, 'rtf', NULL, 0, 0, 9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'csv', 10, 'csv', NULL, 0, 0, 10, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'ppt', 11, 'ppt', NULL, 0, 0, 11, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'docx', 12, 'docx', NULL, 0, 0, 12, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'xlsx', 13, 'xlsx', NULL, 0, 0, 13, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_sfe, 'odt', 14, 'odt', NULL, 0, 0, 14, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_we, '{ts escape="sql"}Textarea{/ts}', 1, 'Textarea', NULL, 0, NULL, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_we, 'CKEditor', 2, 'CKEditor', NULL, 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + + (@option_group_id_mt, '{ts escape="sql"}Search Builder{/ts}', 1, 'Search Builder', NULL, 0, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Import Contact{/ts}', 2, 'Import Contact', NULL, 0, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Import Activity{/ts}', 3, 'Import Activity', NULL, 0, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Import Contribution{/ts}', 4, 'Import Contribution', NULL, 0, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Import Membership{/ts}', 5, 'Import Membership', NULL, 0, 0, 5, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Import Participant{/ts}', 6, 'Import Participant', NULL, 0, 0, 6, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Export Contact{/ts}', 7, 'Export Contact', NULL, 0, 0, 7, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Export Contribution{/ts}', 8, 'Export Contribution', NULL, 0, 0, 8, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Export Membership{/ts}', 9, 'Export Membership', NULL, 0, 0, 9, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Export Participant{/ts}', 10, 'Export Participant', NULL, 0, 0, 10, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Export Pledge{/ts}', 11, 'Export Pledge', NULL, 0, 0, 11, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Export Case{/ts}', 12, 'Export Case', NULL, 0, 0, 12, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Export Grant{/ts}', 13, 'Export Grant', NULL, 0, 0, 13, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_mt, '{ts escape="sql"}Export Activity{/ts}', 14, 'Export Activity', NULL, 0, 0, 14, NULL, 0, 1, 1, NULL, NULL, NULL), + + (@option_group_id_fu, '{ts escape="sql"}day{/ts}' , 'day' , 'day', NULL, 0, NULL, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_fu, '{ts escape="sql"}week{/ts}' , 'week' , 'week', NULL, 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_fu, '{ts escape="sql"}month{/ts}' , 'month', 'month', NULL, 0, NULL, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_fu, '{ts escape="sql"}year{/ts}' , 'year' , 'year', NULL, 0, NULL, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + +-- phone types. + (@option_group_id_pht, '{ts escape="sql"}Phone{/ts}' , 1, 'Phone' , NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pht, '{ts escape="sql"}Mobile{/ts}', 2, 'Mobile' , NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pht, '{ts escape="sql"}Fax{/ts}' , 3, 'Fax' , NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pht, '{ts escape="sql"}Pager{/ts}' , 4, 'Pager' , NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_pht, '{ts escape="sql"}Voicemail{/ts}' , 5, 'Voicemail' , NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- custom data types. + (@option_group_id_cdt, 'Participant Role', '1', 'ParticipantRole', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_cdt, 'Participant Event Name', '2', 'ParticipantEventName', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_cdt, 'Participant Event Type', '3', 'ParticipantEventType', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL , NULL), + +-- visibility. + (@option_group_id_vis, 'Public', 1, 'public', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_vis, 'Admin', 2, 'admin', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL , NULL), + +-- mail protocol. + (@option_group_id_mp, 'IMAP', 1, 'IMAP', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_mp, 'Maildir', 2, 'Maildir', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_mp, 'POP3', 3, 'POP3', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_mp, 'Localdir', 4, 'Localdir', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL , NULL), + +-- priority + (@option_group_id_priority, '{ts escape="sql"}Urgent{/ts}', 1, 'Urgent', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_priority, '{ts escape="sql"}Normal{/ts}', 2, 'Normal', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_priority, '{ts escape="sql"}Low{/ts}', 3, 'Low', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- redaction rule FIXME: should this be in sample data instead? + (@option_group_id_rr, 'Vancouver', 'city_', 'city_', NULL, 0, NULL, 1, NULL, 0, 0, 0, NULL, NULL, NULL), + (@option_group_id_rr, '{literal}/(19|20)(\\d{2})-(\\d{1,2})-(\\d{1,2})/{/literal}', 'date_', 'date_', NULL, 1, NULL, 2, NULL, 0, 0, 0, NULL, NULL, NULL), + +-- email greeting. + (@option_group_id_emailGreeting, '{literal}Dear {contact.first_name}{/literal}', 1, '{literal}Dear {contact.first_name}{/literal}', NULL, 1, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_emailGreeting, '{literal}Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}{/literal}', 2, '{literal}Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}{/literal}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_emailGreeting, '{literal}Dear {contact.individual_prefix} {contact.last_name}{/literal}', 3, '{literal}Dear {contact.individual_prefix} {contact.last_name}{/literal}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_emailGreeting, '{literal}Customized{/literal}', 4, '{literal}Customized{/literal}', NULL, 0, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_emailGreeting, '{literal}Dear {contact.household_name}{/literal}', 5, '{literal}Dear {contact.household_name}{/literal}', NULL, 2, 1, 5, NULL, 0, 0, 1, NULL, NULL, NULL), +-- postal greeting. + (@option_group_id_postalGreeting, '{literal}Dear {contact.first_name}{/literal}', 1, '{literal}Dear {contact.first_name}{/literal}', NULL, 1, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_postalGreeting, '{literal}Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}{/literal}', 2, '{literal}Dear {contact.individual_prefix} {contact.first_name} {contact.last_name}{/literal}', NULL, 1, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_postalGreeting, '{literal}Dear {contact.individual_prefix} {contact.last_name}{/literal}', 3, '{literal}Dear {contact.individual_prefix} {contact.last_name}{/literal}', NULL, 1, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_postalGreeting, '{literal}Customized{/literal}', 4, '{literal}Customized{/literal}', NULL, 0, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_postalGreeting, '{literal}Dear {contact.household_name}{/literal}', 5, '{literal}Dear {contact.household_name}{/literal}', NULL, 2, 1, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- addressee + (@option_group_id_addressee, '{literal}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}{/literal}', '1', '{literal}}{contact.individual_prefix}{ } {contact.first_name}{ }{contact.middle_name}{ }{contact.last_name}{ }{contact.individual_suffix}{/literal}', NULL , '1', '1', '1', NULL , '0', '0', '1', NULL , NULL, NULL), + (@option_group_id_addressee, '{literal}{contact.household_name}{/literal}', '2', '{literal}{contact.household_name}{/literal}', NULL , '2', '1', '2', NULL , '0', '0', '1', NULL , NULL, NULL), + (@option_group_id_addressee, '{literal}{contact.organization_name}{/literal}', '3', '{literal}{contact.organization_name}{/literal}', NULL , '3', '1', '3', NULL , '0', '0', '1', NULL , NULL, NULL), + (@option_group_id_addressee, '{literal}Customized{/literal}', '4', '{literal}Customized{/literal}', NULL , 0 , '0', '4', NULL , '0', '1', '1', NULL , NULL, NULL), + +-- website type + (@option_group_id_website, 'Work', 1, 'Work', NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'Main', 2, 'Main', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'Facebook', 3, 'Facebook', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'Google+', 4, 'Google_', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'Instagram', 5, 'Instagram', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'LinkedIn', 6, 'LinkedIn', NULL, 0, NULL, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'MySpace', 7, 'MySpace', NULL, 0, NULL, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'Pinterest', 8, 'Pinterest', NULL, 0, NULL, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'SnapChat', 9, 'SnapChat', NULL, 0, NULL, 9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'Tumblr', 10, 'Tumblr', NULL, 0, NULL, 10, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'Twitter', 11, 'Twitter', NULL, 0, NULL, 11, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_website, 'Vine', 12, 'Vine ', NULL, 0, NULL, 12, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- Tag used for + (@option_group_id_tuf, 'Contacts', 'civicrm_contact', 'Contacts', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_tuf, 'Activities', 'civicrm_activity', 'Activities', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_tuf, 'Cases', 'civicrm_case', 'Cases', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_tuf, 'Attachments','civicrm_file', 'Attachements', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + + (@option_group_id_currency, 'USD ($)', 'USD', 'USD', NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- event name badges + (@option_group_id_eventBadge, '{ts escape="sql"}Name Only{/ts}' , 1, 'CRM_Event_Badge_Simple' , NULL, 0, 0, 1, '{ts escape="sql"}Simple Event Name Badge{/ts}', 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_eventBadge, '{ts escape="sql"}Name Tent{/ts}' , 2, 'CRM_Event_Badge_NameTent', NULL, 0, 0, 2, '{ts escape="sql"}Name Tent{/ts}', 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_eventBadge , '{ts escape="sql"}With Logo{/ts}' , 3, 'CRM_Event_Badge_Logo' , NULL, 0, 0, 3, '{ts escape="sql"}You can set your own background image{/ts}', 0, 1, 1, NULL, NULL , NULL), + (@option_group_id_eventBadge , '{ts escape="sql"}5395 with Logo{/ts}', 4, 'CRM_Event_Badge_Logo5395', NULL, 0, 0, 4, '{ts escape="sql"}Avery 5395 compatible labels with logo (4 up by 2, 59.2mm x 85.7mm){/ts}', 0, 1, 1, NULL, NULL , NULL), + +-- note privacy levels + (@option_group_id_notePrivacy, '{ts escape="sql"}None{/ts}', 0, 'None', NULL, 0, 1, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_notePrivacy, '{ts escape="sql"}Author Only{/ts}', 1, 'Author Only', NULL, 0, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + +-- Compaign Types + (@option_group_id_campaignType, '{ts escape="sql"}Direct Mail{/ts}', 1, 'Direct Mail', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_campaignType, '{ts escape="sql"}Referral Program{/ts}', 2, 'Referral Program', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_campaignType, '{ts escape="sql"}Constituent Engagement{/ts}', 3, 'Constituent Engagement', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- Campaign Status + (@option_group_id_campaignStatus, '{ts escape="sql"}Planned{/ts}', 1, 'Planned', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_campaignStatus, '{ts escape="sql"}In Progress{/ts}', 2, 'In Progress', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_campaignStatus, '{ts escape="sql"}Completed{/ts}', 3, 'Completed', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_campaignStatus, '{ts escape="sql"}Cancelled{/ts}', 4, 'Cancelled', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- Engagement Level + (@option_group_id_engagement_index, '{ts escape="sql"}1{/ts}', 1, '1', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_engagement_index, '{ts escape="sql"}2{/ts}', 2, '2', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_engagement_index, '{ts escape="sql"}3{/ts}', 3, '3', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_engagement_index, '{ts escape="sql"}4{/ts}', 4, '4', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL , NULL), + (@option_group_id_engagement_index, '{ts escape="sql"}5{/ts}', 5, '5', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL , NULL), + +-- Paper Sizes + (@option_group_id_paperSize, '{ts escape="sql"}Letter{/ts}', '{literal}{"metric":"in","width":8.5,"height":11}{/literal}', 'letter', NULL, NULL, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Legal{/ts}', '{literal}{"metric":"in","width":8.5,"height":14}{/literal}', 'legal', NULL, NULL, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Ledger{/ts}', '{literal}{"metric":"in","width":17,"height":11}{/literal}', 'ledger', NULL, NULL, 0, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Tabloid{/ts}', '{literal}{"metric":"in","width":11,"height":17}{/literal}', 'tabloid', NULL, NULL, 0, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Executive{/ts}', '{literal}{"metric":"in","width":7.25,"height":10.5}{/literal}', 'executive', NULL, NULL, 0, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Folio{/ts}', '{literal}{"metric":"in","width":8.5,"height":13}{/literal}', 'folio', NULL, NULL, 0, 6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope #9{/ts}', '{literal}{"metric":"pt","width":638.93,"height":278.93}{/literal}', 'envelope-9', NULL, NULL, 0, 7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope #10{/ts}', '{literal}{"metric":"pt","width":684,"height":297}{/literal}', 'envelope-10', NULL, NULL, 0, 8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope #11{/ts}', '{literal}{"metric":"pt","width":747,"height":324}{/literal}', 'envelope-11', NULL, NULL, 0, 9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope #12{/ts}', '{literal}{"metric":"pt","width":792,"height":342}{/literal}', 'envelope-12', NULL, NULL, 0, 10, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope #14{/ts}', '{literal}{"metric":"pt","width":828,"height":360}{/literal}', 'envelope-14', NULL, NULL, 0, 11, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope ISO B4{/ts}', '{literal}{"metric":"pt","width":1000.63,"height":708.66}{/literal}', 'envelope-b4', NULL, NULL, 0, 12, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope ISO B5{/ts}', '{literal}{"metric":"pt","width":708.66,"height":498.9}{/literal}', 'envelope-b5', NULL, NULL, 0, 13, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope ISO B6{/ts}', '{literal}{"metric":"pt","width":498.9,"height":354.33}{/literal}', 'envelope-b6', NULL, NULL, 0, 14, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope ISO C3{/ts}', '{literal}{"metric":"pt","width":1298.27,"height":918.42}{/literal}', 'envelope-c3', NULL, NULL, 0, 15, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope ISO C4{/ts}', '{literal}{"metric":"pt","width":918.42,"height":649.13}{/literal}', 'envelope-c4', NULL, NULL, 0, 16, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope ISO C5{/ts}', '{literal}{"metric":"pt","width":649.13,"height":459.21}{/literal}', 'envelope-c5', NULL, NULL, 0, 17, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope ISO C6{/ts}', '{literal}{"metric":"pt","width":459.21,"height":323.15}{/literal}', 'envelope-c6', NULL, NULL, 0, 18, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}Envelope ISO DL{/ts}', '{literal}{"metric":"pt","width":623.622,"height":311.811}{/literal}', 'envelope-dl', NULL, NULL, 0, 19, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A0{/ts}', '{literal}{"metric":"pt","width":2383.94,"height":3370.39}{/literal}', 'a0', NULL, NULL, 0, 20, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A1{/ts}', '{literal}{"metric":"pt","width":1683.78,"height":2383.94}{/literal}', 'a1', NULL, NULL, 0, 21, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A2{/ts}', '{literal}{"metric":"pt","width":1190.55,"height":1683.78}{/literal}', 'a2', NULL, NULL, 0, 22, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A3{/ts}', '{literal}{"metric":"pt","width":841.89,"height":1190.55}{/literal}', 'a3', NULL, NULL, 0, 23, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A4{/ts}', '{literal}{"metric":"pt","width":595.28,"height":841.89}{/literal}', 'a4', NULL, NULL, 0, 24, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A5{/ts}', '{literal}{"metric":"pt","width":419.53,"height":595.28}{/literal}', 'a5', NULL, NULL, 0, 25, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A6{/ts}', '{literal}{"metric":"pt","width":297.64,"height":419.53}{/literal}', 'a6', NULL, NULL, 0, 26, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A7{/ts}', '{literal}{"metric":"pt","width":209.76,"height":297.64}{/literal}', 'a7', NULL, NULL, 0, 27, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A8{/ts}', '{literal}{"metric":"pt","width":147.4,"height":209.76}{/literal}', 'a8', NULL, NULL, 0, 28, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A9{/ts}', '{literal}{"metric":"pt","width":104.88,"height":147.4}{/literal}', 'a9', NULL, NULL, 0, 29, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO A10{/ts}', '{literal}{"metric":"pt","width":73.7,"height":104.88}{/literal}', 'a10', NULL, NULL, 0, 30, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B0{/ts}', '{literal}{"metric":"pt","width":2834.65,"height":4008.19}{/literal}', 'b0', NULL, NULL, 0, 31, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B1{/ts}', '{literal}{"metric":"pt","width":2004.09,"height":2834.65}{/literal}', 'b1', NULL, NULL, 0, 32, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B2{/ts}', '{literal}{"metric":"pt","width":1417.32,"height":2004.09}{/literal}', 'b2', NULL, NULL, 0, 33, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B3{/ts}', '{literal}{"metric":"pt","width":1000.63,"height":1417.32}{/literal}', 'b3', NULL, NULL, 0, 34, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B4{/ts}', '{literal}{"metric":"pt","width":708.66,"height":1000.63}{/literal}', 'b4', NULL, NULL, 0, 35, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B5{/ts}', '{literal}{"metric":"pt","width":498.9,"height":708.66}{/literal}', 'b5', NULL, NULL, 0, 36, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B6{/ts}', '{literal}{"metric":"pt","width":354.33,"height":498.9}{/literal}', 'b6', NULL, NULL, 0, 37, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B7{/ts}', '{literal}{"metric":"pt","width":249.45,"height":354.33}{/literal}', 'b7', NULL, NULL, 0, 38, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B8{/ts}', '{literal}{"metric":"pt","width":175.75,"height":249.45}{/literal}', 'b8', NULL, NULL, 0, 39, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B9{/ts}', '{literal}{"metric":"pt","width":124.72,"height":175.75}{/literal}', 'b9', NULL, NULL, 0, 40, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO B10{/ts}', '{literal}{"metric":"pt","width":87.87,"height":124.72}{/literal}', 'b10', NULL, NULL, 0, 41, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C0{/ts}', '{literal}{"metric":"pt","width":2599.37,"height":3676.54}{/literal}', 'c0', NULL, NULL, 0, 42, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C1{/ts}', '{literal}{"metric":"pt","width":1836.85,"height":2599.37}{/literal}', 'c1', NULL, NULL, 0, 43, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C2{/ts}', '{literal}{"metric":"pt","width":1298.27,"height":1836.85}{/literal}', 'c2', NULL, NULL, 0, 44, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C3{/ts}', '{literal}{"metric":"pt","width":918.43,"height":1298.27}{/literal}', 'c3', NULL, NULL, 0, 45, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C4{/ts}', '{literal}{"metric":"pt","width":649.13,"height":918.43}{/literal}', 'c4', NULL, NULL, 0, 46, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C5{/ts}', '{literal}{"metric":"pt","width":459.21,"height":649.13}{/literal}', 'c5', NULL, NULL, 0, 47, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C6{/ts}', '{literal}{"metric":"pt","width":323.15,"height":459.21}{/literal}', 'c6', NULL, NULL, 0, 48, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C7{/ts}', '{literal}{"metric":"pt","width":229.61,"height":323.15}{/literal}', 'c7', NULL, NULL, 0, 49, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C8{/ts}', '{literal}{"metric":"pt","width":161.57,"height":229.61}{/literal}', 'c8', NULL, NULL, 0, 50, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C9{/ts}', '{literal}{"metric":"pt","width":113.39,"height":161.57}{/literal}', 'c9', NULL, NULL, 0, 51, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO C10{/ts}', '{literal}{"metric":"pt","width":79.37,"height":113.39}{/literal}', 'c10', NULL, NULL, 0, 52, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO RA0{/ts}', '{literal}{"metric":"pt","width":2437.8,"height":3458.27}{/literal}', 'ra0', NULL, NULL, 0, 53, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO RA1{/ts}', '{literal}{"metric":"pt","width":1729.13,"height":2437.8}{/literal}', 'ra1', NULL, NULL, 0, 54, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO RA2{/ts}', '{literal}{"metric":"pt","width":1218.9,"height":1729.13}{/literal}', 'ra2', NULL, NULL, 0, 55, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO RA3{/ts}', '{literal}{"metric":"pt","width":864.57,"height":1218.9}{/literal}', 'ra3', NULL, NULL, 0, 56, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO RA4{/ts}', '{literal}{"metric":"pt","width":609.45,"height":864.57}{/literal}', 'ra4', NULL, NULL, 0, 57, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO SRA0{/ts}', '{literal}{"metric":"pt","width":2551.18,"height":3628.35}{/literal}', 'sra0', NULL, NULL, 0, 58, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO SRA1{/ts}', '{literal}{"metric":"pt","width":1814.17,"height":2551.18}{/literal}', 'sra1', NULL, NULL, 0, 59, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO SRA2{/ts}', '{literal}{"metric":"pt","width":1275.59,"height":1814.17}{/literal}', 'sra2', NULL, NULL, 0, 60, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO SRA3{/ts}', '{literal}{"metric":"pt","width":907.09,"height":1275.59}{/literal}', 'sra3', NULL, NULL, 0, 61, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_paperSize, '{ts escape="sql"}ISO SRA4{/ts}', '{literal}{"metric":"pt","width":637.8,"height":907.09}{/literal}', 'sra4', NULL, NULL, 0, 62, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- activity_contacts + (@option_group_id_aco, '{ts escape="sql"}Activity Assignees{/ts}', 1, 'Activity Assignees', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aco, '{ts escape="sql"}Activity Source{/ts}', 2, 'Activity Source', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aco, '{ts escape="sql"}Activity Targets{/ts}', 3, 'Activity Targets', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- financial_account_type +-- grouping field is specific to Quickbooks for mapping to .iif format + (@option_group_id_fat, '{ts escape="sql"}Asset{/ts}', 1, 'Asset', NULL, 0, 0, 1, 'Things you own', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_fat, '{ts escape="sql"}Liability{/ts}', 2, 'Liability', NULL, 0, 0, 2, 'Things you owe, like a grant still to be disbursed', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_fat, '{ts escape="sql"}Revenue{/ts}', 3, 'Revenue', NULL, 0, 1, 3, 'Income from contributions and sales of tickets and memberships', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_fat, '{ts escape="sql"}Cost of Sales{/ts}', 4, 'Cost of Sales', NULL, 0, 0, 4, 'Costs incurred to get revenue, e.g. premiums for donations, dinner for a fundraising dinner ticket', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_fat, '{ts escape="sql"}Expenses{/ts}', 5, 'Expenses', NULL, 0, 0, 5, 'Things that are paid for that are consumable, e.g. grants disbursed', 0, 1, 1, 2, NULL, NULL), + +-- account_relationship + (@option_group_id_arel, '{ts escape="sql"}Income Account is{/ts}', 1, 'Income Account is', NULL, 0, 1, 1, 'Income Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Credit/Contra Revenue Account is{/ts}', 2, 'Credit/Contra Revenue Account is', NULL, 0, 0, 2, 'Credit/Contra Revenue Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Accounts Receivable Account is{/ts}', 3, 'Accounts Receivable Account is', NULL, 0, 0, 3, 'Accounts Receivable Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Credit Liability Account is{/ts}', 4, 'Credit Liability Account is', NULL, 0, 0, 4, 'Credit Liability Account is', 0, 1, 0, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Expense Account is{/ts}', 5, 'Expense Account is', NULL, 0, 0, 5, 'Expense Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Asset Account is{/ts}', 6, 'Asset Account is', NULL, 0, 0, 6, 'Asset Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Cost of Sales Account is{/ts}', 7, 'Cost of Sales Account is', NULL, 0, 0, 7, 'Cost of Sales Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Premiums Inventory Account is{/ts}', 8, 'Premiums Inventory Account is', NULL, 0, 0, 8, 'Premiums Inventory Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Discounts Account is{/ts}', 9, 'Discounts Account is', NULL, 0, 0, 9, 'Discounts Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Sales Tax Account is{/ts}', 10, 'Sales Tax Account is', NULL, 0, 0, 10, 'Sales Tax Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Chargeback Account is{/ts}', 11, 'Chargeback Account is', NULL, 0, 0, 11, 'Chargeback Account is', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_arel, '{ts escape="sql"}Deferred Revenue Account is{/ts}', 12, 'Deferred Revenue Account is', NULL, 0, 0, 12, 'Deferred Revenue Account is', 0, 1, 1, 2, NULL, NULL), + +-- event_contacts + (@option_group_id_ere, '{ts escape="sql"}Participant Role{/ts}', 1, 'participant_role', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- default conference slots + (@option_group_id_conference_slot, '{ts escape="sql"}Morning Sessions{/ts}', 1, 'Morning Sessions', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_conference_slot, '{ts escape="sql"}Evening Sessions{/ts}', 2, 'Evening Sessions', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- default batch types + (@option_group_id_batch_type, '{ts escape="sql"}Contribution{/ts}', 1, 'Contribution', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_batch_type, '{ts escape="sql"}Membership{/ts}', 2, 'Membership', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_batch_type, '{ts escape="sql"}Pledge Payment{/ts}', 3, 'Pledge Payment', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- default batch statuses + (@option_group_id_batch_status, '{ts escape="sql"}Open{/ts}', 1, 'Open', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_batch_status, '{ts escape="sql"}Closed{/ts}', 2, 'Closed', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_batch_status, '{ts escape="sql"}Data Entry{/ts}', 3, 'Data Entry', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_batch_status, '{ts escape="sql"}Reopened{/ts}', 4, 'Reopened', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_batch_status, '{ts escape="sql"}Exported{/ts}', 5, 'Exported', NULL, 0, NULL, 5, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- default batch modes + (@option_group_id_batch_mode, '{ts escape="sql"}Manual Batch{/ts}', 1, 'Manual Batch', NULL, 0, 0, 1, 'Manual Batch', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_batch_mode, '{ts escape="sql"}Automatic Batch{/ts}', 2, 'Automatic Batch', NULL, 0, 0, 2, 'Automatic Batch', 0, 1, 1, 2, NULL, NULL), + +-- Financial Item Status + (@option_group_id_financial_item_status, '{ts escape="sql"}Paid{/ts}', 1, 'Paid', NULL, 0, 0, 1, 'Paid', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_financial_item_status, '{ts escape="sql"}Partially paid{/ts}', 2, 'Partially paid', NULL, 0, 0, 2, 'Partially paid', 0, 1, 1, 2, NULL, NULL), + (@option_group_id_financial_item_status, '{ts escape="sql"}Unpaid{/ts}', 3, 'Unpaid', NULL, 0, 0, 1, 'Unpaid', 0, 1, 1, 2, NULL, NULL), + +-- sms_api_type + (@option_group_id_sms_api_type, 'http', 1, 'http', NULL, NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_sms_api_type, 'xml', 2, 'xml', NULL, NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_sms_api_type, 'smtp', 3, 'smtp', NULL, NULL, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + +-- auto renew options + (@option_group_id_aro, '{ts escape="sql"}Renewal Reminder (non-auto-renew memberships only){/ts}', 1, 'Renewal Reminder (non-auto-renew memberships only)', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aro, '{ts escape="sql"}Auto-renew Memberships Only{/ts}', 2, 'Auto-renew Memberships Only', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_aro, '{ts escape="sql"}Reminder for Both{/ts}', 3, 'Reminder for Both', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- Label Type + (@option_group_id_label_type, '{ts escape="sql"}Event Badge{/ts}', 1, 'Event Badge', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- Name Label format + (@option_group_id_name_badge, '{ts escape="sql"}Avery 5395{/ts}', '{literal}{"name":"Avery 5395","paper-size":"a4","metric":"mm","lMargin":15,"tMargin":26,"NX":2,"NY":4,"SpaceX":10,"SpaceY":5,"width":83,"height":57,"font-size":12,"orientation":"portrait","font-name":"helvetica","font-style":"","lPadding":3,"tPadding":3}{/literal}', 'Avery 5395', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_name_badge, '{ts escape="sql"}A6 Badge Portrait 150x106{/ts}', '{literal}{"paper-size":"a4","orientation":"landscape","font-name":"times","font-size":6,"font-style":"","NX":2,"NY":1,"metric":"mm","lMargin":25,"tMargin":27,"SpaceX":0,"SpaceY":35,"width":106,"height":150,"lPadding":5,"tPadding":5}{/literal}', 'A6 Badge Portrait 150x106', NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_name_badge, '{ts escape="sql"}Fattorini Name Badge 100x65{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"times","font-size":6,"font-style":"","NX":2,"NY":4,"metric":"mm","lMargin":6,"tMargin":19,"SpaceX":0,"SpaceY":0,"width":100,"height":65,"lPadding":0,"tPadding":0}{/literal}', 'Fattorini Name Badge 100x65', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_name_badge, '{ts escape="sql"}Hanging Badge 3-3/4" x 4-3"/4{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"times","font-size":6,"font-style":"","NX":2,"NY":2,"metric":"mm","lMargin":10,"tMargin":28,"SpaceX":0,"SpaceY":0,"width":96,"height":121,"lPadding":5,"tPadding":5}{/literal}', 'Hanging Badge 3-3/4" x 4-3"/4', NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- Mailing Label Formats + (@option_group_id_label, '{ts escape="sql"}Avery 3475{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":10,"font-style":"","metric":"mm","lMargin":0,"tMargin":5,"NX":3,"NY":8,"SpaceX":0,"SpaceY":0,"width":70,"height":36,"lPadding":5.08,"tPadding":5.08}{/literal}', '3475', 'Avery', NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5160{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.21975,"tMargin":0.5,"NX":3,"NY":10,"SpaceX":0.14,"SpaceY":0,"width":2.5935,"height":1,"lPadding":0.20,"tPadding":0.20}{/literal}', '5160', 'Avery', NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5161{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.175,"tMargin":0.5,"NX":2,"NY":10,"SpaceX":0.15625,"SpaceY":0,"width":4,"height":1,"lPadding":0.20,"tPadding":0.20}{/literal}', '5161', 'Avery', NULL, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5162{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.1525,"tMargin":0.88,"NX":2,"NY":7,"SpaceX":0.195,"SpaceY":0,"width":4,"height":1.33,"lPadding":0.20,"tPadding":0.20}{/literal}', '5162', 'Avery', NULL, 0, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5163{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.5,"NX":2,"NY":5,"SpaceX":0.14,"SpaceY":0,"width":4,"height":2,"lPadding":0.20,"tPadding":0.20}{/literal}', '5163', 'Avery', NULL, 0, 5, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 5164{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":12,"font-style":"","metric":"in","lMargin":0.156,"tMargin":0.5,"NX":2,"NY":3,"SpaceX":0.1875,"SpaceY":0,"width":4,"height":3.33,"lPadding":0.20,"tPadding":0.20}{/literal}', '5164', 'Avery', NULL, 0, 6, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery 8600{/ts}', '{literal}{"paper-size":"letter","orientation":"portrait","font-name":"helvetica","font-size":8,"font-style":"","metric":"mm","lMargin":7.1,"tMargin":19,"NX":3,"NY":10,"SpaceX":9.5,"SpaceY":3.1,"width":66.6,"height":25.4,"lPadding":5.08,"tPadding":5.08}{/literal}', '8600', 'Avery', NULL, 0, 7, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery L7160{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.6,"NX":3,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.5,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7160', 'Avery', NULL, 0, 8, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery L7161{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.28,"tMargin":0.35,"NX":3,"NY":6,"SpaceX":0.1,"SpaceY":0,"width":2.5,"height":1.83,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7161', 'Avery', NULL, 0, 9, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery L7162{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.51,"NX":2,"NY":8,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.33,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7162', 'Avery', NULL, 0, 10, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_label, '{ts escape="sql"}Avery L7163{/ts}', '{literal}{"paper-size":"a4","orientation":"portrait","font-name":"helvetica","font-size":9,"font-style":"","metric":"in","lMargin":0.18,"tMargin":0.6,"NX":2,"NY":7,"SpaceX":0.1,"SpaceY":0,"width":3.9,"height":1.5,"lPadding":0.20,"tPadding":0.20}{/literal}', 'L7163', 'Avery', NULL, 0, 11, NULL, 0, 1, 1, NULL, NULL, NULL), + +-- Communication Styles + (@option_group_id_communication_style, '{ts escape="sql"}Formal{/ts}' , 1, 'formal' , NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_communication_style, '{ts escape="sql"}Familiar{/ts}', 2, 'familiar', NULL, 0, 0, 2, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- Message Mode +(@option_group_id_msg_mode, '{ts escape="sql"}Email{/ts}', 'Email', 'Email', NULL, 0, 1, 1, NULL, 0, 1, 1, NULL, NULL, NULL), +(@option_group_id_msg_mode, '{ts escape="sql"}SMS{/ts}', 'SMS', 'SMS', NULL, 0, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), +(@option_group_id_msg_mode, '{ts escape="sql"}User Preference{/ts}', 'User_Preference', 'User Preference', NULL, 0, 0, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + +-- Reminder Options for Contact Date Fields +(@option_group_id_contactDateMode, '{ts escape="sql"}Actual date only{/ts}', '1', 'Actual date only', NULL, NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL, NULL), +(@option_group_id_contactDateMode, '{ts escape="sql"}Each anniversary{/ts}', '2', 'Each anniversary', NULL, NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + +-- WYSIWYG Editor Presets +(@option_group_id_wysiwyg_presets, '{ts escape="sql"}Default{/ts}', '1', 'default', NULL, NULL, 1, 1, NULL, 0, 1, 1, NULL, NULL, NULL), +(@option_group_id_wysiwyg_presets, '{ts escape="sql"}CiviMail{/ts}', '2', 'civimail', NULL, NULL, 0, 2, NULL, 0, 1, 1, @mailCompId, NULL, NULL), +(@option_group_id_wysiwyg_presets, '{ts escape="sql"}CiviEvent{/ts}', '3', 'civievent', NULL, NULL, 0, 3, NULL, 0, 1, 1, @eventCompId, NULL, NULL), + +-- Environment +(@option_group_id_env, '{ts escape="sql"}Production{/ts}', 'Production', 'Production', NULL, NULL, 1, 1, 'Production Environment', 0, 1, 1, NULL, NULL, NULL), +(@option_group_id_env, '{ts escape="sql"}Staging{/ts}', 'Staging', 'Staging', NULL, NULL, 0, 2, 'Staging Environment', 0, 1, 1, NULL, NULL, NULL), +(@option_group_id_env, '{ts escape="sql"}Development{/ts}', 'Development', 'Development', NULL, NULL, 0, 3, 'Development Environment', 0, 1, 1, NULL, NULL, NULL), + +-- Relative Date Filters + (@option_group_id_date_filter, '{ts escape="sql"}Today{/ts}', 'this.day', 'this.day', NULL, NULL, NULL,1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}This week{/ts}', 'this.week', 'this.week', NULL, NULL, NULL,2, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}This calendar month{/ts}', 'this.month', 'this.month', NULL, NULL, NULL,3, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}This quarter{/ts}', 'this.quarter', 'this.quarter', NULL, NULL, NULL,4, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}This fiscal year{/ts}', 'this.fiscal_year', 'this.fiscal_year', NULL, NULL, NULL,5, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}This calendar year{/ts}', 'this.year', 'this.year', NULL, NULL, NULL,6, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Yesterday{/ts}', 'previous.day', 'previous.day', NULL, NULL, NULL,7, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous week{/ts}', 'previous.week', 'previous.week', NULL, NULL, NULL,8, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous calendar month{/ts}', 'previous.month', 'previous.month', NULL, NULL, NULL,9, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous quarter{/ts}', 'previous.quarter', 'previous.quarter', NULL, NULL, NULL,10, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous fiscal year{/ts}', 'previous.fiscal_year', 'previous.fiscal_year', NULL, NULL, NULL,11, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous calendar year{/ts}', 'previous.year', 'previous.year', NULL, NULL, NULL,12, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Last 7 days including today{/ts}', 'ending.week', 'ending.week', NULL, NULL, NULL,13, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Last 30 days including today{/ts}', 'ending.month', 'ending.month', NULL, NULL, NULL,14, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Last 60 days including today{/ts}', 'ending_2.month', 'ending_2.month', NULL, NULL, NULL,15, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Last 90 days including today{/ts}', 'ending.quarter', 'ending.quarter', NULL, NULL, NULL,16, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Last 12 months including today{/ts}', 'ending.year', 'ending.year', NULL, NULL, NULL,17, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Last 2 years including today{/ts}', 'ending_2.year', 'ending_2.year', NULL, NULL, NULL,18, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Last 3 years including today{/ts}', 'ending_3.year', 'ending_3.year', NULL, NULL, NULL,19, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Tomorrow{/ts}', 'starting.day', 'starting.day', NULL, NULL, NULL,20, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next week{/ts}', 'next.week', 'next.week', NULL, NULL, NULL,21, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next calendar month{/ts}', 'next.month', 'next.month', NULL, NULL, NULL,22, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next quarter{/ts}', 'next.quarter', 'next.quarter', NULL, NULL, NULL,23, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next fiscal year{/ts}', 'next.fiscal_year', 'next.fiscal_year', NULL, NULL, NULL,24, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next calendar year{/ts}', 'next.year', 'next.year', NULL, NULL, NULL,25, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next 7 days including today{/ts}', 'starting.week', 'starting.week', NULL, NULL, NULL,26, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next 30 days including today{/ts}', 'starting.month', 'starting.month', NULL, NULL, NULL,27, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next 60 days including today{/ts}', 'starting_2.month', 'starting_2.month', NULL, NULL, NULL,28, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next 90 days including today{/ts}', 'starting.quarter', 'starting.quarter', NULL, NULL, NULL,29, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Next 12 months including today{/ts}', 'starting.year', 'starting.year', NULL, NULL, NULL,30, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Current week to-date{/ts}', 'current.week', 'current.week', NULL, NULL, NULL,31, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Current calendar month to-date{/ts}', 'current.month', 'current.month', NULL, NULL, NULL,32, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Current quarter to-date{/ts}', 'current.quarter', 'current.quarter', NULL, NULL, NULL,33, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Current calendar year to-date{/ts}', 'current.year', 'current.year', NULL, NULL, NULL,34, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of yesterday{/ts}', 'earlier.day', 'earlier.day', NULL, NULL, NULL,35, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of previous week{/ts}', 'earlier.week', 'earlier.week', NULL, NULL, NULL,36, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of previous calendar month{/ts}', 'earlier.month', 'earlier.month', NULL, NULL, NULL,37, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of previous quarter{/ts}', 'earlier.quarter', 'earlier.quarter', NULL, NULL, NULL,38, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of previous calendar year{/ts}', 'earlier.year', 'earlier.year', NULL, NULL, NULL,39, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From start of current day{/ts}', 'greater.day', 'greater.day', NULL, NULL, NULL,40, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From start of current week{/ts}', 'greater.week', 'greater.week', NULL, NULL, NULL,41, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From start of current calendar month{/ts}', 'greater.month', 'greater.month', NULL, NULL, NULL,42, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From start of current quarter{/ts}', 'greater.quarter', 'greater.quarter', NULL, NULL, NULL,43, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From start of current calendar year{/ts}', 'greater.year', 'greater.year', NULL, NULL, NULL,44, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of current week{/ts}', 'less.week', 'less.week', NULL, NULL, NULL,45, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of current calendar month{/ts}', 'less.month', 'less.month', NULL, NULL, NULL,46, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of current quarter{/ts}', 'less.quarter', 'less.quarter', NULL, NULL, NULL,47, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}To end of current calendar year{/ts}', 'less.year', 'less.year', NULL, NULL, NULL,48, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous 2 days{/ts}', 'previous_2.day', 'previous_2.day', NULL, NULL, NULL,49, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous 2 weeks{/ts}', 'previous_2.week', 'previous_2.week', NULL, NULL, NULL,50, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous 2 calendar months{/ts}', 'previous_2.month', 'previous_2.month', NULL, NULL, NULL,51, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous 2 quarters{/ts}', 'previous_2.quarter', 'previous_2.quarter', NULL, NULL, NULL,52, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Previous 2 calendar years{/ts}', 'previous_2.year', 'previous_2.year', NULL, NULL, NULL,53, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Day prior to yesterday{/ts}', 'previous_before.day', 'previous_before.day', NULL, NULL, NULL,54, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Week prior to previous week{/ts}', 'previous_before.week', 'previous_before.week', NULL, NULL, NULL,55, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Month prior to previous calendar month{/ts}', 'previous_before.month', 'previous_before.month', NULL, NULL, NULL,56, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Quarter prior to previous quarter{/ts}', 'previous_before.quarter', 'previous_before.quarter', NULL, NULL, NULL,57, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}Year prior to previous calendar year{/ts}', 'previous_before.year', 'previous_before.year', NULL, NULL, NULL,58, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From end of previous week{/ts}', 'greater_previous.week', 'greater_previous.week', NULL, NULL, NULL,59, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From end of previous calendar month{/ts}', 'greater_previous.month', 'greater_previous.month', NULL, NULL, NULL,60, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From end of previous quarter{/ts}', 'greater_previous.quarter', 'greater_previous.quarter', NULL, NULL, NULL,61, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_date_filter, '{ts escape="sql"}From end of previous calendar year{/ts}', 'greater_previous.year', 'greater_previous.year', NULL, NULL, NULL,62, NULL, 0, 0, 1, NULL, NULL, NULL), + +-- Pledge Status + (@option_group_id_ps, '{ts escape="sql"}Completed{/ts}' , 1, 'Completed' , NULL, 0, NULL, 1, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_ps, '{ts escape="sql"}Pending{/ts}' , 2, 'Pending' , NULL, 0, NULL, 2, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_ps, '{ts escape="sql"}Cancelled{/ts}' , 3, 'Cancelled' , NULL, 0, NULL, 3, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_ps, '{ts escape="sql"}In Progress{/ts}', 5, 'In Progress', NULL, 0, NULL, 4, NULL, 0, 1, 1, NULL, NULL, NULL), + (@option_group_id_ps, '{ts escape="sql"}Overdue{/ts}' , 6, 'Overdue' , NULL, 0, NULL, 5, NULL, 0, 1, 1, NULL, NULL, NULL); + +-- financial accounts +SELECT @opval := value FROM civicrm_option_value WHERE name = 'Revenue' and option_group_id = @option_group_id_fat; +SELECT @opexp := value FROM civicrm_option_value WHERE name = 'Expenses' and option_group_id = @option_group_id_fat; +SELECT @opAsset := value FROM civicrm_option_value WHERE name = 'Asset' and option_group_id = @option_group_id_fat; +SELECT @opLiability := value FROM civicrm_option_value WHERE name = 'Liability' and option_group_id = @option_group_id_fat; +SELECT @opCost := value FROM civicrm_option_value WHERE name = 'Cost of Sales' and option_group_id = @option_group_id_fat; + +INSERT INTO + `civicrm_financial_account` (`name`, `contact_id`, `financial_account_type_id`, `description`, `accounting_code`, `account_type_code`, `is_reserved`, `is_active`, `is_deductible`, `is_default`) +VALUES + ( '{ts escape="sql"}Donation{/ts}' , @contactID, @opval, 'Default account for donations', '4200', 'INC', 0, 1, 1, 1 ), + ( '{ts escape="sql"}Member Dues{/ts}' , @contactID, @opval, 'Default account for membership sales', '4400', 'INC', 0, 1, 1, 0 ), + ( '{ts escape="sql"}Campaign Contribution{/ts}', @contactID, @opval, 'Sample account for recording payments to a campaign', '4100', 'INC', 0, 1, 0, 0 ), + ( '{ts escape="sql"}Event Fee{/ts}' , @contactID, @opval, 'Default account for event ticket sales', '4300', 'INC', 0, 1, 0, 0 ), + ( '{ts escape="sql"}Banking Fees{/ts}' , @contactID, @opexp, 'Payment processor fees and manually recorded banking fees', '5200', 'EXP', 0, 1, 0, 1 ), + ( '{ts escape="sql"}Deposit Bank Account{/ts}' , @contactID, @opAsset, 'All manually recorded cash and cheques go to this account', '1100', 'BANK', 0, 1, 0, 1 ), + ( '{ts escape="sql"}Accounts Receivable{/ts}' , @contactID, @opAsset, 'Amounts to be received later (eg pay later event revenues)', '1200', 'AR', 0, 1, 0, 0 ), + ( '{ts escape="sql"}Accounts Payable{/ts}' , @contactID, @opLiability, 'Amounts to be paid out such as grants and refunds', '2200', 'AP', 0, 1, 0, 1 ), + ( '{ts escape="sql"}Premiums{/ts}' , @contactID, @opCost, 'Account to record cost of premiums provided to payors', '5100', 'COGS', 0, 1, 0, 1 ), + ( '{ts escape="sql"}Premiums inventory{/ts}' , @contactID, @opAsset, 'Account representing value of premiums inventory', '1375', 'OCASSET', 0, 1, 0, 0 ), + ( '{ts escape="sql"}Discounts{/ts}' , @contactID, @opval, 'Contra-revenue account for amounts discounted from sales', '4900', 'INC', 0, 1, 0, 0 ), + ( '{ts escape="sql"}Payment Processor Account{/ts}', @contactID, @opAsset, 'Account to record payments into a payment processor merchant account', '1150', 'BANK', 0, 1, 0, 0), + ( '{ts escape="sql"}Deferred Revenue - Event Fee{/ts}', @contactID, @opLiability, 'Event revenue to be recognized in future months when the events occur', '2730', 'OCLIAB', 0, 1, 0, 0), + ( '{ts escape="sql"}Deferred Revenue - Member Dues{/ts}', @contactID, @opLiability, 'Membership revenue to be recognized in future months', '2740', 'OCLIAB', 0, 1, 0, 0 +); + +-- Now insert option values which require domainID +-- + +INSERT INTO + `civicrm_option_value` (`option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `component_id`, `domain_id`, `visibility_id`) +VALUES +-- from email address. + (@option_group_id_fma, '"FIXME" <info@EXAMPLE.ORG>', '1', '"FIXME" <info@EXAMPLE.ORG>', NULL, 0, 1, 1, '{ts escape="sql"}Default domain email address and from name.{/ts}', 0, 0, 1, NULL, @domainID, NULL ), + +-- grant types + (@option_group_id_grantTyp, '{ts escape="sql"}Emergency{/ts}' , 1, 'Emergency' , NULL, 0, 1, 1, NULL, 0, 0, 1, NULL, @domainID, NULL), + (@option_group_id_grantTyp, '{ts escape="sql"}Family Support{/ts}' , 2, 'Family Support' , NULL, 0, NULL, 2, NULL, 0, 0, 1, NULL, @domainID, NULL), + (@option_group_id_grantTyp, '{ts escape="sql"}General Protection{/ts}' , 3, 'General Protection', NULL, 0, NULL, 3, NULL, 0, 0, 1, NULL, @domainID, NULL), + (@option_group_id_grantTyp, '{ts escape="sql"}Impunity{/ts}' , 4, 'Impunity' , NULL, 0, NULL, 4, NULL, 0, 0, 1, NULL, @domainID, NULL), + +-- Mail Approval Status Preferences + (@option_group_id_mail_approval_status, '{ts escape="sql"}Approved{/ts}' , 1, 'Approved', NULL, 0, 1, 1, NULL, 0, 1, 1, @mailCompId, @domainID, NULL), + (@option_group_id_mail_approval_status, '{ts escape="sql"}Rejected{/ts}' , 2, 'Rejected', NULL, 0, 0, 2, NULL, 0, 1, 1, @mailCompId, @domainID, NULL), + (@option_group_id_mail_approval_status, '{ts escape="sql"}None{/ts}' , 3, 'None', NULL, 0, 0, 3, NULL, 0, 1, 1, @mailCompId, @domainID, NULL), + +-- custom group objects + (@option_group_id_cgeo, '{ts escape="sql"}Survey{/ts}', 'Survey', 'civicrm_survey', NULL, 0, NULL, 1, NULL, 0, 0, 1, NULL, NULL, NULL), + (@option_group_id_cgeo, '{ts escape="sql"}Cases{/ts}', 'Case', 'civicrm_case', NULL, 0, NULL, 2, 'CRM_Case_PseudoConstant::caseType;', 0, 0, 1, NULL, NULL, NULL); + +-- CRM-6138 +{include file='languages.tpl'} + +-- /******************************************************* +-- * +-- * Encounter Medium Option Values (for case activities) +-- * +-- *******************************************************/ +INSERT INTO `civicrm_option_group` (name, title, description, is_reserved, is_active) + VALUES ('encounter_medium', 'Encounter Medium', 'Encounter medium for case activities (e.g. In Person, By Phone, etc.)', 1, 1); +SELECT @option_group_id_medium := max(id) from civicrm_option_group where name = 'encounter_medium'; +INSERT INTO + `civicrm_option_value` (`option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`) +VALUES + (@option_group_id_medium, '{ts escape="sql"}In Person{/ts}', 1, 'in_person', NULL, 0, 0, 1, NULL, 0, 1, 1), + (@option_group_id_medium, '{ts escape="sql"}Phone{/ts}', 2, 'phone', NULL, 0, 1, 2, NULL, 0, 1, 1), + (@option_group_id_medium, '{ts escape="sql"}Email{/ts}', 3, 'email', NULL, 0, 0, 3, NULL, 0, 1, 1), + (@option_group_id_medium, '{ts escape="sql"}Fax{/ts}', 4, 'fax', NULL, 0, 0, 4, NULL, 0, 1, 1), + (@option_group_id_medium, '{ts escape="sql"}Letter Mail{/ts}', 5, 'letter_mail', NULL, 0, 0, 5, NULL, 0, 1, 1); + +-- sample membership status entries +INSERT INTO + civicrm_membership_status(name, label, start_event, start_event_adjust_unit, start_event_adjust_interval, end_event, end_event_adjust_unit, end_event_adjust_interval, is_current_member, is_admin, weight, is_default, is_active, is_reserved) +VALUES + ('New', '{ts escape="sql"}New{/ts}', 'join_date', null, null,'join_date','month',3, 1, 0, 1, 0, 1, 0), + ('Current', '{ts escape="sql"}Current{/ts}', 'start_date', null, null,'end_date', null, null, 1, 0, 2, 1, 1, 0), + ('Grace', '{ts escape="sql"}Grace{/ts}', 'end_date', null, null,'end_date','month', 1, 1, 0, 3, 0, 1, 0), + ('Expired', '{ts escape="sql"}Expired{/ts}', 'end_date', 'month', 1, null, null, null, 0, 0, 4, 0, 1, 0), + ('Pending', '{ts escape="sql"}Pending{/ts}', 'join_date', null, null,'join_date',null,null, 0, 0, 5, 0, 1, 1), + ('Cancelled', '{ts escape="sql"}Cancelled{/ts}', 'join_date', null, null,'join_date',null,null, 0, 0, 6, 0, 1, 1), + ('Deceased', '{ts escape="sql"}Deceased{/ts}', null, null, null, null, null, null, 0, 1, 7, 0, 1, 1); + + +INSERT INTO `civicrm_preferences_date` + (name, start, end, date_format, time_format, description) +VALUES + ( 'activityDate' , 20, 10, '', '', '{ts escape="sql"}Date for activities including contributions: receive, receipt, cancel. membership: join, start, renew. case: start, end.{/ts}' ), + ( 'activityDateTime', 20, 10, '', 1, '{ts escape="sql"}Date and time for activity: scheduled. participant: registered.{/ts}' ), + ( 'birth' , 100, 0, '', '', '{ts escape="sql"}Birth and deceased dates. Only year, month and day fields are supported.{/ts}' ), + ( 'creditCard' , 0, 10, 'M Y', '', '{ts escape="sql"}Month and year only for credit card expiration.{/ts}' ), + ( 'custom' , 20, 20, '', '', '{ts escape="sql"}Uses date range passed in by form field. Can pass in a posix date part parameter. Start and end offsets defined here are ignored.{/ts}'), + ( 'mailing' , 0, 1, '', '', '{ts escape="sql"}Date and time. Used for scheduling mailings.{/ts}' ), + ( 'searchDate' , 20, 20, '', '', '{ts escape="sql"}Used in search forms and for relationships.{/ts}' ); + + +-- various processor options +-- +-- Table structure for table `civicrm_payment_processor_type` +-- + +INSERT INTO `civicrm_payment_processor_type` + (name, title, description, is_active, is_default, user_name_label, password_label, signature_label, subject_label, class_name, url_site_default, url_api_default, url_recur_default, url_button_default, url_site_test_default, url_api_test_default, url_recur_test_default, url_button_test_default, billing_mode, is_recur ) +VALUES + ('PayPal_Standard', '{ts escape="sql"}PayPal - Website Payments Standard{/ts}', NULL,1,0,'{ts escape="sql"}Merchant Account Email{/ts}',NULL,NULL,NULL,'Payment_PayPalImpl','https://www.paypal.com/',NULL,'https://www.paypal.com/',NULL,'https://www.sandbox.paypal.com/',NULL,'https://www.sandbox.paypal.com/',NULL,4,1), + ('PayPal', '{ts escape="sql"}PayPal - Website Payments Pro{/ts}', NULL,1,0,'{ts escape="sql"}User Name{/ts}','{ts escape="sql"}Password{/ts}','{ts escape="sql"}Signature{/ts}',NULL,'Payment_PayPalImpl','https://www.paypal.com/','https://api-3t.paypal.com/','https://www.paypal.com/','https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif','https://www.sandbox.paypal.com/','https://api-3t.sandbox.paypal.com/','https://www.sandbox.paypal.com/','https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif',3, 1), + ('PayPal_Express', '{ts escape="sql"}PayPal - Express{/ts}', NULL,1,0,'{ts escape="sql"}User Name{/ts}','{ts escape="sql"}Password{/ts}','{ts escape="sql"}Signature{/ts}',NULL,'Payment_PayPalImpl','https://www.paypal.com/','https://api-3t.paypal.com/',NULL,'https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif','https://www.sandbox.paypal.com/','https://api-3t.sandbox.paypal.com/',NULL,'https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif',2, 1), + ('AuthNet', '{ts escape="sql"}Authorize.Net{/ts}', NULL,1,0,'{ts escape="sql"}API Login{/ts}','{ts escape="sql"}Payment Key{/ts}','{ts escape="sql"}MD5 Hash{/ts}',NULL,'Payment_AuthorizeNet','https://secure2.authorize.net/gateway/transact.dll',NULL,'https://api2.authorize.net/xml/v1/request.api',NULL,'https://test.authorize.net/gateway/transact.dll',NULL,'https://apitest.authorize.net/xml/v1/request.api',NULL,1,1), + ('PayJunction', '{ts escape="sql"}PayJunction{/ts}', NULL,1,0,'User Name','Password',NULL,NULL,'Payment_PayJunction','https://payjunction.com/quick_link',NULL,NULL,NULL,'https://www.payjunctionlabs.com/quick_link',NULL,NULL,NULL,1,1), + ('eWAY', '{ts escape="sql"}eWAY (Single Currency){/ts}', NULL,1,0,'Customer ID',NULL,NULL,NULL,'Payment_eWAY','https://www.eway.com.au/gateway_cvn/xmlpayment.asp',NULL,NULL,NULL,'https://www.eway.com.au/gateway_cvn/xmltest/testpage.asp',NULL,NULL,NULL,1,0), + ('Payment_Express', '{ts escape="sql"}DPS Payment Express{/ts}', NULL,1,0,'User ID','Key','Mac Key - pxaccess only',NULL,'Payment_PaymentExpress','https://www.paymentexpress.com/pleaseenteraurl',NULL,NULL,NULL,'https://www.paymentexpress.com/pleaseenteratesturl',NULL,NULL,NULL,4,0), + ('Dummy', '{ts escape="sql"}Dummy Payment Processor{/ts}',NULL,1,1,'{ts escape="sql"}User Name{/ts}',NULL,NULL,NULL,'Payment_Dummy',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1,1), + ('Elavon', '{ts escape="sql"}Elavon Payment Processor{/ts}','{ts escape="sql"}Elavon / Nova Virtual Merchant{/ts}',1,0,'{ts escape="sql"}SSL Merchant ID {/ts}','{ts escape="sql"}SSL User ID{/ts}','{ts escape="sql"}SSL PIN{/ts}',NULL,'Payment_Elavon','https://www.myvirtualmerchant.com/VirtualMerchant/processxml.do',NULL,NULL,NULL,'https://www.myvirtualmerchant.com/VirtualMerchant/processxml.do',NULL,NULL,NULL,1,0), + ('Realex', '{ts escape="sql"}Realex Payment{/ts}', NULL,1,0,'Merchant ID', 'Password', NULL, 'Account', 'Payment_Realex', 'https://epage.payandshop.com/epage.cgi', NULL, NULL, NULL, 'https://epage.payandshop.com/epage-remote.cgi', NULL, NULL, NULL, 1, 0), + ('PayflowPro', '{ts escape="sql"}PayflowPro{/ts}', NULL,1,0,'Vendor ID', 'Password', 'Partner (merchant)', 'User', 'Payment_PayflowPro', 'https://Payflowpro.paypal.com', NULL, NULL, NULL, 'https://pilot-Payflowpro.paypal.com', NULL, NULL, NULL, 1, 0), + ('FirstData', '{ts escape="sql"}FirstData (aka linkpoint){/ts}', '{ts escape="sql"}FirstData (aka linkpoint){/ts}', 1, 0, 'Store name', 'certificate path', NULL, NULL, 'Payment_FirstData', 'https://secure.linkpt.net', NULL, NULL, NULL, 'https://staging.linkpt.net', NULL, NULL, NULL, 1, NULL); + + +-- the fuzzy default dedupe rules +-- IndividualSupervised uses hard-coded optimized query (CRM_Dedupe_BAO_QueryBuilder_IndividualSupervised) +INSERT INTO civicrm_dedupe_rule_group (contact_type, threshold, used, name, title, is_reserved) +VALUES ('Individual', 20, 'Supervised', 'IndividualSupervised', '{ts escape="sql"}Name and Email (reserved){/ts}', 1); + +SELECT @drgid := MAX(id) FROM civicrm_dedupe_rule_group; +INSERT INTO civicrm_dedupe_rule (dedupe_rule_group_id, rule_table, rule_field, rule_weight) +VALUES (@drgid, 'civicrm_contact', 'first_name', 5), + (@drgid, 'civicrm_contact', 'last_name', 7), + (@drgid, 'civicrm_email' , 'email', 10); + +INSERT INTO civicrm_dedupe_rule_group (contact_type, threshold, used, name, title, is_reserved) +VALUES ('Organization', 10, 'Supervised', 'OrganizationSupervised', '{ts escape="sql"}Name and Email{/ts}', 0); + +SELECT @drgid := MAX(id) FROM civicrm_dedupe_rule_group; +INSERT INTO civicrm_dedupe_rule (dedupe_rule_group_id, rule_table, rule_field, rule_weight) +VALUES (@drgid, 'civicrm_contact', 'organization_name', 10), + (@drgid, 'civicrm_email' , 'email', 10); + +INSERT INTO civicrm_dedupe_rule_group (contact_type, threshold, used, name, title, is_reserved) +VALUES ('Household', 10, 'Supervised', 'HouseholdSupervised', '{ts escape="sql"}Name and Email{/ts}', 0); + +SELECT @drgid := MAX(id) FROM civicrm_dedupe_rule_group; +INSERT INTO civicrm_dedupe_rule (dedupe_rule_group_id, rule_table, rule_field, rule_weight) +VALUES (@drgid, 'civicrm_contact', 'household_name', 10), + (@drgid, 'civicrm_email' , 'email', 10); + +-- the strict dedupe rules +-- IndividualUnsupervised uses hard-coded optimized query (CRM_Dedupe_BAO_QueryBuilder_IndividualUnsupervised) +INSERT INTO civicrm_dedupe_rule_group (contact_type, threshold, used, name, title, is_reserved) +VALUES ('Individual', 10, 'Unsupervised', 'IndividualUnsupervised', '{ts escape="sql"}Email (reserved){/ts}', 1); + +SELECT @drgid := MAX(id) FROM civicrm_dedupe_rule_group; +INSERT INTO civicrm_dedupe_rule (dedupe_rule_group_id, rule_table, rule_field, rule_weight) +VALUES (@drgid, 'civicrm_email', 'email', 10); + +INSERT INTO civicrm_dedupe_rule_group (contact_type, threshold, used, name, title, is_reserved) +VALUES ('Organization', 10, 'Unsupervised', 'OrganizationUnsupervised', '{ts escape="sql"}Name and Email{/ts}', 0); + +SELECT @drgid := MAX(id) FROM civicrm_dedupe_rule_group; +INSERT INTO civicrm_dedupe_rule (dedupe_rule_group_id, rule_table, rule_field, rule_weight) +VALUES (@drgid, 'civicrm_contact', 'organization_name', 10), + (@drgid, 'civicrm_email' , 'email', 10); + +INSERT INTO civicrm_dedupe_rule_group (contact_type, threshold, used, name, title, is_reserved) +VALUES ('Household', 10, 'Unsupervised', 'HouseholdUnsupervised', '{ts escape="sql"}Name and Email{/ts}', 0); + +SELECT @drgid := MAX(id) FROM civicrm_dedupe_rule_group; +INSERT INTO civicrm_dedupe_rule (dedupe_rule_group_id, rule_table, rule_field, rule_weight) +VALUES (@drgid, 'civicrm_contact', 'household_name', 10), + (@drgid, 'civicrm_email' , 'email', 10); + +-- IndividualGeneral uses hard-coded optimized query (CRM_Dedupe_BAO_QueryBuilder_IndividualGeneral) +INSERT INTO civicrm_dedupe_rule_group (contact_type, threshold, used, name, title, is_reserved) +VALUES ('Individual', 15, 'General', 'IndividualGeneral', '{ts escape="sql"}Name and Address (reserved){/ts}', 1); + +SELECT @drgid := MAX(id) FROM civicrm_dedupe_rule_group; +INSERT INTO civicrm_dedupe_rule (dedupe_rule_group_id, rule_table, rule_field, rule_weight) +VALUES (@drgid, 'civicrm_contact', 'first_name', '5'), + (@drgid, 'civicrm_contact', 'last_name', '5'), + (@drgid, 'civicrm_address', 'street_address', '5'), + (@drgid, 'civicrm_contact', 'middle_name', '1'), + (@drgid, 'civicrm_contact', 'suffix_id', '1'); + +-- Sample counties (state-province and country lists defined in a separate tpl files) +INSERT INTO civicrm_county (name, state_province_id) VALUES ('Alameda', 1004); +INSERT INTO civicrm_county (name, state_province_id) VALUES ('Contra Costa', 1004); +INSERT INTO civicrm_county (name, state_province_id) VALUES ('Marin', 1004); +INSERT INTO civicrm_county (name, state_province_id) VALUES ('San Francisco', 1004); +INSERT INTO civicrm_county (name, state_province_id) VALUES ('San Mateo', 1004); +INSERT INTO civicrm_county (name, state_province_id) VALUES ('Santa Clara', 1004); + +-- Bounce classification patterns +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('AOL', '{ts escape="sql"}AOL Terms of Service complaint{/ts}', 1); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'AOL'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, 'Client TOS Notification'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Away', '{ts escape="sql"}Recipient is on vacation{/ts}', 30); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Away'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, '(be|am)? (out of|away from) (the|my)? (office|computer|town)'), + (@bounceTypeID, 'i am on vacation'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Dns', '{ts escape="sql"}Unable to resolve recipient domain{/ts}', 3); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Dns'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, 'name(server entry| lookup failure)'), + (@bounceTypeID, 'no (mail server|matches to nameserver query|dns entries)'), + (@bounceTypeID, 'reverse dns entry'), + (@bounceTypeID, 'Host or domain name not found'), + (@bounceTypeID, 'Unable to resolve MX record for'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Host', '{ts escape="sql"}Unable to deliver to destintation mail server{/ts}', 3); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Host'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, '(unknown|not local) host'), + (@bounceTypeID, 'all hosts have been failing'), + (@bounceTypeID, 'allowed rcpthosts'), + (@bounceTypeID, 'connection (refused|timed out)'), + (@bounceTypeID, 'not connected'), + (@bounceTypeID, 'couldn\'t find any host named'), + (@bounceTypeID, 'error involving remote host'), + (@bounceTypeID, 'host unknown'), + (@bounceTypeID, 'invalid host name'), + (@bounceTypeID, 'isn\'t in my control/locals file'), + (@bounceTypeID, 'local configuration error'), + (@bounceTypeID, 'not a gateway'), + (@bounceTypeID, 'server is (down or unreachable|not responding)'), + (@bounceTypeID, 'too many connections'), + (@bounceTypeID, 'unable to connect'), + (@bounceTypeID, 'lost connection'), + (@bounceTypeID, 'conversation with [^ ]* timed out while'), + (@bounceTypeID, 'server requires authentication'), + (@bounceTypeID, 'authentication (is )?required'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Inactive', '{ts escape="sql"}User account is no longer active{/ts}', 1); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Inactive'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, '(my )?e-?mail( address)? has changed'), + (@bounceTypeID, 'account (inactive|expired|deactivated)'), + (@bounceTypeID, 'account is locked'), + (@bounceTypeID, 'changed \w+( e-?mail)? address'), + (@bounceTypeID, 'deactivated mailbox'), + (@bounceTypeID, 'disabled or discontinued'), + (@bounceTypeID, 'inactive user'), + (@bounceTypeID, 'is inactive on this domain'), + (@bounceTypeID, 'mail receiving disabled'), + (@bounceTypeID, 'mail( ?)address is administrative?ly disabled'), + (@bounceTypeID, 'mailbox (temporarily disabled|currently suspended)'), + (@bounceTypeID, 'no longer (accepting mail|on server|in use|with|employed|on staff|works for|using this account)'), + (@bounceTypeID, 'not accepting (mail|messages)'), + (@bounceTypeID, 'please use my new e-?mail address'), + (@bounceTypeID, 'this address no longer accepts mail'), + (@bounceTypeID, 'user account suspended'), + (@bounceTypeID, 'account that you tried to reach is disabled'), + (@bounceTypeID, 'User banned'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Invalid', '{ts escape="sql"}Email address is not valid{/ts}', 1); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Invalid'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, '(user|recipient( name)?) is not recognized'), + (@bounceTypeID, '554 delivery error'), + (@bounceTypeID, 'address does not exist'), + (@bounceTypeID, 'address(es)?( you (entered|specified))? (could|was)( not|n.t)( be)? found'), + (@bounceTypeID, 'address(ee)? (unknown|invalid)'), + (@bounceTypeID, 'bad destination'), + (@bounceTypeID, 'badly formatted address'), + (@bounceTypeID, 'can\'t open mailbox for'), + (@bounceTypeID, 'cannot deliver'), + (@bounceTypeID, 'delivery to the following recipient(s)? failed'), + (@bounceTypeID, 'destination addresses were unknown'), + (@bounceTypeID, 'did not reach the following recipient'), + (@bounceTypeID, 'does not exist'), + (@bounceTypeID, 'does not like recipient'), + (@bounceTypeID, 'does not specify a valid notes mail file'), + (@bounceTypeID, 'illegal alias'), + (@bounceTypeID, 'invalid (mailbox|(e-?mail )?address|recipient|final delivery)'), + (@bounceTypeID, 'invalid( or unknown)?( virtual)? user'), + (@bounceTypeID, '(mail )?delivery (to this user )?is not allowed'), + (@bounceTypeID, 'mailbox (not found|unavailable|name not allowed)'), + (@bounceTypeID, 'message could not be forwarded'), + (@bounceTypeID, 'missing or malformed local(-| )part'), + (@bounceTypeID, 'no e-?mail address registered'), + (@bounceTypeID, 'no such (mail drop|mailbox( \\w+)?|(e-?mail )?address|recipient|(local )?user|person)( here)?'), + (@bounceTypeID, 'no mailbox (here )?by that name'), + (@bounceTypeID, 'not (listed in|found in directory|known at this site|our customer)'), + (@bounceTypeID, 'not a valid( (user|mailbox))?'), + (@bounceTypeID, 'not present in directory entry'), + (@bounceTypeID, 'recipient (does not exist|(is )?unknown|rejected|denied|not found)'), + (@bounceTypeID, 'this user doesn\'t have a yahoo.com address'), + (@bounceTypeID, 'unavailable to take delivery of the message'), + (@bounceTypeID, 'unavailable mailbox'), + (@bounceTypeID, 'unknown (local( |-)part|recipient|address error)'), + (@bounceTypeID, 'unknown( or illegal)? user( account)?'), + (@bounceTypeID, 'unrecognized recipient'), + (@bounceTypeID, 'unregistered address'), + (@bounceTypeID, 'user (unknown|does not exist)'), + (@bounceTypeID, 'user doesn\'t have an? \w+ account'), + (@bounceTypeID, 'user(\'s e-?mail name is)? not found'), + (@bounceTypeID, '^Validation failed for:'), + (@bounceTypeID, '5.1.0 Address rejected'), + (@bounceTypeID, 'no valid recipients?'), + (@bounceTypeID, 'RecipNotFound'), + (@bounceTypeID, 'no one at this address'), + (@bounceTypeID, 'misconfigured forwarding address'), + (@bounceTypeID, 'account is not allowed'), + (@bounceTypeID, 'Address .<[^>]*>. not known here'), + (@bounceTypeID, '{literal}Recipient address rejected: ([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}{/literal}'), + (@bounceTypeID, 'Non sono riuscito a trovare l.indirizzo e-mail'), + (@bounceTypeID, 'nadie con esta direcci..?n'), + (@bounceTypeID, 'ni bilo mogo..?e najti prejemnikovega e-po..?tnega naslova'), + (@bounceTypeID, 'Elektronski naslov (je ukinjen|ne obstaja)'), + (@bounceTypeID, 'nepravilno nastavljen predal'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Loop', '{ts escape="sql"}Mail routing error{/ts}', 3); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Loop'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, '(mail( forwarding)?|routing).loop'), + (@bounceTypeID, 'excessive recursion'), + (@bounceTypeID, 'loop detected'), + (@bounceTypeID, 'maximum hop count exceeded'), + (@bounceTypeID, 'message was forwarded more than the maximum allowed times'), + (@bounceTypeID, 'too many (hops|recursive forwards)'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Quota', '{ts escape="sql"}User inbox is full{/ts}', 3); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Quota'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, '(disk(space)?|over the allowed|exceed(ed|s)?|storage) quota'), + (@bounceTypeID, '522_mailbox_full'), + (@bounceTypeID, 'exceeds allowed message count'), + (@bounceTypeID, 'file too large'), + (@bounceTypeID, 'full mailbox'), + (@bounceTypeID, '(mail|in)(box|folder) ((for user \\w+ )?is )?full'), + (@bounceTypeID, 'mailbox (has exceeded|is over) the limit'), + (@bounceTypeID, 'mailbox( exceeds allowed)? size'), + (@bounceTypeID, 'no space left for this user'), + (@bounceTypeID, 'over\\s?quota'), + (@bounceTypeID, 'quota (for the mailbox )?has been exceeded'), + (@bounceTypeID, 'quota ?(usage|violation|exceeded)'), + (@bounceTypeID, 'recipient storage full'), + (@bounceTypeID, 'not able to receive more mail'), + (@bounceTypeID, 'doesn.t have enough disk space left'), + (@bounceTypeID, 'exceeded storage allocation'), + (@bounceTypeID, 'running out of disk space'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Relay', '{ts escape="sql"}Unable to reach destination mail server{/ts}', 3); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Relay'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, 'cannot find your hostname'), + (@bounceTypeID, 'ip name lookup'), + (@bounceTypeID, 'not configured to relay mail'), + (@bounceTypeID, 'relay(ing)? (not permitted|(access )?denied)'), + (@bounceTypeID, 'relayed mail to .+? not allowed'), + (@bounceTypeID, 'sender ip must resolve'), + (@bounceTypeID, 'unable to relay'), + (@bounceTypeID, 'No route to host'), + (@bounceTypeID, 'Network is unreachable'), + (@bounceTypeID, 'unrouteable address'), + (@bounceTypeID, 'We don.t handle mail for'), + (@bounceTypeID, 'we do not relay'), + (@bounceTypeID, 'Rejected by next-hop'), + (@bounceTypeID, 'not permitted to( *550)? relay through this server'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Spam', '{ts escape="sql"}Message caught by a content filter{/ts}', 1); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Spam'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, '(bulk( e-?mail)|content|attachment blocking|virus|mail system) filters?'), + (@bounceTypeID, '(hostile|questionable|unacceptable) content'), + (@bounceTypeID, 'address .+? has not been verified'), + (@bounceTypeID, 'anti-?spam (polic\w+|software)'), + (@bounceTypeID, 'anti-?virus gateway has detected'), + (@bounceTypeID, 'blacklisted'), + (@bounceTypeID, 'blocked message'), + (@bounceTypeID, 'content control'), + (@bounceTypeID, 'delivery not authorized'), + (@bounceTypeID, 'does not conform to our e-?mail policy'), + (@bounceTypeID, 'excessive spam content'), + (@bounceTypeID, 'message looks suspicious'), + (@bounceTypeID, 'open relay'), + (@bounceTypeID, 'sender was rejected'), + (@bounceTypeID, 'spam(check| reduction software| filters?)'), + (@bounceTypeID, 'blocked by a user configured filter'), + (@bounceTypeID, '(detected|rejected) (as|due to) spam'), + (@bounceTypeID, 'X-HmXmrOriginalRecipient'), + (@bounceTypeID, 'Client host .[^ ]*. blocked'), + (@bounceTypeID, 'automatic(ally-generated)? messages are not accepted'), + (@bounceTypeID, 'denied by policy'), + (@bounceTypeID, 'has no corresponding reverse \\(PTR\\) address'), + (@bounceTypeID, 'has a policy that( [^ ]*)? prohibited the mail that you sent'), + (@bounceTypeID, 'is likely unsolicited mail'), + (@bounceTypeID, 'Local Policy Violation'), + (@bounceTypeID, 'ni bilo mogo..?e dostaviti zaradi varnostnega pravilnika'), + (@bounceTypeID, 'abuse report'); + +INSERT INTO civicrm_mailing_bounce_type + (name, description, hold_threshold) + VALUES ('Syntax', '{ts escape="sql"}Error in SMTP transaction{/ts}', 3); + +SELECT @bounceTypeID := max(id) FROM civicrm_mailing_bounce_type WHERE name = 'Syntax'; +INSERT INTO civicrm_mailing_bounce_pattern + (bounce_type_id, pattern) + VALUES + (@bounceTypeID, 'nonstandard smtp line terminator'), + (@bounceTypeID, 'syntax error in from address'), + (@bounceTypeID, 'unknown smtp code'); + +-- add sample and reserved profiles + +INSERT INTO civicrm_uf_group + (id, name, group_type, title, is_cms_user, is_reserved, help_post) VALUES + (1, 'name_and_address', 'Individual,Contact', '{ts escape="sql"}Name and Address{/ts}', 0, 0, NULL), + (2, 'supporter_profile', 'Individual,Contact', '{ts escape="sql"}Supporter Profile{/ts}', 2, 0, '<p><strong>{ts escape="sql"}The information you provide will NOT be shared with any third party organisations.{/ts}</strong></p><p>{ts escape="sql"}Thank you for getting involved in our campaign!{/ts}</p>'), + (3, 'participant_status', 'Participant', '{ts escape="sql"}Participant Status{/ts}', 0, 1, NULL), + (4, 'new_individual', 'Individual,Contact', '{ts escape="sql"}New Individual{/ts}' , 0, 1, NULL), + (5, 'new_organization', 'Organization,Contact','{ts escape="sql"}New Organization{/ts}' , 0, 1, NULL), + (6, 'new_household', 'Household,Contact', '{ts escape="sql"}New Household{/ts}' , 0, 1, NULL), + (7, 'summary_overlay', 'Contact', '{ts escape="sql"}Summary Overlay{/ts}' , 0, 1, NULL), + (8, 'shared_address', 'Contact', '{ts escape="sql"}Shared Address{/ts}' , 0, 1, NULL), + (9, 'on_behalf_organization', 'Contact,Organization','{ts escape="sql"}On Behalf Of Organization{/ts}', 0, 1, NULL), + (10, 'contribution_batch_entry', 'Contribution', '{ts escape="sql"}Contribution Bulk Entry{/ts}' , 0, 1, NULL), + (11, 'membership_batch_entry', 'Membership', '{ts escape="sql"}Membership Bulk Entry{/ts}' , 0, 1, NULL), + (12, 'event_registration', 'Individual,Contact', '{ts escape="sql"}Your Registration Info{/ts}', 0, 0, NULL), + (13, 'honoree_individual', 'Individual,Contact', '{ts escape="sql"}Honoree Individual{/ts}', 0, 1, NULL); + + +INSERT INTO civicrm_uf_join + (is_active,module,entity_table,entity_id,weight,uf_group_id) +VALUES + (1, 'User Registration',NULL, NULL,1,1), + (1, 'User Account', NULL, NULL, 1, 1), + (1, 'Profile', NULL, NULL, 1, 1), + (1, 'Profile', NULL, NULL, 2, 2), + (1, 'Profile', NULL, NULL, 11, 12); + +INSERT INTO civicrm_uf_field + ( uf_group_id, field_name, is_required, is_reserved, weight, visibility, in_selector, is_searchable, location_type_id, label, field_type, help_post, phone_type_id ) VALUES + ( 1, 'first_name', 1, 0, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}First Name{/ts}', 'Individual', NULL, NULL), + ( 1, 'last_name', 1, 0, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Last Name{/ts}', 'Individual', NULL, NULL), + ( 1, 'street_address', 0, 0, 3, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Street Address (Home){/ts}', 'Contact', NULL, NULL), + ( 1, 'city', 0, 0, 4, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}City (Home){/ts}', 'Contact', NULL, NULL), + ( 1, 'postal_code', 0, 0, 5, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Postal Code (Home){/ts}', 'Contact', NULL, NULL), + ( 1, 'country', 0, 0, 6, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Country (Home){/ts}', 'Contact', NULL, NULL), + ( 1, 'state_province', 0, 0, 7, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}State (Home){/ts}', 'Contact', NULL, NULL), + ( 2, 'first_name', 1, 0, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}First Name{/ts}', 'Individual', NULL, NULL), + ( 2, 'last_name', 1, 0, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Last Name{/ts}', 'Individual', NULL, NULL), + ( 2, 'email', 1, 0, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Email Address{/ts}', 'Contact', NULL, NULL), + ( 3, 'participant_status', 1, 1, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Participant Status{/ts}', 'Participant', NULL, NULL), + ( 4, 'first_name', 1, 0, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}First Name{/ts}', 'Individual', NULL, NULL), + ( 4, 'last_name', 1, 0, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Last Name{/ts}', 'Individual', NULL, NULL), + ( 4, 'email', 0, 0, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Email Address{/ts}', 'Contact', NULL, NULL), + ( 5, 'organization_name', 1, 0, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Organization Name{/ts}', 'Organization', NULL, NULL), + ( 5, 'email', 0, 0, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Email Address{/ts}', 'Contact', NULL, NULL), + ( 6, 'household_name', 1, 0, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Household Name{/ts}', 'Household', NULL, NULL), + ( 6, 'email', 0, 0, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Email Address{/ts}', 'Contact', NULL, NULL), + ( 7, 'phone', 1, 0, 1, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Home Phone{/ts}', 'Contact', NULL, 1 ), + ( 7, 'phone', 1, 0, 2, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Home Mobile{/ts}', 'Contact', NULL, 2 ), + ( 7, 'street_address', 1, 0, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Primary Address{/ts}', 'Contact', NULL, NULL), + ( 7, 'city', 1, 0, 4, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}City{/ts}', 'Contact', NULL, NULL), + ( 7, 'state_province', 1, 0, 5, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}State{/ts}', 'Contact', NULL, NULL), + ( 7, 'postal_code', 1, 0, 6, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Postal Code{/ts}', 'Contact', NULL, NULL), + ( 7, 'email', 1, 0, 7, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Primary Email{/ts}', 'Contact', NULL, NULL), + ( 7, 'group', 1, 0, 8, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Groups{/ts}', 'Contact', NULL, NULL), + ( 7, 'tag', 1, 0, 9, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Tags{/ts}', 'Contact', NULL, NULL), + ( 7, 'gender_id', 1, 0, 10, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Gender{/ts}', 'Individual', NULL, NULL), + ( 7, 'birth_date', 1, 0, 11, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Date of Birth{/ts}', 'Individual', NULL, NULL), + ( 8, 'street_address', 1, 1, 1, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Street Address (Home){/ts}', 'Contact', NULL, NULL), + ( 8, 'city', 1, 1, 2, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}City (Home){/ts}', 'Contact', NULL, NULL), + ( 8, 'postal_code', 0, 0, 3, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Postal Code (Home){/ts}', 'Contact', NULL, NULL), + ( 8, 'country', 0, 0, 4, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Country (Home){/ts}', 'Contact', NULL, NULL), + ( 8, 'state_province', 0, 0, 5, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}State (Home){/ts}', 'Contact', NULL, NULL), + ( 9, 'organization_name', 1, 0, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Organization Name{/ts}', 'Organization', NULL, NULL), + ( 9, 'phone', 1, 0, 2, 'User and User Admin Only', 0, 0, 3, '{ts escape="sql"}Phone (Main) {/ts}', 'Contact', NULL, 1), + ( 9, 'email', 1, 0, 3, 'User and User Admin Only', 0, 0, 3, '{ts escape="sql"}Email (Main) {/ts}', 'Contact', NULL, NULL), + ( 9, 'street_address', 1, 0, 4, 'User and User Admin Only', 0, 0, 3, '{ts escape="sql"}Street Address{/ts}', 'Contact', NULL, NULL), + ( 9, 'city', 1, 0, 5, 'User and User Admin Only', 0, 0, 3, '{ts escape="sql"}City{/ts}', 'Contact', NULL, NULL), + ( 9, 'postal_code', 1, 0, 6, 'User and User Admin Only', 0, 0, 3, '{ts escape="sql"}Postal Code{/ts}', 'Contact', NULL, NULL), + ( 9, 'country', 1, 0, 7, 'User and User Admin Only', 0, 0, 3, '{ts escape="sql"}Country{/ts}', 'Contact', NULL, NULL), + ( 9, 'state_province', 1, 0, 8, 'User and User Admin Only', 0, 0, 3, '{ts escape="sql"}State/Province{/ts}', 'Contact', NULL, NULL), + ( 10, 'financial_type', 0, 1, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Financial Type{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'total_amount', 0, 1, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Amount{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'contribution_status_id', 1, 1, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Status{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'receive_date', 1, 1, 4, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Received{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'contribution_source', 0, 0, 5, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Source{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'payment_instrument', 0, 0, 6, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Payment Method{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'contribution_check_number', 0, 0, 7, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Check Number{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'send_receipt', 0, 0, 8, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Send Receipt{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'invoice_id', 0, 0, 9, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Invoice ID{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'soft_credit', 0, 0, 10, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Soft Credit{/ts}', 'Contribution', NULL, NULL ), + ( 10, 'soft_credit_type', 0, 0, 11, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Soft Credit Type{/ts}', 'Contribution', NULL, NULL ), + ( 11, 'membership_type', 1, 1, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Membership Type{/ts}', 'Membership', NULL, NULL ), + ( 11, 'join_date', 1, 1, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Member Since{/ts}', 'Membership', NULL, NULL ), + ( 11, 'membership_start_date', 0, 1, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Start Date{/ts}', 'Membership', NULL, NULL ), + ( 11, 'membership_end_date', 0, 1, 4, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}End Date{/ts}', 'Membership', NULL, NULL ), + ( 11, 'membership_source', 0, 0, 5, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Source{/ts}', 'Membership', NULL, NULL ), + ( 11, 'send_receipt', 0, 0, 6, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Send Receipt{/ts}', 'Membership', NULL, NULL ), + ( 11, 'financial_type', 0, 1, 7, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Financial Type{/ts}', 'Membership', NULL, NULL ), + ( 11, 'total_amount', 0, 1, 8, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Amount{/ts}', 'Membership', NULL, NULL ), + ( 11, 'receive_date', 1, 1, 9, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Received{/ts}', 'Membership', NULL, NULL ), + ( 11, 'payment_instrument', 0, 0, 10, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Payment Method{/ts}', 'Membership', NULL, NULL ), + ( 11, 'contribution_check_number', 0, 0, 11, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Check Number{/ts}', 'Membership', NULL, NULL ), + ( 11, 'contribution_status_id', 1, 1, 12, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Payment Status{/ts}', 'Membership', NULL, NULL ), + ( 11, 'soft_credit', 0, 0, 13, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Soft Credit{/ts}', 'Membership', NULL, NULL ), + ( 11, 'soft_credit_type', 0, 0, 14, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Soft Credit Type{/ts}', 'Membership', NULL, NULL ), + ( 12, 'first_name', 1, 0, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}First Name{/ts}', 'Individual', NULL, NULL), + ( 12, 'last_name', 1, 0, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Last Name{/ts}', 'Individual', NULL, NULL), + ( 12, 'email', 1, 0, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Email Address{/ts}', 'Contact', NULL, NULL), + ( 13, 'prefix_id', 0, 1, 1, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Individual Prefix{/ts}', 'Individual', NULL, NULL), + ( 13, 'first_name', 1, 1, 2, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}First Name{/ts}', 'Individual', NULL, NULL), + ( 13, 'last_name', 1, 1, 3, 'User and User Admin Only', 0, 0, NULL, '{ts escape="sql"}Last Name{/ts}', 'Individual', NULL, NULL), + ( 13, 'email', 0, 1, 4, 'User and User Admin Only', 0, 0, 1, '{ts escape="sql"}Email Address{/ts}', 'Contact', NULL, NULL); + + +INSERT INTO civicrm_participant_status_type + (id, name, label, class, is_reserved, is_active, is_counted, weight, visibility_id) VALUES + (1, 'Registered', '{ts escape="sql"}Registered{/ts}', 'Positive', 1, 1, 1, 1, 1 ), + (2, 'Attended', '{ts escape="sql"}Attended{/ts}', 'Positive', 0, 1, 1, 2, 2 ), + (3, 'No-show', '{ts escape="sql"}No-show{/ts}', 'Negative', 0, 1, 0, 3, 2 ), + (4, 'Cancelled', '{ts escape="sql"}Cancelled{/ts}', 'Negative', 1, 1, 0, 4, 2 ), + (5, 'Pending from pay later', '{ts escape="sql"}Pending (pay later){/ts}', 'Pending', 1, 1, 1, 5, 2 ), + (6, 'Pending from incomplete transaction', '{ts escape="sql"}Pending (incomplete transaction){/ts}', 'Pending', 1, 1, 0, 6, 2 ), + (7, 'On waitlist', '{ts escape="sql"}On waitlist{/ts}', 'Waiting', 1, 0, 0, 7, 2 ), + (8, 'Awaiting approval', '{ts escape="sql"}Awaiting approval{/ts}', 'Waiting', 1, 0, 1, 8, 2 ), + (9, 'Pending from waitlist', '{ts escape="sql"}Pending from waitlist{/ts}', 'Pending', 1, 0, 1, 9, 2 ), + (10, 'Pending from approval', '{ts escape="sql"}Pending from approval{/ts}', 'Pending', 1, 0, 1, 10, 2 ), + (11, 'Rejected', '{ts escape="sql"}Rejected{/ts}', 'Negative', 1, 0, 0, 11, 2 ), + (12, 'Expired', '{ts escape="sql"}Expired{/ts}', 'Negative', 1, 1, 0, 12, 2 ), + (13, 'Pending in cart', '{ts escape="sql"}Pending in cart{/ts}', 'Pending', 1, 1, 0, 13, 2 ), + (14, 'Partially paid', '{ts escape="sql"}Partially paid{/ts}', 'Positive', 1, 1, 1, 14, 2 ), + (15, 'Pending refund', '{ts escape="sql"}Pending refund{/ts}', 'Positive', 1, 1, 1, 15, 2 ), + (16, 'Transferred', '{ts escape="sql"}Transferred{/ts}', 'Negative', 1, 1, 0, 16, 2); + +-- CRM-8150 +INSERT INTO civicrm_action_mapping +(entity, entity_value, entity_value_label, entity_status, entity_status_label, entity_date_start, entity_date_end, entity_recipient) +VALUES +( 'civicrm_activity', 'activity_type', 'Activity Type', 'activity_status', 'Activity Status', 'activity_date_time', NULL, 'activity_contacts'), +( 'civicrm_participant', 'event_type', 'Event Type', 'civicrm_participant_status_type', 'Participant Status', 'event_start_date', 'event_end_date', 'event_contacts'), +( 'civicrm_participant', 'civicrm_event', 'Event Name', 'civicrm_participant_status_type', 'Participant Status', 'event_start_date', 'event_end_date', 'event_contacts'), +( 'civicrm_membership', 'civicrm_membership_type', 'Membership Type', 'auto_renew_options', 'Auto Renew Options', 'membership_join_date', 'membership_end_date', NULL), +( 'civicrm_participant', 'event_template', 'Event Template', 'civicrm_participant_status_type', 'Participant Status', 'event_start_date', 'event_end_date', 'event_contacts'), +( 'civicrm_contact', 'civicrm_contact', 'Date Field', 'contact_date_reminder_options', 'Annual Options', 'date_field', NULL, NULL); + +INSERT INTO `civicrm_contact_type` + (`id`, `name`, `label`,`image_URL`, `parent_id`, `is_active`,`is_reserved`) + VALUES + ( 1, 'Individual' , '{ts escape="sql"}Individual{/ts}' , NULL, NULL, 1, 1), + ( 2, 'Household' , '{ts escape="sql"}Household{/ts}' , NULL, NULL, 1, 1), + ( 3, 'Organization', '{ts escape="sql"}Organization{/ts}', NULL, NULL, 1, 1); + +{include file='civicrm_msg_template.tpl'} + +-- CRM-8358 + +INSERT INTO `civicrm_job` + ( domain_id, run_frequency, last_run, name, description, api_entity, api_action, parameters, is_active ) +VALUES + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}CiviCRM Update Check{/ts}', '{ts escape="sql" skip="true"}Checks for CiviCRM version updates. Important for keeping the database secure. Also sends anonymous usage statistics to civicrm.org to to assist in prioritizing ongoing development efforts.{/ts}', 'job', 'version_check', NULL, 1), + ( @domainID, 'Always' , NULL, '{ts escape="sql" skip="true"}Send Scheduled Mailings{/ts}', '{ts escape="sql" skip="true"}Sends out scheduled CiviMail mailings{/ts}', 'job', 'process_mailing', NULL, 0), + ( @domainID, 'Hourly' , NULL, '{ts escape="sql" skip="true"}Fetch Bounces{/ts}', '{ts escape="sql" skip="true"}Fetches bounces from mailings and writes them to mailing statistics{/ts}', 'job', 'fetch_bounces', NULL, 0), + ( @domainID, 'Hourly' , NULL, '{ts escape="sql" skip="true"}Process Inbound Emails{/ts}', '{ts escape="sql" skip="true"}Inserts activity for a contact or a case by retrieving inbound emails from a mail directory{/ts}', 'job', 'fetch_activities', NULL, 0), + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Process Pledges{/ts}', '{ts escape="sql" skip="true"}Updates pledge records and sends out reminders{/ts}', 'job', 'process_pledge','{ts escape="sql" skip="true"}send_reminders=[1 or 0] optional- 1 to send payment reminders{/ts}', 0), + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Geocode and Parse Addresses{/ts}', '{ts escape="sql" skip="true"}Retrieves geocodes (lat and long) and / or parses street addresses (populates street number, street name, etc.){/ts}', 'job', 'geocode', '{ts escape="sql" skip="true"}geocoding=[1 or 0] required +parse=[1 or 0] required +start=[contact ID] optional-begin with this contact ID +end=[contact ID] optional-process contacts with IDs less than this +throttle=[1 or 0] optional-1 adds five second sleep{/ts}', 0), + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Update Greetings and Addressees{/ts}','{ts escape="sql" skip="true"}Goes through contact records and updates email and postal greetings, or addressee value{/ts}', 'job', 'update_greeting','{ts escape="sql" skip="true"}ct=[Individual or Household or Organization] required +gt=[email_greeting or postal_greeting or addressee] required +force=[0 or 1] optional-0 update contacts with null value, 1 update all +limit=Number optional-Limit the number of contacts to update{/ts}', 0), + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Mail Reports{/ts}', '{ts escape="sql" skip="true"}Generates and sends out reports via email{/ts}', 'job', 'mail_report','{ts escape="sql" skip="true"}instanceId=[ID of report instance] required +format=[csv or print] optional-output CSV or print-friendly HTML, else PDF{/ts}', 0), + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Send Scheduled Reminders{/ts}', '{ts escape="sql" skip="true"}Sends out scheduled reminders via email{/ts}', 'job', 'send_reminder', NULL, 0), + ( @domainID, 'Always' , NULL, '{ts escape="sql" skip="true"}Update Participant Statuses{/ts}', '{ts escape="sql" skip="true"}Updates pending event participant statuses based on time{/ts}', 'job', 'process_participant', NULL, 0), + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Update Membership Statuses{/ts}', '{ts escape="sql" skip="true"}Updates membership statuses. WARNING: Membership renewal reminders have been migrated to the Schedule Reminders functionality, which supports multiple renewal reminders.{/ts}', 'job', 'process_membership', NULL, 0), + ( @domainID, 'Always' , NULL, '{ts escape="sql" skip="true"}Process Survey Respondents{/ts}', '{ts escape="sql" skip="true"}Releases reserved survey respondents when they have been reserved for longer than the Release Frequency days specified for that survey.{/ts}', 'job', 'process_respondent',NULL, 0), + ( @domainID, 'Hourly' , NULL, '{ts escape="sql" skip="true"}Clean-up Temporary Data and Files{/ts}','{ts escape="sql" skip="true"}Removes temporary data and files, and clears old data from cache tables. Recommend running this job every hour to help prevent database and file system bloat.{/ts}', 'job', 'cleanup', NULL, 0), + ( @domainID, 'Always' , NULL, '{ts escape="sql" skip="true"}Send Scheduled SMS{/ts}', '{ts escape="sql" skip="true"}Sends out scheduled SMS{/ts}', 'job', 'process_sms', NULL, 0), + ( @domainID, 'Always' , NULL, '{ts escape="sql" skip="true"}Rebuild Smart Group Cache{/ts}', '{ts escape="sql" skip="true"}Rebuilds the smart group cache.{/ts}', 'job', 'group_rebuild', '{ts escape="sql" skip="true"}limit=Number optional-Limit the number of smart groups rebuild{/ts}', 0), + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Disable expired relationships{/ts}','{ts escape="sql" skip="true"}Disables relationships that have expired (ie. those relationships whose end date is in the past).{/ts}', 'job', 'disable_expired_relationships', NULL, 0), + ( @domainID, 'Daily' , NULL, '{ts escape="sql" skip="true"}Validate Email Address from Mailings.{/ts}', '{ts escape="sql" skip="true"}Updates the reset_date on an email address to indicate that there was a valid delivery to this email address.{/ts}', 'mailing', 'update_email_resetdate', '{ts escape="sql" skip="true"}minDays, maxDays=Consider mailings that have completed between minDays and maxDays{/ts}', 0); + +SELECT @option_value_rel_id := value FROM civicrm_option_value WHERE option_group_id = @option_group_id_arel AND name = 'Income Account is'; +SELECT @option_value_rel_id_exp := value FROM civicrm_option_value WHERE option_group_id = @option_group_id_arel AND name = 'Expense Account is'; +SELECT @option_value_rel_id_ar := value FROM civicrm_option_value WHERE option_group_id = @option_group_id_arel AND name = 'Accounts Receivable Account is'; +SELECT @option_value_rel_id_as := value FROM civicrm_option_value WHERE option_group_id = @option_group_id_arel AND name = 'Asset Account is'; +SELECT @option_value_rel_id_cg := value FROM civicrm_option_value WHERE option_group_id = @option_group_id_arel AND name = 'Cost of Sales Account is'; +SELECT @option_value_rel_id_dr := value FROM civicrm_option_value WHERE option_group_id = @option_group_id_arel AND name = 'Deferred Revenue Account is'; + +SELECT @financial_type_id_dtn := max(id) FROM civicrm_financial_type WHERE name = '{ts escape="sql"}Donation{/ts}'; +SELECT @financial_type_id_md := max(id) FROM civicrm_financial_type WHERE name = '{ts escape="sql"}Member Dues{/ts}'; +SELECT @financial_type_id_cc := max(id) FROM civicrm_financial_type WHERE name = '{ts escape="sql"}Campaign Contribution{/ts}'; +SELECT @financial_type_id_ef := max(id) FROM civicrm_financial_type WHERE name = '{ts escape="sql"}Event Fee{/ts}'; + +SELECT @financial_account_id_dtn := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Donation{/ts}'; +SELECT @financial_account_id_md := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Member Dues{/ts}'; +SELECT @financial_account_id_cc := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Campaign Contribution{/ts}'; +SELECT @financial_account_id_ef := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Event Fee{/ts}'; +SELECT @financial_account_id_bf := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Banking Fees{/ts}'; +SELECT @financial_account_id_ap := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Accounts Receivable{/ts}'; +SELECT @financial_account_id_ar := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Deposit Bank Account{/ts}'; +SELECT @financial_account_id_pp := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Payment Processor Account{/ts}'; +SELECT @financial_account_id_pr := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Premiums{/ts}'; +SELECT @financial_account_id_dref := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Deferred Revenue - Event Fee{/ts}'; +SELECT @financial_account_id_drmd := max(id) FROM civicrm_financial_account WHERE name = '{ts escape="sql"}Deferred Revenue - Member Dues{/ts}'; + +INSERT INTO `civicrm_entity_financial_account` + ( entity_table, entity_id, account_relationship, financial_account_id ) +VALUES + ( 'civicrm_financial_type', @financial_type_id_dtn, @option_value_rel_id, @financial_account_id_dtn ), + ( 'civicrm_financial_type', @financial_type_id_dtn, @option_value_rel_id_exp, @financial_account_id_bf ), + ( 'civicrm_financial_type', @financial_type_id_dtn, @option_value_rel_id_ar, @financial_account_id_ap ), + ( 'civicrm_financial_type', @financial_type_id_dtn, @option_value_rel_id_cg, @financial_account_id_pr ), + ( 'civicrm_financial_type', @financial_type_id_md, @option_value_rel_id, @financial_account_id_md ), + ( 'civicrm_financial_type', @financial_type_id_md, @option_value_rel_id_exp, @financial_account_id_bf ), + ( 'civicrm_financial_type', @financial_type_id_md, @option_value_rel_id_ar, @financial_account_id_ap ), + ( 'civicrm_financial_type', @financial_type_id_md, @option_value_rel_id_cg, @financial_account_id_pr ), + ( 'civicrm_financial_type', @financial_type_id_md, @option_value_rel_id_dr, @financial_account_id_drmd ), + ( 'civicrm_financial_type', @financial_type_id_cc, @option_value_rel_id, @financial_account_id_cc ), + ( 'civicrm_financial_type', @financial_type_id_cc, @option_value_rel_id_exp, @financial_account_id_bf ), + ( 'civicrm_financial_type', @financial_type_id_cc, @option_value_rel_id_ar, @financial_account_id_ap ), + ( 'civicrm_financial_type', @financial_type_id_cc, @option_value_rel_id_cg, @financial_account_id_pr ), + ( 'civicrm_financial_type', @financial_type_id_ef, @option_value_rel_id_exp, @financial_account_id_bf ), + ( 'civicrm_financial_type', @financial_type_id_ef, @option_value_rel_id_ar, @financial_account_id_ap ), + ( 'civicrm_financial_type', @financial_type_id_ef, @option_value_rel_id, @financial_account_id_ef ), + ( 'civicrm_financial_type', @financial_type_id_ef, @option_value_rel_id_dr, @financial_account_id_dref ), + ( 'civicrm_financial_type', @financial_type_id_ef, @option_value_rel_id_cg, @financial_account_id_pr ); + +-- CRM-11516 +INSERT INTO civicrm_entity_financial_account (entity_table, entity_id, account_relationship, financial_account_id) +SELECT 'civicrm_option_value', cov.id, @option_value_rel_id_as, @financial_account_id_ar FROM `civicrm_option_group` cog +LEFT JOIN civicrm_option_value cov ON cog.id = cov.option_group_id +WHERE cog.name = 'payment_instrument' AND cov.name NOT IN ('Credit Card', 'Debit Card'); + +SELECT @option_value_cc_id := max(id) FROM `civicrm_option_value` WHERE `option_group_id` = @option_group_id_pi AND `name` = 'Credit Card'; +SELECT @option_value_dc_id := max(id) FROM `civicrm_option_value` WHERE `option_group_id` = @option_group_id_pi AND `name` = 'Debit Card'; + +INSERT INTO `civicrm_entity_financial_account` + ( entity_table, entity_id, account_relationship, financial_account_id ) +VALUES + ( 'civicrm_option_value', @option_value_cc_id, @option_value_rel_id_as, @financial_account_id_pp), + ( 'civicrm_option_value', @option_value_dc_id, @option_value_rel_id_as, @financial_account_id_pp); + +-- CRM-9714 + +SELECT @financial_type_id := max(id) FROM `civicrm_financial_type` WHERE `name` = 'Member Dues'; +INSERT INTO `civicrm_price_set` ( `name`, `title`, `is_active`, `extends`, `is_quick_config`, `financial_type_id`, `is_reserved` ) +VALUES ( 'default_contribution_amount', 'Contribution Amount', '1', '2', '1', NULL,1), +( 'default_membership_type_amount', 'Membership Amount', '1', '3', '1', @financial_type_id,1); + +SELECT @setID := max(id) FROM civicrm_price_set WHERE name = 'default_contribution_amount' AND extends = 2 AND is_quick_config = 1 ; + +INSERT INTO `civicrm_price_field` (`price_set_id`, `name`, `label`, `html_type`,`weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`,`visibility_id` ) +VALUES ( @setID, 'contribution_amount', 'Contribution Amount', 'Text', '1', '1', '1', '1', '1', '1' ); + +SELECT @fieldID := max(id) FROM civicrm_price_field WHERE name = 'contribution_amount' AND price_set_id = @setID; + +INSERT INTO `civicrm_price_field_value` ( `price_field_id`, `name`, `label`, `amount`, `weight`, `is_default`, `is_active`, `financial_type_id`) +VALUES ( @fieldID, 'contribution_amount', 'Contribution Amount', '1', '1', '0', '1', 1); + +-- CRM-13833 +INSERT INTO civicrm_option_group (`name`, `title`, `is_reserved`, `is_active`) VALUES ('soft_credit_type', {localize}'{ts escape="sql"}Soft Credit Types{/ts}'{/localize}, 1, 1); + +SELECT @option_group_id_soft_credit_type := max(id) from civicrm_option_group where name = 'soft_credit_type'; + +INSERT INTO `civicrm_option_value` (`option_group_id`, `label`, `value`, `name`, `weight`, `is_default`, `is_active`, `is_reserved`) +VALUES + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}In Honor of{/ts}'{/localize}, 1, 'in_honor_of', 1, 0, 1, 1), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}In Memory of{/ts}'{/localize}, 2, 'in_memory_of', 2, 0, 1, 1), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Solicited{/ts}'{/localize}, 3, 'solicited', 3, 1, 1, 1), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Household{/ts}'{/localize}, 4, 'household', 4, 0, 1, 0), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Workplace Giving{/ts}'{/localize}, 5, 'workplace', 5, 0, 1, 0), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Foundation Affiliate{/ts}'{/localize}, 6, 'foundation_affiliate', 6, 0, 1, 0), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}3rd-party Service{/ts}'{/localize}, 7, '3rd-party_service', 7, 0, 1, 0), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Donor-advised Fund{/ts}'{/localize}, 8, 'donor-advised_fund', 8, 0, 1, 0), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Matched Gift{/ts}'{/localize}, 9, 'matched_gift', 9, 0, 1, 0), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Personal Campaign Page{/ts}'{/localize}, 10, 'pcp', 10, 0, 1, 1), + (@option_group_id_soft_credit_type , {localize}'{ts escape="sql"}Gift{/ts}'{/localize}, 11, 'gift', 11, 0, 1, 1); diff --git a/civicrm/xml/templates/civicrm_msg_template.tpl b/civicrm/xml/templates/civicrm_msg_template.tpl new file mode 100644 index 0000000000000000000000000000000000000000..a62d10024541df4e5759c152a4876c42ba662c72 --- /dev/null +++ b/civicrm/xml/templates/civicrm_msg_template.tpl @@ -0,0 +1,147 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +{* not sure how to define the below in Smarty, so doing it in PHP instead *} +{php} + $ogNames = array( + 'case' => ts('Message Template Workflow for Cases', array('escape' => 'sql')), + 'contribution' => ts('Message Template Workflow for Contributions', array('escape' => 'sql')), + 'event' => ts('Message Template Workflow for Events', array('escape' => 'sql')), + 'friend' => ts('Message Template Workflow for Tell-a-Friend', array('escape' => 'sql')), + 'membership' => ts('Message Template Workflow for Memberships', array('escape' => 'sql')), + 'meta' => ts('Message Template Workflow for Meta Templates', array('escape' => 'sql')), + 'pledge' => ts('Message Template Workflow for Pledges', array('escape' => 'sql')), + 'uf' => ts('Message Template Workflow for Profiles', array('escape' => 'sql')), + 'petition' => ts('Message Template Workflow for Petition', array('escape' => 'sql')), + ); + $ovNames = array( + 'case' => array( + 'case_activity' => ts('Cases - Send Copy of an Activity', array('escape' => 'sql')), + ), + 'contribution' => array( + 'contribution_dupalert' => ts('Contributions - Duplicate Organization Alert', array('escape' => 'sql')), + 'contribution_offline_receipt' => ts('Contributions - Receipt (off-line)', array('escape' => 'sql')), + 'contribution_online_receipt' => ts('Contributions - Receipt (on-line)', array('escape' => 'sql')), + 'contribution_invoice_receipt' => ts('Contributions - Invoice', array('escape' => 'sql')), + 'contribution_recurring_notify' => ts('Contributions - Recurring Start and End Notification', array('escape' => 'sql')), + 'contribution_recurring_cancelled' => ts('Contributions - Recurring Cancellation Notification', array('escape' => 'sql')), + 'contribution_recurring_billing' => ts('Contributions - Recurring Billing Updates', array('escape' => 'sql')), + 'contribution_recurring_edit' => ts('Contributions - Recurring Updates', array('escape' => 'sql')), + 'pcp_notify' => ts('Personal Campaign Pages - Admin Notification', array('escape' => 'sql')), + 'pcp_status_change' => ts('Personal Campaign Pages - Supporter Status Change Notification', array('escape' => 'sql')), + 'pcp_supporter_notify' => ts('Personal Campaign Pages - Supporter Welcome', array('escape' => 'sql')), + 'pcp_owner_notify' => ts('Personal Campaign Pages - Owner Notification', array('escape' => 'sql')), + 'payment_or_refund_notification' => ts('Additional Payment Receipt or Refund Notification', array('escape' => 'sql')), + ), + 'event' => array( + 'event_offline_receipt' => ts('Events - Registration Confirmation and Receipt (off-line)', array('escape' => 'sql')), + 'event_online_receipt' => ts('Events - Registration Confirmation and Receipt (on-line)', array('escape' => 'sql')), + 'event_registration_receipt' => ts('Events - Receipt only', array('escape' => 'sql')), + 'participant_cancelled' => ts('Events - Registration Cancellation Notice', array('escape' => 'sql')), + 'participant_confirm' => ts('Events - Registration Confirmation Invite', array('escape' => 'sql')), + 'participant_expired' => ts('Events - Pending Registration Expiration Notice', array('escape' => 'sql')), + 'participant_transferred' => ts('Events - Registration Transferred Notice', array('escape' => 'sql')), + ), + 'friend' => array( + 'friend' => ts('Tell-a-Friend Email', array('escape' => 'sql')), + ), + 'membership' => array( + 'membership_offline_receipt' => ts('Memberships - Signup and Renewal Receipts (off-line)', array('escape' => 'sql')), + 'membership_online_receipt' => ts('Memberships - Receipt (on-line)', array('escape' => 'sql')), + 'membership_autorenew_cancelled' => ts('Memberships - Auto-renew Cancellation Notification', array('escape' => 'sql')), + 'membership_autorenew_billing' => ts('Memberships - Auto-renew Billing Updates', array('escape' => 'sql')), + ), + 'meta' => array( + 'test_preview' => ts('Test-drive - Receipt Header', array('escape' => 'sql')), + ), + 'pledge' => array( + 'pledge_acknowledge' => ts('Pledges - Acknowledgement', array('escape' => 'sql')), + 'pledge_reminder' => ts('Pledges - Payment Reminder', array('escape' => 'sql')), + ), + 'uf' => array( + 'uf_notify' => ts('Profiles - Admin Notification', array('escape' => 'sql')), + ), + 'petition' => array( + 'petition_sign' => ts('Petition - signature added', array('escape' => 'sql')), + 'petition_confirmation_needed' => ts('Petition - need verification', array('escape' => 'sql')), + ), + ); + $this->assign('ogNames', $ogNames); + $this->assign('ovNames', $ovNames); +{/php} + +INSERT INTO civicrm_option_group + (name, {localize field='title'}title{/localize}, {localize field='description'}description{/localize}, is_reserved, is_active) VALUES +{foreach from=$ogNames key=name item=description name=for_groups} + ('msg_tpl_workflow_{$name}', {localize}'{$description}'{/localize}, {localize}'{$description}'{/localize}, 1, 1) {if $smarty.foreach.for_groups.last};{else},{/if} +{/foreach} + +{foreach from=$ogNames key=name item=description} + SELECT @tpl_ogid_{$name} := MAX(id) FROM civicrm_option_group WHERE name = 'msg_tpl_workflow_{$name}'; +{/foreach} + +INSERT INTO civicrm_option_value + (option_group_id, name, {localize field='label'}label{/localize}, value, weight) VALUES +{foreach from=$ovNames key=gName item=ovs name=for_groups} +{foreach from=$ovs key=vName item=label name=for_values} + (@tpl_ogid_{$gName}, '{$vName}', {localize}'{$label}'{/localize}, {$smarty.foreach.for_values.iteration}, {$smarty.foreach.for_values.iteration}) {if $smarty.foreach.for_groups.last and $smarty.foreach.for_values.last};{else},{/if} +{/foreach} +{/foreach} + +{foreach from=$ovNames key=gName item=ovs} +{foreach from=$ovs key=vName item=label} + SELECT @tpl_ovid_{$vName} := MAX(id) FROM civicrm_option_value WHERE option_group_id = @tpl_ogid_{$gName} AND name = '{$vName}'; +{/foreach} +{/foreach} + +INSERT INTO civicrm_msg_template + (msg_title, msg_subject, msg_text, msg_html, workflow_id, is_default, is_reserved) VALUES +{foreach from=$ovNames key=gName item=ovs name=for_groups} +{foreach from=$ovs key=vName item=title name=for_values} + {fetch assign=subject file="`$smarty.const.SMARTY_DIR`/../../xml/templates/message_templates/`$vName`_subject.tpl"} + {fetch assign=text file="`$smarty.const.SMARTY_DIR`/../../xml/templates/message_templates/`$vName`_text.tpl"} + {fetch assign=html file="`$smarty.const.SMARTY_DIR`/../../xml/templates/message_templates/`$vName`_html.tpl"} + ('{$title}', '{$subject|escape:"quotes"}', '{$text|escape:"quotes"}', '{$html|escape:"quotes"}', @tpl_ovid_{$vName}, 1, 0), + ('{$title}', '{$subject|escape:"quotes"}', '{$text|escape:"quotes"}', '{$html|escape:"quotes"}', @tpl_ovid_{$vName}, 0, 1) {if $smarty.foreach.for_groups.last and $smarty.foreach.for_values.last};{else},{/if} +{/foreach} +{/foreach} + +{php} + $dir = SMARTY_DIR . '/../../xml/templates/message_templates/sample'; + $templates = array(); + foreach (preg_grep('/\.tpl$/', scandir($dir)) as $filename) { + $templates[] = array('name' => basename($filename, '.tpl'), 'filename' => "$dir/$filename"); + } + $this->assign('templates', $templates); +{/php} + +{foreach from=$templates item=tpl} + {fetch assign=content file=$tpl.filename} +INSERT INTO civicrm_msg_template + (msg_title, msg_subject, msg_text, msg_html, workflow_id, is_default, is_reserved) VALUES + ('{$tpl.name} Template', '{$tpl.name}', '', '{$content|escape:"quotes"}' ,NULL, 1, 0); +{/foreach} diff --git a/civicrm/xml/templates/civicrm_navigation.tpl b/civicrm/xml/templates/civicrm_navigation.tpl new file mode 100644 index 0000000000000000000000000000000000000000..d8992089116f2c09f54919e1db4d654b013ce6b1 --- /dev/null +++ b/civicrm/xml/templates/civicrm_navigation.tpl @@ -0,0 +1,819 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- Navigation Menu, Preferences and Mail Settings +-- +-- Generated from {$smarty.template} +-- {$generated} + +SELECT @domainID := id FROM civicrm_domain where name = 'Default Domain Name'; + +-- Initial default state of system preferences + +-- mail settings + +INSERT INTO civicrm_mail_settings (domain_id, name, is_default, domain) VALUES (@domainID, 'default', true, 'EXAMPLE.ORG'); + +-- activity and case dashlets + +INSERT INTO `civicrm_dashboard` + ( `domain_id`, `name`, `label`, `url`, `permission`, `permission_operator`, `is_active`, `fullscreen_url`, `is_reserved`, `cache_minutes`) + VALUES + ( @domainID, 'blog', '{ts escape="sql"}CiviCRM News{/ts}', 'civicrm/dashlet/blog?reset=1', 'access CiviCRM', NULL, 1, 'civicrm/dashlet/blog?reset=1&context=dashletFullscreen', 1, 1440), + ( @domainID, 'getting-started', '{ts escape="sql"}CiviCRM Resources{/ts}', 'civicrm/dashlet/getting-started?reset=1', 'access CiviCRM', NULL, 1, 'civicrm/dashlet/getting-started?reset=1&context=dashletFullscreen', 1, 7200), + + ( @domainID, 'activity', '{ts escape="sql"}Activities{/ts}', 'civicrm/dashlet/activity?reset=1', 'access CiviCRM', NULL, 1, 'civicrm/dashlet/activity?reset=1&context=dashletFullscreen', 1, 7200), + ( @domainID, 'myCases', '{ts escape="sql"}My Cases{/ts}', 'civicrm/dashlet/myCases?reset=1', 'access my cases and activities', NULL, 1, 'civicrm/dashlet/myCases?reset=1&context=dashletFullscreen', 1, 60), + ( @domainID, 'allCases', '{ts escape="sql"}All Cases{/ts}', 'civicrm/dashlet/allCases?reset=1', 'access all cases and activities', NULL, 1, 'civicrm/dashlet/allCases?reset=1&context=dashletFullscreen', 1, 60), + ( @domainID, 'casedashboard', '{ts escape="sql"}Case Dashboard Dashlet{/ts}', 'civicrm/dashlet/casedashboard?reset=1', 'access my cases and activities,access all cases and activities', 'OR', 1, 'civicrm/dashlet/casedashboard?reset=1&context=dashletFullscreen', 1, 60); + +-- event badge +INSERT INTO civicrm_print_label (title, name, description, label_format_name, label_type_id, is_default, is_reserved, is_active, data) +VALUES +('Annual Conference Hanging Badge (Avery 5395)', 'Annual_Conference_Hanging_Badge', 'For our annual conference', 'Avery 5395', 1, 1, 1, 1, '{literal}{"title":"Annual Conference Hanging Badge (Avery 5395)","label_format_name":"Avery 5395","description":"For our annual conference","token":{"1":"{event.title}","2":"{contact.display_name}","3":"{contact.current_employer}","4":"{event.start_date}"},"font_name":{"1":"dejavusans","2":"dejavusans","3":"dejavusans","4":"dejavusans"},"font_size":{"1":"9","2":"20","3":"15","4":"9"},"font_style":{"1":"","2":"","3":"","4":""},"text_alignment":{"1":"L","2":"C","3":"C","4":"R"},"barcode_type":"barcode","barcode_alignment":"R","image_1":"","image_2":"","is_default":"1","is_active":"1","is_reserved":"1","_qf_default":"Layout:next","_qf_Layout_refresh":"Save and Preview"}{/literal}'); + +-- navigation + +INSERT INTO civicrm_navigation + ( domain_id, label, name, url, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Home{/ts}', 'Home', 'civicrm/dashboard?reset=1', NULL, '', NULL, 1, NULL, 0); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Search{/ts}', 'Search...', NULL, '', NULL, '1', NULL, 10 ); + +SET @searchlastID:=LAST_INSERT_ID(); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/contact/search?reset=1', '{ts escape="sql" skip="true"}Find Contacts{/ts}', 'Find Contacts', NULL, '', @searchlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/contact/search/advanced?reset=1', '{ts escape="sql" skip="true"}Advanced Search{/ts}', 'Advanced Search', NULL, '', @searchlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/contact/search/custom?csid=15&reset=1', '{ts escape="sql" skip="true"}Full-text Search{/ts}', 'Full-text Search', NULL, '', @searchlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/contact/search/builder?reset=1', '{ts escape="sql" skip="true"}Search Builder{/ts}', 'Search Builder', NULL, '', @searchlastID, '1', '1', 4 ), + ( @domainID, 'civicrm/case/search?reset=1', '{ts escape="sql" skip="true"}Find Cases{/ts}', 'Find Cases', 'access my cases and activities,access all cases and activities', 'OR', @searchlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/contribute/search?reset=1', '{ts escape="sql" skip="true"}Find Contributions{/ts}', 'Find Contributions', 'access CiviContribute', '', @searchlastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/mailing?reset=1', '{ts escape="sql" skip="true"}Find Mailings{/ts}', 'Find Mailings', 'access CiviMail', '', @searchlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/member/search?reset=1', '{ts escape="sql" skip="true"}Find Memberships{/ts}', 'Find Memberships', 'access CiviMember', '', @searchlastID, '1', NULL, 8 ), + ( @domainID, 'civicrm/event/search?reset=1', '{ts escape="sql" skip="true"}Find Participants{/ts}', 'Find Participants', 'access CiviEvent', '', @searchlastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/pledge/search?reset=1', '{ts escape="sql" skip="true"}Find Pledges{/ts}', 'Find Pledges', 'access CiviPledge', '', @searchlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/activity/search?reset=1', '{ts escape="sql" skip="true"}Find Activities{/ts}', 'Find Activities', NULL, '', @searchlastID, '1', '1', 11 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/contact/search/custom/list?reset=1', '{ts escape="sql" skip="true"}Custom Searches{/ts}', 'Custom Searches', NULL, '', @searchlastID, '1', NULL, 12 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Contacts{/ts}', 'Contacts', NULL, '', NULL, '1', NULL, 20 ); + +SET @contactlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/contact/add?reset=1&ct=Individual', '{ts escape="sql" skip="true"}New Individual{/ts}', 'New Individual', 'add contacts', '', @contactlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/contact/add?reset=1&ct=Household', '{ts escape="sql" skip="true"}New Household{/ts}', 'New Household', 'add contacts', '', @contactlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/contact/add?reset=1&ct=Organization', '{ts escape="sql" skip="true"}New Organization{/ts}', 'New Organization', 'add contacts', '', @contactlastID, '1', 1, 3 ), + ( @domainID, 'civicrm/report/list?compid=99&reset=1', '{ts escape="sql" skip="true"}Contact Reports{/ts}', 'Contact Reports', 'access CiviReport', '', @contactlastID, '1', 1, 4 ); + + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/activity?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Activity{/ts}', 'New Activity', NULL, '', @contactlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/activity/email/add?atype=3&action=add&reset=1&context=standalone', '{ts escape="sql" skip="true"}New Email{/ts}', 'New Email', NULL, '', @contactlastID, '1', '1', 6 ), + ( @domainID, 'civicrm/import/contact?reset=1', '{ts escape="sql" skip="true"}Import Contacts{/ts}', 'Import Contacts', 'import contacts', '', @contactlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/import/activity?reset=1', '{ts escape="sql" skip="true"}Import Activities{/ts}', 'Import Activities', 'import contacts', '', @contactlastID, '1', '1', 8 ), + ( @domainID, 'civicrm/group/add?reset=1', '{ts escape="sql" skip="true"}New Group{/ts}', 'New Group', 'edit groups', '', @contactlastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/group?reset=1', '{ts escape="sql" skip="true"}Manage Groups{/ts}', 'Manage Groups', 'access CiviCRM', '', @contactlastID, '1', '1', 10 ), + ( @domainID, 'civicrm/tag?reset=1&action=add', '{ts escape="sql" skip="true"}New Tag{/ts}', 'New Tag', 'manage tags', '', @contactlastID, '1', NULL, 11 ), + ( @domainID, 'civicrm/tag?reset=1', '{ts escape="sql" skip="true"}Manage Tags (Categories){/ts}', 'Manage Tags (Categories)', 'manage tags', '', @contactlastID, '1','1', 12 ), + ( @domainID, 'civicrm/contact/deduperules?reset=1', '{ts escape="sql" skip="true"}Find and Merge Duplicate Contacts{/ts}', 'Find and Merge Duplicate Contacts', 'administer dedupe rules,merge duplicate contacts', 'OR', @contactlastID, '1', NULL, 13 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Contributions{/ts}', 'Contributions', 'access CiviContribute', '', NULL, '1', NULL, 30 ); + +SET @contributionlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/contribute?reset=1', '{ts escape="sql" skip="true"}Dashboard{/ts}', 'Dashboard', 'access CiviContribute', '', @contributionlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/contribute/add?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Contribution{/ts}', 'New Contribution', 'access CiviContribute,edit contributions', 'AND', @contributionlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/contribute/search?reset=1', '{ts escape="sql" skip="true"}Find Contributions{/ts}', 'Find Contributions', 'access CiviContribute', '', @contributionlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/report/list?compid=2&reset=1', '{ts escape="sql" skip="true"}Contribution Reports{/ts}', 'Contribution Reports', 'access CiviContribute', '', @contributionlastID, '1', 1, 4 ), + ( @domainID, 'civicrm/contribute/import?reset=1', '{ts escape="sql" skip="true"}Import Contributions{/ts}', 'Import Contributions', 'access CiviContribute,edit contributions', 'AND', @contributionlastID, '1', '1', 5 ), + ( @domainID, 'civicrm/batch?reset=1', '{ts escape="sql" skip="true"}Batch Data Entry{/ts}', 'Batch Data Entry', 'access CiviContribute', '', @contributionlastID, '1', NULL, 7 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID,NULL, '{ts escape="sql" skip="true"}Pledges{/ts}', 'Pledges', 'access CiviPledge', '', @contributionlastID, '1', 1, 6 ); + +SET @pledgelastID:=LAST_INSERT_ID(); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID,NULL, '{ts escape="sql" skip="true"}Accounting Batches{/ts}', 'Accounting Batches', 'view own manual batches,view all manual batches', 'OR', @contributionlastID, '1', 1, 8 ); + +SET @financialTransactionID:=LAST_INSERT_ID(); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/pledge?reset=1', '{ts escape="sql" skip="true"}Dashboard{/ts}', 'Dashboard', 'access CiviPledge', '', @pledgelastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/pledge/add?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Pledge{/ts}', 'New Pledge', 'access CiviPledge,edit pledges', 'AND', @pledgelastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/pledge/search?reset=1', '{ts escape="sql" skip="true"}Find Pledges{/ts}', 'Find Pledges', 'access CiviPledge', '', @pledgelastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/report/list?compid=6&reset=1', '{ts escape="sql" skip="true"}Pledge Reports{/ts}', 'Pledge Reports', 'access CiviPledge', '', @pledgelastID, '1', 0, 4 ), + ( @domainID, 'civicrm/admin/contribute/add?reset=1&action=add', '{ts escape="sql" skip="true"}New Contribution Page{/ts}', 'New Contribution Page', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/admin/contribute?reset=1', '{ts escape="sql" skip="true"}Manage Contribution Pages{/ts}', 'Manage Contribution Pages', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', '1', 10 ), + ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=contribute', '{ts escape="sql" skip="true"}Personal Campaign Pages{/ts}', 'Personal Campaign Pages', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 11 ), + ( @domainID, 'civicrm/admin/contribute/managePremiums?reset=1', '{ts escape="sql" skip="true"}Premiums (Thank-you Gifts){/ts}', 'Premiums', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', 1, 12 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', NULL, 13 ), + ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviContribute,administer CiviCRM', 'AND', @contributionlastID, '1', 1, 14 ), + + ( @domainID, 'civicrm/financial/batch?reset=1&action=add', '{ts escape="sql" skip="true"}New Batch{/ts}', 'New Batch', 'create manual batch', 'AND', @financialTransactionID, '1', NULL, 1 ), + ( @domainID, 'civicrm/financial/financialbatches?reset=1&batchStatus=1', '{ts escape="sql" skip="true"}Open Batches{/ts}', 'Open Batches', 'view own manual batches,view all manual batches', 'OR', @financialTransactionID, '1', NULL, 2 ), + ( @domainID, 'civicrm/financial/financialbatches?reset=1&batchStatus=2', '{ts escape="sql" skip="true"}Closed Batches{/ts}', 'Closed Batches', 'view own manual batches,view all manual batches', 'OR', @financialTransactionID, '1', NULL, 3 ), + ( @domainID, 'civicrm/financial/financialbatches?reset=1&batchStatus=5', '{ts escape="sql" skip="true"}Exported Batches{/ts}', 'Exported Batches', 'view own manual batches,view all manual batches', 'OR', @financialTransactionID, '1', NULL, 4 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Events{/ts}', 'Events', 'access CiviEvent', '', NULL, '1', NULL, 40 ); + +SET @eventlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/event?reset=1', '{ts escape="sql" skip="true"}Dashboard{/ts}', 'CiviEvent Dashboard', 'access CiviEvent', '', @eventlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/participant/add?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}Register Event Participant{/ts}', 'Register Event Participant', 'access CiviEvent,edit event participants', 'AND', @eventlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/event/search?reset=1', '{ts escape="sql" skip="true"}Find Participants{/ts}', 'Find Participants', 'access CiviEvent', '', @eventlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/report/list?compid=1&reset=1', '{ts escape="sql" skip="true"}Event Reports{/ts}', 'Event Reports', 'access CiviEvent', '', @eventlastID, '1', 1, 4 ), + ( @domainID, 'civicrm/event/import?reset=1', '{ts escape="sql" skip="true"}Import Participants{/ts}','Import Participants', 'access CiviEvent,edit event participants', 'AND', @eventlastID, '1', '1', 5 ), + ( @domainID, 'civicrm/event/add?reset=1&action=add', '{ts escape="sql" skip="true"}New Event{/ts}', 'New Event', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/event/manage?reset=1', '{ts escape="sql" skip="true"}Manage Events{/ts}', 'Manage Events', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', 1, 7 ), + ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=event', '{ts escape="sql" skip="true"}Personal Campaign Pages{/ts}', 'Personal Campaign Pages', 'access CiviEvent,administer CiviCRM', 'AND', @eventlastID, '1', 1, 8 ), + ( @domainID, 'civicrm/admin/eventTemplate?reset=1', '{ts escape="sql" skip="true"}Event Templates{/ts}', 'Event Templates', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', 1, 9 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviEvent,edit all events', 'AND', @eventlastID, '1', NULL, 11 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Mailings{/ts}', 'Mailings', 'access CiviMail,create mailings,approve mailings,schedule mailings,send SMS', 'OR', NULL, '1', NULL, 50 ); + +SET @mailinglastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/mailing/send?reset=1', '{ts escape="sql" skip="true"}New Mailing{/ts}', 'New Mailing', 'access CiviMail,create mailings', 'OR', @mailinglastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/mailing/browse/unscheduled?reset=1&scheduled=false', '{ts escape="sql" skip="true"}Draft and Unscheduled Mailings{/ts}', 'Draft and Unscheduled Mailings', 'access CiviMail,create mailings,schedule mailings', 'OR', @mailinglastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/mailing/browse/scheduled?reset=1&scheduled=true', '{ts escape="sql" skip="true"}Scheduled and Sent Mailings{/ts}', 'Scheduled and Sent Mailings', 'access CiviMail,approve mailings,create mailings,schedule mailings', 'OR', @mailinglastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/mailing/browse/archived?reset=1', '{ts escape="sql" skip="true"}Archived Mailings{/ts}', 'Archived Mailings', 'access CiviMail,create mailings', 'OR', @mailinglastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/report/list?compid=4&reset=1', '{ts escape="sql" skip="true"}Mailing Reports{/ts}', 'Mailing Reports', 'access CiviMail', '', @mailinglastID, '1', 1, 5 ), + ( @domainID, 'civicrm/admin/component?reset=1', '{ts escape="sql" skip="true"}Headers, Footers, and Automated Messages{/ts}', 'Headers, Footers, and Automated Messages', 'access CiviMail,administer CiviCRM', 'AND', @mailinglastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/admin/messageTemplates?reset=1', '{ts escape="sql" skip="true"}Message Templates{/ts}', 'Message Templates', 'edit message templates', '', @mailinglastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/options/from_email_address?reset=1', '{ts escape="sql" skip="true"}From Email Addresses{/ts}', 'From Email Addresses', 'administer CiviCRM', '', @mailinglastID, '1', 1, 8 ), + ( @domainID, 'civicrm/sms/send?reset=1', '{ts escape="sql" skip="true"}New SMS{/ts}', 'New SMS', 'send SMS', NULL, @mailinglastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/mailing/browse?reset=1&sms=1', '{ts escape="sql" skip="true"}Find Mass SMS{/ts}', 'Find Mass SMS', 'send SMS', NULL, @mailinglastID, '1', 1, 10 ), + ( @domainID, 'civicrm/a/#/abtest/new', '{ts escape="sql" skip="true"}New A/B Test{/ts}', 'New A/B Test', 'access CiviMail', '', @mailinglastID, '1', NULL, 15 ), + ( @domainID, 'civicrm/a/#/abtest', '{ts escape="sql" skip="true"}Manage A/B Tests{/ts}', 'Manage A/B Tests', 'access CiviMail', '', @mailinglastID, '1', 1, 16 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Memberships{/ts}', 'Memberships', 'access CiviMember', '', NULL, '1', NULL, 60 ); + +SET @memberlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/member?reset=1', '{ts escape="sql" skip="true"}Dashboard{/ts}', 'Dashboard', 'access CiviMember', '', @memberlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/member/add?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Membership{/ts}', 'New Membership', 'access CiviMember,edit memberships', 'AND', @memberlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/member/search?reset=1', '{ts escape="sql" skip="true"}Find Memberships{/ts}', 'Find Memberships','access CiviMember', '', @memberlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/report/list?compid=3&reset=1', '{ts escape="sql" skip="true"}Membership Reports{/ts}', 'Membership Reports', 'access CiviMember', '', @memberlastID, '1', 1, 4 ), + ( @domainID, 'civicrm/batch?reset=1', '{ts escape="sql" skip="true"}Batch Data Entry{/ts}', 'Batch Data Entry','access CiviContribute', '', @memberlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/member/import?reset=1', '{ts escape="sql" skip="true"}Import Memberships{/ts}', 'Import Members', 'access CiviMember,edit memberships', 'AND', @memberlastID, '1', 1, 6 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviMember,administer CiviCRM', 'AND', @memberlastID, '1', NULL, 8 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Campaigns{/ts}', 'Campaigns', 'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts', 'OR', NULL, '1', NULL, 70 ); + +SET @campaignlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/campaign?reset=1', '{ts escape="sql" skip="true"}Dashboard{/ts}', 'Dashboard', 'manage campaign,administer CiviCampaign', 'OR', @campaignlastID, '1', NULL, 1 ); +SET @campaigndashboardlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/campaign?reset=1&subPage=survey', '{ts escape="sql" skip="true"}Surveys{/ts}', 'Survey Dashboard', 'manage campaign,administer CiviCampaign', 'OR', @campaigndashboardlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/campaign?reset=1&subPage=petition', '{ts escape="sql" skip="true"}Petitions{/ts}', 'Petition Dashboard', 'manage campaign,administer CiviCampaign', 'OR', @campaigndashboardlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/campaign?reset=1&subPage=campaign', '{ts escape="sql" skip="true"}Campaigns{/ts}', 'Campaign Dashboard', 'manage campaign,administer CiviCampaign', 'OR', @campaigndashboardlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/campaign/add?reset=1', '{ts escape="sql" skip="true"}New Campaign{/ts}', 'New Campaign', 'manage campaign,administer CiviCampaign', 'OR', @campaignlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/survey/add?reset=1', '{ts escape="sql" skip="true"}New Survey{/ts}', 'New Survey', 'manage campaign,administer CiviCampaign', 'OR', @campaignlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/petition/add?reset=1', '{ts escape="sql" skip="true"}New Petition{/ts}', 'New Petition', 'manage campaign,administer CiviCampaign', 'OR', @campaignlastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/survey/search?reset=1&op=reserve', '{ts escape="sql" skip="true"}Reserve Respondents{/ts}', 'Reserve Respondents', 'administer CiviCampaign,manage campaign,reserve campaign contacts', 'OR', @campaignlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/survey/search?reset=1&op=interview', '{ts escape="sql" skip="true"}Interview Respondents{/ts}', 'Interview Respondents', 'administer CiviCampaign,manage campaign,interview campaign contacts', 'OR', @campaignlastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/survey/search?reset=1&op=release', '{ts escape="sql" skip="true"}Release Respondents{/ts}', 'Release Respondents', 'administer CiviCampaign,manage campaign,release campaign contacts', 'OR', @campaignlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/report/list?compid=9&reset=1', '{ts escape="sql" skip="true"}Campaign Reports{/ts}', 'Campaign Reports', 'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts', 'OR', @campaignlastID, '1', 1, 8 ), + ( @domainID, 'civicrm/campaign/vote?reset=1', '{ts escape="sql" skip="true"}Conduct Survey{/ts}', 'Conduct Survey', 'administer CiviCampaign,manage campaign,reserve campaign contacts,interview campaign contacts', 'OR', @campaignlastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/campaign/gotv?reset=1', '{ts escape="sql" skip="true"}GOTV (Voter Tracking){/ts}', 'Voter Listing', 'administer CiviCampaign,manage campaign,release campaign contacts,gotv campaign contacts', 'OR', @campaignlastID, '1', NULL, 10 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Cases{/ts}', 'Cases', 'access my cases and activities,access all cases and activities', 'OR', NULL, '1', NULL, 80 ); + +SET @caselastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/case?reset=1', '{ts escape="sql" skip="true"}Dashboard{/ts}', 'Dashboard', 'access my cases and activities,access all cases and activities', 'OR', @caselastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/case/add?reset=1&action=add&atype=13&context=standalone', '{ts escape="sql" skip="true"}New Case{/ts}', 'New Case', 'add cases,access all cases and activities', 'OR', @caselastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/case/search?reset=1', '{ts escape="sql" skip="true"}Find Cases{/ts}', 'Find Cases', 'access my cases and activities,access all cases and activities', 'OR', @caselastID, '1', 1, 3 ), + ( @domainID, 'civicrm/report/list?compid=7&reset=1', '{ts escape="sql" skip="true"}Case Reports{/ts}', 'Case Reports', 'access my cases and activities,access all cases and activities,administer CiviCase', 'OR', @caselastID, '1', 0, 4 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Grants{/ts}', 'Grants', 'access CiviGrant', '', NULL, '1', NULL, 90 ); + +SET @grantlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/grant?reset=1', '{ts escape="sql" skip="true"}Dashboard{/ts}', 'Dashboard', 'access CiviGrant', '', @grantlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/grant/add?reset=1&action=add&context=standalone', '{ts escape="sql" skip="true"}New Grant{/ts}', 'New Grant', 'access CiviGrant,edit grants', 'AND', @grantlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/grant/search?reset=1', '{ts escape="sql" skip="true"}Find Grants{/ts}', 'Find Grants', 'access CiviGrant', '', @grantlastID, '1', 1, 3 ), + ( @domainID, 'civicrm/report/list?compid=5&reset=1', '{ts escape="sql" skip="true"}Grant Reports{/ts}', 'Grant Reports', 'access CiviGrant', '', @grantlastID, '1', 0, 4 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Administer{/ts}', 'Administer', 'administer CiviCRM', '', NULL, '1', NULL, 100 ); + +SET @adminlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin?reset=1', '{ts escape="sql" skip="true"}Administration Console{/ts}', 'Administration Console', 'administer CiviCRM', '', @adminlastID, '1', NULL, 1 ); + +SET @adminConsolelastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/a/#/status', '{ts escape="sql" skip="true"}System Status{/ts}', 'System Status', 'administer CiviCRM', '', @adminConsolelastID, '1', NULL, 0 ), + ( @domainID, 'civicrm/admin/configtask?reset=1', '{ts escape="sql" skip="true"}Configuration Checklist{/ts}', 'Configuration Checklist', 'administer CiviCRM', '', @adminConsolelastID, '1', NULL, 1 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Customize Data and Screens{/ts}', 'Customize Data and Screens', 'administer CiviCRM', '', @adminlastID, '1', NULL, 3 ); + +SET @CustomizelastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/custom/group?reset=1', '{ts escape="sql" skip="true"}Custom Fields{/ts}', 'Custom Fields', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/uf/group?reset=1', '{ts escape="sql" skip="true"}Profiles{/ts}', 'Profiles', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/tag?reset=1', '{ts escape="sql" skip="true"}Tags (Categories){/ts}', 'Tags (Categories)', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/options/activity_type?reset=1', '{ts escape="sql" skip="true"}Activity Types{/ts}', 'Activity Types', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/admin/reltype?reset=1', '{ts escape="sql" skip="true"}Relationship Types{/ts}', 'Relationship Types', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/options/subtype?reset=1', '{ts escape="sql" skip="true"}Contact Types{/ts}','Contact Types', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/admin/setting/preferences/display?reset=1', '{ts escape="sql" skip="true"}Display Preferences{/ts}', 'Display Preferences', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/admin/setting/search?reset=1', '{ts escape="sql" skip="true"}Search Preferences{/ts}', 'Search Preferences', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/setting/preferences/date?reset=1', '{ts escape="sql" skip="true"}Date Preferences{/ts}', 'Date Preferences', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 11 ), + ( @domainID, 'civicrm/admin/menu?reset=1', '{ts escape="sql" skip="true"}Navigation Menu{/ts}', 'Navigation Menu', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 12 ), + ( @domainID, 'civicrm/admin/options/wordreplacements?reset=1','{ts escape="sql" skip="true"}Word Replacements{/ts}','Word Replacements', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 13 ), + ( @domainID, 'civicrm/admin/options/custom_search?reset=1', '{ts escape="sql" skip="true"}Manage Custom Searches{/ts}', 'Manage Custom Searches', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 14 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Dropdown Options{/ts}', 'Dropdown Options', 'administer CiviCRM', '', @CustomizelastID, '1', NULL, 8 ); + +SET @optionListlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/options/gender?reset=1', '{ts escape="sql" skip="true"}Gender Options{/ts}', 'Gender Options', 'administer CiviCRM', '', @optionListlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/options/individual_prefix?reset=1', '{ts escape="sql" skip="true"}Individual Prefixes (Ms, Mr...){/ts}', 'Individual Prefixes (Ms, Mr...)', 'administer CiviCRM', '', @optionListlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/admin/options/individual_suffix?reset=1', '{ts escape="sql" skip="true"}Individual Suffixes (Jr, Sr...){/ts}', 'Individual Suffixes (Jr, Sr...)', 'administer CiviCRM', '', @optionListlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/options/instant_messenger_service?reset=1', '{ts escape="sql" skip="true"}Instant Messenger Services{/ts}', 'Instant Messenger Services', 'administer CiviCRM', '', @optionListlastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/admin/locationType?reset=1', '{ts escape="sql" skip="true"}Location Types (Home, Work...){/ts}', 'Location Types (Home, Work...)', 'administer CiviCRM', '', @optionListlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/options/mobile_provider?reset=1', '{ts escape="sql" skip="true"}Mobile Phone Providers{/ts}', 'Mobile Phone Providers', 'administer CiviCRM', '', @optionListlastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/admin/options/phone_type?reset=1', '{ts escape="sql" skip="true"}Phone Types{/ts}', 'Phone Types', 'administer CiviCRM', '', @optionListlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/options/website_type?reset=1', '{ts escape="sql" skip="true"}Website Types{/ts}', 'Website Types', 'administer CiviCRM', '', @optionListlastID, '1', NULL, 8 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Communications{/ts}', 'Communications', 'administer CiviCRM', '', @adminlastID, '1', NULL, 4 ); + +SET @communicationslastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/domain?action=update&reset=1', '{ts escape="sql" skip="true"}Organization Address and Contact Info{/ts}', 'Organization Address and Contact Info', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/options/from_email_address?reset=1', '{ts escape="sql" skip="true"}FROM Email Addresses{/ts}', 'FROM Email Addresses', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/admin/messageTemplates?reset=1', '{ts escape="sql" skip="true"}Message Templates{/ts}', 'Message Templates', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/scheduleReminders?reset=1', '{ts escape="sql" skip="true"}Schedule Reminders{/ts}', 'Schedule Reminders', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/admin/options/preferred_communication_method?reset=1', '{ts escape="sql" skip="true"}Preferred Communication Methods{/ts}', 'Preferred Communication Methods', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/labelFormats?reset=1', '{ts escape="sql" skip="true"}Label Formats{/ts}', 'Label Formats', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/admin/pdfFormats?reset=1', '{ts escape="sql" skip="true"}Print Page (PDF) Formats{/ts}', 'Print Page (PDF) Formats', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/options/communication_style?reset=1', '{ts escape="sql" skip="true"}Communication Style Options{/ts}', 'Communication Style Options', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 8 ), + ( @domainID, 'civicrm/admin/options/email_greeting?reset=1', '{ts escape="sql" skip="true"}Email Greeting Formats{/ts}', 'Email Greeting Formats', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/admin/options/postal_greeting?reset=1', '{ts escape="sql" skip="true"}Postal Greeting Formats{/ts}', 'Postal Greeting Formats', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/options/addressee?reset=1', '{ts escape="sql" skip="true"}Addressee Formats{/ts}', 'Addressee Formats', 'administer CiviCRM', '', @communicationslastID, '1', NULL, 11 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Localization{/ts}', 'Localization', 'administer CiviCRM', '', @adminlastID, '1', NULL, 6 ); + +SET @locallastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/setting/localization?reset=1', '{ts escape="sql" skip="true"}Languages, Currency, Locations{/ts}', 'Languages, Currency, Locations', 'administer CiviCRM', '', @locallastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/setting/preferences/address?reset=1', '{ts escape="sql" skip="true"}Address Settings{/ts}', 'Address Settings', 'administer CiviCRM', '', @locallastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/admin/setting/date?reset=1', '{ts escape="sql" skip="true"}Date Formats{/ts}', 'Date Formats', 'administer CiviCRM', '', @locallastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/options/languages?reset=1', '{ts escape="sql" skip="true"}Preferred Language Options{/ts}', 'Preferred Language Options', 'administer CiviCRM', '', @locallastID, '1', NULL, 4 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Users and Permissions{/ts}', 'Users and Permissions', 'administer CiviCRM', '', @adminlastID, '1', NULL, 7 ); + +SET @usersPermslastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/access?reset=1', '{ts escape="sql" skip="true"}Permissions (Access Control){/ts}', 'Permissions (Access Control)', 'administer CiviCRM', '', @usersPermslastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/synchUser?reset=1', '{ts escape="sql" skip="true"}Synchronize Users to Contacts{/ts}', 'Synchronize Users to Contacts', 'administer CiviCRM', '', @usersPermslastID, '1', NULL, 2 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}System Settings{/ts}', 'System Settings', 'administer CiviCRM', '', @adminlastID, '1', NULL, 8 ); + +SET @systemSettingslastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + + ( @domainID, 'civicrm/admin/setting/component?reset=1', '{ts escape="sql" skip="true"}Components{/ts}', 'Enable Components', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/a/#/cxn', '{ts escape="sql" skip="true"}Connections{/ts}', 'Connections', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/admin/extensions?reset=1', '{ts escape="sql" skip="true"}Extensions{/ts}', 'Manage Extensions', 'administer CiviCRM', '', @systemSettingslastID, '1', 1, 3 ), + + ( @domainID, 'civicrm/admin/setting/updateConfigBackend?reset=1', '{ts escape="sql" skip="true"}Cleanup Caches and Update Paths{/ts}', 'Cleanup Caches and Update Paths', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/admin/setting/uf?reset=1', '{ts escape="sql" skip="true"}CMS Database Integration{/ts}', 'CMS Integration', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/setting/debug?reset=1', '{ts escape="sql" skip="true"}Debugging and Error Handling{/ts}','Debugging and Error Handling', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/admin/setting/path?reset=1', '{ts escape="sql" skip="true"}Directories{/ts}', 'Directories', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/mapping?reset=1', '{ts escape="sql" skip="true"}Import/Export Mappings{/ts}', 'Import/Export Mappings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 8 ), + ( @domainID, 'civicrm/admin/setting/mapping?reset=1', '{ts escape="sql" skip="true"}Mapping and Geocoding{/ts}', 'Mapping and Geocoding', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/admin/setting/misc?reset=1', '{ts escape="sql" skip="true"}Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.){/ts}', 'Misc (Undelete, PDFs, Limits, Logging, Captcha, etc.)', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/setting/preferences/multisite?reset=1', '{ts escape="sql" skip="true"}Multi Site Settings{/ts}', 'Multi Site Settings', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 11 ), + ( @domainID, 'civicrm/admin/options?reset=1', '{ts escape="sql" skip="true"}Option Groups{/ts}', 'Option Groups', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 12 ), + ( @domainID, 'civicrm/admin/setting/smtp?reset=1', '{ts escape="sql" skip="true"}Outbound Email (SMTP/Sendmail){/ts}', 'Outbound Email', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 13 ), + ( @domainID, 'civicrm/admin/paymentProcessor?reset=1', '{ts escape="sql" skip="true"}Payment Processors{/ts}', 'Payment Processors', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 14 ), + ( @domainID, 'civicrm/admin/setting/url?reset=1', '{ts escape="sql" skip="true"}Resource URLs{/ts}', 'Resource URLs', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 15 ), + ( @domainID, 'civicrm/admin/options/safe_file_extension?reset=1', '{ts escape="sql" skip="true"}Safe File Extensions{/ts}', 'Safe File Extensions','administer CiviCRM', '',@systemSettingslastID, '1', NULL, 16 ), + ( @domainID, 'civicrm/admin/job?reset=1', '{ts escape="sql" skip="true"}Scheduled Jobs{/ts}', 'Scheduled Jobs', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 17 ), + ( @domainID, 'civicrm/admin/sms/provider?reset=1', '{ts escape="sql" skip="true"}SMS Providers{/ts}', 'SMS Providers', 'administer CiviCRM', '', @systemSettingslastID, '1', NULL, 18 ); + + +-- begin component admin menus +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}CiviCampaign{/ts}', 'CiviCampaign', 'administer CiviCampaign,administer CiviCRM', 'AND', @adminlastID, '1', NULL, 9 ); + +SET @adminCampaignlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/campaign/surveyType?reset=1', '{ts escape="sql" skip="true"}Survey Types{/ts}', 'Survey Types', 'administer CiviCampaign', '', @adminCampaignlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/options/campaign_type?reset=1', '{ts escape="sql" skip="true"}Campaign Types{/ts}', 'Campaign Types', 'administer CiviCampaign', '', @adminCampaignlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/admin/options/campaign_status?reset=1', '{ts escape="sql" skip="true"}Campaign Status{/ts}', 'Campaign Status', 'administer CiviCampaign', '', @adminCampaignlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/options/engagement_index?reset=1', '{ts escape="sql" skip="true"}Engagement Index{/ts}', 'Engagement Index', 'administer CiviCampaign', '', @adminCampaignlastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/admin/setting/preferences/campaign?reset=1', '{ts escape="sql" skip="true"}CiviCampaign Component Settings{/ts}', 'CiviCampaign Component Settings','administer CiviCampaign', '', @adminCampaignlastID, '1', NULL, 5 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}CiviCase{/ts}', 'CiviCase', 'administer CiviCase', NULL, @adminlastID, '1', NULL, 10 ); + +SET @adminCaselastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/setting/case?reset=1', '{ts escape="sql" skip="true"}CiviCase Settings{/ts}', 'CiviCase Settings', 'administer CiviCase', NULL, @adminCaselastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/a/#/caseType', '{ts escape="sql" skip="true"}Case Types{/ts}', 'Case Types', 'administer CiviCase', NULL, @adminCaselastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/admin/options/redaction_rule?reset=1', '{ts escape="sql" skip="true"}Redaction Rules{/ts}', 'Redaction Rules', 'administer CiviCase', NULL, @adminCaselastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/options/case_status?reset=1', '{ts escape="sql" skip="true"}Case Statuses{/ts}', 'Case Statuses', 'administer CiviCase', NULL, @adminCaselastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/admin/options/encounter_medium?reset=1', '{ts escape="sql" skip="true"}Encounter Medium{/ts}', 'Encounter Medium', 'administer CiviCase', NULL, @adminCaselastID, '1', NULL, 5 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}CiviContribute{/ts}', 'CiviContribute', 'access CiviContribute,administer CiviCRM', 'AND', @adminlastID, '1', NULL, 11 ); + +SET @adminContributelastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/contribute?reset=1&action=add', '{ts escape="sql" skip="true"}New Contribution Page{/ts}', 'New Contribution Page', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 6 ), + ( @domainID, 'civicrm/admin/contribute?reset=1', '{ts escape="sql" skip="true"}Manage Contribution Pages{/ts}', 'Manage Contribution Pages', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', '1', 7 ), + ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=contribute', '{ts escape="sql" skip="true"}Personal Campaign Pages{/ts}', 'Personal Campaign Pages', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 8 ), + ( @domainID, 'civicrm/admin/contribute/managePremiums?reset=1', '{ts escape="sql" skip="true"}Premiums (Thank-you Gifts){/ts}', 'Premiums', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', 1, 9 ), + ( @domainID, 'civicrm/admin/financial/financialType?reset=1', '{ts escape="sql" skip="true"}Financial Types{/ts}', 'Financial Types', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 10), + ( @domainID, 'civicrm/admin/financial/financialAccount?reset=1', '{ts escape="sql" skip="true"}Financial Accounts{/ts}', 'Financial Accounts', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 11), + ( @domainID, 'civicrm/admin/options/payment_instrument?reset=1', '{ts escape="sql" skip="true"}Payment Methods{/ts}', 'Payment Instruments', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 12 ), + ( @domainID, 'civicrm/admin/options/accept_creditcard?reset=1', '{ts escape="sql" skip="true"}Accepted Credit Cards{/ts}', 'Accepted Credit Cards', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 13 ), + ( @domainID, 'civicrm/admin/options/soft_credit_type?reset=1', '{ts escape="sql" skip="true"}Soft Credit Types{/ts}', 'Soft Credit Types', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', 1, 14 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 15 ), + ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviContribute,administer CiviCRM', 'AND', @adminContributelastID, '1', NULL, 16 ), + ( @domainID, 'civicrm/admin/paymentProcessor?reset=1', '{ts escape="sql" skip="true"}Payment Processors{/ts}', 'Payment Processors', 'administer CiviCRM', '', @adminContributelastID, '1', NULL, 17 ), + ( @domainID, 'civicrm/admin/setting/preferences/contribute?reset=1', '{ts escape="sql" skip="true"}CiviContribute Component Settings{/ts}', 'CiviContribute Component Settings', 'administer CiviCRM', '', @adminContributelastID, '1', NULL, 18 ) ; + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}CiviEvent{/ts}', 'CiviEvent', 'access CiviEvent,administer CiviCRM', 'AND', @adminlastID, '1', NULL, 12 ); + +SET @adminEventlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/event/add?reset=1&action=add', '{ts escape="sql" skip="true"}New Event{/ts}', 'New Event', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/event/manage?reset=1', '{ts escape="sql" skip="true"}Manage Events{/ts}', 'Manage Events', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 2 ), + ( @domainID, 'civicrm/admin/pcp?reset=1&page_type=event', '{ts escape="sql" skip="true"}Personal Campaign Pages{/ts}', 'Personal Campaign Pages', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 3 ), + ( @domainID, 'civicrm/admin/eventTemplate?reset=1', '{ts escape="sql" skip="true"}Event Templates{/ts}', 'Event Templates', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 4 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', 1, 6 ), + ( @domainID, 'civicrm/admin/options/event_type?reset=1', '{ts escape="sql" skip="true"}Event Types{/ts}', 'Event Types', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 7 ), + ( @domainID, 'civicrm/admin/participant_status?reset=1', '{ts escape="sql" skip="true"}Participant Statuses{/ts}', 'Participant Statuses', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 8 ), + ( @domainID, 'civicrm/admin/options/participant_role?reset=1', '{ts escape="sql" skip="true"}Participant Roles{/ts}', 'Participant Roles', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 9 ), + ( @domainID, 'civicrm/admin/options/participant_listing?reset=1', '{ts escape="sql" skip="true"}Participant Listing Options{/ts}', 'Participant Listing Options', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 10 ), + ( @domainID, 'civicrm/admin/badgelayout?reset=1', '{ts escape="sql" skip="true"}Event Name Badge Layouts{/ts}', 'Event Name Badge Layouts', 'access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 11 ), + ( @domainID, 'civicrm/admin/paymentProcessor?reset=1', '{ts escape="sql" skip="true"}Payment Processors{/ts}', 'Payment Processors', 'administer CiviCRM', '', @adminEventlastID, '1', NULL, 12), + ( @domainID, 'civicrm/admin/setting/preferences/event?reset=1', '{ts escape="sql" skip="true"}CiviEvent Component Settings{/ts}', 'CiviEvent Component Settings','access CiviEvent,administer CiviCRM', 'AND', @adminEventlastID, '1', NULL, 13 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}CiviGrant{/ts}', 'CiviGrant', 'access CiviGrant,administer CiviCRM', 'AND', @adminlastID, '1', NULL, 13 ); + +SET @adminGrantlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/options/grant_type?reset=1', '{ts escape="sql" skip="true"}Grant Types{/ts}', 'Grant Types', 'access CiviGrant,administer CiviCRM', 'AND', @adminGrantlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/options/grant_status?reset=1', '{ts escape="sql" skip="true"}Grant Status{/ts}', 'Grant Status', 'access CiviGrant,administer CiviCRM', 'AND', @adminGrantlastID, '1', NULL, 2 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}CiviMail{/ts}', 'CiviMail', 'access CiviMail,administer CiviCRM', 'AND', @adminlastID, '1', NULL, 14 ); + +SET @adminMailinglastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/component?reset=1', '{ts escape="sql" skip="true"}Headers, Footers, and Automated Messages{/ts}', 'Headers, Footers, and Automated Messages', 'access CiviMail,administer CiviCRM', 'AND', @adminMailinglastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/messageTemplates?reset=1', '{ts escape="sql" skip="true"}Message Templates{/ts}', 'Message Templates', 'administer CiviCRM', '', @adminMailinglastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/admin/options/from_email_address?reset=1', '{ts escape="sql" skip="true"}From Email Addresses{/ts}', 'From Email Addresses', 'administer CiviCRM', '', @adminMailinglastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/mailSettings?reset=1', '{ts escape="sql" skip="true"}Mail Accounts{/ts}', 'Mail Accounts', 'access CiviMail,administer CiviCRM', 'AND', @adminMailinglastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/admin/mail?reset=1', '{ts escape="sql" skip="true"}Mailer Settings{/ts}', 'Mailer Settings', 'access CiviMail,administer CiviCRM', 'AND', @adminMailinglastID, '1', NULL, 5 ), + ( @domainID, 'civicrm/admin/setting/preferences/mailing?reset=1', '{ts escape="sql" skip="true"}CiviMail Component Settings{/ts}', 'CiviMail Component Settings','access CiviMail,administer CiviCRM', 'AND', @adminMailinglastID, '1', NULL, 6 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}CiviMember{/ts}', 'CiviMember', 'access CiviMember,administer CiviCRM', 'AND', @adminlastID, '1', NULL, 15 ); + +SET @adminMemberlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/admin/member/membershipType?reset=1', '{ts escape="sql" skip="true"}Membership Types{/ts}', 'Membership Types', 'access CiviMember,administer CiviCRM', 'AND', @adminMemberlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/member/membershipStatus?reset=1', '{ts escape="sql" skip="true"}Membership Status Rules{/ts}', 'Membership Status Rules', 'access CiviMember,administer CiviCRM', 'AND', @adminMemberlastID, '1', 1, 2 ), + ( @domainID, 'civicrm/admin/price?reset=1&action=add', '{ts escape="sql" skip="true"}New Price Set{/ts}', 'New Price Set', 'access CiviMember,administer CiviCRM', 'AND', @adminMemberlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/price?reset=1', '{ts escape="sql" skip="true"}Manage Price Sets{/ts}', 'Manage Price Sets', 'access CiviMember,administer CiviCRM', 'AND', @adminMemberlastID, '1', NULL, 4 ), + ( @domainID, 'civicrm/admin/setting/preferences/member?reset=1', '{ts escape="sql" skip="true"}CiviMember Component Settings{/ts}', 'CiviMember Component Settings','access CiviMember,administer CiviCRM', 'AND', @adminMemberlastID, '1', NULL, 5 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}CiviReport{/ts}', 'CiviReport', 'access CiviReport,administer CiviCRM', 'AND', @adminlastID, '1', NULL, 16 ); + +SET @adminReportlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?reset=1', '{ts escape="sql" skip="true"}All Reports{/ts}', 'All Reports', 'access CiviReport', '', @adminReportlastID, '1', NULL, 1 ), + ( @domainID, 'civicrm/admin/report/template/list?reset=1', '{ts escape="sql" skip="true"}Create New Report from Template{/ts}', 'Create New Report from Template', 'administer Reports', '', @adminReportlastID, '1', NULL, 2 ), + ( @domainID, 'civicrm/admin/report/options/report_template?reset=1', '{ts escape="sql" skip="true"}Manage Templates{/ts}', 'Manage Templates', 'administer Reports', '', @adminReportlastID, '1', NULL, 3 ), + ( @domainID, 'civicrm/admin/report/register?reset=1', '{ts escape="sql" skip="true"}Register Report{/ts}', 'Register Report', 'administer Reports', '', @adminReportlastID, '1', NULL, 4 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Support{/ts}', 'Support', NULL, '', NULL, '1', NULL, 110); + +SET @adminHelplastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'https://civicrm.org/get-started?src=iam', '{ts escape="sql" skip="true"}Get started{/ts}', 'Get started', NULL, 'AND', @adminHelplastID, '1', NULL, 1 ), + ( @domainID, 'https://civicrm.org/documentation?src=iam', '{ts escape="sql" skip="true"}Documentation{/ts}', 'Documentation', NULL, 'AND', @adminHelplastID, '1', NULL, 2 ), + ( @domainID, 'https://civicrm.org/ask-a-question?src=iam', '{ts escape="sql" skip="true"}Ask a question{/ts}', 'Ask a question', NULL, 'AND', @adminHelplastID, '1', NULL, 3 ), + ( @domainID, 'https://civicrm.org/experts?src=iam', '{ts escape="sql" skip="true"}Get expert help{/ts}', 'Get expert help', NULL, 'AND', @adminHelplastID, '1', NULL, 4 ), + ( @domainID, 'https://civicrm.org/about?src=iam', '{ts escape="sql" skip="true"}About CiviCRM{/ts}', 'About CiviCRM', NULL, 'AND', @adminHelplastID, '1', 1, 5 ), + ( @domainID, 'https://civicrm.org/register-your-site?src=iam&sid={ldelim}sid{rdelim}', '{ts escape="sql" skip="true"}Register your site{/ts}', 'Register your site', NULL, 'AND', @adminHelplastID, '1', NULL, 6 ), + ( @domainID, 'https://civicrm.org/become-a-member?src=iam&sid={ldelim}sid{rdelim}', '{ts escape="sql" skip="true"}Join CiviCRM{/ts}', 'Join CiviCRM', NULL, 'AND', @adminHelplastID, '1', NULL, 7 ); + +INSERT INTO civicrm_navigation +( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Developer{/ts}', 'Developer', 'administer CiviCRM', '', @adminHelplastID, '1', 1, 8 ); + +SET @devellastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation +( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES +( @domainID, 'civicrm/api', '{ts escape="sql" skip="true"}API Explorer{/ts}','API Explorer', 'administer CiviCRM', '', @devellastID, '1', NULL, 1 ), +( @domainID, 'https://civicrm.org/developer-documentation?src=iam', '{ts escape="sql" skip="true"}Developer Docs{/ts}', 'Developer Docs', 'administer CiviCRM', '', @devellastID, '1', NULL, 3 ); + +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, NULL, '{ts escape="sql" skip="true"}Reports{/ts}', 'Reports', 'access CiviReport', '', NULL, '1', NULL, 95 ); + +SET @reportlastID:=LAST_INSERT_ID(); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=99&reset=1', '{ts escape="sql" skip="true"}Contact Reports{/ts}', 'Contact Reports', 'administer CiviCRM', '', @reportlastID, '1', 0, 1 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=2&reset=1', '{ts escape="sql" skip="true"}Contribution Reports{/ts}', 'Contribution Reports', 'access CiviContribute', '', @reportlastID, '1', 0, 2 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=6&reset=1', '{ts escape="sql" skip="true"}Pledge Reports{/ts}', 'Pledge Reports', 'access CiviPledge', '', @reportlastID, '1', 0, 3 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=1&reset=1', '{ts escape="sql" skip="true"}Event Reports{/ts}', 'Event Reports', 'access CiviEvent', '', @reportlastID, '1', 0, 4 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=4&reset=1', '{ts escape="sql" skip="true"}Mailing Reports{/ts}', 'Mailing Reports', 'access CiviMail', '', @reportlastID, '1', 0, 5 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=3&reset=1', '{ts escape="sql" skip="true"}Membership Reports{/ts}', 'Membership Reports', 'access CiviMember', '', @reportlastID, '1', 0, 6 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=9&reset=1', '{ts escape="sql" skip="true"}Campaign Reports{/ts}', 'Campaign Reports', 'interview campaign contacts,release campaign contacts,reserve campaign contacts,manage campaign,administer CiviCampaign,gotv campaign contacts', 'OR', @reportlastID, '1', 0, 7 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=7&reset=1', '{ts escape="sql" skip="true"}Case Reports{/ts}', 'Case Reports', 'access my cases and activities,access all cases and activities,administer CiviCase', 'OR', @reportlastID, '1', 0, 8 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?compid=5&reset=1', '{ts escape="sql" skip="true"}Grant Reports{/ts}', 'Grant Reports', 'access CiviGrant', '', @reportlastID, '1', 0, 9 ); +INSERT INTO civicrm_navigation + ( domain_id, url, label, name, permission, permission_operator, parent_id, is_active, has_separator, weight ) +VALUES + ( @domainID, 'civicrm/report/list?reset=1', '{ts escape="sql" skip="true"}All Reports{/ts}', 'All Reports', 'access CiviReport', '', @reportlastID, '1', 1, 10 ), +( @domainID, 'civicrm/report/list?myreports=1&reset=1', '{ts escape="sql" skip="true"}My Reports{/ts}', 'My Reports', 'access CiviReport', '', @reportlastID, '1', 1, 11); + +-- sample report instances + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Constituent Summary{/ts}', 'contact/summary', '{ts escape="sql" skip="true"}Provides a list of address and telephone information for constituent records in your system.{/ts}', 'view all contacts', '{literal}a:31:{s:6:"fields";a:4:{s:9:"sort_name";s:1:"1";s:14:"street_address";s:1:"1";s:4:"city";s:1:"1";s:10:"country_id";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:9:"source_op";s:3:"has";s:12:"source_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:92:"Provides a list of address and telephone information for constituent records in your system.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"view all contacts";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Constituent Detail{/ts}', 'contact/detail', '{ts escape="sql" skip="true"}Provides contact-related information on contributions, memberships, events and activities.{/ts}', 'view all contacts', '{literal}a:25:{s:6:"fields";a:30:{s:9:"sort_name";s:1:"1";s:10:"country_id";s:1:"1";s:15:"contribution_id";s:1:"1";s:12:"total_amount";s:1:"1";s:17:"financial_type_id";s:1:"1";s:12:"receive_date";s:1:"1";s:22:"contribution_status_id";s:1:"1";s:13:"membership_id";s:1:"1";s:18:"membership_type_id";s:1:"1";s:21:"membership_start_date";s:1:"1";s:19:"membership_end_date";s:1:"1";s:20:"membership_status_id";s:1:"1";s:14:"participant_id";s:1:"1";s:8:"event_id";s:1:"1";s:21:"participant_status_id";s:1:"1";s:7:"role_id";s:1:"1";s:25:"participant_register_date";s:1:"1";s:9:"fee_level";s:1:"1";s:10:"fee_amount";s:1:"1";s:15:"relationship_id";s:1:"1";s:20:"relationship_type_id";s:1:"1";s:12:"contact_id_b";s:1:"1";s:2:"id";s:1:"1";s:16:"activity_type_id";s:1:"1";s:7:"subject";s:1:"1";s:17:"source_contact_id";s:1:"1";s:18:"activity_date_time";s:1:"1";s:18:"activity_status_id";s:1:"1";s:17:"target_contact_id";s:1:"1";s:19:"assignee_contact_id";s:1:"1";}s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:90:"Provides contact-related information on contributions, memberships, events and activities.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"view all contacts";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Activity Details{/ts}', 'activity', '{ts escape="sql" skip="true"}Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required){/ts}', 'view all contacts', '{literal}a:26:{s:6:"fields";a:6:{s:16:"contact_assignee";s:1:"1";s:14:"contact_target";s:1:"1";s:16:"activity_type_id";s:1:"1";s:16:"activity_subject";s:1:"1";s:18:"activity_date_time";s:1:"1";s:9:"status_id";s:1:"1";}s:17:"contact_source_op";s:3:"has";s:20:"contact_source_value";s:0:"";s:19:"contact_assignee_op";s:3:"has";s:22:"contact_assignee_value";s:0:"";s:17:"contact_target_op";s:3:"has";s:20:"contact_target_value";s:0:"";s:15:"current_user_op";s:2:"eq";s:18:"current_user_value";s:1:"0";s:27:"activity_date_time_relative";s:10:"this.month";s:23:"activity_date_time_from";s:0:"";s:21:"activity_date_time_to";s:0:"";s:19:"activity_subject_op";s:3:"has";s:22:"activity_subject_value";s:0:"";s:19:"activity_type_id_op";s:2:"in";s:22:"activity_type_id_value";a:0:{}s:12:"status_id_op";s:2:"in";s:15:"status_id_value";a:0:{}s:11:"description";s:126:"Provides a list of constituent activity including activity statistics for one/all contacts during a given date range(required)";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"view all contacts";s:6:"groups";s:0:"";s:9:"group_bys";N;s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + (`domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Current Employers{/ts}', 'contact/currentEmployer', '{ts escape="sql" skip="true"}Provides detail list of employer employee relationships along with employment details.{/ts}', 'view all contacts', '{literal}a:33:{s:6:"fields";a:5:{s:17:"organization_name";s:1:"1";s:9:"sort_name";s:1:"1";s:9:"job_title";s:1:"1";s:10:"start_date";s:1:"1";s:5:"email";s:1:"1";}s:20:"organization_name_op";s:3:"has";s:23:"organization_name_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:19:"start_date_relative";s:1:"0";s:15:"start_date_from";s:0:"";s:13:"start_date_to";s:0:"";s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:98:"Provides detail list of employer employee relationships along with employment details Ex Join Date";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"view all contacts";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Relationships{/ts}', 'contact/relationship', '{ts escape="sql" skip="true"}Gives relationship details between two contacts{/ts}', 'view all contacts', '{literal}a:28:{s:6:"fields";a:4:{s:11:"sort_name_a";s:1:"1";s:11:"sort_name_b";s:1:"1";s:9:"label_a_b";s:1:"1";s:9:"label_b_a";s:1:"1";}s:14:"sort_name_a_op";s:3:"has";s:17:"sort_name_a_value";s:0:"";s:14:"sort_name_b_op";s:3:"has";s:17:"sort_name_b_value";s:0:"";s:17:"contact_type_a_op";s:2:"in";s:20:"contact_type_a_value";a:0:{}s:17:"contact_type_b_op";s:2:"in";s:20:"contact_type_b_value";a:0:{}s:12:"is_active_op";s:2:"eq";s:15:"is_active_value";s:0:"";s:23:"relationship_type_id_op";s:2:"eq";s:26:"relationship_type_id_value";s:0:"";s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:19:"Relationship Report";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"view all contacts";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Activity Summary{/ts}', 'activitySummary', '{ts escape="sql" skip="true"}Shows activity statistics by type / date{/ts}', 'view all contacts', '{literal}a:26:{s:6:"fields";a:4:{s:16:"activity_type_id";s:1:"1";s:9:"status_id";s:1:"1";s:8:"duration";s:1:"1";s:2:"id";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:27:"activity_date_time_relative";s:0:"";s:23:"activity_date_time_from";s:0:"";s:21:"activity_date_time_to";s:0:"";s:19:"activity_type_id_op";s:2:"in";s:22:"activity_type_id_value";a:0:{}s:12:"status_id_op";s:2:"in";s:15:"status_id_value";a:0:{}s:14:"priority_id_op";s:2:"in";s:17:"priority_id_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:9:"group_bys";a:2:{s:16:"activity_type_id";s:1:"1";s:9:"status_id";s:1:"1";}s:14:"group_bys_freq";a:1:{s:18:"activity_date_time";s:5:"MONTH";}s:9:"order_bys";a:1:{i:1;a:2:{s:6:"column";s:16:"activity_type_id";s:5:"order";s:3:"ASC";}}s:11:"description";s:40:"Shows activity statistics by type / date";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:9:"row_count";s:0:"";s:10:"permission";s:17:"view all contacts";s:9:"parent_id";s:0:"";s:6:"groups";s:0:"";s:11:"instance_id";N;}{/literal}'); + +-- Contribution reports +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Contribution Summary{/ts}', 'contribute/summary', '{ts escape="sql" skip="true"}Groups and totals contributions by criteria including contact, time period, contribution type, contributor location, etc.{/ts}', 'access CiviContribute', '{literal}a:42:{s:6:"fields";a:1:{s:12:"total_amount";s:1:"1";}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:13:"total_sum_min";s:0:"";s:13:"total_sum_max";s:0:"";s:12:"total_sum_op";s:3:"lte";s:15:"total_sum_value";s:0:"";s:15:"total_count_min";s:0:"";s:15:"total_count_max";s:0:"";s:14:"total_count_op";s:3:"lte";s:17:"total_count_value";s:0:"";s:13:"total_avg_min";s:0:"";s:13:"total_avg_max";s:0:"";s:12:"total_avg_op";s:3:"lte";s:15:"total_avg_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:9:"group_bys";a:1:{s:12:"receive_date";s:1:"1";}s:14:"group_bys_freq";a:1:{s:12:"receive_date";s:5:"MONTH";}s:11:"description";s:80:"Shows contribution statistics by month / week / year .. country / state .. type.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";s:6:"charts";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Contribution Details{/ts}', 'contribute/detail', '{ts escape="sql" skip="true"}Lists specific contributions by criteria including contact, time period, contribution type, contributor location, etc. Contribution summary report points to this report for contribution details.{/ts}', 'access CiviContribute', '{literal}a:56:{s:6:"fields";a:7:{s:9:"sort_name";s:1:"1";s:5:"email";s:1:"1";s:5:"phone";s:1:"1";s:17:"financial_type_id";s:1:"1";s:12:"receive_date";s:1:"1";s:12:"total_amount";s:1:"1";s:10:"country_id";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:21:"receive_date_relative";s:0:"";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:24:"payment_instrument_id_op";s:2:"in";s:27:"payment_instrument_id_value";a:0:{}s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:13:"ordinality_op";s:2:"in";s:16:"ordinality_value";a:0:{}s:7:"note_op";s:3:"has";s:10:"note_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:12:"county_id_op";s:2:"in";s:15:"county_id_value";a:0:{}s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:9:"order_bys";a:1:{i:1;a:2:{s:6:"column";s:9:"sort_name";s:5:"order";s:3:"ASC";}}s:11:"description";s:194:"Lists specific contributions by criteria including contact, time period, contribution type, contributor location, etc. Contribution summary report points to this report for contribution details.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:9:"parent_id";s:0:"";s:6:"groups";s:0:"";s:9:"domain_id";i:1;s:11:"is_reserved";b:0;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Repeat Contributions{/ts}', 'contribute/repeat', '{ts escape="sql" skip="true"}Given two date ranges, shows contacts who contributed in both the date ranges with the amount contributed in each and the percentage increase / decrease.{/ts}', 'access CiviContribute', '{literal}a:29:{s:6:"fields";a:3:{s:9:"sort_name";s:1:"1";s:13:"total_amount1";s:1:"1";s:13:"total_amount2";s:1:"1";}s:22:"receive_date1_relative";s:13:"previous.year";s:18:"receive_date1_from";s:0:"";s:16:"receive_date1_to";s:0:"";s:22:"receive_date2_relative";s:9:"this.year";s:18:"receive_date2_from";s:0:"";s:16:"receive_date2_to";s:0:"";s:17:"total_amount1_min";s:0:"";s:17:"total_amount1_max";s:0:"";s:16:"total_amount1_op";s:3:"lte";s:19:"total_amount1_value";s:0:"";s:17:"total_amount2_min";s:0:"";s:17:"total_amount2_max";s:0:"";s:16:"total_amount2_op";s:3:"lte";s:19:"total_amount2_value";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:9:"group_bys";a:1:{s:2:"id";s:1:"1";}s:11:"description";s:140:"Given two date ranges, shows contacts (and their contributions) who contributed in both the date ranges with percentage increase / decrease.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}SYBUNT (some year but not this year){/ts}', 'contribute/sybunt', '{ts escape="sql" skip="true"}Some year(s) but not this year. Provides a list of constituents who donated at some time in the history of your organization but did not donate during the time period you specify.{/ts}', 'access CiviContribute', '{literal}a:18:{s:6:"fields";a:3:{s:9:"sort_name";s:1:"1";s:5:"email";s:1:"1";s:5:"phone";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"yid_op";s:2:"eq";s:9:"yid_value";s:4:"2011";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:179:"Some year(s) but not this year. Provides a list of constituents who donated at some time in the history of your organization but did not donate during the time period you specify.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"charts";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}LYBUNT (last year but not this year){/ts}', 'contribute/lybunt', '{ts escape="sql" skip="true"}Last year but not this year. Provides a list of constituents who donated last year but did not donate during the time period you specify as the current year.{/ts}', 'access CiviContribute', '{literal}a:19:{s:6:"fields";a:3:{s:9:"sort_name";s:1:"1";s:5:"email";s:1:"1";s:5:"phone";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"yid_op";s:2:"eq";s:9:"yid_value";s:4:"2011";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:157:"Last year but not this year. Provides a list of constituents who donated last year but did not donate during the time period you specify as the current year.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";s:6:"charts";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Contributions by Organization{/ts}', 'contribute/organizationSummary', '{ts escape="sql" skip="true"}Displays a detailed list of contributions grouped by organization, which includes contributions made by employees for the organisation.{/ts}', 'access CiviContribute', '{literal}a:20:{s:6:"fields";a:5:{s:17:"organization_name";s:1:"1";s:9:"sort_name";s:1:"1";s:12:"total_amount";s:1:"1";s:22:"contribution_status_id";s:1:"1";s:12:"receive_date";s:1:"1";}s:20:"organization_name_op";s:3:"has";s:23:"organization_name_value";s:0:"";s:23:"relationship_type_id_op";s:2:"eq";s:26:"relationship_type_id_value";s:5:"4_b_a";s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:11:"description";s:193:"Displays a detailed contribution report for Organization relationships with contributors, as to if contribution done was from an employee of some organization or from that Organization itself.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Contributions by Household{/ts}', 'contribute/householdSummary', '{ts escape="sql" skip="true"}Displays a detailed list of contributions grouped by household which includes contributions made by members of the household.{/ts}', 'access CiviContribute', '{literal}a:21:{s:6:"fields";a:5:{s:14:"household_name";s:1:"1";s:9:"sort_name";s:1:"1";s:12:"total_amount";s:1:"1";s:22:"contribution_status_id";s:1:"1";s:12:"receive_date";s:1:"1";}s:17:"household_name_op";s:3:"has";s:20:"household_name_value";s:0:"";s:23:"relationship_type_id_op";s:2:"eq";s:26:"relationship_type_id_value";s:5:"6_b_a";s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:11:"description";s:213:"Provides a detailed report for Contributions made by contributors(Or Household itself) who are having a relationship with household (For ex a Contributor is Head of Household for some household or is a member of.)";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Top Donors{/ts}', 'contribute/topDonor', '{ts escape="sql" skip="true"}Provides a list of the top donors during a time period you define. You can include as many donors as you want (for example, top 100 of your donors).{/ts}', 'access CiviContribute', '{literal}a:20:{s:6:"fields";a:2:{s:12:"display_name";s:1:"1";s:12:"total_amount";s:1:"1";}s:21:"receive_date_relative";s:9:"this.year";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:15:"total_range_min";s:0:"";s:15:"total_range_max";s:0:"";s:14:"total_range_op";s:2:"eq";s:17:"total_range_value";s:0:"";s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:11:"description";s:148:"Provides a list of the top donors during a time period you define. You can include as many donors as you want (for example, top 100 of your donors).";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Soft Credits{/ts}', 'contribute/softcredit', '{ts escape="sql" skip="true"}Shows contributions made by contacts that have been soft-credited to other contacts.{/ts}', 'access CiviContribute', '{literal}a:23:{s:6:"fields";a:5:{s:21:"display_name_creditor";s:1:"1";s:24:"display_name_constituent";s:1:"1";s:14:"email_creditor";s:1:"1";s:14:"phone_creditor";s:1:"1";s:6:"amount";s:1:"1";}s:5:"id_op";s:2:"in";s:8:"id_value";a:0:{}s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:10:"amount_min";s:0:"";s:10:"amount_max";s:0:"";s:9:"amount_op";s:3:"lte";s:12:"amount_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:20:"Soft Credit details.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + (@domainID,'{ts escape="sql" skip="true"}Contribution Aggregate by Relationship{/ts}', 'contribute/history','{ts escape="sql" skip="true"}List contact's donation history, grouped by year, along with contributions attributed to any of the contact's related contacts.{/ts}', 'access CiviContribute','{literal}a:41:{s:6:"fields";a:7:{s:9:"sort_name";s:1:"1";s:20:"relationship_type_id";s:1:"1";s:17:"civicrm_upto_2009";s:1:"1";i:2010;s:1:"1";i:2011;s:1:"1";i:2012;s:1:"1";i:2013;s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:23:"relationship_type_id_op";s:2:"in";s:26:"relationship_type_id_value";a:0:{}s:12:"this_year_op";s:2:"eq";s:15:"this_year_value";s:0:"";s:13:"other_year_op";s:2:"eq";s:16:"other_year_value";s:0:"";s:21:"receive_date_relative";s:0:"";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:13:"total_sum_min";s:0:"";s:13:"total_sum_max";s:0:"";s:12:"total_sum_op";s:3:"lte";s:15:"total_sum_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:127:"List contact''s donation history, grouped by year, along with contributions attributed to any of the contact''s related contacts.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:9:"parent_id";s:0:"";s:6:"groups";s:0:"";s:9:"domain_id";i:1;s:11:"is_reserved";b:0;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Personal Campaign Page Summary{/ts}', 'contribute/pcp', '{ts escape="sql" skip="true"}Summarizes amount raised and number of contributors for each Personal Campaign Page.{/ts}', 'access CiviContribute', '{literal}a:22:{s:6:"fields";a:8:{s:9:"sort_name";s:1:"1";s:10:"page_title";s:1:"1";s:5:"title";s:1:"1";s:11:"goal_amount";s:1:"1";s:8:"amount_1";s:1:"1";s:8:"amount_2";s:1:"1";s:7:"soft_id";s:1:"1";s:12:"receive_date";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:13:"page_title_op";s:3:"has";s:16:"page_title_value";s:0:"";s:8:"title_op";s:3:"has";s:11:"title_value";s:0:"";s:12:"amount_2_min";s:0:"";s:12:"amount_2_max";s:0:"";s:11:"amount_2_op";s:3:"lte";s:14:"amount_2_value";s:0:"";s:11:"description";s:35:"Shows Personal Campaign Page Report";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Pledge Detail{/ts}', 'pledge/detail', '{ts escape="sql" skip="true"}List of pledges including amount pledged, pledge status, next payment date, balance due, total amount paid etc.{/ts}', 'access CiviPledge', '{literal}a:27:{s:6:"fields";a:4:{s:9:"sort_name";s:1:"1";s:10:"country_id";s:1:"1";s:6:"amount";s:1:"1";s:9:"status_id";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:27:"pledge_create_date_relative";s:1:"0";s:23:"pledge_create_date_from";s:0:"";s:21:"pledge_create_date_to";s:0:"";s:17:"pledge_amount_min";s:0:"";s:17:"pledge_amount_max";s:0:"";s:16:"pledge_amount_op";s:3:"lte";s:19:"pledge_amount_value";s:0:"";s:6:"sid_op";s:2:"in";s:9:"sid_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:13:"Pledge Report";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviPledge";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Pledged But not Paid{/ts}', 'pledge/pbnp', '{ts escape="sql" skip="true"}Pledged but not Paid Report{/ts}', 'access CiviPledge', '{literal}a:17:{s:6:"fields";a:5:{s:9:"sort_name";s:1:"1";s:18:"pledge_create_date";s:1:"1";s:6:"amount";s:1:"1";s:14:"scheduled_date";s:1:"1";s:10:"country_id";s:1:"1";}s:27:"pledge_create_date_relative";s:1:"0";s:23:"pledge_create_date_from";s:0:"";s:21:"pledge_create_date_to";s:0:"";s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:27:"Pledged but not Paid Report";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviPledge";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Bookkeeping Transactions{/ts}', 'contribute/bookkeeping', '{ts escape="sql" skip="true"}Provides transaction details for all contributions and payments, including Transaction #, Invoice ID, Payment Instrument and Check #.{/ts}', 'access CiviContribute', '{literal}a:40:{s:6:"fields";a:12:{s:9:"sort_name";s:1:"1";s:21:"debit_accounting_code";s:1:"1";s:22:"credit_accounting_code";s:1:"1";s:17:"financial_type_id";s:1:"1";s:12:"receive_date";s:1:"1";s:22:"contribution_status_id";s:1:"1";s:2:"id";s:1:"1";s:12:"check_number";s:1:"1";s:21:"payment_instrument_id";s:1:"1";s:9:"trxn_date";s:1:"1";s:7:"trxn_id";s:1:"1";s:6:"amount";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:24:"debit_accounting_code_op";s:2:"in";s:27:"debit_accounting_code_value";a:0:{}s:25:"credit_accounting_code_op";s:2:"in";s:28:"credit_accounting_code_value";a:0:{}s:13:"debit_name_op";s:2:"in";s:16:"debit_name_value";a:0:{}s:14:"credit_name_op";s:2:"in";s:17:"credit_name_value";a:0:{}s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"1";}s:24:"payment_instrument_id_op";s:2:"in";s:27:"payment_instrument_id_value";a:0:{}s:18:"trxn_date_relative";s:1:"0";s:14:"trxn_date_from";s:0:"";s:12:"trxn_date_to";s:0:"";s:10:"amount_min";s:0:"";s:10:"amount_max";s:0:"";s:9:"amount_op";s:3:"lte";s:12:"amount_value";s:0:"";s:11:"description";s:133:"Provides transaction details for all contributions and payments, including Transaction #, Invoice ID, Payment Instrument and Check #.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:21:"access CiviContribute";s:9:"parent_id";s:0:"";s:6:"groups";s:0:"";s:9:"domain_id";i:1;s:11:"is_reserved";b:0;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Recurring Contributions{/ts}', 'contribute/recur', '{ts escape="sql" skip="true"}Provides information about the status of recurring contributions{/ts}', 'access CiviContribute', '{literal}a:39:{s:6:"fields";a:7:{s:9:"sort_name";s:1:"1";s:6:"amount";s:1:"1";s:22:"contribution_status_id";s:1:"1";s:18:"frequency_interval";s:1:"1";s:14:"frequency_unit";s:1:"1";s:12:"installments";s:1:"1";s:8:"end_date";s:1:"1";}s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:1:{i:0;s:1:"5";}s:11:"currency_op";s:2:"in";s:14:"currency_value";a:0:{}s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:17:"frequency_unit_op";s:2:"in";s:20:"frequency_unit_value";a:0:{}s:22:"frequency_interval_min";s:0:"";s:22:"frequency_interval_max";s:0:"";s:21:"frequency_interval_op";s:3:"lte";s:24:"frequency_interval_value";s:0:"";s:16:"installments_min";s:0:"";s:16:"installments_max";s:0:"";s:15:"installments_op";s:3:"lte";s:18:"installments_value";s:0:"";s:19:"start_date_relative";s:0:"";s:15:"start_date_from";s:0:"";s:13:"start_date_to";s:0:"";s:37:"next_sched_contribution_date_relative";s:0:"";s:33:"next_sched_contribution_date_from";s:0:"";s:31:"next_sched_contribution_date_to";s:0:"";s:17:"end_date_relative";s:0:"";s:13:"end_date_from";s:0:"";s:11:"end_date_to";s:0:"";s:28:"calculated_end_date_relative";s:0:"";s:24:"calculated_end_date_from";s:0:"";s:22:"calculated_end_date_to";s:0:"";s:9:"order_bys";a:1:{i:1;a:1:{s:6:"column";s:1:"-";}}s:11:"description";s:41:"Shows all pending recurring contributions";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:9:"row_count";s:0:"";s:14:"addToDashboard";s:1:"1";s:10:"permission";s:21:"access CiviContribute";s:9:"parent_id";s:0:"";s:11:"instance_id";N;}{/literal}'); + +-- Membership reports +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Membership Summary{/ts}', 'member/summary', '{ts escape="sql" skip="true"}Provides a summary of memberships by type and join date.{/ts}', 'access CiviMember', '{literal}a:18:{s:6:"fields";a:2:{s:18:"membership_type_id";s:1:"1";s:12:"total_amount";s:1:"1";}s:18:"join_date_relative";s:1:"0";s:14:"join_date_from";s:0:"";s:12:"join_date_to";s:0:"";s:21:"membership_type_id_op";s:2:"in";s:24:"membership_type_id_value";a:0:{}s:12:"status_id_op";s:2:"in";s:15:"status_id_value";a:0:{}s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:0:{}s:9:"group_bys";a:2:{s:9:"join_date";s:1:"1";s:18:"membership_type_id";s:1:"1";}s:14:"group_bys_freq";a:1:{s:9:"join_date";s:5:"MONTH";}s:11:"description";s:56:"Provides a summary of memberships by type and join date.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviMember";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Membership Details{/ts}', 'member/detail', '{ts escape="sql" skip="true"}Provides a list of members along with their membership status and membership details (Join Date, Start Date, End Date). Can also display contributions (payments) associated with each membership.{/ts}', 'access CiviMember', '{literal}a:28:{s:6:"fields";a:5:{s:9:"sort_name";s:1:"1";s:18:"membership_type_id";s:1:"1";s:21:"membership_start_date";s:1:"1";s:19:"membership_end_date";s:1:"1";s:4:"name";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:18:"join_date_relative";s:1:"0";s:14:"join_date_from";s:0:"";s:12:"join_date_to";s:0:"";s:23:"owner_membership_id_min";s:0:"";s:23:"owner_membership_id_max";s:0:"";s:22:"owner_membership_id_op";s:3:"lte";s:25:"owner_membership_id_value";s:0:"";s:6:"tid_op";s:2:"in";s:9:"tid_value";a:0:{}s:6:"sid_op";s:2:"in";s:9:"sid_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:119:"Provides a list of members along with their membership status and membership details (Join Date, Start Date, End Date).";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviMember";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Contribution and Membership Details{/ts}', 'member/contributionDetail', '{ts escape="sql" skip="true"}Contribution details for any type of contribution, plus associated membership information for contributions which are in payment for memberships.{/ts}', 'access CiviMember', '{literal}a:67:{s:6:"fields";a:12:{s:9:"sort_name";s:1:"1";s:5:"email";s:1:"1";s:5:"phone";s:1:"1";s:17:"financial_type_id";s:1:"1";s:12:"receive_date";s:1:"1";s:12:"total_amount";s:1:"1";s:18:"membership_type_id";s:1:"1";s:21:"membership_start_date";s:1:"1";s:19:"membership_end_date";s:1:"1";s:9:"join_date";s:1:"1";s:22:"membership_status_name";s:1:"1";s:10:"country_id";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:24:"payment_instrument_id_op";s:2:"in";s:27:"payment_instrument_id_value";a:0:{}s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:0:{}s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:13:"ordinality_op";s:2:"in";s:16:"ordinality_value";a:0:{}s:18:"join_date_relative";s:1:"0";s:14:"join_date_from";s:0:"";s:12:"join_date_to";s:0:"";s:30:"membership_start_date_relative";s:1:"0";s:26:"membership_start_date_from";s:0:"";s:24:"membership_start_date_to";s:0:"";s:28:"membership_end_date_relative";s:1:"0";s:24:"membership_end_date_from";s:0:"";s:22:"membership_end_date_to";s:0:"";s:23:"owner_membership_id_min";s:0:"";s:23:"owner_membership_id_max";s:0:"";s:22:"owner_membership_id_op";s:3:"lte";s:25:"owner_membership_id_value";s:0:"";s:6:"tid_op";s:2:"in";s:9:"tid_value";a:0:{}s:6:"sid_op";s:2:"in";s:9:"sid_value";a:0:{}s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:12:"county_id_op";s:2:"in";s:15:"county_id_value";a:0:{}s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:35:"Contribution and Membership Details";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:1:"0";s:9:"domain_id";i:1;}{s:6:"fields";a:12:{s:9:"sort_name";s:1:"1";s:5:"email";s:1:"1";s:5:"phone";s:1:"1";s:17:"financial_type_id";s:1:"1";s:12:"receive_date";s:1:"1";s:12:"total_amount";s:1:"1";s:18:"membership_type_id";s:1:"1";s:21:"membership_start_date";s:1:"1";s:19:"membership_end_date";s:1:"1";s:9:"join_date";s:1:"1";s:22:"membership_status_name";s:1:"1";s:10:"country_id";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:21:"receive_date_relative";s:1:"0";s:17:"receive_date_from";s:0:"";s:15:"receive_date_to";s:0:"";s:20:"financial_type_id_op";s:2:"in";s:23:"financial_type_id_value";a:0:{}s:24:"payment_instrument_id_op";s:2:"in";s:27:"payment_instrument_id_value";a:0:{}s:25:"contribution_status_id_op";s:2:"in";s:28:"contribution_status_id_value";a:0:{}s:16:"total_amount_min";s:0:"";s:16:"total_amount_max";s:0:"";s:15:"total_amount_op";s:3:"lte";s:18:"total_amount_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:13:"ordinality_op";s:2:"in";s:16:"ordinality_value";a:0:{}s:18:"join_date_relative";s:1:"0";s:14:"join_date_from";s:0:"";s:12:"join_date_to";s:0:"";s:30:"membership_start_date_relative";s:1:"0";s:26:"membership_start_date_from";s:0:"";s:24:"membership_start_date_to";s:0:"";s:28:"membership_end_date_relative";s:1:"0";s:24:"membership_end_date_from";s:0:"";s:22:"membership_end_date_to";s:0:"";s:23:"owner_membership_id_min";s:0:"";s:23:"owner_membership_id_max";s:0:"";s:22:"owner_membership_id_op";s:3:"lte";s:25:"owner_membership_id_value";s:0:"";s:6:"tid_op";s:2:"in";s:9:"tid_value";a:0:{}s:6:"sid_op";s:2:"in";s:9:"sid_value";a:0:{}s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:12:"county_id_op";s:2:"in";s:15:"county_id_value";a:0:{}s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:35:"Contribution and Membership Details";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviMember";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Lapsed Memberships{/ts}', 'member/lapse', '{ts escape="sql" skip="true"}Provides a list of memberships that have lapsed or will lapse by the date you specify.{/ts}', 'access CiviMember', '{literal}a:16:{s:6:"fields";a:5:{s:9:"sort_name";s:1:"1";s:18:"membership_type_id";s:1:"1";s:19:"membership_end_date";s:1:"1";s:4:"name";s:1:"1";s:10:"country_id";s:1:"1";}s:6:"tid_op";s:2:"in";s:9:"tid_value";a:0:{}s:28:"membership_end_date_relative";s:1:"0";s:24:"membership_end_date_from";s:0:"";s:22:"membership_end_date_to";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"description";s:85:"Provides a list of memberships that lapsed or will lapse before the date you specify.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviMember";s:9:"domain_id";i:1;}{/literal}'); + +-- Event reports +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Event Participants List{/ts}', 'event/participantListing', '{ts escape="sql" skip="true"}Provides lists of participants for an event.{/ts}', 'access CiviEvent', '{literal}a:27:{s:6:"fields";a:4:{s:9:"sort_name";s:1:"1";s:8:"event_id";s:1:"1";s:9:"status_id";s:1:"1";s:7:"role_id";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:8:"email_op";s:3:"has";s:11:"email_value";s:0:"";s:11:"event_id_op";s:2:"in";s:14:"event_id_value";a:0:{}s:6:"sid_op";s:2:"in";s:9:"sid_value";a:0:{}s:6:"rid_op";s:2:"in";s:9:"rid_value";a:0:{}s:34:"participant_register_date_relative";s:1:"0";s:30:"participant_register_date_from";s:0:"";s:28:"participant_register_date_to";s:0:"";s:6:"eid_op";s:2:"in";s:9:"eid_value";a:0:{}s:11:"custom_4_op";s:2:"in";s:14:"custom_4_value";a:0:{}s:16:"blank_column_end";s:0:"";s:11:"description";s:44:"Provides lists of participants for an event.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:16:"access CiviEvent";s:6:"groups";s:0:"";s:7:"options";N;s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Event Income Summary{/ts}', 'event/summary', '{ts escape="sql" skip="true"}Provides an overview of event income. You can include key information such as event ID, registration, attendance, and income generated to help you determine the success of an event.{/ts}', 'access CiviEvent', '{literal}a:18:{s:6:"fields";a:2:{s:5:"title";s:1:"1";s:13:"event_type_id";s:1:"1";}s:5:"id_op";s:2:"in";s:8:"id_value";a:0:{}s:16:"event_type_id_op";s:2:"in";s:19:"event_type_id_value";a:0:{}s:25:"event_start_date_relative";s:1:"0";s:21:"event_start_date_from";s:0:"";s:19:"event_start_date_to";s:0:"";s:23:"event_end_date_relative";s:1:"0";s:19:"event_end_date_from";s:0:"";s:17:"event_end_date_to";s:0:"";s:11:"description";s:181:"Provides an overview of event income. You can include key information such as event ID, registration, attendance, and income generated to help you determine the success of an event.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:16:"access CiviEvent";s:6:"charts";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Event Income Details{/ts}', 'event/income', '{ts escape="sql" skip="true"}Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.{/ts}', 'access CiviEvent', '{literal}a:7:{s:5:"id_op";s:2:"in";s:8:"id_value";N;s:11:"description";s:133:"Helps you to analyze the income generated by an event. The report can include details by participant type, status and payment method.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:16:"access CiviEvent";}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Attendee List{/ts}', 'event/participantListing', '{ts escape="sql" skip="true"}Provides lists of event attendees.{/ts}', 'access CiviEvent', '{literal}a:27:{s:6:"fields";a:4:{s:9:"sort_name";s:1:"1";s:8:"event_id";s:1:"1";s:9:"status_id";s:1:"1";s:7:"role_id";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:8:"email_op";s:3:"has";s:11:"email_value";s:0:"";s:11:"event_id_op";s:2:"in";s:14:"event_id_value";a:0:{}s:6:"sid_op";s:2:"in";s:9:"sid_value";a:0:{}s:6:"rid_op";s:2:"in";s:9:"rid_value";a:0:{}s:34:"participant_register_date_relative";s:1:"0";s:30:"participant_register_date_from";s:0:"";s:28:"participant_register_date_to";s:0:"";s:6:"eid_op";s:2:"in";s:9:"eid_value";a:0:{}s:11:"custom_4_op";s:2:"in";s:14:"custom_4_value";a:0:{}s:16:"blank_column_end";s:0:"";s:11:"description";s:44:"Provides lists of participants for an event.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:16:"access CiviEvent";s:6:"groups";s:0:"";s:7:"options";N;s:9:"domain_id";i:1;}{/literal}'); + +-- Grant reports +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Grant Details{/ts}', 'grant/detail', '{ts escape="sql" skip="true"}Grant Report Detail{/ts}', 'access CiviGrant', '{literal}a:40:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:25:"application_received_date";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:12:"gender_id_op";s:2:"in";s:15:"gender_id_value";a:0:{}s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"grant_type_op";s:2:"in";s:16:"grant_type_value";a:0:{}s:12:"status_id_op";s:2:"in";s:15:"status_id_value";a:0:{}s:18:"amount_granted_min";s:0:"";s:18:"amount_granted_max";s:0:"";s:17:"amount_granted_op";s:3:"lte";s:20:"amount_granted_value";s:0:"";s:20:"amount_requested_min";s:0:"";s:20:"amount_requested_max";s:0:"";s:19:"amount_requested_op";s:3:"lte";s:22:"amount_requested_value";s:0:"";s:34:"application_received_date_relative";s:1:"0";s:30:"application_received_date_from";s:0:"";s:28:"application_received_date_to";s:0:"";s:28:"money_transfer_date_relative";s:1:"0";s:24:"money_transfer_date_from";s:0:"";s:22:"money_transfer_date_to";s:0:"";s:23:"grant_due_date_relative";s:1:"0";s:19:"grant_due_date_from";s:0:"";s:17:"grant_due_date_to";s:0:"";s:11:"description";s:19:"Grant Report Detail";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:16:"access CiviGrant";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Grant Statistics{/ts}', 'grant/statistics', '{ts escape="sql" skip="true"}Grant Report Statistics{/ts}', 'access CiviGrant', '{literal}a:42:{s:6:"fields";a:2:{s:18:"summary_statistics";s:1:"1";s:13:"grant_type_id";s:1:"1";}s:34:"application_received_date_relative";s:1:"0";s:30:"application_received_date_from";s:0:"";s:28:"application_received_date_to";s:0:"";s:22:"decision_date_relative";s:1:"0";s:18:"decision_date_from";s:0:"";s:16:"decision_date_to";s:0:"";s:28:"money_transfer_date_relative";s:1:"0";s:24:"money_transfer_date_from";s:0:"";s:22:"money_transfer_date_to";s:0:"";s:23:"grant_due_date_relative";s:1:"0";s:19:"grant_due_date_from";s:0:"";s:17:"grant_due_date_to";s:0:"";s:13:"grant_type_op";s:2:"in";s:16:"grant_type_value";a:0:{}s:12:"status_id_op";s:2:"in";s:15:"status_id_value";a:0:{}s:20:"amount_requested_min";s:0:"";s:20:"amount_requested_max";s:0:"";s:19:"amount_requested_op";s:3:"lte";s:22:"amount_requested_value";s:0:"";s:18:"amount_granted_min";s:0:"";s:18:"amount_granted_max";s:0:"";s:17:"amount_granted_op";s:3:"lte";s:20:"amount_granted_value";s:0:"";s:24:"grant_report_received_op";s:2:"eq";s:27:"grant_report_received_value";s:0:"";s:12:"gender_id_op";s:2:"in";s:15:"gender_id_value";a:0:{}s:15:"contact_type_op";s:2:"in";s:18:"contact_type_value";a:0:{}s:12:"region_id_op";s:2:"in";s:15:"region_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:11:"description";s:23:"Grant Report Statistics";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:16:"access CiviGrant";s:9:"parent_id";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +-- Mailing Reports +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Mail Bounces{/ts}', 'Mailing/bounce', '{ts escape="sql" skip="true"}Bounce Report for mailings{/ts}', 'access CiviMail', '{literal}a:33:{s:6:"fields";a:5:{s:2:"id";s:1:"1";s:10:"first_name";s:1:"1";s:9:"last_name";s:1:"1";s:11:"bounce_name";s:1:"1";s:5:"email";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:9:"source_op";s:3:"has";s:12:"source_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:15:"mailing_name_op";s:2:"in";s:18:"mailing_name_value";a:0:{}s:19:"bounce_type_name_op";s:2:"eq";s:22:"bounce_type_name_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:9:"order_bys";a:1:{i:1;a:1:{s:6:"column";s:1:"-";}}s:11:"description";s:26:"Bounce Report for mailings";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:15:"access CiviMail";s:6:"groups";s:0:"";s:6:"charts";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Mailing Summary{/ts}', 'Mailing/summary','{ts escape="sql" skip="true"}Summary statistics for mailings{/ts}', 'access CiviMail','{literal}a:25:{s:6:"fields";a:5:{s:4:"name";s:1:"1";s:11:"queue_count";s:1:"1";s:15:"delivered_count";s:1:"1";s:12:"bounce_count";s:1:"1";s:17:"unique_open_count";s:1:"1";}s:15:"is_completed_op";s:2:"eq";s:18:"is_completed_value";s:1:"1";s:15:"mailing_name_op";s:2:"in";s:18:"mailing_name_value";a:0:{}s:9:"status_op";s:3:"has";s:12:"status_value";s:8:"Complete";s:11:"is_test_min";s:0:"";s:11:"is_test_max";s:0:"";s:10:"is_test_op";s:3:"lte";s:13:"is_test_value";s:1:"0";s:19:"start_date_relative";s:9:"this.year";s:15:"start_date_from";s:0:"";s:13:"start_date_to";s:0:"";s:17:"end_date_relative";s:9:"this.year";s:13:"end_date_from";s:0:"";s:11:"end_date_to";s:0:"";s:11:"description";s:31:"Summary statistics for mailings";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:15:"access CiviMail";s:6:"groups";s:0:"";s:6:"charts";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Mail Opened{/ts}', 'Mailing/opened', '{ts escape="sql" skip="true"}Display contacts who opened emails from a mailing{/ts}', 'access CiviMail', '{literal}a:31:{s:6:"fields";a:5:{s:2:"id";s:1:"1";s:10:"first_name";s:1:"1";s:9:"last_name";s:1:"1";s:12:"mailing_name";s:1:"1";s:5:"email";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:9:"source_op";s:3:"has";s:12:"source_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:15:"mailing_name_op";s:2:"in";s:18:"mailing_name_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:9:"order_bys";a:1:{i:1;a:1:{s:6:"column";s:1:"-";}}s:11:"description";s:49:"Display contacts who opened emails from a mailing";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:15:"access CiviMail";s:6:"groups";s:0:"";s:6:"charts";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Mail Clickthroughs{/ts}', 'Mailing/clicks', '{ts escape="sql" skip="true"}Display clicks from each mailing{/ts}', 'access CiviMail', '{literal}a:31:{s:6:"fields";a:6:{s:2:"id";s:1:"1";s:10:"first_name";s:1:"1";s:9:"last_name";s:1:"1";s:12:"mailing_name";s:1:"1";s:5:"email";s:1:"1";s:3:"url";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:9:"source_op";s:3:"has";s:12:"source_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:15:"mailing_name_op";s:2:"in";s:18:"mailing_name_value";a:0:{}s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:8:"tagid_op";s:2:"in";s:11:"tagid_value";a:0:{}s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:9:"order_bys";a:1:{i:1;a:1:{s:6:"column";s:1:"-";}}s:11:"description";s:32:"Display clicks from each mailing";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:15:"access CiviMail";s:6:"groups";s:0:"";s:6:"charts";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Mailing Details{/ts}', 'mailing/detail', '{ts escape="sql" skip="true"}Provides reporting on Intended and Successful Deliveries, Unsubscribes and Opt-outs, Replies and Forwards.{/ts}', 'access CiviMail', '{literal}a:30:{s:6:"fields";a:6:{s:9:"sort_name";s:1:"1";s:12:"mailing_name";s:1:"1";s:11:"delivery_id";s:1:"1";s:14:"unsubscribe_id";s:1:"1";s:9:"optout_id";s:1:"1";s:5:"email";s:1:"1";}s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:6:"id_min";s:0:"";s:6:"id_max";s:0:"";s:5:"id_op";s:3:"lte";s:8:"id_value";s:0:"";s:13:"mailing_id_op";s:2:"in";s:16:"mailing_id_value";a:0:{}s:18:"delivery_status_op";s:2:"eq";s:21:"delivery_status_value";s:0:"";s:18:"is_unsubscribed_op";s:2:"eq";s:21:"is_unsubscribed_value";s:0:"";s:12:"is_optout_op";s:2:"eq";s:15:"is_optout_value";s:0:"";s:13:"is_replied_op";s:2:"eq";s:16:"is_replied_value";s:0:"";s:15:"is_forwarded_op";s:2:"eq";s:18:"is_forwarded_value";s:0:"";s:6:"gid_op";s:2:"in";s:9:"gid_value";a:0:{}s:9:"order_bys";a:1:{i:1;a:2:{s:6:"column";s:9:"sort_name";s:5:"order";s:3:"ASC";}}s:11:"description";s:21:"Mailing Detail Report";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:15:"access CiviMail";s:9:"parent_id";s:0:"";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); + +-- walk list survey report. +INSERT INTO `civicrm_report_instance` + ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`) +VALUES + ( @domainID, '{ts escape="sql" skip="true"}Survey Details{/ts}', 'survey/detail', '{ts escape="sql" skip="true"}Detailed report for canvassing, phone-banking, walk lists or other surveys.{/ts}', 'access CiviReport', '{literal}a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}{/literal}'); diff --git a/civicrm/xml/templates/civicrm_sample.tpl b/civicrm/xml/templates/civicrm_sample.tpl new file mode 100644 index 0000000000000000000000000000000000000000..50bdcdb81b289ab45f34d55570fc8f8c8bcd75ba --- /dev/null +++ b/civicrm/xml/templates/civicrm_sample.tpl @@ -0,0 +1,253 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at https://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- + +SELECT @domainID := id FROM civicrm_domain where name = 'Default Domain Name'; + +-- Sample Extended Property Group and Fields + +INSERT INTO `civicrm_price_set` (`name`,`title`,`is_active`,`extends`,`is_quick_config`) +VALUES ('help_support_civicrm_amount', 'Help Support CiviCRM!', 1, 2, 1); + +SELECT @priceSetId := max(id) FROM `civicrm_price_set` WHERE `is_quick_config` = 1 and name = 'help_support_civicrm_amount'; + +INSERT INTO `civicrm_price_field` (`price_set_id`, `name`, `label`, `html_type`, `is_enter_qty`, `weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`, `visibility_id`) +VALUES ( @priceSetId, 'contribution_amount', 'Contribution Amount', 'Radio', 0, 2, 1, 1, 1, 0, 1), +( @priceSetId, 'other_amount', 'Other Amount', 'Text', 0, 3, 0, 1, 1, 0, 1); + +INSERT INTO `civicrm_price_set_entity` (`entity_table`,`entity_id`,`price_set_id`) + VALUES ('civicrm_contribution_page', 1, @priceSetId); + +SELECT @priceFieldID := max(id) FROM `civicrm_price_field` WHERE `price_set_id` = @priceSetId AND name = 'contribution_amount'; + +INSERT INTO + `civicrm_price_field_value` (`price_field_id`,`name`,`label`, `amount`, `weight`, `is_active`, `is_default`, `financial_type_id`) +VALUES + (@priceFieldID,'friend','Friend','1.00',1,1,0,1), + (@priceFieldID,'supporter', 'Supporter','5.00',2,1,0,1), + (@priceFieldID,'booster','Booster','10.00',3,1,1,1), + (@priceFieldID,'sustainer','Sustainer','50.00',4,1,0,1); + +SELECT @priceFieldID := max(id) FROM `civicrm_price_field` WHERE `price_set_id` = @priceSetId AND name = 'other_amount'; + +INSERT INTO + `civicrm_price_field_value` (`price_field_id`,`name`,`label`, `amount`, `weight`, `is_active`, `is_default`, `financial_type_id`) +VALUES + (@priceFieldID, 'other_amount', 'Other Amount', 1, 3, 1, 0, 1); + +INSERT INTO civicrm_contribution_page + (title,intro_text,financial_type_id,is_monetary,is_allow_other_amount,default_amount_id,min_amount,max_amount,goal_amount,thankyou_title,thankyou_text,thankyou_footer,receipt_from_name,receipt_from_email,cc_receipt,bcc_receipt,receipt_text,is_active,footer_text,amount_block_is_active,currency,is_email_receipt) +VALUES + ('Help Support CiviCRM!','Do you love CiviCRM? Do you use CiviCRM? Then please support CiviCRM and Contribute NOW by trying out our new online contribution features!',1,1,1,137,'10.00','10000.00','100000.00','Thanks for Your Support!','<p>Thank you for your support. Your contribution will help us build even better tools.</p><p>Please tell your friends and colleagues about CiviCRM!</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>','CiviCRM Fundraising Dept.','donationFake@civicrm.org','receipt@example.com','bcc@example.com','Your donation is tax deductible under IRS 501(c)(3) regulation. Our tax identification number is: 93-123-4567',1, NULL, 1, 'USD', 1), + ('Member Signup and Renewal', 'Members are the life-blood of our organization. If you''re not already a member - please consider signing up today. You can select the membership level the fits your budget and needs below.', 2, 1, NULL, NULL, NULL, NULL, NULL, 'Thanks for Your Support!', 'Thanks for supporting our organization with your membership. You can learn more about membership benefits from our members only page.', NULL, 'Membership Department', 'memberships@civicrm.org', NULL, NULL, 'Thanks for supporting our organization with your membership. You can learn more about membership benefits from our members only page.\r\n\r\nKeep this receipt for your records.', 1, NULL, 0, 'USD', 1), + ('Pledge for CiviCRM!','Do you love CiviCRM? Do you use CiviCRM? Then please support CiviCRM and Pledge NOW by trying out our online contribution features!',1,1,1,NULL,'10.00','10000.00','100000.00','Thanks for Your Support!','<p>Thank you for your support. Your contribution will help us build even better tools like Pledge.</p><p>Please tell your friends and colleagues about CiviPledge!</p>','<p><a href=https://civicrm.org>Back to CiviCRM Home Page</a></p>','CiviCRM Fundraising Dept.','donationFake@civicrm.org','receipt@example.com','bcc@example.com','Your donation is tax deductible under IRS 501(c)(3) regulation. Our tax identification number is: 93-123-4567',1, NULL, 1, 'USD', 1); + +INSERT INTO `civicrm_tell_friend` + (`entity_table`, `entity_id`, `title`, `intro`, `suggested_message`, `general_link`, `thankyou_title`, `thankyou_text`, `is_active`) +VALUES + ('civicrm_contribution_page', 1, 'Tell A Friend', '<p>Help us spread the word and leverage the power of your contribution by telling your friends. Use the space below to personalize your email message - let your friends know why you support us. Then fill in the name(s) and email address(es) and click ''Send Your Message''.</p>', 'Thought you might be interested in learning about and helping this organization. I think they do important work.', NULL, 'Thanks for Spreading the Word', '<p><strong>Thanks for telling your friends about us and supporting our efforts. Together we can make a difference.</strong></p>', 1), + ('civicrm_event', 1, 'Tell A Friend', '<p>Help us spread the word about this event. Use the space below to personalize your email message - let your friends know why you''re attending. Then fill in the name(s) and email address(es) and click ''Send Your Message''.</p>', 'Thought you might be interested in checking out this event. I''m planning on attending.', NULL, 'Thanks for Spreading the Word', '<p>Thanks for spreading the word about this event to your friends.</p>', 1); + +INSERT INTO `civicrm_pcp_block` + (`id`, `entity_table`, `entity_id`, `supporter_profile_id`, `owner_notify_id`, `is_approval_needed`, `is_tellfriend_enabled`, `tellfriend_limit`, `link_text`, `is_active`, `target_entity_id` ) +VALUES + (1, 'civicrm_contribution_page', 1, 2, 1, 1, 1, 5, 'Create your own Personal Campaign Page!', 1, 1); + +INSERT INTO civicrm_membership_type + (domain_id, name, description, member_of_contact_id, financial_type_id, minimum_fee, duration_unit, duration_interval, period_type, fixed_period_start_day, fixed_period_rollover_day, relationship_type_id, relationship_direction, visibility, weight, is_active) +VALUES + (@domainID, 'General', 'Regular annual membership.', 1, 2, 100.00, 'year', 2, 'rolling', NULL, NULL, 7, 'b_a', 'Public', 1, 1), + (@domainID, 'Student', 'Discount membership for full-time students.', 1, 2, 50.00, 'year', 1, 'rolling', NULL, NULL, NULL, NULL, 'Public', 2, 1), + (@domainID, 'Lifetime', 'Lifetime membership.', 1, 2, 1200.00, 'lifetime', 1, 'rolling', NULL, NULL, 7, 'b_a', 'Admin', 3, 1); + +INSERT INTO civicrm_membership_block + (entity_table, entity_id, membership_types, membership_type_default, display_min_fee, is_separate_payment, new_title, new_text, renewal_title, renewal_text, is_required, is_active) +VALUES + ('civicrm_contribution_page', 2, '{literal}a:2:{i:1;i:0;i:2;i:0;}{/literal}', 1, 1, 0, 'Membership Levels', 'Please select the appropriate membership level below. You will have a chance to review your selection and the corresponding dues on the next page prior to your credit card being charged.', 'Renew or Upgrade Your Membership', 'Information on your current membership level and expiration date is shown below. You may renew or upgrade at any time - but don''t let your membership lapse!', 1, 1); + +INSERT INTO civicrm_pledge_block ( entity_table, entity_id, pledge_frequency_unit, is_pledge_interval, max_reminders, initial_reminder_day, additional_reminder_day) +VALUES + ('civicrm_contribution_page', 3, 'weekmonthyear', 1, 1, 5, 5), + ('civicrm_contribution_page', 1, 'weekmonthyear', 0, 2, 5, 5); + +INSERT INTO civicrm_premiums + VALUES (1, 'civicrm_contribution_page', 1, 1, 'Thank-you Gifts', 'We appreciate your support and invite you to choose from the exciting collection of thank-you gifts below. Minimum contribution amounts for each selection are included in the descriptions. (NOTE: These gifts are shown as examples only. No gifts will be sent to donors.)', 'premiums@example.org', NULL, 1, 'No thank-you', 1); + +INSERT INTO civicrm_product VALUES (1, 'Coffee Mug', 'This heavy-duty mug is great for home or office, coffee or tea or hot chocolate. Show your support to family, friends and colleagues. Choose from three great colors.', 'MUG-101', 'White, Black, Green', NULL, NULL, 12.50, 'USD', NULL, 5.00, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL); +INSERT INTO civicrm_premiums_product VALUES (1, 1, 1, 1, NULL); + + +-- Add sample activity type + +SELECT @option_group_id_act := max(id) from civicrm_option_group where name = 'activity_type'; +SELECT @option_value_max_val := max(ROUND(civicrm_option_value.value)) from civicrm_option_value where option_group_id = @option_group_id_act; + +INSERT INTO + `civicrm_option_value` (`option_group_id`, `label`, `value`, `name`, `grouping`, `filter`, `is_default`, `weight`, `description`, `is_optgroup`, `is_reserved`, `is_active`, `icon`) +VALUES + (@option_group_id_act, 'Interview', (SELECT @option_value_max_val := @option_value_max_val + 1), 'Interview', NULL, 0, NULL, @option_value_max_val, 'Conduct a phone or in person interview.', 0, 0, 1, 'fa-comment-o'); + +INSERT INTO `civicrm_contact_type` + ( `name`, `label`,`image_URL`, `parent_id`, `is_active`,`is_reserved`) + VALUES + ( 'Student' , '{ts escape="sql"}Student{/ts}' , NULL, 1, 1, 0), + ( 'Parent' , '{ts escape="sql"}Parent{/ts}' , NULL, 1, 1, 0), + ( 'Staff' , '{ts escape="sql"}Staff{/ts}' , NULL, 1, 1, 0), + ( 'Team' , '{ts escape="sql"}Team{/ts}' , NULL, 3, 1, 0), + ( 'Sponsor' , '{ts escape="sql"}Sponsor{/ts}' , NULL, 3, 1, 0); + + SELECT @domain_id := min(id) FROM civicrm_domain; + SELECT @nav_indi := id FROM civicrm_navigation WHERE name = 'New Individual'; + SELECT @nav_org := id FROM civicrm_navigation WHERE name = 'New Organization'; + INSERT INTO `civicrm_navigation` + ( domain_id, url, label, name,permission, permission_operator, parent_id, is_active, has_separator, weight ) + VALUES + ( @domain_id, 'civicrm/contact/add?ct=Individual&cst=Student&reset=1' , 'New Student', 'New Student', 'add contacts', '', @nav_indi, '1', NULL, 1 ), + ( @domain_id, 'civicrm/contact/add?ct=Individual&cst=Parent&reset=1' , 'New Parent' , 'New Parent' , 'add contacts', '', @nav_indi, '1', NULL, 2 ), + ( @domain_id, 'civicrm/contact/add?ct=Individual&cst=Staff&reset=1' , 'New Staff' , 'New Staff' , 'add contacts', '', @nav_indi, '1', NULL, 3 ), + ( @domain_id, 'civicrm/contact/add?ct=Organization&cst=Team&reset=1' , 'New Team' , 'New Team' , 'add contacts', '', @nav_org , '1', NULL, 1 ), + ( @domain_id, 'civicrm/contact/add?ct=Organization&cst=Sponsor&reset=1', 'New Sponsor', 'New Sponsor', 'add contacts', '', @nav_org , '1', NULL, 2 ); + +-- Add sample dashlets + +INSERT INTO `civicrm_dashboard` + ( `domain_id`, `name`, `label`, `url`, `permission`, `permission_operator`, `is_active`, `fullscreen_url`) + VALUES + ( @domain_id, 'report/7', '{ts escape="sql"}Donor Summary{/ts}', 'civicrm/report/instance/7?reset=1§ion=1&charts=barChart', 'access CiviContribute', 'AND', '1', 'civicrm/report/instance/7?reset=1§ion=1&charts=barChart&context=dashletFullscreen'), + ( @domain_id, 'report/14', '{ts escape="sql"}Top Donors{/ts}', 'civicrm/report/instance/14?reset=1§ion=2', 'access CiviContribute', 'AND', '1', 'civicrm/report/instance/14?reset=1§ion=2&context=dashletFullscreen'), + ( @domain_id, 'report/27', '{ts escape="sql"}Event Income Summary{/ts}', 'civicrm/report/instance/27?reset=1§ion=1&charts=pieChart', 'access CiviEvent' , 'AND', '1', 'civicrm/report/instance/27?reset=1§ion=1&charts=pieChart&context=dashletFullscreen'), + ( @domain_id, 'report/22', '{ts escape="sql"}Membership Summary{/ts}', 'civicrm/report/instance/22?reset=1§ion=2', 'access CiviMember' , 'AND', '1', 'civicrm/report/instance/22?reset=1§ion=2&context=dashletFullscreen'); + +-- INSERT sample data for membership + +SELECT @financial_type_id := max(id) FROM `civicrm_financial_type` WHERE `name` = 'Member Dues'; + +SELECT @priceSetID := max(id) FROM `civicrm_price_set` WHERE `name` LIKE 'default_membership_type_amount' AND `is_quick_config` = 1; +INSERT INTO `civicrm_price_field` ( `price_set_id`, `name`, `label`, `html_type` ) +VALUES ( @priceSetID, '1', 'Membership Amount', 'Radio' ); + +SELECT @priceFieldId := max(id) FROM `civicrm_price_field` WHERE `name` LIKE '1'; + +INSERT civicrm_price_field_value ( price_field_id, name, label, description, amount, weight, membership_type_id, financial_type_id ) +SELECT @priceFieldId, LOWER(name), name, description, minimum_fee, id as weight, id, @financial_type_id FROM `civicrm_membership_type`; + + +INSERT INTO `civicrm_price_set` (`name`,`title`,`is_active`,`extends`, `financial_type_id`, `is_quick_config`) +VALUES ('member_signup_and_renewal', 'Member Signup and Renewal', 1, 3, @financial_type_id, 1), + ('pledge_for_civicrm', 'Pledge for CiviCRM!',1,2,null,1); + +SELECT @priceSetId := max(id) FROM `civicrm_price_set` WHERE `is_quick_config` = 1 and name = 'member_signup_and_renewal'; + +INSERT INTO `civicrm_price_field` (`price_set_id`, `name`, `label`, `html_type`, `is_enter_qty`, `weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`, `visibility_id`) VALUES ( @priceSetId, 'membership_amount', 'Membership', 'Radio', 0, 1, 1, 1, 1, 1, 1); + +INSERT INTO `civicrm_price_set_entity` (`entity_table`,`entity_id`,`price_set_id`) VALUES ('civicrm_contribution_page', 2, @priceSetId); + +SELECT @priceFieldID := max(id) FROM `civicrm_price_field` WHERE `price_set_id` = @priceSetId AND name = 'membership_amount'; + +SELECT @membershipIdG := max(id) FROM `civicrm_membership_type` WHERE name= 'General'; + +SELECT @membershipIdS := max(id) FROM `civicrm_membership_type` WHERE name= 'Student'; + +INSERT INTO + `civicrm_price_field_value` (`price_field_id`,`name`,`label`, `amount`, `weight`, `membership_type_id`, `is_active`, `is_default`, `financial_type_id`) +VALUES + (@priceFieldID,'General','General','100.00', 1, @membershipIdG, 1, 1, @financial_type_id), + (@priceFieldID,'Student','Student','50.00', 1, @membershipIdS , 1, 0, @financial_type_id); + +SELECT @priceSetId := max(id) FROM `civicrm_price_set` WHERE `is_quick_config` = 1 AND `name` = 'pledge_for_civicrm'; + +INSERT INTO `civicrm_price_field` (`price_set_id`, `name`, `label`, `html_type`, `is_enter_qty`, `weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`, `visibility_id`) +VALUES ( @priceSetId, 'other_amount', 'Contribution Amount', 'Text', 0, 3, 0, 1, 1, 1, 1); + +INSERT INTO `civicrm_price_set_entity` (`entity_table`,`entity_id`,`price_set_id`) + VALUES ('civicrm_contribution_page', 3, @priceSetId); + +SELECT @priceFieldID := max(id) FROM `civicrm_price_field` WHERE `price_set_id` = @priceSetId AND name = 'other_amount'; + +INSERT INTO + `civicrm_price_field_value` (`price_field_id`,`name`,`label`, `amount`, `weight`, `is_active`, `is_default`, `financial_type_id`) +VALUES + (@priceFieldID,'other_amount','Contribution Amount','1',1,1,0,1); + + +-- Insert sample data for event + +INSERT INTO `civicrm_price_set` (`name`,`title`,`is_active`,`extends`, `is_quick_config`) +VALUES ('rain_forest_cup_youth_soccer_tournament', 'Rain-forest Cup Youth Soccer Tournament', 1, 1, 1), + ('fall_fundraiser_dinner', 'Fall Fundraiser Dinner', 1, 1, 1), + ('summer_solstice_festival_day_concert', 'Summer Solstice Festival Day Concert',1,1,1); + +SELECT @priceSetId := max(id) FROM `civicrm_price_set` WHERE `is_quick_config` = 1 AND `name` = 'rain_forest_cup_youth_soccer_tournament'; + +INSERT INTO `civicrm_price_field` (`price_set_id`, `name`, `label`, `html_type`, `is_enter_qty`, `weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`, `visibility_id`) +VALUES ( @priceSetId, 'tournament_fees', 'Tournament Fees', 'Radio', 0, 1, 1, 1, 1, 1, 1); + +INSERT INTO `civicrm_price_set_entity` (`entity_table`,`entity_id`,`price_set_id`) + VALUES ('civicrm_event', 3, @priceSetId); + +SELECT @priceFieldID := max(id) FROM `civicrm_price_field` WHERE `price_set_id` = @priceSetId AND name = 'tournament_fees'; + +INSERT INTO + `civicrm_price_field_value` (`price_field_id`,`name`,`label`, `amount`, `weight`, `is_active`, `is_default`, `financial_type_id`) +VALUES + (@priceFieldID,'tiny_tots__ages_5_8_','Tiny-tots (ages 5-8)','800',1,1,1,4), + (@priceFieldID,'junior_Stars__ages_9_12_','Junior Stars (ages 9-12)','1000',2,1,0,4), + (@priceFieldID,'super_Stars__ages_13_18_','Super Stars (ages 13-18)','1500',3,1,0,4); + +SELECT @priceSetId := max(id) FROM `civicrm_price_set` WHERE `is_quick_config` = 1 AND `name` = 'fall_fundraiser_dinner'; + +INSERT INTO `civicrm_price_field` (`price_set_id`, `name`, `label`, `html_type`, `is_enter_qty`, `weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`, `visibility_id`) +VALUES ( @priceSetId, 'dinner_contribution', 'Dinner Contribution', 'Radio', 0, 1, 1, 1, 1, 1, 1); + +INSERT INTO `civicrm_price_set_entity` (`entity_table`,`entity_id`,`price_set_id`) + VALUES ('civicrm_event', 1, @priceSetId); + +SELECT @priceFieldID := max(id) FROM `civicrm_price_field` WHERE `price_set_id` = @priceSetId AND name = 'dinner_contribution'; + +INSERT INTO + `civicrm_price_field_value` (`price_field_id`,`name`,`label`, `amount`, `weight`, `is_active`, `is_default`, `financial_type_id`) +VALUES + (@priceFieldID,'single','Single','50',1,1,1,4), + (@priceFieldID,'couple','Couple','100',2,1,0,4), + (@priceFieldID,'family','Family','200',3,1,0,4); + +SELECT @priceSetId := max(id) FROM `civicrm_price_set` WHERE `is_quick_config` = 1 AND `name` = 'summer_solstice_festival_day_concert'; + +INSERT INTO `civicrm_price_field` (`price_set_id`, `name`, `label`, `html_type`, `is_enter_qty`, `weight`, `is_display_amounts`, `options_per_line`, `is_active`, `is_required`, `visibility_id`) +VALUES ( @priceSetId, 'festival_fee', 'Festival Fee', 'Radio', 0, 1, 1, 1, 1, 1, 1); + +INSERT INTO `civicrm_price_set_entity` (`entity_table`,`entity_id`,`price_set_id`) + VALUES ('civicrm_event', 2, @priceSetId); + +SELECT @priceFieldID := max(id) FROM `civicrm_price_field` WHERE `price_set_id` = @priceSetId AND name = 'festival_fee'; + +INSERT INTO + `civicrm_price_field_value` (`price_field_id`,`name`,`label`, `amount`, `weight`, `is_active`, `is_default`, `financial_type_id`) +VALUES + (@priceFieldID,'bass','Bass','25',1,1,1,2), + (@priceFieldID,'tenor','Tenor','40',2,1,0,2), + (@priceFieldID,'soprano','Soprano','50',3,1,0,2); diff --git a/civicrm/xml/templates/civicrm_state_province.tpl b/civicrm/xml/templates/civicrm_state_province.tpl new file mode 100644 index 0000000000000000000000000000000000000000..f9b95d467374e03deea5c73f8d476c8811af9bed --- /dev/null +++ b/civicrm/xml/templates/civicrm_state_province.tpl @@ -0,0 +1,4123 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +/*!40101 SET NAMES utf8 */; + +INSERT INTO civicrm_state_province (id, country_id, abbreviation, name) VALUES +(1000, 1228, "AL", "Alabama"), +(1001, 1228, "AK", "Alaska"), +(1002, 1228, "AZ", "Arizona"), +(1003, 1228, "AR", "Arkansas"), +(1004, 1228, "CA", "California"), +(1005, 1228, "CO", "Colorado"), +(1006, 1228, "CT", "Connecticut"), +(1007, 1228, "DE", "Delaware"), +(1008, 1228, "FL", "Florida"), +(1009, 1228, "GA", "Georgia"), +(1010, 1228, "HI", "Hawaii"), +(1011, 1228, "ID", "Idaho"), +(1012, 1228, "IL", "Illinois"), +(1013, 1228, "IN", "Indiana"), +(1014, 1228, "IA", "Iowa"), +(1015, 1228, "KS", "Kansas"), +(1016, 1228, "KY", "Kentucky"), +(1017, 1228, "LA", "Louisiana"), +(1018, 1228, "ME", "Maine"), +(1019, 1228, "MD", "Maryland"), +(1020, 1228, "MA", "Massachusetts"), +(1021, 1228, "MI", "Michigan"), +(1022, 1228, "MN", "Minnesota"), +(1023, 1228, "MS", "Mississippi"), +(1024, 1228, "MO", "Missouri"), +(1025, 1228, "MT", "Montana"), +(1026, 1228, "NE", "Nebraska"), +(1027, 1228, "NV", "Nevada"), +(1028, 1228, "NH", "New Hampshire"), +(1029, 1228, "NJ", "New Jersey"), +(1030, 1228, "NM", "New Mexico"), +(1031, 1228, "NY", "New York"), +(1032, 1228, "NC", "North Carolina"), +(1033, 1228, "ND", "North Dakota"), +(1034, 1228, "OH", "Ohio"), +(1035, 1228, "OK", "Oklahoma"), +(1036, 1228, "OR", "Oregon"), +(1037, 1228, "PA", "Pennsylvania"), +(1038, 1228, "RI", "Rhode Island"), +(1039, 1228, "SC", "South Carolina"), +(1040, 1228, "SD", "South Dakota"), +(1041, 1228, "TN", "Tennessee"), +(1042, 1228, "TX", "Texas"), +(1043, 1228, "UT", "Utah"), +(1044, 1228, "VT", "Vermont"), +(1045, 1228, "VA", "Virginia"), +(1046, 1228, "WA", "Washington"), +(1047, 1228, "WV", "West Virginia"), +(1048, 1228, "WI", "Wisconsin"), +(1049, 1228, "WY", "Wyoming"), +(1050, 1228, "DC", "District of Columbia"), +(1052, 1228, "AS", "American Samoa"), +(1053, 1228, "GU", "Guam"), +(1055, 1228, "MP", "Northern Mariana Islands"), +(1056, 1228, "PR", "Puerto Rico"), +(1057, 1228, "VI", "Virgin Islands"), +(1058, 1228, "UM", "United States Minor Outlying Islands"), +(1059, 1228, "AE", "Armed Forces Europe"), +(1060, 1228, "AA", "Armed Forces Americas"), +(1061, 1228, "AP", "Armed Forces Pacific"), +(1100, 1039, "AB", "Alberta"), +(1101, 1039, "BC", "British Columbia"), +(1102, 1039, "MB", "Manitoba"), +(1103, 1039, "NB", "New Brunswick"), +(1104, 1039, "NL", "Newfoundland and Labrador"), +(1105, 1039, "NT", "Northwest Territories"), +(1106, 1039, "NS", "Nova Scotia"), +(1107, 1039, "NU", "Nunavut"), +(1108, 1039, "ON", "Ontario"), +(1109, 1039, "PE", "Prince Edward Island"), +(1110, 1039, "QC", "Quebec"), +(1111, 1039, "SK", "Saskatchewan"), +(1112, 1039, "YT", "Yukon Territory"), +(1200, 1101, "MM", "Maharashtra"), +(1201, 1101, "KA", "Karnataka"), +(1202, 1101, "AP", "Andhra Pradesh"), +(1203, 1101, "AR", "Arunachal Pradesh"), +(1204, 1101, "AS", "Assam"), +(1205, 1101, "BR", "Bihar"), +(1206, 1101, "CH", "Chhattisgarh"), +(1207, 1101, "GA", "Goa"), +(1208, 1101, "GJ", "Gujarat"), +(1209, 1101, "HR", "Haryana"), +(1210, 1101, "HP", "Himachal Pradesh"), +(1211, 1101, "JK", "Jammu and Kashmir"), +(1212, 1101, "JH", "Jharkhand"), +(1213, 1101, "KL", "Kerala"), +(1214, 1101, "MP", "Madhya Pradesh"), +(1215, 1101, "MN", "Manipur"), +(1216, 1101, "ML", "Meghalaya"), +(1217, 1101, "MZ", "Mizoram"), +(1218, 1101, "NL", "Nagaland"), +(1219, 1101, "OR", "Orissa"), +(1220, 1101, "PB", "Punjab"), +(1221, 1101, "RJ", "Rajasthan"), +(1222, 1101, "SK", "Sikkim"), +(1223, 1101, "TN", "Tamil Nadu"), +(1224, 1101, "TR", "Tripura"), +(1225, 1101, "UT", "Uttarakhand"), +(1226, 1101, "UP", "Uttar Pradesh"), +(1227, 1101, "WB", "West Bengal"), +(1228, 1101, "AN", "Andaman and Nicobar Islands"), +(1229, 1101, "DN", "Dadra and Nagar Haveli"), +(1230, 1101, "DD", "Daman and Diu"), +(1231, 1101, "DL", "Delhi"), +(1232, 1101, "LD", "Lakshadweep"), +(1233, 1101, "PY", "Pondicherry"), +(1300, 1172, "MZ", "mazowieckie"), +(1301, 1172, "PM", "pomorskie"), +(1302, 1172, "DS", "dolnoÅ›lÄ…skie"), +(1303, 1172, "KP", "kujawsko-pomorskie"), +(1304, 1172, "LU", "lubelskie"), +(1305, 1172, "LB", "lubuskie"), +(1306, 1172, "LD", "łódzkie"), +(1307, 1172, "MA", "maÅ‚opolskie"), +(1308, 1172, "OP", "opolskie"), +(1309, 1172, "PK", "podkarpackie"), +(1310, 1172, "PD", "podlaskie"), +(1311, 1172, "SL", "Å›lÄ…skie"), +(1312, 1172, "SK", "Å›wiÄ™tokrzyskie"), +(1313, 1172, "WN", "warmiÅ„sko-mazurskie"), +(1314, 1172, "WP", "wielkopolskie"), +(1315, 1172, "ZP", "zachodniopomorskie"), +(1500, 1225, "AZ", "Abu Zaby"), +(1501, 1225, "AJ", "\'Ajman"), +(1502, 1225, "FU", "Al Fujayrah"), +(1503, 1225, "SH", "Ash Shariqah"), +(1504, 1225, "DU", "Dubayy"), +(1505, 1225, "RK", "Ra\'s al Khaymah"), +(1506, 1233, "33", "Dac Lac"), +(1507, 1225, "UQ", "Umm al Qaywayn"), +(1508, 1001, "BDS", "Badakhshan"), +(1509, 1001, "BDG", "Badghis"), +(1510, 1001, "BGL", "Baghlan"), +(1511, 1001, "BAL", "Balkh"), +(1512, 1001, "BAM", "Bamian"), +(1513, 1001, "FRA", "Farah"), +(1514, 1001, "FYB", "Faryab"), +(1515, 1001, "GHA", "Ghazni"), +(1516, 1001, "GHO", "Ghowr"), +(1517, 1001, "HEL", "Helmand"), +(1518, 1001, "HER", "Herat"), +(1519, 1001, "JOW", "Jowzjan"), +(1520, 1001, "KAB", "Kabul"), +(1521, 1001, "KAN", "Kandahar"), +(1522, 1001, "KAP", "Kapisa"), +(1523, 1001, "KHO", "Khowst"), +(1524, 1001, "KNR", "Konar"), +(1525, 1001, "KDZ", "Kondoz"), +(1526, 1001, "LAG", "Laghman"), +(1527, 1001, "LOW", "Lowgar"), +(1528, 1001, "NAN", "Nangrahar"), +(1529, 1001, "NIM", "Nimruz"), +(1530, 1001, "NUR", "Nurestan"), +(1531, 1001, "ORU", "Oruzgan"), +(1532, 1001, "PIA", "Paktia"), +(1533, 1001, "PKA", "Paktika"), +(1534, 1001, "PAR", "Parwan"), +(1535, 1001, "SAM", "Samangan"), +(1536, 1001, "SAR", "Sar-e Pol"), +(1537, 1001, "TAK", "Takhar"), +(1538, 1001, "WAR", "Wardak"), +(1539, 1001, "ZAB", "Zabol"), +(1540, 1002, "BR", "Berat"), +(1541, 1002, "BU", "Bulqizë"), +(1542, 1002, "DL", "Delvinë"), +(1543, 1002, "DV", "Devoll"), +(1544, 1002, "DI", "Dibër"), +(1545, 1002, "DR", "Durrës"), +(1546, 1002, "EL", "Elbasan"), +(1547, 1002, "FR", "Fier"), +(1548, 1002, "GR", "Gramsh"), +(1549, 1002, "GJ", "Gjirokastër"), +(1550, 1002, "HA", "Has"), +(1551, 1002, "KA", "Kavajë"), +(1552, 1002, "ER", "Kolonjë"), +(1553, 1002, "KO", "Korçë"), +(1554, 1002, "KR", "Krujë"), +(1555, 1002, "KC", "Kuçovë"), +(1556, 1002, "KU", "Kukës"), +(1557, 1002, "KB", "Kurbin"), +(1558, 1002, "LE", "Lezhë"), +(1559, 1002, "LB", "Librazhd"), +(1560, 1002, "LU", "Lushnjë"), +(1561, 1002, "MM", "Malësi e Madhe"), +(1562, 1002, "MK", "Mallakastër"), +(1563, 1002, "MT", "Mat"), +(1564, 1002, "MR", "Mirditë"), +(1565, 1002, "PQ", "Peqin"), +(1566, 1002, "PR", "Përmet"), +(1567, 1002, "PG", "Pogradec"), +(1568, 1002, "PU", "Pukë"), +(1569, 1002, "SR", "Sarandë"), +(1570, 1002, "SK", "Skrapar"), +(1571, 1002, "SH", "Shkodër"), +(1572, 1002, "TE", "Tepelenë"), +(1573, 1002, "TR", "Tiranë"), +(1574, 1002, "TP", "Tropojë"), +(1575, 1002, "VL", "Vlorë"), +(1576, 1011, "ER", "Erevan"), +(1577, 1011, "AG", "Aragacotn"), +(1578, 1011, "AR", "Ararat"), +(1579, 1011, "AV", "Armavir"), +(1580, 1011, "GR", "Gegarkunik\'"), +(1581, 1011, "KT", "Kotayk\'"), +(1582, 1011, "LO", "Lory"), +(1583, 1011, "SH", "Sirak"), +(1584, 1011, "SU", "Syunik\'"), +(1585, 1011, "TV", "Tavus"), +(1586, 1011, "VD", "Vayoc Jor"), +(1587, 1006, "BGO", "Bengo"), +(1588, 1006, "BGU", "Benguela"), +(1589, 1006, "BIE", "Bie"), +(1590, 1006, "CAB", "Cabinda"), +(1591, 1006, "CCU", "Cuando-Cubango"), +(1592, 1006, "CNO", "Cuanza Norte"), +(1593, 1006, "CUS", "Cuanza Sul"), +(1594, 1006, "CNN", "Cunene"), +(1595, 1006, "HUA", "Huambo"), +(1596, 1006, "HUI", "Huila"), +(1597, 1006, "LUA", "Luanda"), +(1598, 1006, "LNO", "Lunda Norte"), +(1599, 1006, "LSU", "Lunda Sul"), +(1600, 1006, "MAL", "Malange"), +(1601, 1006, "MOX", "Moxico"), +(1602, 1006, "NAM", "Namibe"), +(1603, 1006, "UIG", "Uige"), +(1604, 1006, "ZAI", "Zaire"), +(1605, 1010, "C", "Capital federal"), +(1606, 1010, "B", "Buenos Aires"), +(1607, 1010, "K", "Catamarca"), +(1608, 1010, "X", "Cordoba"), +(1609, 1010, "W", "Corrientes"), +(1610, 1010, "H", "Chaco"), +(1611, 1010, "U", "Chubut"), +(1612, 1010, "E", "Entre Rios"), +(1613, 1010, "P", "Formosa"), +(1614, 1010, "Y", "Jujuy"), +(1615, 1010, "L", "La Pampa"), +(1616, 1010, "M", "Mendoza"), +(1617, 1010, "N", "Misiones"), +(1618, 1010, "Q", "Neuquen"), +(1619, 1010, "R", "Rio Negro"), +(1620, 1010, "A", "Salta"), +(1621, 1010, "J", "San Juan"), +(1622, 1010, "D", "San Luis"), +(1623, 1010, "Z", "Santa Cruz"), +(1624, 1010, "S", "Santa Fe"), +(1625, 1010, "G", "Santiago del Estero"), +(1626, 1010, "V", "Tierra del Fuego"), +(1627, 1010, "T", "Tucuman"), +(1628, 1014, "1", "Burgenland"), +(1629, 1014, "2", "Kärnten"), +(1630, 1014, "3", "Niederösterreich"), +(1631, 1014, "4", "Oberösterreich"), +(1632, 1014, "5", "Salzburg"), +(1633, 1014, "6", "Steiermark"), +(1634, 1014, "7", "Tirol"), +(1635, 1014, "8", "Vorarlberg"), +(1636, 1014, "9", "Wien"), +(1637, 1008, "AAT", "Australian Antarctic Territory"), +(1638, 1013, "ACT", "Australian Capital Territory"), +(1639, 1013, "NT", "Northern Territory"), +(1640, 1013, "NSW", "New South Wales"), +(1641, 1013, "QLD", "Queensland"), +(1642, 1013, "SA", "South Australia"), +(1643, 1013, "TAS", "Tasmania"), +(1644, 1013, "VIC", "Victoria"), +(1645, 1013, "WA", "Western Australia"), +(1646, 1015, "NX", "Naxcivan"), +(1647, 1015, "AB", "Ali Bayramli"), +(1648, 1015, "BA", "Baki"), +(1649, 1015, "GA", "Ganca"), +(1650, 1015, "LA", "Lankaran"), +(1651, 1015, "MI", "Mingacevir"), +(1652, 1015, "NA", "Naftalan"), +(1653, 1015, "SA", "Saki"), +(1654, 1015, "SM", "Sumqayit"), +(1655, 1015, "SS", "Susa"), +(1656, 1015, "XA", "Xankandi"), +(1657, 1015, "YE", "Yevlax"), +(1658, 1015, "ABS", "Abseron"), +(1659, 1015, "AGC", "Agcabadi"), +(1660, 1015, "AGM", "Agdam"), +(1661, 1015, "AGS", "Agdas"), +(1662, 1015, "AGA", "Agstafa"), +(1663, 1015, "AGU", "Agsu"), +(1664, 1015, "AST", "Astara"), +(1665, 1015, "BAB", "Babak"), +(1666, 1015, "BAL", "Balakan"), +(1667, 1015, "BAR", "Barda"), +(1668, 1015, "BEY", "Beylagan"), +(1669, 1015, "BIL", "Bilasuvar"), +(1670, 1015, "CAB", "Cabrayll"), +(1671, 1015, "CAL", "Calilabad"), +(1672, 1015, "CUL", "Culfa"), +(1673, 1015, "DAS", "Daskasan"), +(1674, 1015, "DAV", "Davaci"), +(1675, 1015, "FUZ", "Fuzuli"), +(1676, 1015, "GAD", "Gadabay"), +(1677, 1015, "GOR", "Goranboy"), +(1678, 1015, "GOY", "Goycay"), +(1679, 1015, "HAC", "Haciqabul"), +(1680, 1015, "IMI", "Imisli"), +(1681, 1015, "ISM", "Ismayilli"), +(1682, 1015, "KAL", "Kalbacar"), +(1683, 1015, "KUR", "Kurdamir"), +(1684, 1015, "LAC", "Lacin"), +(1685, 1015, "LER", "Lerik"), +(1686, 1015, "MAS", "Masalli"), +(1687, 1015, "NEF", "Neftcala"), +(1688, 1015, "OGU", "Oguz"), +(1689, 1015, "ORD", "Ordubad"), +(1690, 1015, "QAB", "Qabala"), +(1691, 1015, "QAX", "Qax"), +(1692, 1015, "QAZ", "Qazax"), +(1693, 1015, "QOB", "Qobustan"), +(1694, 1015, "QBA", "Quba"), +(1695, 1015, "QBI", "Qubadli"), +(1696, 1015, "QUS", "Qusar"), +(1697, 1015, "SAT", "Saatli"), +(1698, 1015, "SAB", "Sabirabad"), +(1699, 1015, "SAD", "Sadarak"), +(1700, 1015, "SAH", "Sahbuz"), +(1701, 1015, "SAL", "Salyan"), +(1702, 1015, "SMI", "Samaxi"), +(1703, 1015, "SKR", "Samkir"), +(1704, 1015, "SMX", "Samux"), +(1705, 1015, "SAR", "Sarur"), +(1706, 1015, "SIY", "Siyazan"), +(1707, 1015, "TAR", "Tartar"), +(1708, 1015, "TOV", "Tovuz"), +(1709, 1015, "UCA", "Ucar"), +(1710, 1015, "XAC", "Xacmaz"), +(1711, 1015, "XAN", "Xanlar"), +(1712, 1015, "XIZ", "Xizi"), +(1713, 1015, "XCI", "Xocali"), +(1714, 1015, "XVD", "Xocavand"), +(1715, 1015, "YAR", "Yardimli"), +(1716, 1015, "ZAN", "Zangilan"), +(1717, 1015, "ZAQ", "Zaqatala"), +(1718, 1015, "ZAR", "Zardab"), +(1719, 1026, "BIH", "Federacija Bosna i Hercegovina"), +(1720, 1026, "SRP", "Republika Srpska"), +(1721, 1017, "05", "Bagerhat zila"), +(1722, 1017, "01", "Bandarban zila"), +(1723, 1017, "02", "Barguna zila"), +(1724, 1017, "06", "Barisal zila"), +(1725, 1017, "07", "Bhola zila"), +(1726, 1017, "03", "Bogra zila"), +(1727, 1017, "04", "Brahmanbaria zila"), +(1728, 1017, "09", "Chandpur zila"), +(1729, 1017, "10", "Chittagong zila"), +(1730, 1017, "12", "Chuadanga zila"), +(1731, 1017, "08", "Comilla zila"), +(1732, 1017, "11", "Cox\'s Bazar zila"), +(1733, 1017, "13", "Dhaka zila"), +(1734, 1017, "14", "Dinajpur zila"), +(1735, 1017, "15", "Faridpur zila"), +(1736, 1017, "16", "Feni zila"), +(1737, 1017, "19", "Gaibandha zila"), +(1738, 1017, "18", "Gazipur zila"), +(1739, 1017, "17", "Gopalganj zila"), +(1740, 1017, "20", "Habiganj zila"), +(1741, 1017, "24", "Jaipurhat zila"), +(1742, 1017, "21", "Jamalpur zila"), +(1743, 1017, "22", "Jessore zila"), +(1744, 1017, "25", "Jhalakati zila"), +(1745, 1017, "23", "Jhenaidah zila"), +(1746, 1017, "29", "Khagrachari zila"), +(1747, 1017, "27", "Khulna zila"), +(1748, 1017, "26", "Kishorganj zila"), +(1749, 1017, "28", "Kurigram zila"), +(1750, 1017, "30", "Kushtia zila"), +(1751, 1017, "31", "Lakshmipur zila"), +(1752, 1017, "32", "Lalmonirhat zila"), +(1753, 1017, "36", "Madaripur zila"), +(1754, 1017, "37", "Magura zila"), +(1755, 1017, "33", "Manikganj zila"), +(1756, 1017, "39", "Meherpur zila"), +(1757, 1017, "38", "Moulvibazar zila"), +(1758, 1017, "35", "Munshiganj zila"), +(1759, 1017, "34", "Mymensingh zila"), +(1760, 1017, "48", "Naogaon zila"), +(1761, 1017, "43", "Narail zila"), +(1762, 1017, "40", "Narayanganj zila"), +(1763, 1017, "42", "Narsingdi zila"), +(1764, 1017, "44", "Natore zila"), +(1765, 1017, "45", "Nawabganj zila"), +(1766, 1017, "41", "Netrakona zila"), +(1767, 1017, "46", "Nilphamari zila"), +(1768, 1017, "47", "Noakhali zila"), +(1769, 1017, "49", "Pabna zila"), +(1770, 1017, "52", "Panchagarh zila"), +(1771, 1017, "51", "Patuakhali zila"), +(1772, 1017, "50", "Pirojpur zila"), +(1773, 1017, "53", "Rajbari zila"), +(1774, 1017, "54", "Rajshahi zila"), +(1775, 1017, "56", "Rangamati zila"), +(1776, 1017, "55", "Rangpur zila"), +(1777, 1017, "58", "Satkhira zila"), +(1778, 1017, "62", "Shariatpur zila"), +(1779, 1017, "57", "Sherpur zila"), +(1780, 1017, "59", "Sirajganj zila"), +(1781, 1017, "61", "Sunamganj zila"), +(1782, 1017, "60", "Sylhet zila"), +(1783, 1017, "63", "Tangail zila"), +(1784, 1017, "64", "Thakurgaon zila"), +(1785, 1020, "VAN", "Antwerpen"), +(1786, 1020, "WBR", "Brabant Wallon"), +(1787, 1020, "WHT", "Hainaut"), +(1788, 1020, "WLG", "Liege"), +(1789, 1020, "VLI", "Limburg"), +(1790, 1020, "WLX", "Luxembourg"), +(1791, 1020, "WNA", "Namur"), +(1792, 1020, "VOV", "Oost-Vlaanderen"), +(1793, 1020, "VBR", "Vlaams-Brabant"), +(1794, 1020, "VWV", "West-Vlaanderen"), +(1795, 1034, "BAL", "Bale"), +(1796, 1034, "BAM", "Bam"), +(1797, 1034, "BAN", "Banwa"), +(1798, 1034, "BAZ", "Bazega"), +(1799, 1034, "BGR", "Bougouriba"), +(1800, 1034, "BLG", "Boulgou"), +(1801, 1034, "BLK", "Boulkiemde"), +(1802, 1034, "COM", "Comoe"), +(1803, 1034, "GAN", "Ganzourgou"), +(1804, 1034, "GNA", "Gnagna"), +(1805, 1034, "GOU", "Gourma"), +(1806, 1034, "HOU", "Houet"), +(1807, 1034, "IOB", "Ioba"), +(1808, 1034, "KAD", "Kadiogo"), +(1809, 1034, "KEN", "Kenedougou"), +(1810, 1034, "KMD", "Komondjari"), +(1811, 1034, "KMP", "Kompienga"), +(1812, 1034, "KOS", "Kossi"), +(1813, 1034, "KOP", "Koulpulogo"), +(1814, 1034, "KOT", "Kouritenga"), +(1815, 1034, "KOW", "Kourweogo"), +(1816, 1034, "LER", "Leraba"), +(1817, 1034, "LOR", "Loroum"), +(1818, 1034, "MOU", "Mouhoun"), +(1819, 1034, "NAO", "Nahouri"), +(1820, 1034, "NAM", "Namentenga"), +(1821, 1034, "NAY", "Nayala"), +(1822, 1034, "NOU", "Noumbiel"), +(1823, 1034, "OUB", "Oubritenga"), +(1824, 1034, "OUD", "Oudalan"), +(1825, 1034, "PAS", "Passore"), +(1826, 1034, "PON", "Poni"), +(1827, 1034, "SNG", "Sanguie"), +(1828, 1034, "SMT", "Sanmatenga"), +(1829, 1034, "SEN", "Seno"), +(1830, 1034, "SIS", "Siasili"), +(1831, 1034, "SOM", "Soum"), +(1832, 1034, "SOR", "Sourou"), +(1833, 1034, "TAP", "Tapoa"), +(1834, 1034, "TUI", "Tui"), +(1835, 1034, "YAG", "Yagha"), +(1836, 1034, "YAT", "Yatenga"), +(1837, 1034, "ZIR", "Ziro"), +(1838, 1034, "ZON", "Zondoma"), +(1839, 1034, "ZOU", "Zoundweogo"), +(1840, 1033, "01", "Blagoevgrad"), +(1841, 1033, "02", "Burgas"), +(1842, 1033, "08", "Dobrich"), +(1843, 1033, "07", "Gabrovo"), +(1844, 1033, "26", "Haskovo"), +(1845, 1033, "28", "Yambol"), +(1846, 1033, "09", "Kardzhali"), +(1847, 1033, "10", "Kyustendil"), +(1848, 1033, "11", "Lovech"), +(1849, 1033, "12", "Montana"), +(1850, 1033, "13", "Pazardzhik"), +(1851, 1033, "14", "Pernik"), +(1852, 1033, "15", "Pleven"), +(1853, 1033, "16", "Plovdiv"), +(1854, 1033, "17", "Razgrad"), +(1855, 1033, "18", "Ruse"), +(1856, 1033, "19", "Silistra"), +(1857, 1033, "20", "Sliven"), +(1858, 1033, "21", "Smolyan"), +(1859, 1033, "23", "Sofia"), +(1860, 1033, "24", "Stara Zagora"), +(1861, 1033, "27", "Shumen"), +(1862, 1033, "25", "Targovishte"), +(1863, 1033, "03", "Varna"), +(1864, 1033, "04", "Veliko Tarnovo"), +(1865, 1033, "05", "Vidin"), +(1866, 1033, "06", "Vratsa"), +(1867, 1016, "01", "Al Hadd"), +(1868, 1016, "03", "Al Manamah"), +(1869, 1016, "10", "Al Mintaqah al Gharbiyah"), +(1870, 1016, "07", "Al Mintagah al Wusta"), +(1871, 1016, "05", "Al Mintaqah ash Shamaliyah"), +(1872, 1016, "02", "Al Muharraq"), +(1873, 1016, "09", "Ar Rifa"), +(1874, 1016, "04", "Jidd Hafs"), +(1875, 1016, "12", "Madluat Jamad"), +(1876, 1016, "08", "Madluat Isa"), +(1877, 1016, "11", "Mintaqat Juzur tawar"), +(1878, 1016, "06", "Sitrah"), +(1879, 1036, "BB", "Bubanza"), +(1880, 1036, "BJ", "Bujumbura"), +(1881, 1036, "BR", "Bururi"), +(1882, 1036, "CA", "Cankuzo"), +(1883, 1036, "CI", "Cibitoke"), +(1884, 1036, "GI", "Gitega"), +(1885, 1036, "KR", "Karuzi"), +(1886, 1036, "KY", "Kayanza"), +(1887, 1036, "MA", "Makamba"), +(1888, 1036, "MU", "Muramvya"), +(1889, 1036, "MW", "Mwaro"), +(1890, 1036, "NG", "Ngozi"), +(1891, 1036, "RT", "Rutana"), +(1892, 1036, "RY", "Ruyigi"), +(1893, 1022, "AL", "Alibori"), +(1894, 1022, "AK", "Atakora"), +(1895, 1022, "AQ", "Atlantique"), +(1896, 1022, "BO", "Borgou"), +(1897, 1022, "CO", "Collines"), +(1898, 1022, "DO", "Donga"), +(1899, 1022, "KO", "Kouffo"), +(1900, 1022, "LI", "Littoral"), +(1901, 1022, "MO", "Mono"), +(1902, 1022, "OU", "Oueme"), +(1903, 1022, "PL", "Plateau"), +(1904, 1022, "ZO", "Zou"), +(1905, 1032, "BE", "Belait"), +(1906, 1032, "BM", "Brunei-Muara"), +(1907, 1032, "TE", "Temburong"), +(1908, 1032, "TU", "Tutong"), +(1909, 1025, "C", "Cochabamba"), +(1910, 1025, "H", "Chuquisaca"), +(1911, 1025, "B", "El Beni"), +(1912, 1025, "L", "La Paz"), +(1913, 1025, "O", "Oruro"), +(1914, 1025, "N", "Pando"), +(1915, 1025, "P", "Potosi"), +(1916, 1025, "T", "Tarija"), +(1917, 1029, "AC", "Acre"), +(1918, 1029, "AL", "Alagoas"), +(1919, 1029, "AM", "Amazonas"), +(1920, 1029, "AP", "Amapa"), +(1921, 1029, "BA", "Bahia"), +(1922, 1029, "CE", "Ceara"), +(1923, 1029, "DF", "Distrito Federal"), +(1924, 1029, "ES", "Espirito Santo"), +(1926, 1029, "GO", "Goias"), +(1927, 1029, "MA", "Maranhao"), +(1928, 1029, "MG", "Minas Gerais"), +(1929, 1029, "MS", "Mato Grosso do Sul"), +(1930, 1029, "MT", "Mato Grosso"), +(1931, 1029, "PA", "Para"), +(1932, 1029, "PB", "Paraiba"), +(1933, 1029, "PE", "Pernambuco"), +(1934, 1029, "PI", "Piaui"), +(1935, 1029, "PR", "Parana"), +(1936, 1029, "RJ", "Rio de Janeiro"), +(1937, 1029, "RN", "Rio Grande do Norte"), +(1938, 1029, "RO", "Rondonia"), +(1939, 1029, "RR", "Roraima"), +(1940, 1029, "RS", "Rio Grande do Sul"), +(1941, 1029, "SC", "Santa Catarina"), +(1942, 1029, "SE", "Sergipe"), +(1943, 1029, "SP", "Sao Paulo"), +(1944, 1029, "TO", "Tocantins"), +(1945, 1212, "AC", "Acklins and Crooked Islands"), +(1946, 1212, "BI", "Bimini"), +(1947, 1212, "CI", "Cat Island"), +(1948, 1212, "EX", "Exuma"), +(1955, 1212, "IN", "Inagua"), +(1957, 1212, "LI", "Long Island"), +(1959, 1212, "MG", "Mayaguana"), +(1960, 1212, "NP", "New Providence"), +(1962, 1212, "RI", "Ragged Island"), +(1966, 1024, "33", "Bumthang"), +(1967, 1024, "12", "Chhukha"), +(1968, 1024, "22", "Dagana"), +(1969, 1024, "GA", "Gasa"), +(1970, 1024, "13", "Ha"), +(1971, 1024, "44", "Lhuentse"), +(1972, 1024, "42", "Monggar"), +(1973, 1024, "11", "Paro"), +(1974, 1024, "43", "Pemagatshel"), +(1975, 1024, "23", "Punakha"), +(1976, 1024, "45", "Samdrup Jongkha"), +(1977, 1024, "14", "Samtee"), +(1978, 1024, "31", "Sarpang"), +(1979, 1024, "15", "Thimphu"), +(1980, 1024, "41", "Trashigang"), +(1981, 1024, "TY", "Trashi Yangtse"), +(1982, 1024, "32", "Trongsa"), +(1983, 1024, "21", "Tsirang"), +(1984, 1024, "24", "Wangdue Phodrang"), +(1985, 1024, "34", "Zhemgang"), +(1986, 1027, "CE", "Central"), +(1987, 1027, "GH", "Ghanzi"), +(1988, 1027, "KG", "Kgalagadi"), +(1989, 1027, "KL", "Kgatleng"), +(1990, 1027, "KW", "Kweneng"), +(1991, 1027, "NG", "Ngamiland"), +(1992, 1027, "NE", "North-East"), +(1993, 1027, "NW", "North-West"), +(1994, 1027, "SE", "South-East"), +(1995, 1027, "SO", "Southern"), +(1996, 1019, "BR", "Brèsckaja voblasc\'"), +(1997, 1019, "HO", "Homel\'skaja voblasc\'"), +(1998, 1019, "HR", "Hrodzenskaja voblasc\'"), +(1999, 1019, "MA", "Mahilëuskaja voblasc\'"), +(2000, 1019, "MI", "Minskaja voblasc\'"), +(2001, 1019, "VI", "Vicebskaja voblasc\'"), +(2002, 1021, "BZ", "Belize"), +(2003, 1021, "CY", "Cayo"), +(2004, 1021, "CZL", "Corozal"), +(2005, 1021, "OW", "Orange Walk"), +(2006, 1021, "SC", "Stann Creek"), +(2007, 1021, "TOL", "Toledo"), +(2008, 1050, "KN", "Kinshasa"), +(2011, 1050, "EQ", "Equateur"), +(2014, 1050, "KE", "Kasai-Oriental"), +(2016, 1050, "MA", "Maniema"), +(2017, 1050, "NK", "Nord-Kivu"), +(2019, 1050, "SK", "Sud-Kivu"), +(2020, 1042, "BGF", "Bangui"), +(2021, 1042, "BB", "Bamingui-Bangoran"), +(2022, 1042, "BK", "Basse-Kotto"), +(2023, 1042, "HK", "Haute-Kotto"), +(2024, 1042, "HM", "Haut-Mbomou"), +(2025, 1042, "KG", "Kemo"), +(2026, 1042, "LB", "Lobaye"), +(2027, 1042, "HS", "Mambere-Kadei"), +(2028, 1042, "MB", "Mbomou"), +(2029, 1042, "KB", "Nana-Grebizi"), +(2030, 1042, "NM", "Nana-Mambere"), +(2031, 1042, "MP", "Ombella-Mpoko"), +(2032, 1042, "UK", "Ouaka"), +(2033, 1042, "AC", "Ouham"), +(2034, 1042, "OP", "Ouham-Pende"), +(2035, 1042, "SE", "Sangha-Mbaere"), +(2036, 1042, "VR", "Vakaga"), +(2037, 1051, "BZV", "Brazzaville"), +(2038, 1051, "11", "Bouenza"), +(2039, 1051, "8", "Cuvette"), +(2040, 1051, "15", "Cuvette-Ouest"), +(2041, 1051, "5", "Kouilou"), +(2042, 1051, "2", "Lekoumou"), +(2043, 1051, "7", "Likouala"), +(2044, 1051, "9", "Niari"), +(2045, 1051, "14", "Plateaux"), +(2046, 1051, "12", "Pool"), +(2047, 1051, "13", "Sangha"), +(2048, 1205, "AG", "Aargau"), +(2049, 1205, "AI", "Appenzell Innerrhoden"), +(2050, 1205, "AR", "Appenzell Ausserrhoden"), +(2051, 1205, "BE", "Bern"), +(2052, 1205, "BL", "Basel-Landschaft"), +(2053, 1205, "BS", "Basel-Stadt"), +(2054, 1205, "FR", "Fribourg"), +(2055, 1205, "GE", "Geneva"), +(2056, 1205, "GL", "Glarus"), +(2057, 1205, "GR", "Graubunden"), +(2058, 1205, "JU", "Jura"), +(2059, 1205, "LU", "Luzern"), +(2060, 1205, "NE", "Neuchatel"), +(2061, 1205, "NW", "Nidwalden"), +(2062, 1205, "OW", "Obwalden"), +(2063, 1205, "SG", "Sankt Gallen"), +(2064, 1205, "SH", "Schaffhausen"), +(2065, 1205, "SO", "Solothurn"), +(2066, 1205, "SZ", "Schwyz"), +(2067, 1205, "TG", "Thurgau"), +(2068, 1205, "TI", "Ticino"), +(2069, 1205, "UR", "Uri"), +(2070, 1205, "VD", "Vaud"), +(2071, 1205, "VS", "Valais"), +(2072, 1205, "ZG", "Zug"), +(2073, 1205, "ZH", "Zurich"), +(2074, 1054, "06", "18 Montagnes"), +(2075, 1054, "16", "Agnebi"), +(2076, 1054, "09", "Bas-Sassandra"), +(2077, 1054, "10", "Denguele"), +(2078, 1054, "02", "Haut-Sassandra"), +(2079, 1054, "07", "Lacs"), +(2080, 1054, "01", "Lagunes"), +(2081, 1054, "12", "Marahoue"), +(2082, 1054, "05", "Moyen-Comoe"), +(2083, 1054, "11", "Nzi-Comoe"), +(2084, 1054, "03", "Savanes"), +(2085, 1054, "15", "Sud-Bandama"), +(2086, 1054, "13", "Sud-Comoe"), +(2087, 1054, "04", "Vallee du Bandama"), +(2088, 1054, "14", "Worodouqou"), +(2089, 1054, "08", "Zanzan"), +(2090, 1044, "AI", "Aisen del General Carlos Ibanez del Campo"), +(2091, 1044, "AN", "Antofagasta"), +(2092, 1044, "AR", "Araucania"), +(2093, 1044, "AT", "Atacama"), +(2094, 1044, "BI", "Bio-Bio"), +(2095, 1044, "CO", "Coquimbo"), +(2096, 1044, "LI", "Libertador General Bernardo O\'Higgins"), +(2097, 1044, "LL", "Los Lagos"), +(2098, 1044, "MA", "Magallanes"), +(2099, 1044, "ML", "Maule"), +(2100, 1044, "SM", "Santiago Metropolitan"), +(2101, 1044, "TA", "Tarapaca"), +(2102, 1044, "VS", "Valparaiso"), +(2103, 1038, "AD", "Adamaoua"), +(2104, 1038, "CE", "Centre"), +(2105, 1038, "ES", "East"), +(2106, 1038, "EN", "Far North"), +(2107, 1038, "NO", "North"), +(2108, 1038, "SW", "South"), +(2109, 1038, "SW", "South-West"), +(2110, 1038, "OU", "West"), +(2111, 1045, "11", "Beijing"), +(2112, 1045, "50", "Chongqing"), +(2113, 1045, "31", "Shanghai"), +(2114, 1045, "12", "Tianjin"), +(2115, 1045, "34", "Anhui"), +(2116, 1045, "35", "Fujian"), +(2117, 1045, "62", "Gansu"), +(2118, 1045, "44", "Guangdong"), +(2119, 1045, "52", "Guizhou"), +(2120, 1045, "46", "Hainan"), +(2121, 1045, "13", "Hebei"), +(2122, 1045, "23", "Heilongjiang"), +(2123, 1045, "41", "Henan"), +(2124, 1045, "42", "Hubei"), +(2125, 1045, "43", "Hunan"), +(2126, 1045, "32", "Jiangsu"), +(2127, 1045, "36", "Jiangxi"), +(2128, 1045, "22", "Jilin"), +(2129, 1045, "21", "Liaoning"), +(2130, 1045, "63", "Qinghai"), +(2131, 1045, "61", "Shaanxi"), +(2132, 1045, "37", "Shandong"), +(2133, 1045, "14", "Shanxi"), +(2134, 1045, "51", "Sichuan"), +(2135, 1045, "71", "Taiwan"), +(2136, 1045, "53", "Yunnan"), +(2137, 1045, "33", "Zhejiang"), +(2138, 1045, "45", "Guangxi"), +(2139, 1045, "15", "Neia Mongol (mn)"), +(2140, 1045, "65", "Xinjiang"), +(2141, 1045, "54", "Xizang"), +(2142, 1045, "91", "Hong Kong"), +(2143, 1045, "92", "Macau"), +(2144, 1048, "DC", "Distrito Capital de Bogotá"), +(2145, 1048, "AMA", "Amazonea"), +(2146, 1048, "ANT", "Antioquia"), +(2147, 1048, "ARA", "Arauca"), +(2148, 1048, "ATL", "Atlántico"), +(2149, 1048, "BOL", "BolÃvar"), +(2150, 1048, "BOY", "Boyacá"), +(2151, 1048, "CAL", "Caldea"), +(2152, 1048, "CAQ", "Caquetá"), +(2153, 1048, "CAS", "Casanare"), +(2154, 1048, "CAU", "Cauca"), +(2155, 1048, "CES", "Cesar"), +(2156, 1048, "COR", "Córdoba"), +(2157, 1048, "CUN", "Cundinamarca"), +(2158, 1048, "CHO", "Chocó"), +(2159, 1048, "GUA", "GuainÃa"), +(2160, 1048, "GUV", "Guaviare"), +(2161, 1048, "LAG", "La Guajira"), +(2162, 1048, "MAG", "Magdalena"), +(2163, 1048, "MET", "Meta"), +(2164, 1048, "NAR", "Nariño"), +(2165, 1048, "NSA", "Norte de Santander"), +(2166, 1048, "PUT", "Putumayo"), +(2167, 1048, "QUI", "Quindio"), +(2168, 1048, "RIS", "Risaralda"), +(2169, 1048, "SAP", "San Andrés, Providencia y Santa Catalina"), +(2170, 1048, "SAN", "Santander"), +(2171, 1048, "SUC", "Sucre"), +(2172, 1048, "TOL", "Tolima"), +(2173, 1048, "VAC", "Valle del Cauca"), +(2174, 1048, "VAU", "Vaupés"), +(2175, 1048, "VID", "Vichada"), +(2176, 1053, "A", "Alajuela"), +(2177, 1053, "C", "Cartago"), +(2178, 1053, "G", "Guanacaste"), +(2179, 1053, "H", "Heredia"), +(2180, 1053, "L", "Limon"), +(2181, 1053, "P", "Puntarenas"), +(2182, 1053, "SJ", "San Jose"), +(2183, 1056, "09", "Camagey"), +(2184, 1056, "08", "Ciego de `vila"), +(2185, 1056, "06", "Cienfuegos"), +(2186, 1056, "03", "Ciudad de La Habana"), +(2187, 1056, "12", "Granma"), +(2188, 1056, "14", "Guantanamo"), +(2189, 1056, "11", "Holquin"), +(2190, 1056, "02", "La Habana"), +(2191, 1056, "10", "Las Tunas"), +(2192, 1056, "04", "Matanzas"), +(2193, 1056, "01", "Pinar del Rio"), +(2194, 1056, "07", "Sancti Spiritus"), +(2195, 1056, "13", "Santiago de Cuba"), +(2196, 1056, "05", "Villa Clara"), +(2197, 1056, "99", "Isla de la Juventud"), +(2198, 1056, "PR", "Pinar del Roo"), +(2199, 1056, "CA", "Ciego de Avila"), +(2200, 1056, "CG", "Camagoey"), +(2201, 1056, "HO", "Holgun"), +(2202, 1056, "SS", "Sancti Spritus"), +(2203, 1056, "IJ", "Municipio Especial Isla de la Juventud"), +(2204, 1040, "BV", "Boa Vista"), +(2205, 1040, "BR", "Brava"), +(2206, 1040, "CS", "Calheta de Sao Miguel"), +(2207, 1040, "FO", "Fogo"), +(2208, 1040, "MA", "Maio"), +(2209, 1040, "MO", "Mosteiros"), +(2210, 1040, "PA", "Paul"), +(2211, 1040, "PN", "Porto Novo"), +(2212, 1040, "PR", "Praia"), +(2213, 1040, "RG", "Ribeira Grande"), +(2214, 1040, "SL", "Sal"), +(2215, 1040, "SD", "Sao Domingos"), +(2216, 1040, "SF", "Sao Filipe"), +(2217, 1040, "SN", "Sao Nicolau"), +(2218, 1040, "SV", "Sao Vicente"), +(2219, 1040, "TA", "Tarrafal"), +(2220, 1057, "04", "Ammochostos Magusa"), +(2221, 1057, "06", "Keryneia"), +(2222, 1057, "03", "Larnaka"), +(2223, 1057, "01", "Lefkosia"), +(2224, 1057, "02", "Lemesos"), +(2225, 1057, "05", "Pafos"), +(2226, 1058, "JC", "JihoÄeský kraj"), +(2227, 1058, "JM", "Jihomoravský kraj"), +(2228, 1058, "KA", "Karlovarský kraj"), +(2229, 1058, "KR", "Královéhradecký kraj"), +(2230, 1058, "LI", "Liberecký kraj"), +(2231, 1058, "MO", "Moravskoslezský kraj"), +(2232, 1058, "OL", "Olomoucký kraj"), +(2233, 1058, "PA", "Pardubický kraj"), +(2234, 1058, "PL", "Plzeňský kraj"), +(2235, 1058, "PR", "Praha, hlavnà mÄ›sto"), +(2236, 1058, "ST", "StÅ™edoÄeský kraj"), +(2237, 1058, "US", "Ústecký kraj"), +(2238, 1058, "VY", "VysoÄina"), +(2239, 1058, "ZL", "ZlÃnský kraj"), +(2240, 1082, "BW", "Baden-Württemberg"), +(2241, 1082, "BY", "Bayern"), +(2242, 1082, "HB", "Bremen"), +(2243, 1082, "HH", "Hamburg"), +(2244, 1082, "HE", "Hessen"), +(2245, 1082, "NI", "Niedersachsen"), +(2246, 1082, "NW", "Nordrhein-Westfalen"), +(2247, 1082, "RP", "Rheinland-Pfalz"), +(2248, 1082, "SL", "Saarland"), +(2249, 1082, "SH", "Schleswig-Holstein"), +(2250, 1082, "BE", "Berlin"), +(2251, 1082, "BB", "Brandenburg"), +(2252, 1082, "MV", "Mecklenburg-Vorpommern"), +(2253, 1082, "SN", "Sachsen"), +(2254, 1082, "ST", "Sachsen-Anhalt"), +(2255, 1082, "TH", "Thüringen"), +(2256, 1060, "AS", "Ali Sabiah"), +(2257, 1060, "DI", "Dikhil"), +(2258, 1060, "DJ", "Djibouti"), +(2259, 1060, "OB", "Obock"), +(2260, 1060, "TA", "Tadjoura"), +(2261, 1059, "147", "Frederiksberg"), +(2262, 1059, "101", "Copenhagen City"), +(2263, 1059, "015", "Copenhagen"), +(2264, 1059, "020", "Frederiksborg"), +(2265, 1059, "025", "Roskilde"), +(2266, 1059, "030", "Vestsjælland"), +(2267, 1059, "035", "Storstrøm"), +(2268, 1059, "040", "Bornholm"), +(2269, 1059, "042", "Fyn"), +(2270, 1059, "050", "South Jutland"), +(2271, 1059, "055", "Ribe"), +(2272, 1059, "060", "Vejle"), +(2273, 1059, "065", "Ringkjøbing"), +(2274, 1059, "070", "Ã…rhus"), +(2275, 1059, "076", "Viborg"), +(2276, 1059, "080", "North Jutland"), +(2277, 1062, "01", "Distrito Nacional (Santo Domingo)"), +(2278, 1062, "02", "Azua"), +(2279, 1062, "03", "Bahoruco"), +(2280, 1062, "04", "Barahona"), +(2281, 1062, "05", "Dajabón"), +(2282, 1062, "06", "Duarte"), +(2283, 1062, "08", "El Seybo [El Seibo]"), +(2284, 1062, "09", "Espaillat"), +(2285, 1062, "30", "Hato Mayor"), +(2286, 1062, "10", "Independencia"), +(2287, 1062, "11", "La Altagracia"), +(2288, 1062, "07", "La Estrelleta [Elias Pina]"), +(2289, 1062, "12", "La Romana"), +(2290, 1062, "13", "La Vega"), +(2291, 1062, "14", "Maroia Trinidad Sánchez"), +(2292, 1062, "28", "Monseñor Nouel"), +(2293, 1062, "15", "Monte Cristi"), +(2294, 1062, "29", "Monte Plata"), +(2295, 1062, "16", "Pedernales"), +(2296, 1062, "17", "Peravia"), +(2297, 1062, "18", "Puerto Plata"), +(2298, 1062, "19", "Salcedo"), +(2299, 1062, "20", "Samaná"), +(2300, 1062, "21", "San Cristóbal"), +(2301, 1062, "23", "San Pedro de MacorÃs"), +(2302, 1062, "24", "Sánchez RamÃrez"), +(2303, 1062, "25", "Santiago"), +(2304, 1062, "26", "Santiago RodrÃguez"), +(2305, 1062, "27", "Valverde"), +(2306, 1003, "01", "Adrar"), +(2307, 1003, "44", "Ain Defla"), +(2308, 1003, "46", "Ain Tmouchent"), +(2309, 1003, "16", "Alger"), +(2310, 1003, "23", "Annaba"), +(2311, 1003, "05", "Batna"), +(2312, 1003, "08", "Bechar"), +(2313, 1003, "06", "Bejaia"), +(2314, 1003, "07", "Biskra"), +(2315, 1003, "09", "Blida"), +(2316, 1003, "34", "Bordj Bou Arreridj"), +(2317, 1003, "10", "Bouira"), +(2318, 1003, "35", "Boumerdes"), +(2319, 1003, "02", "Chlef"), +(2320, 1003, "25", "Constantine"), +(2321, 1003, "17", "Djelfa"), +(2322, 1003, "32", "El Bayadh"), +(2323, 1003, "39", "El Oued"), +(2324, 1003, "36", "El Tarf"), +(2325, 1003, "47", "Ghardaia"), +(2326, 1003, "24", "Guelma"), +(2327, 1003, "33", "Illizi"), +(2328, 1003, "18", "Jijel"), +(2329, 1003, "40", "Khenchela"), +(2330, 1003, "03", "Laghouat"), +(2331, 1003, "29", "Mascara"), +(2332, 1003, "26", "Medea"), +(2333, 1003, "43", "Mila"), +(2334, 1003, "27", "Mostaganem"), +(2335, 1003, "28", "Msila"), +(2336, 1003, "45", "Naama"), +(2337, 1003, "31", "Oran"), +(2338, 1003, "30", "Ouargla"), +(2339, 1003, "04", "Oum el Bouaghi"), +(2340, 1003, "48", "Relizane"), +(2341, 1003, "20", "Saida"), +(2342, 1003, "19", "Setif"), +(2343, 1003, "22", "Sidi Bel Abbes"), +(2344, 1003, "21", "Skikda"), +(2345, 1003, "41", "Souk Ahras"), +(2346, 1003, "11", "Tamanghasset"), +(2347, 1003, "12", "Tebessa"), +(2348, 1003, "14", "Tiaret"), +(2349, 1003, "37", "Tindouf"), +(2350, 1003, "42", "Tipaza"), +(2351, 1003, "38", "Tissemsilt"), +(2352, 1003, "15", "Tizi Ouzou"), +(2353, 1003, "13", "Tlemcen"), +(2354, 1064, "A", "Azuay"), +(2355, 1064, "B", "Bolivar"), +(2356, 1064, "F", "Canar"), +(2357, 1064, "C", "Carchi"), +(2358, 1064, "X", "Cotopaxi"), +(2359, 1064, "H", "Chimborazo"), +(2360, 1064, "O", "El Oro"), +(2361, 1064, "E", "Esmeraldas"), +(2362, 1064, "W", "Galapagos"), +(2363, 1064, "G", "Guayas"), +(2364, 1064, "I", "Imbabura"), +(2365, 1064, "L", "Loja"), +(2366, 1064, "R", "Los Rios"), +(2367, 1064, "M", "Manabi"), +(2368, 1064, "S", "Morona-Santiago"), +(2369, 1064, "N", "Napo"), +(2370, 1064, "D", "Orellana"), +(2371, 1064, "Y", "Pastaza"), +(2372, 1064, "P", "Pichincha"), +(2373, 1064, "U", "Sucumbios"), +(2374, 1064, "T", "Tungurahua"), +(2375, 1064, "Z", "Zamora-Chinchipe"), +(2376, 1069, "37", "Harjumaa"), +(2377, 1069, "39", "Hiiumaa"), +(2378, 1069, "44", "Ida-Virumaa"), +(2379, 1069, "49", "Jõgevamaa"), +(2380, 1069, "51", "Järvamaa"), +(2381, 1069, "57", "Läänemaa"), +(2382, 1069, "59", "Lääne-Virumaa"), +(2383, 1069, "65", "Põlvamaa"), +(2384, 1069, "67", "Pärnumaa"), +(2385, 1069, "70", "Raplamaa"), +(2386, 1069, "74", "Saaremaa"), +(2387, 1069, "7B", "Tartumaa"), +(2388, 1069, "82", "Valgamaa"), +(2389, 1069, "84", "Viljandimaa"), +(2390, 1069, "86", "Võrumaa"), +(2391, 1065, "DK", "Ad Daqahllyah"), +(2392, 1065, "BA", "Al Bahr al Ahmar"), +(2393, 1065, "BH", "Al Buhayrah"), +(2394, 1065, "FYM", "Al Fayym"), +(2395, 1065, "GH", "Al Gharbiyah"), +(2396, 1065, "ALX", "Al Iskandarlyah"), +(2397, 1065, "IS", "Al Isma illyah"), +(2398, 1065, "GZ", "Al Jizah"), +(2399, 1065, "MNF", "Al Minuflyah"), +(2400, 1065, "MN", "Al Minya"), +(2401, 1065, "C", "Al Qahirah"), +(2402, 1065, "KB", "Al Qalyublyah"), +(2403, 1065, "WAD", "Al Wadi al Jadid"), +(2404, 1065, "SHR", "Ash Sharqiyah"), +(2405, 1065, "SUZ", "As Suways"), +(2406, 1065, "ASN", "Aswan"), +(2407, 1065, "AST", "Asyut"), +(2408, 1065, "BNS", "Bani Suwayf"), +(2409, 1065, "PTS", "Bur Sa\'id"), +(2410, 1065, "DT", "Dumyat"), +(2411, 1065, "JS", "Janub Sina\'"), +(2412, 1065, "KFS", "Kafr ash Shaykh"), +(2413, 1065, "MT", "Matruh"), +(2414, 1065, "KN", "Qina"), +(2415, 1065, "SIN", "Shamal Sina\'"), +(2416, 1065, "SHG", "Suhaj"), +(2417, 1068, "AN", "Anseba"), +(2418, 1068, "DU", "Debub"), +(2419, 1068, "DK", "Debubawi Keyih Bahri [Debub-Keih-Bahri]"), +(2420, 1068, "GB", "Gash-Barka"), +(2421, 1068, "MA", "Maakel [Maekel]"), +(2422, 1068, "SK", "Semenawi Keyih Bahri [Semien-Keih-Bahri]"), +(2423, 1198, "VI", "Ãlava"), +(2424, 1198, "AB", "Albacete"), +(2425, 1198, "A", "Alicante"), +(2426, 1198, "AL", "AlmerÃa"), +(2427, 1198, "O", "Asturias"), +(2428, 1198, "AV", "Ãvila"), +(2429, 1198, "BA", "Badajoz"), +(2430, 1198, "PM", "Baleares"), +(2431, 1198, "B", "Barcelona"), +(2432, 1198, "BU", "Burgos"), +(2433, 1198, "CC", "Cáceres"), +(2434, 1198, "CA", "Cádiz"), +(2435, 1198, "S", "Cantabria"), +(2436, 1198, "CS", "Castellón"), +(2437, 1198, "CR", "Ciudad Real"), +(2438, 1198, "CU", "Cuenca"), +(2439, 1198, "GE", "Girona [Gerona]"), +(2440, 1198, "GR", "Granada"), +(2441, 1198, "GU", "Guadalajara"), +(2442, 1198, "SS", "Guipúzcoa"), +(2443, 1198, "H", "Huelva"), +(2444, 1198, "HU", "Huesca"), +(2445, 1198, "J", "Jaén"), +(2446, 1198, "C", "La Coruña"), +(2447, 1198, "LO", "La Rioja"), +(2448, 1198, "GC", "Las Palmas"), +(2449, 1198, "LE", "León"), +(2450, 1198, "L", "Lleida [Lérida]"), +(2451, 1198, "LU", "Lugo"), +(2452, 1198, "M", "Madrid"), +(2453, 1198, "MA", "Málaga"), +(2454, 1198, "MU", "Murcia"), +(2455, 1198, "NA", "Navarra"), +(2456, 1198, "OR", "Ourense"), +(2457, 1198, "P", "Palencia"), +(2458, 1198, "PO", "Pontevedra"), +(2459, 1198, "SA", "Salamanca"), +(2460, 1198, "TF", "Santa Cruz de Tenerife"), +(2461, 1198, "SG", "Segovia"), +(2462, 1198, "SE", "Sevilla"), +(2463, 1198, "SO", "Soria"), +(2464, 1198, "T", "Tarragona"), +(2465, 1198, "TE", "Teruel"), +(2466, 1198, "V", "Valencia"), +(2467, 1198, "VA", "Valladolid"), +(2468, 1198, "BI", "Vizcaya"), +(2469, 1198, "ZA", "Zamora"), +(2470, 1198, "Z", "Zaragoza"), +(2471, 1198, "CE", "Ceuta"), +(2472, 1198, "ML", "Melilla"), +(2473, 1070, "AA", "Addis Ababa"), +(2474, 1070, "DD", "Dire Dawa"), +(2475, 1070, "AF", "Afar"), +(2476, 1070, "AM", "Amara"), +(2477, 1070, "BE", "Benshangul-Gumaz"), +(2478, 1070, "GA", "Gambela Peoples"), +(2479, 1070, "HA", "Harari People"), +(2480, 1070, "OR", "Oromia"), +(2481, 1070, "SO", "Somali"), +(2482, 1070, "SN", "Southern Nations, Nationalities and Peoples"), +(2483, 1070, "TI", "Tigrai"), +-- (2484, 1075, "AL", "Ahvenanmasn laani"), +-- (2485, 1075, "ES", "Etela-Suomen laani"), +-- (2486, 1075, "IS", "Ita-Suomen lasni"), +-- (2487, 1075, "LL", "Lapin Laani"), +-- (2488, 1075, "LS", "Lansi-Suomen Laani"), +-- (2489, 1075, "OL", "Oulun Lasni"), +(2490, 1074, "E", "Eastern"), +(2491, 1074, "N", "Northern"), +(2492, 1074, "W", "Western"), +(2493, 1074, "R", "Rotuma"), +(2494, 1141, "TRK", "Chuuk"), +(2495, 1141, "KSA", "Kosrae"), +(2496, 1141, "PNI", "Pohnpei"), +(2497, 1141, "YAP", "Yap"), +(2498, 1076, "01", "Ain"), +(2499, 1076, "02", "Aisne"), +(2500, 1076, "03", "Allier"), +(2501, 1076, "04", "Alpes-de-Haute-Provence"), +(2502, 1076, "06", "Alpes-Maritimes"), +(2503, 1076, "07", "Ardèche"), +(2504, 1076, "08", "Ardennes"), +(2505, 1076, "09", "Ariège"), +(2506, 1076, "10", "Aube"), +(2507, 1076, "11", "Aude"), +(2508, 1076, "12", "Aveyron"), +(2509, 1076, "67", "Bas-Rhin"), +(2510, 1076, "13", "Bouches-du-Rhône"), +(2511, 1076, "14", "Calvados"), +(2512, 1076, "15", "Cantal"), +(2513, 1076, "16", "Charente"), +(2514, 1076, "17", "Charente-Maritime"), +(2515, 1076, "18", "Cher"), +(2516, 1076, "19", "Corrèze"), +(2517, 1076, "20A", "Corse-du-Sud"), +(2518, 1076, "21", "Côte-d\'Or"), +(2519, 1076, "22", "Côtes-d\'Armor"), +(2520, 1076, "23", "Creuse"), +(2521, 1076, "79", "Deux-Sèvres"), +(2522, 1076, "24", "Dordogne"), +(2523, 1076, "25", "Doubs"), +(2524, 1076, "26", "Drôme"), +(2525, 1076, "91", "Essonne"), +(2526, 1076, "27", "Eure"), +(2527, 1076, "28", "Eure-et-Loir"), +(2528, 1076, "29", "Finistère"), +(2529, 1076, "30", "Gard"), +(2530, 1076, "32", "Gers"), +(2531, 1076, "33", "Gironde"), +(2532, 1076, "68", "Haut-Rhin"), +(2533, 1076, "20B", "Haute-Corse"), +(2534, 1076, "31", "Haute-Garonne"), +(2535, 1076, "43", "Haute-Loire"), +(2536, 1076, "70", "Haute-Saône"), +(2537, 1076, "74", "Haute-Savoie"), +(2538, 1076, "87", "Haute-Vienne"), +(2539, 1076, "05", "Hautes-Alpes"), +(2540, 1076, "65", "Hautes-Pyrénées"), +(2541, 1076, "92", "Hauts-de-Seine"), +(2542, 1076, "34", "Hérault"), +(2543, 1076, "36", "Indre"), +(2544, 1076, "35", "Ille-et-Vilaine"), +(2545, 1076, "37", "Indre-et-Loire"), +(2546, 1076, "38", "Isère"), +(2547, 1076, "40", "Landes"), +(2548, 1076, "41", "Loir-et-Cher"), +(2549, 1076, "42", "Loire"), +(2550, 1076, "44", "Loire-Atlantique"), +(2551, 1076, "45", "Loiret"), +(2552, 1076, "46", "Lot"), +(2553, 1076, "47", "Lot-et-Garonne"), +(2554, 1076, "48", "Lozère"), +(2555, 1076, "49", "Maine-et-Loire"), +(2556, 1076, "50", "Manche"), +(2557, 1076, "51", "Marne"), +(2558, 1076, "53", "Mayenne"), +(2559, 1076, "54", "Meurthe-et-Moselle"), +(2560, 1076, "55", "Meuse"), +(2561, 1076, "56", "Morbihan"), +(2562, 1076, "57", "Moselle"), +(2563, 1076, "58", "Nièvre"), +(2564, 1076, "59", "Nord"), +(2565, 1076, "60", "Oise"), +(2566, 1076, "61", "Orne"), +(2567, 1076, "75", "Paris"), +(2568, 1076, "62", "Pas-de-Calais"), +(2569, 1076, "63", "Puy-de-Dôme"), +(2570, 1076, "64", "Pyrénées-Atlantiques"), +(2571, 1076, "66", "Pyrénées-Orientales"), +(2572, 1076, "69", "Rhône"), +(2573, 1076, "71", "Saône-et-Loire"), +(2574, 1076, "72", "Sarthe"), +(2575, 1076, "73", "Savoie"), +(2576, 1076, "77", "Seine-et-Marne"), +(2577, 1076, "76", "Seine-Maritime"), +(2578, 1076, "93", "Seine-Saint-Denis"), +(2579, 1076, "80", "Somme"), +(2580, 1076, "81", "Tarn"), +(2581, 1076, "82", "Tarn-et-Garonne"), +(2582, 1076, "95", "Val d\'Oise"), +(2583, 1076, "90", "Territoire de Belfort"), +(2584, 1076, "94", "Val-de-Marne"), +(2585, 1076, "83", "Var"), +(2586, 1076, "84", "Vaucluse"), +(2587, 1076, "85", "Vendée"), +(2588, 1076, "86", "Vienne"), +(2589, 1076, "88", "Vosges"), +(2590, 1076, "89", "Yonne"), +(2591, 1076, "78", "Yvelines"), +(2592, 1226, "ABE", "Aberdeen City"), +(2593, 1226, "ABD", "Aberdeenshire"), +(2594, 1226, "ANS", "Angus"), +(2595, 1226, "ANT", "Co Antrim"), +(2597, 1226, "AGB", "Argyll and Bute"), +(2598, 1226, "ARM", "Co Armagh"), +(2606, 1226, "BDF", "Bedfordshire"), +(2612, 1226, "BGW", "Gwent"), +(2620, 1226, "BST", "Bristol, City of"), +(2622, 1226, "BKM", "Buckinghamshire"), +(2626, 1226, "CAM", "Cambridgeshire"), +(2634, 1226, "CHS", "Cheshire"), +(2635, 1226, "CLK", "Clackmannanshire"), +(2639, 1226, "CON", "Cornwall"), +(2643, 1226, "CMA", "Cumbria"), +(2647, 1226, "DBY", "Derbyshire"), +(2648, 1226, "DRY", "Co Londonderry"), +(2649, 1226, "DEV", "Devon"), +(2651, 1226, "DOR", "Dorset"), +(2652, 1226, "DOW", "Co Down"), +(2654, 1226, "DGY", "Dumfries and Galloway"), +(2655, 1226, "DND", "Dundee City"), +(2657, 1226, "DUR", "County Durham"), +(2659, 1226, "EAY", "East Ayrshire"), +(2660, 1226, "EDU", "East Dunbartonshire"), +(2661, 1226, "ELN", "East Lothian"), +(2662, 1226, "ERW", "East Renfrewshire"), +(2663, 1226, "ERY", "East Riding of Yorkshire"), +(2664, 1226, "ESX", "East Sussex"), +(2665, 1226, "EDH", "Edinburgh, City of"), +(2666, 1226, "ELS", "Na h-Eileanan Siar"), +(2668, 1226, "ESS", "Essex"), +(2669, 1226, "FAL", "Falkirk"), +(2670, 1226, "FER", "Co Fermanagh"), +(2671, 1226, "FIF", "Fife"), +(2674, 1226, "GLG", "Glasgow City"), +(2675, 1226, "GLS", "Gloucestershire"), +(2678, 1226, "GWN", "Gwynedd"), +(2682, 1226, "HAM", "Hampshire"), +(2687, 1226, "HEF", "Herefordshire"), +(2688, 1226, "HRT", "Hertfordshire"), +(2689, 1226, "HED", "Highland"), +(2692, 1226, "IVC", "Inverclyde"), +(2694, 1226, "IOW", "Isle of Wight"), +(2699, 1226, "KEN", "Kent"), +(2705, 1226, "LAN", "Lancashire"), +(2709, 1226, "LEC", "Leicestershire"), +(2712, 1226, "LIN", "Lincolnshire"), +(2723, 1226, "MLN", "Midlothian"), +(2726, 1226, "MRY", "Moray"), +(2734, 1226, "NFK", "Norfolk"), +(2735, 1226, "NAY", "North Ayrshire"), +(2738, 1226, "NLK", "North Lanarkshire"), +(2742, 1226, "NYK", "North Yorkshire"), +(2743, 1226, "NTH", "Northamptonshire"), +(2744, 1226, "NBL", "Northumberland"), +(2746, 1226, "NTT", "Nottinghamshire"), +(2747, 1226, "OLD", "Oldham"), +(2748, 1226, "OMH", "Omagh"), +(2749, 1226, "ORR", "Orkney Islands"), +(2750, 1226, "OXF", "Oxfordshire"), +(2752, 1226, "PKN", "Perth and Kinross"), +(2757, 1226, "POW", "Powys"), +(2761, 1226, "RFW", "Renfrewshire"), +(2766, 1226, "RUT", "Rutland"), +(2770, 1226, "SCB", "Scottish Borders"), +(2773, 1226, "ZET", "Shetland Islands"), +(2774, 1226, "SHR", "Shropshire"), +(2777, 1226, "SOM", "Somerset"), +(2778, 1226, "SAY", "South Ayrshire"), +(2779, 1226, "SGC", "South Gloucestershire"), +(2780, 1226, "SLK", "South Lanarkshire"), +(2785, 1226, "STS", "Staffordshire"), +(2786, 1226, "STG", "Stirling"), +(2791, 1226, "SFK", "Suffolk"), +(2793, 1226, "SRY", "Surrey"), +(2804, 1226, "VGL", "Mid Glamorgan"), +(2811, 1226, "WAR", "Warwickshire"), +(2813, 1226, "WDU", "West Dunbartonshire"), +(2814, 1226, "WLN", "West Lothian"), +(2815, 1226, "WSX", "West Sussex"), +(2818, 1226, "WIL", "Wiltshire"), +(2823, 1226, "WOR", "Worcestershire"), +(2826, 1083, "AH", "Ashanti"), +(2827, 1083, "BA", "Brong-Ahafo"), +(2828, 1083, "AA", "Greater Accra"), +(2829, 1083, "UE", "Upper East"), +(2830, 1083, "UW", "Upper West"), +(2831, 1083, "TV", "Volta"), +(2832, 1213, "B", "Banjul"), +(2833, 1213, "L", "Lower River"), +(2834, 1213, "M", "MacCarthy Island"), +(2835, 1213, "N", "North Bank"), +(2836, 1213, "U", "Upper River"), +(2837, 1091, "BE", "Beyla"), +(2838, 1091, "BF", "Boffa"), +(2839, 1091, "BK", "Boke"), +(2840, 1091, "CO", "Coyah"), +(2841, 1091, "DB", "Dabola"), +(2842, 1091, "DL", "Dalaba"), +(2843, 1091, "DI", "Dinguiraye"), +(2844, 1091, "DU", "Dubreka"), +(2845, 1091, "FA", "Faranah"), +(2846, 1091, "FO", "Forecariah"), +(2847, 1091, "FR", "Fria"), +(2848, 1091, "GA", "Gaoual"), +(2849, 1091, "GU", "Guekedou"), +(2850, 1091, "KA", "Kankan"), +(2851, 1091, "KE", "Kerouane"), +(2852, 1091, "KD", "Kindia"), +(2853, 1091, "KS", "Kissidougou"), +(2854, 1091, "KB", "Koubia"), +(2855, 1091, "KN", "Koundara"), +(2856, 1091, "KO", "Kouroussa"), +(2857, 1091, "LA", "Labe"), +(2858, 1091, "LE", "Lelouma"), +(2859, 1091, "LO", "Lola"), +(2860, 1091, "MC", "Macenta"), +(2861, 1091, "ML", "Mali"), +(2862, 1091, "MM", "Mamou"), +(2863, 1091, "MD", "Mandiana"), +(2864, 1091, "NZ", "Nzerekore"), +(2865, 1091, "PI", "Pita"), +(2866, 1091, "SI", "Siguiri"), +(2867, 1091, "TE", "Telimele"), +(2868, 1091, "TO", "Tougue"), +(2869, 1091, "YO", "Yomou"), +(2870, 1067, "C", "Region Continental"), +(2871, 1067, "I", "Region Insular"), +(2872, 1067, "AN", "Annobon"), +(2873, 1067, "BN", "Bioko Norte"), +(2874, 1067, "BS", "Bioko Sur"), +(2875, 1067, "CS", "Centro Sur"), +(2876, 1067, "KN", "Kie-Ntem"), +(2877, 1067, "LI", "Litoral"), +(2878, 1067, "WN", "Wele-Nzas"), +(2879, 1085, "13", "Achaïa"), +(2880, 1085, "01", "Aitolia-Akarnania"), +(2881, 1085, "11", "Argolis"), +(2882, 1085, "12", "Arkadia"), +(2883, 1085, "31", "Arta"), +(2884, 1085, "A1", "Attiki"), +(2885, 1085, "64", "Chalkidiki"), +(2886, 1085, "94", "Chania"), +(2887, 1085, "85", "Chios"), +(2888, 1085, "81", "Dodekanisos"), +(2889, 1085, "52", "Drama"), +(2890, 1085, "71", "Evros"), +(2891, 1085, "05", "Evrytania"), +(2892, 1085, "04", "Evvoia"), +(2893, 1085, "63", "Florina"), +(2894, 1085, "07", "Fokis"), +(2895, 1085, "06", "Fthiotis"), +(2896, 1085, "51", "Grevena"), +(2897, 1085, "14", "Ileia"), +(2898, 1085, "53", "Imathia"), +(2899, 1085, "33", "Ioannina"), +(2900, 1085, "91", "Irakleion"), +(2901, 1085, "41", "Karditsa"), +(2902, 1085, "56", "Kastoria"), +(2903, 1085, "55", "Kavalla"), +(2904, 1085, "23", "Kefallinia"), +(2905, 1085, "22", "Kerkyra"), +(2906, 1085, "57", "Kilkis"), +(2907, 1085, "15", "Korinthia"), +(2908, 1085, "58", "Kozani"), +(2909, 1085, "82", "Kyklades"), +(2910, 1085, "16", "Lakonia"), +(2911, 1085, "42", "Larisa"), +(2912, 1085, "92", "Lasithion"), +(2913, 1085, "24", "Lefkas"), +(2914, 1085, "83", "Lesvos"), +(2915, 1085, "43", "Magnisia"), +(2916, 1085, "17", "Messinia"), +(2917, 1085, "59", "Pella"), +(2918, 1085, "34", "Preveza"), +(2919, 1085, "93", "Rethymnon"), +(2920, 1085, "73", "Rodopi"), +(2921, 1085, "84", "Samos"), +(2922, 1085, "62", "Serrai"), +(2923, 1085, "32", "Thesprotia"), +(2924, 1085, "54", "Thessaloniki"), +(2925, 1085, "44", "Trikala"), +(2926, 1085, "03", "Voiotia"), +(2927, 1085, "72", "Xanthi"), +(2928, 1085, "21", "Zakynthos"), +(2929, 1085, "69", "Agio Oros"), +(2930, 1090, "AV", "Alta Verapaz"), +(2931, 1090, "BV", "Baja Verapaz"), +(2932, 1090, "CM", "Chimaltenango"), +(2933, 1090, "CQ", "Chiquimula"), +(2934, 1090, "PR", "El Progreso"), +(2935, 1090, "ES", "Escuintla"), +(2936, 1090, "GU", "Guatemala"), +(2937, 1090, "HU", "Huehuetenango"), +(2938, 1090, "IZ", "Izabal"), +(2939, 1090, "JA", "Jalapa"), +(2940, 1090, "JU", "Jutiapa"), +(2941, 1090, "PE", "Peten"), +(2942, 1090, "QZ", "Quetzaltenango"), +(2943, 1090, "QC", "Quiche"), +(2944, 1090, "RE", "Retalhuleu"), +(2945, 1090, "SA", "Sacatepequez"), +(2946, 1090, "SM", "San Marcos"), +(2947, 1090, "SR", "Santa Rosa"), +(2948, 1090, "SO", "Sololá"), +(2949, 1090, "SU", "Suchitepequez"), +(2950, 1090, "TO", "Totonicapan"), +(2951, 1090, "ZA", "Zacapa"), +(2952, 1092, "BS", "Bissau"), +(2953, 1092, "BA", "Bafata"), +(2954, 1092, "BM", "Biombo"), +(2955, 1092, "BL", "Bolama"), +(2956, 1092, "CA", "Cacheu"), +(2957, 1092, "GA", "Gabu"), +(2958, 1092, "OI", "Oio"), +(2959, 1092, "QU", "Quloara"), +(2960, 1092, "TO", "Tombali S"), +(2961, 1093, "BA", "Barima-Waini"), +(2962, 1093, "CU", "Cuyuni-Mazaruni"), +(2963, 1093, "DE", "Demerara-Mahaica"), +(2964, 1093, "EB", "East Berbice-Corentyne"), +(2965, 1093, "ES", "Essequibo Islands-West Demerara"), +(2966, 1093, "MA", "Mahaica-Berbice"), +(2967, 1093, "PM", "Pomeroon-Supenaam"), +(2968, 1093, "PT", "Potaro-Siparuni"), +(2969, 1093, "UD", "Upper Demerara-Berbice"), +(2970, 1093, "UT", "Upper Takutu-Upper Essequibo"), +(2971, 1097, "AT", "Atlantida"), +(2972, 1097, "CL", "Colon"), +(2973, 1097, "CM", "Comayagua"), +(2974, 1097, "CP", "Copan"), +(2975, 1097, "CR", "Cortes"), +(2976, 1097, "CH", "Choluteca"), +(2977, 1097, "EP", "El Paraiso"), +(2978, 1097, "FM", "Francisco Morazan"), +(2979, 1097, "GD", "Gracias a Dios"), +(2980, 1097, "IN", "Intibuca"), +(2981, 1097, "IB", "Islas de la Bahia"), +(2982, 1097, "LE", "Lempira"), +(2983, 1097, "OC", "Ocotepeque"), +(2984, 1097, "OL", "Olancho"), +(2985, 1097, "SB", "Santa Barbara"), +(2986, 1097, "VA", "Valle"), +(2987, 1097, "YO", "Yoro"), +(2988, 1055, "07", "Bjelovarsko-bilogorska zupanija"), +(2989, 1055, "12", "Brodsko-posavska zupanija"), +(2990, 1055, "19", "Dubrovacko-neretvanska zupanija"), +(2991, 1055, "18", "Istarska zupanija"), +(2992, 1055, "04", "Karlovacka zupanija"), +(2993, 1055, "06", "Koprivnickco-krizevacka zupanija"), +(2994, 1055, "02", "Krapinako-zagorska zupanija"), +(2995, 1055, "09", "Licko-senjska zupanija"), +(2996, 1055, "20", "Medimurska zupanija"), +(2997, 1055, "14", "Osjecko-baranjska zupanija"), +(2998, 1055, "11", "Pozesko-slavonska zupanija"), +(2999, 1055, "08", "Primorsko-goranska zupanija"), +(3000, 1055, "03", "Sisacko-moelavacka Iupanija"), +(3001, 1055, "17", "Splitako-dalmatinska zupanija"), +(3002, 1055, "15", "Sibenako-kninska zupanija"), +(3003, 1055, "05", "Varaidinska zupanija"), +(3004, 1055, "10", "VirovitiEko-podravska zupanija"), +(3005, 1055, "16", "VuRovarako-srijemska zupanija"), +(3006, 1055, "13", "Zadaraka"), +(3007, 1055, "01", "Zagrebacka zupanija"), +(3008, 1094, "GA", "Grande-Anse"), +(3009, 1094, "NE", "Nord-Est"), +(3010, 1094, "NO", "Nord-Ouest"), +(3011, 1094, "OU", "Ouest"), +(3012, 1094, "SD", "Sud"), +(3013, 1094, "SE", "Sud-Est"), +(3014, 1099, "BU", "Budapest"), +(3015, 1099, "BK", "Bács-Kiskun"), +(3016, 1099, "BA", "Baranya"), +(3017, 1099, "BE", "Békés"), +(3018, 1099, "BZ", "Borsod-Abaúj-Zemplén"), +(3019, 1099, "CS", "Csongrád"), +(3020, 1099, "FE", "Fejér"), +(3021, 1099, "GS", "GyÅ‘r-Moson-Sopron"), +(3022, 1099, "HB", "Hajdu-Bihar"), +(3023, 1099, "HE", "Heves"), +(3024, 1099, "JN", "Jász-Nagykun-Szolnok"), +(3025, 1099, "KE", "Komárom-Esztergom"), +(3026, 1099, "NO", "Nográd"), +(3027, 1099, "PE", "Pest"), +(3028, 1099, "SO", "Somogy"), +(3029, 1099, "SZ", "Szabolcs-Szatmár-Bereg"), +(3030, 1099, "TO", "Tolna"), +(3031, 1099, "VA", "Vas"), +(3032, 1099, "VE", "Veszprém"), +(3033, 1099, "ZA", "Zala"), +(3034, 1099, "BC", "Békéscsaba"), +(3035, 1099, "DE", "Debrecen"), +(3036, 1099, "DU", "Dunaújváros"), +(3037, 1099, "EG", "Eger"), +(3038, 1099, "GY", "GyÅ‘r"), +(3039, 1099, "HV", "HódmezÅ‘vásárhely"), +(3040, 1099, "KV", "Kaposvár"), +(3041, 1099, "KM", "Kecskemét"), +(3042, 1099, "MI", "Miskolc"), +(3043, 1099, "NK", "Nagykanizsa"), +(3044, 1099, "NY", "Nyiregyháza"), +(3045, 1099, "PS", "Pécs"), +(3046, 1099, "ST", "Salgótarján"), +(3047, 1099, "SN", "Sopron"), +(3048, 1099, "SD", "Szeged"), +(3049, 1099, "SF", "Székesfehérvár"), +(3050, 1099, "SS", "Szekszárd"), +(3051, 1099, "SK", "Szolnok"), +(3052, 1099, "SH", "Szombathely"), +(3053, 1099, "TB", "Tatabánya"), +(3054, 1099, "ZE", "Zalaegerszeg"), +(3055, 1102, "BA", "Bali"), +(3056, 1102, "BB", "Kepulauan Bangka Belitung"), +(3057, 1102, "BT", "Banten"), +(3058, 1102, "BE", "Bengkulu"), +(3059, 1102, "GO", "Gorontalo"), +(3060, 1102, "PB", "Papua Barat"), +(3061, 1102, "JA", "Jambi"), +(3062, 1102, "JB", "Jawa Barat"), +(3063, 1102, "JT", "Jawa Tengah"), +(3064, 1102, "JI", "Jawa Timur"), +(3065, 1102, "KB", "Kalimantan Barat"), +(3066, 1102, "KI", "Kalimantan Timur"), +(3067, 1102, "KS", "Kalimantan Selatan"), +(3068, 1102, "KR", "Kepulauan Riau"), +(3069, 1102, "LA", "Lampung"), +(3070, 1102, "MA", "Maluku"), +(3071, 1102, "MU", "Maluku Utara"), +(3072, 1102, "NB", "Nusa Tenggara Barat"), +(3073, 1102, "NT", "Nusa Tenggara Timur"), +(3074, 1102, "PA", "Papua"), +(3075, 1102, "RI", "Riau"), +(3076, 1102, "SN", "Sulawesi Selatan"), +(3077, 1102, "ST", "Sulawesi Tengah"), +(3078, 1102, "SG", "Sulawesi Tenggara"), +(3079, 1102, "SA", "Sulawesi Utara"), +(3080, 1102, "SB", "Sumatra Barat"), +(3081, 1102, "SS", "Sumatra Selatan"), +(3082, 1102, "SU", "Sumatera Utara"), +(3083, 1102, "JK", "DKI Jakarta"), +(3084, 1102, "AC", "Aceh"), +(3085, 1102, "YO", "DI Yogyakarta"), +(3086, 1105, "C", "Cork"), +(3087, 1105, "CE", "Clare"), +(3088, 1105, "CN", "Cavan"), +(3089, 1105, "CW", "Carlow"), +(3090, 1105, "D", "Dublin"), +(3091, 1105, "DL", "Donegal"), +(3092, 1105, "G", "Galway"), +(3093, 1105, "KE", "Kildare"), +(3094, 1105, "KK", "Kilkenny"), +(3095, 1105, "KY", "Kerry"), +(3096, 1105, "LD", "Longford"), +(3097, 1105, "LH", "Louth"), +(3098, 1105, "LK", "Limerick"), +(3099, 1105, "LM", "Leitrim"), +(3100, 1105, "LS", "Laois"), +(3101, 1105, "MH", "Meath"), +(3102, 1105, "MN", "Monaghan"), +(3103, 1105, "MO", "Mayo"), +(3104, 1105, "OY", "Offaly"), +(3105, 1105, "RN", "Roscommon"), +(3106, 1105, "SO", "Sligo"), +(3107, 1105, "TA", "Tipperary"), +(3108, 1105, "WD", "Waterford"), +(3109, 1105, "WH", "Westmeath"), +(3110, 1105, "WW", "Wicklow"), +(3111, 1105, "WX", "Wexford"), +(3112, 1106, "D", "HaDarom"), +(3113, 1106, "M", "HaMerkaz"), +(3114, 1106, "Z", "HaZafon"), +(3115, 1106, "HA", "Haifa"), +(3116, 1106, "TA", "Tel-Aviv"), +(3117, 1106, "JM", "Jerusalem"), +(3118, 1104, "AN", "Al Anbar"), +(3119, 1104, "BA", "Al Ba,rah"), +(3120, 1104, "MU", "Al Muthanna"), +(3121, 1104, "QA", "Al Qadisiyah"), +(3122, 1104, "NA", "An Najef"), +(3123, 1104, "AR", "Arbil"), +(3124, 1104, "SW", "As Sulaymaniyah"), +(3125, 1104, "TS", "At Ta\'mim"), +(3126, 1104, "BB", "Babil"), +(3127, 1104, "BG", "Baghdad"), +(3128, 1104, "DA", "Dahuk"), +(3129, 1104, "DQ", "Dhi Qar"), +(3130, 1104, "DI", "Diyala"), +(3131, 1104, "KA", "Karbala\'"), +(3132, 1104, "MA", "Maysan"), +(3133, 1104, "NI", "Ninawa"), +(3134, 1104, "SD", "Salah ad Din"), +(3135, 1104, "WA", "Wasit"), +(3136, 1103, "03", "Ardabil"), +(3137, 1103, "02", "Azarbayjan-e Gharbi"), +(3138, 1103, "01", "Azarbayjan-e Sharqi"), +(3139, 1103, "06", "Bushehr"), +(3140, 1103, "08", "Chahar Mahall va Bakhtiari"), +(3141, 1103, "04", "Esfahan"), +(3142, 1103, "14", "Fars"), +(3143, 1103, "19", "Gilan"), +(3144, 1103, "27", "Golestan"), +(3145, 1103, "24", "Hamadan"), +(3146, 1103, "23", "Hormozgan"), +(3147, 1103, "05", "Iiam"), +(3148, 1103, "15", "Kerman"), +(3149, 1103, "17", "Kermanshah"), +(3150, 1103, "09", "Khorasan"), +(3151, 1103, "10", "Khuzestan"), +(3152, 1103, "18", "Kohjiluyeh va Buyer Ahmad"), +(3153, 1103, "16", "Kordestan"), +(3154, 1103, "20", "Lorestan"), +(3155, 1103, "22", "Markazi"), +(3156, 1103, "21", "Mazandaran"), +(3157, 1103, "28", "Qazvin"), +(3158, 1103, "26", "Qom"), +(3159, 1103, "12", "Semnan"), +(3160, 1103, "13", "Sistan va Baluchestan"), +(3161, 1103, "07", "Tehran"), +(3162, 1103, "25", "Yazd"), +(3163, 1103, "11", "Zanjan"), +(3164, 1100, "7", "Austurland"), +(3165, 1100, "1", "Hofuoborgarsvaeoi utan Reykjavikur"), +(3166, 1100, "6", "Norourland eystra"), +(3167, 1100, "5", "Norourland vestra"), +(3168, 1100, "0", "Reykjavik"), +(3169, 1100, "8", "Suourland"), +(3170, 1100, "2", "Suournes"), +(3171, 1100, "4", "Vestfirolr"), +(3172, 1100, "3", "Vesturland"), +(3173, 1107, "AG", "Agrigento"), +(3174, 1107, "AL", "Alessandria"), +(3175, 1107, "AN", "Ancona"), +(3176, 1107, "AO", "Aosta"), +(3177, 1107, "AR", "Arezzo"), +(3178, 1107, "AP", "Ascoli Piceno"), +(3179, 1107, "AT", "Asti"), +(3180, 1107, "AV", "Avellino"), +(3181, 1107, "BA", "Bari"), +(3182, 1107, "BL", "Belluno"), +(3183, 1107, "BN", "Benevento"), +(3184, 1107, "BG", "Bergamo"), +(3185, 1107, "BI", "Biella"), +(3186, 1107, "BO", "Bologna"), +(3187, 1107, "BZ", "Bolzano"), +(3188, 1107, "BS", "Brescia"), +(3189, 1107, "BR", "Brindisi"), +(3190, 1107, "CA", "Cagliari"), +(3191, 1107, "CL", "Caltanissetta"), +(3192, 1107, "CB", "Campobasso"), +(3193, 1107, "CE", "Caserta"), +(3194, 1107, "CT", "Catania"), +(3195, 1107, "CZ", "Catanzaro"), +(3196, 1107, "CH", "Chieti"), +(3197, 1107, "CO", "Como"), +(3198, 1107, "CS", "Cosenza"), +(3199, 1107, "CR", "Cremona"), +(3200, 1107, "KR", "Crotone"), +(3201, 1107, "CN", "Cuneo"), +(3202, 1107, "EN", "Enna"), +(3203, 1107, "FE", "Ferrara"), +(3204, 1107, "FI", "Firenze"), +(3205, 1107, "FG", "Foggia"), +(3206, 1107, "FC", "Forlì-Cesena"), +(3207, 1107, "FR", "Frosinone"), +(3208, 1107, "GE", "Genova"), +(3209, 1107, "GO", "Gorizia"), +(3210, 1107, "GR", "Grosseto"), +(3211, 1107, "IM", "Imperia"), +(3212, 1107, "IS", "Isernia"), +(3213, 1107, "AQ", "L\'Aquila"), +(3214, 1107, "SP", "La Spezia"), +(3215, 1107, "LT", "Latina"), +(3216, 1107, "LE", "Lecce"), +(3217, 1107, "LC", "Lecco"), +(3218, 1107, "LI", "Livorno"), +(3219, 1107, "LO", "Lodi"), +(3220, 1107, "LU", "Lucca"), +(3221, 1107, "MC", "Macerata"), +(3222, 1107, "MN", "Mantova"), +(3223, 1107, "MS", "Massa-Carrara"), +(3224, 1107, "MT", "Matera"), +(3225, 1107, "ME", "Messina"), +(3226, 1107, "MI", "Milano"), +(3227, 1107, "MO", "Modena"), +(3228, 1107, "NA", "Napoli"), +(3229, 1107, "NO", "Novara"), +(3230, 1107, "NU", "Nuoro"), +(3231, 1107, "OR", "Oristano"), +(3232, 1107, "PD", "Padova"), +(3233, 1107, "PA", "Palermo"), +(3234, 1107, "PR", "Parma"), +(3235, 1107, "PV", "Pavia"), +(3236, 1107, "PG", "Perugia"), +(3237, 1107, "PU", "Pesaro e Urbino"), +(3238, 1107, "PE", "Pescara"), +(3239, 1107, "PC", "Piacenza"), +(3240, 1107, "PI", "Pisa"), +(3241, 1107, "PT", "Pistoia"), +(3242, 1107, "PN", "Pordenone"), +(3243, 1107, "PZ", "Potenza"), +(3244, 1107, "PO", "Prato"), +(3245, 1107, "RG", "Ragusa"), +(3246, 1107, "RA", "Ravenna"), +(3247, 1107, "RC", "Reggio Calabria"), +(3248, 1107, "RE", "Reggio Emilia"), +(3249, 1107, "RI", "Rieti"), +(3250, 1107, "RN", "Rimini"), +(3251, 1107, "RM", "Roma"), +(3252, 1107, "RO", "Rovigo"), +(3253, 1107, "SA", "Salerno"), +(3254, 1107, "SS", "Sassari"), +(3255, 1107, "SV", "Savona"), +(3256, 1107, "SI", "Siena"), +(3257, 1107, "SR", "Siracusa"), +(3258, 1107, "SO", "Sondrio"), +(3259, 1107, "TA", "Taranto"), +(3260, 1107, "TE", "Teramo"), +(3261, 1107, "TR", "Terni"), +(3262, 1107, "TO", "Torino"), +(3263, 1107, "TP", "Trapani"), +(3264, 1107, "TN", "Trento"), +(3265, 1107, "TV", "Treviso"), +(3266, 1107, "TS", "Trieste"), +(3267, 1107, "UD", "Udine"), +(3268, 1107, "VA", "Varese"), +(3269, 1107, "VE", "Venezia"), +(3270, 1107, "VB", "Verbano-Cusio-Ossola"), +(3271, 1107, "VC", "Vercelli"), +(3272, 1107, "VR", "Verona"), +(3273, 1107, "VV", "Vibo Valentia"), +(3274, 1107, "VI", "Vicenza"), +(3275, 1107, "VT", "Viterbo"), +(3276, 1109, "23", "Aichi"), +(3277, 1109, "05", "Akita"), +(3278, 1109, "02", "Aomori"), +(3279, 1109, "12", "Chiba"), +(3280, 1109, "38", "Ehime"), +(3281, 1109, "18", "Fukui"), +(3282, 1109, "40", "Fukuoka"), +(3283, 1109, "07", "Fukusima"), +(3284, 1109, "21", "Gifu"), +(3285, 1109, "10", "Gunma"), +(3286, 1109, "34", "Hiroshima"), +(3287, 1109, "01", "Hokkaido"), +(3288, 1109, "28", "Hyogo"), +(3289, 1109, "08", "Ibaraki"), +(3290, 1109, "17", "Ishikawa"), +(3291, 1109, "03", "Iwate"), +(3292, 1109, "37", "Kagawa"), +(3293, 1109, "46", "Kagoshima"), +(3294, 1109, "14", "Kanagawa"), +(3295, 1109, "39", "Kochi"), +(3296, 1109, "43", "Kumamoto"), +(3297, 1109, "26", "Kyoto"), +(3298, 1109, "24", "Mie"), +(3299, 1109, "04", "Miyagi"), +(3300, 1109, "45", "Miyazaki"), +(3301, 1109, "20", "Nagano"), +(3302, 1109, "42", "Nagasaki"), +(3303, 1109, "29", "Nara"), +(3304, 1109, "15", "Niigata"), +(3305, 1109, "44", "Oita"), +(3306, 1109, "33", "Okayama"), +(3307, 1109, "47", "Okinawa"), +(3308, 1109, "27", "Osaka"), +(3309, 1109, "41", "Saga"), +(3310, 1109, "11", "Saitama"), +(3311, 1109, "25", "Shiga"), +(3312, 1109, "32", "Shimane"), +(3313, 1109, "22", "Shizuoka"), +(3314, 1109, "09", "Tochigi"), +(3315, 1109, "36", "Tokushima"), +(3316, 1109, "13", "Tokyo"), +(3317, 1109, "31", "Tottori"), +(3318, 1109, "16", "Toyama"), +(3319, 1109, "30", "Wakayama"), +(3320, 1109, "06", "Yamagata"), +(3321, 1109, "35", "Yamaguchi"), +(3322, 1109, "19", "Yamanashi"), +(3323, 1108, "CN", "Clarendon"), +(3324, 1108, "HR", "Hanover"), +(3325, 1108, "KN", "Kingston"), +(3326, 1108, "PD", "Portland"), +(3327, 1108, "AW", "Saint Andrew"), +(3328, 1108, "AN", "Saint Ann"), +(3329, 1108, "CE", "Saint Catherine"), +(3330, 1108, "EH", "Saint Elizabeth"), +(3331, 1108, "JS", "Saint James"), +(3332, 1108, "MY", "Saint Mary"), +(3333, 1108, "TS", "Saint Thomas"), +(3334, 1108, "TY", "Trelawny"), +(3335, 1108, "WD", "Westmoreland"), +(3336, 1110, "AJ", "Ajln"), +(3337, 1110, "AQ", "Al \'Aqaba"), +(3338, 1110, "BA", "Al Balqa\'"), +(3339, 1110, "KA", "Al Karak"), +(3340, 1110, "MA", "Al Mafraq"), +(3341, 1110, "AM", "Amman"), +(3342, 1110, "AT", "At Tafilah"), +(3343, 1110, "AZ", "Az Zarga"), +(3344, 1110, "JR", "Irbid"), +(3345, 1110, "JA", "Jarash"), +(3346, 1110, "MN", "Ma\'an"), +(3347, 1110, "MD", "Madaba"), + +-- CRM-20062 Outdated provinces for Kenya removed . + +(3353, 1117, "GB", "Bishkek"), +(3354, 1117, "B", "Batken"), +(3355, 1117, "C", "Chu"), +(3356, 1117, "J", "Jalal-Abad"), +(3357, 1117, "N", "Naryn"), +(3358, 1117, "O", "Osh"), +(3359, 1117, "T", "Talas"), +(3360, 1117, "Y", "Ysyk-Kol"), +(3361, 1037, "23", "Krong Kaeb"), +(3362, 1037, "24", "Krong Pailin"), +(3363, 1037, "18", "Xrong Preah Sihanouk"), +(3364, 1037, "12", "Phnom Penh"), +(3365, 1037, "2", "Baat Dambang"), +(3366, 1037, "1", "Banteay Mean Chey"), +(3367, 1037, "3", "Rampong Chaam"), +(3368, 1037, "4", "Kampong Chhnang"), +(3369, 1037, "5", "Kampong Spueu"), +(3370, 1037, "6", "Kampong Thum"), +(3371, 1037, "7", "Kampot"), +(3372, 1037, "8", "Kandaal"), +(3373, 1037, "9", "Kach Kong"), +(3374, 1037, "10", "Krachoh"), +(3375, 1037, "11", "Mondol Kiri"), +(3376, 1037, "22", "Otdar Mean Chey"), +(3377, 1037, "15", "Pousaat"), +(3378, 1037, "13", "Preah Vihear"), +(3379, 1037, "14", "Prey Veaeng"), +(3380, 1037, "16", "Rotanak Kiri"), +(3381, 1037, "17", "Siem Reab"), +(3382, 1037, "19", "Stueng Traeng"), +(3383, 1037, "20", "Svaay Rieng"), +(3384, 1037, "21", "Taakaev"), +(3385, 1113, "G", "Gilbert Islands"), +(3386, 1113, "L", "Line Islands"), +(3387, 1113, "P", "Phoenix Islands"), +(3388, 1049, "A", "Anjouan Ndzouani"), +(3389, 1049, "G", "Grande Comore Ngazidja"), +(3390, 1049, "M", "Moheli Moili"), +(3391, 1114, "KAE", "Kaesong-si"), +(3392, 1114, "NAM", "Nampo-si"), +(3393, 1114, "PYO", "Pyongyang-ai"), +(3394, 1114, "CHA", "Chagang-do"), +(3395, 1114, "HAB", "Hamgyongbuk-do"), +(3396, 1114, "HAN", "Hamgyongnam-do"), +(3397, 1114, "HWB", "Hwanghaebuk-do"), +(3398, 1114, "HWN", "Hwanghaenam-do"), +(3399, 1114, "KAN", "Kangwon-do"), +(3400, 1114, "PYB", "Pyonganbuk-do"), +(3401, 1114, "PYN", "Pyongannam-do"), +(3402, 1114, "YAN", "Yanggang-do"), +(3403, 1114, "NAJ", "Najin Sonbong-si"), +(3404, 1115, "11", "Seoul Teugbyeolsi"), +(3405, 1115, "26", "Busan Gwang\'yeogsi"), +(3406, 1115, "27", "Daegu Gwang\'yeogsi"), +(3407, 1115, "30", "Daejeon Gwang\'yeogsi"), +(3408, 1115, "29", "Gwangju Gwang\'yeogsi"), +(3409, 1115, "28", "Incheon Gwang\'yeogsi"), +(3410, 1115, "31", "Ulsan Gwang\'yeogsi"), +(3411, 1115, "43", "Chungcheongbugdo"), +(3412, 1115, "44", "Chungcheongnamdo"), +(3413, 1115, "42", "Gang\'weondo"), +(3414, 1115, "41", "Gyeonggido"), +(3415, 1115, "47", "Gyeongsangbugdo"), +(3416, 1115, "48", "Gyeongsangnamdo"), +(3417, 1115, "49", "Jejudo"), +(3418, 1115, "45", "Jeonrabugdo"), +(3419, 1115, "46", "Jeonranamdo"), +(3420, 1116, "AH", "Al Ahmadi"), +(3421, 1116, "FA", "Al Farwanlyah"), +(3422, 1116, "JA", "Al Jahrah"), +(3423, 1116, "KU", "Al Kuwayt"), +(3424, 1116, "HA", "Hawalli"), +(3425, 1111, "ALA", "Almaty"), +(3426, 1111, "AST", "Astana"), +(3427, 1111, "ALM", "Almaty oblysy"), +(3428, 1111, "AKM", "Aqmola oblysy"), +(3429, 1111, "AKT", "Aqtobe oblysy"), +(3430, 1111, "ATY", "Atyrau oblyfiy"), +(3431, 1111, "ZAP", "Batys Quzaqstan oblysy"), +(3432, 1111, "MAN", "Mangghystau oblysy"), +(3433, 1111, "YUZ", "Ongtustik Quzaqstan oblysy"), +(3434, 1111, "PAV", "Pavlodar oblysy"), +(3435, 1111, "KAR", "Qaraghandy oblysy"), +(3436, 1111, "KUS", "Qostanay oblysy"), +(3437, 1111, "KZY", "Qyzylorda oblysy"), +(3438, 1111, "VOS", "Shyghys Quzaqstan oblysy"), +(3439, 1111, "SEV", "Soltustik Quzaqstan oblysy"), +(3440, 1111, "ZHA", "Zhambyl oblysy Zhambylskaya oblast\'"), +(3441, 1118, "VT", "Vientiane"), +(3442, 1118, "AT", "Attapu"), +(3443, 1118, "BK", "Bokeo"), +(3444, 1118, "BL", "Bolikhamxai"), +(3445, 1118, "CH", "Champasak"), +(3446, 1118, "HO", "Houaphan"), +(3447, 1118, "KH", "Khammouan"), +(3448, 1118, "LM", "Louang Namtha"), +(3449, 1118, "LP", "Louangphabang"), +(3450, 1118, "OU", "Oudomxai"), +(3451, 1118, "PH", "Phongsali"), +(3452, 1118, "SL", "Salavan"), +(3453, 1118, "SV", "Savannakhet"), +(3454, 1118, "XA", "Xaignabouli"), +(3455, 1118, "XN", "Xiasomboun"), +(3456, 1118, "XE", "Xekong"), +(3457, 1118, "XI", "Xiangkhoang"), +(3458, 1120, "BA", "Beirut"), +(3459, 1120, "BI", "Beqaa"), +(3460, 1120, "JL", "Mount Lebanon"), +(3461, 1120, "AS", "North Lebanon"), +(3462, 1120, "JA", "South Lebanon"), +(3463, 1120, "NA", "Nabatieh"), +(3464, 1199, "52", "Ampara"), +(3465, 1199, "71", "Anuradhapura"), +(3466, 1199, "81", "Badulla"), +(3467, 1199, "51", "Batticaloa"), +(3468, 1199, "11", "Colombo"), +(3469, 1199, "31", "Galle"), +(3470, 1199, "12", "Gampaha"), +(3471, 1199, "33", "Hambantota"), +(3472, 1199, "41", "Jaffna"), +(3473, 1199, "13", "Kalutara"), +(3474, 1199, "21", "Kandy"), +(3475, 1199, "92", "Kegalla"), +(3476, 1199, "42", "Kilinochchi"), +(3477, 1199, "61", "Kurunegala"), +(3478, 1199, "43", "Mannar"), +(3479, 1199, "22", "Matale"), +(3480, 1199, "32", "Matara"), +(3481, 1199, "82", "Monaragala"), +(3482, 1199, "45", "Mullaittivu"), +(3483, 1199, "23", "Nuwara Eliya"), +(3484, 1199, "72", "Polonnaruwa"), +(3485, 1199, "62", "Puttalum"), +(3486, 1199, "91", "Ratnapura"), +(3487, 1199, "53", "Trincomalee"), +(3488, 1199, "44", "VavunLya"), +(3489, 1122, "BM", "Bomi"), +(3490, 1122, "BG", "Bong"), +(3491, 1122, "GB", "Grand Basaa"), +(3492, 1122, "CM", "Grand Cape Mount"), +(3493, 1122, "GG", "Grand Gedeh"), +(3494, 1122, "GK", "Grand Kru"), +(3495, 1122, "LO", "Lofa"), +(3496, 1122, "MG", "Margibi"), +(3497, 1122, "MY", "Maryland"), +(3498, 1122, "MO", "Montserrado"), +(3499, 1122, "NI", "Nimba"), +(3500, 1122, "RI", "Rivercess"), +(3501, 1122, "SI", "Sinoe"), +(3502, 1121, "D", "Berea"), +(3503, 1121, "B", "Butha-Buthe"), +(3504, 1121, "C", "Leribe"), +(3505, 1121, "E", "Mafeteng"), +(3506, 1121, "A", "Maseru"), +(3507, 1121, "F", "Mohale\'s Hoek"), +(3508, 1121, "J", "Mokhotlong"), +(3509, 1121, "H", "Qacha\'s Nek"), +(3510, 1121, "G", "Quthing"), +(3511, 1121, "K", "Thaba-Tseka"), +(3512, 1125, "AL", "Alytaus Apskritis"), +(3513, 1125, "KU", "Kauno Apskritis"), +(3514, 1125, "KL", "KlaipÄ—dos Apskritis"), +(3515, 1125, "MR", "MarijampolÄ—s Apskritis"), +(3516, 1125, "PN", "Panevėžio Apskritis"), +(3517, 1125, "SA", "Å iaulių Apskritis"), +(3518, 1125, "TA", "TauragÄ—s Apskritis"), +(3519, 1125, "TE", "TelÅ¡ių Apskritis"), +(3520, 1125, "UT", "Utenos Apskritis"), +(3521, 1125, "VL", "Vilniaus Apskritis"), +(3522, 1126, "D", "Diekirch"), +(3523, 1126, "G", "GreveNmacher"), +(3550, 1119, "DGV", "Daugavpils"), +(3551, 1119, "JEL", "Jelgava"), +(3552, 1119, "JUR", "JÅ«rmala"), +(3553, 1119, "LPX", "LiepÄja"), +(3554, 1119, "REZ", "RÄ“zekne"), +(3555, 1119, "RIX", "RÄ«ga"), +(3556, 1119, "VEN", "Ventspils"), +(3557, 1123, "AJ", "AjdÄbiyÄ"), +(3558, 1123, "BU", "Al BuÅ£nÄn"), +(3559, 1123, "HZ", "Al HizÄm al Akhdar"), +(3560, 1123, "JA", "Al Jabal al Akhdar"), +(3561, 1123, "JI", "Al JifÄrah"), +(3562, 1123, "JU", "Al Jufrah"), +(3563, 1123, "KF", "Al Kufrah"), +(3564, 1123, "MJ", "Al Marj"), +(3565, 1123, "MB", "Al Marqab"), +(3566, 1123, "QT", "Al QaÅ£rÅ«n"), +(3567, 1123, "QB", "Al Qubbah"), +(3568, 1123, "WA", "Al WÄhah"), +(3569, 1123, "NQ", "An NuqaÅ£ al Khams"), +(3570, 1123, "SH", "Ash ShÄÅ£i\'"), +(3571, 1123, "ZA", "Az ZÄwiyah"), +(3572, 1123, "BA", "BanghÄzÄ«"), +(3573, 1123, "BW", "BanÄ« WalÄ«d"), +(3574, 1123, "DR", "Darnah"), +(3575, 1123, "GD", "GhadÄmis"), +(3576, 1123, "GR", "GharyÄn"), +(3577, 1123, "GT", "GhÄt"), +(3578, 1123, "JB", "JaghbÅ«b"), +(3579, 1123, "MI", "MiÅŸrÄtah"), +(3580, 1123, "MZ", "Mizdah"), +(3581, 1123, "MQ", "Murzuq"), +(3582, 1123, "NL", "NÄlÅ«t"), +(3583, 1123, "SB", "SabhÄ"), +(3584, 1123, "SS", "ÅžabrÄtah ÅžurmÄn"), +(3585, 1123, "SR", "Surt"), +(3586, 1123, "TN", "TÄjÅ«rÄ\' wa an NawÄhÄ« al ArbÄh"), +(3587, 1123, "TB", "Å¢arÄbulus"), +(3588, 1123, "TM", "TarhÅ«nah-MasallÄtah"), +(3589, 1123, "WD", "WÄdÄ« al hayÄt"), +(3590, 1123, "YJ", "Yafran-JÄdÅ«"), +(3591, 1146, "AGD", "Agadir"), +(3592, 1146, "BAH", "Aït Baha"), +(3593, 1146, "MEL", "Aït Melloul"), +(3594, 1146, "HAO", "Al Haouz"), +(3595, 1146, "HOC", "Al Hoceïma"), +(3596, 1146, "ASZ", "Assa-Zag"), +(3597, 1146, "AZI", "Azilal"), +(3598, 1146, "BEM", "Beni Mellal"), +(3599, 1146, "BES", "Ben Sllmane"), +(3600, 1146, "BER", "Berkane"), +(3601, 1146, "BOD", "Boujdour"), +(3602, 1146, "BOM", "Boulemane"), +(3603, 1146, "CAS", "Casablanca [Dar el Beïda]"), +(3604, 1146, "CHE", "Chefchaouene"), +(3605, 1146, "CHI", "Chichaoua"), +(3606, 1146, "HAJ", "El Hajeb"), +(3607, 1146, "JDI", "El Jadida"), +(3608, 1146, "ERR", "Errachidia"), +(3609, 1146, "ESI", "Essaouira"), +(3610, 1146, "ESM", "Es Smara"), +(3611, 1146, "FES", "Fès"), +(3612, 1146, "FIG", "Figuig"), +(3613, 1146, "GUE", "Guelmim"), +(3614, 1146, "IFR", "Ifrane"), +(3615, 1146, "JRA", "Jerada"), +(3616, 1146, "KES", "Kelaat Sraghna"), +(3617, 1146, "KEN", "Kénitra"), +(3618, 1146, "KHE", "Khemisaet"), +(3619, 1146, "KHN", "Khenifra"), +(3620, 1146, "KHO", "Khouribga"), +(3621, 1146, "LAA", "Laâyoune (EH)"), +(3622, 1146, "LAP", "Larache"), +(3623, 1146, "MAR", "Marrakech"), +(3624, 1146, "MEK", "Meknsès"), +(3625, 1146, "NAD", "Nador"), +(3626, 1146, "OUA", "Ouarzazate"), +(3627, 1146, "OUD", "Oued ed Dahab (EH)"), +(3628, 1146, "OUJ", "Oujda"), +(3629, 1146, "RBA", "Rabat-Salé"), +(3630, 1146, "SAF", "Safi"), +(3631, 1146, "SEF", "Sefrou"), +(3632, 1146, "SET", "Settat"), +(3633, 1146, "SIK", "Sidl Kacem"), +(3634, 1146, "TNG", "Tanger"), +(3635, 1146, "TNT", "Tan-Tan"), +(3636, 1146, "TAO", "Taounate"), +(3637, 1146, "TAR", "Taroudannt"), +(3638, 1146, "TAT", "Tata"), +(3639, 1146, "TAZ", "Taza"), +(3640, 1146, "TET", "Tétouan"), +(3641, 1146, "TIZ", "Tiznit"), +(3642, 1142, "GA", "Gagauzia, Unitate Teritoriala Autonoma"), +(3643, 1142, "CU", "Chisinau"), +(3644, 1142, "SN", "Stinga Nistrului, unitatea teritoriala din"), +(3645, 1142, "BA", "Balti"), +(3646, 1142, "CA", "Cahul"), +(3647, 1142, "ED", "Edinet"), +(3648, 1142, "LA", "Lapusna"), +(3649, 1142, "OR", "Orhei"), +(3650, 1142, "SO", "Soroca"), +(3651, 1142, "TA", "Taraclia"), +(3652, 1142, "TI", "Tighina [Bender]"), +(3653, 1142, "UN", "Ungheni"), +(3654, 1129, "T", "Antananarivo"), +(3655, 1129, "D", "Antsiranana"), +(3656, 1129, "F", "Fianarantsoa"), +(3657, 1129, "M", "Mahajanga"), +(3658, 1129, "A", "Toamasina"), +(3659, 1129, "U", "Toliara"), +(3660, 1135, "ALL", "Ailinglapalap"), +(3661, 1135, "ALK", "Ailuk"), +(3662, 1135, "ARN", "Arno"), +(3663, 1135, "AUR", "Aur"), +(3664, 1135, "EBO", "Ebon"), +(3665, 1135, "ENI", "Eniwetok"), +(3666, 1135, "JAL", "Jaluit"), +(3667, 1135, "KIL", "Kili"), +(3668, 1135, "KWA", "Kwajalein"), +(3669, 1135, "LAE", "Lae"), +(3670, 1135, "LIB", "Lib"), +(3671, 1135, "LIK", "Likiep"), +(3672, 1135, "MAJ", "Majuro"), +(3673, 1135, "MAL", "Maloelap"), +(3674, 1135, "MEJ", "Mejit"), +(3675, 1135, "MIL", "Mili"), +(3676, 1135, "NMK", "Namorik"), +(3677, 1135, "NMU", "Namu"), +(3678, 1135, "RON", "Rongelap"), +(3679, 1135, "UJA", "Ujae"), +(3680, 1135, "UJL", "Ujelang"), +(3681, 1135, "UTI", "Utirik"), +(3682, 1135, "WTN", "Wotho"), +(3683, 1135, "WTJ", "Wotje"), +(3684, 1133, "BK0", "Bamako"), +(3685, 1133, "7", "Gao"), +(3686, 1133, "1", "Kayes"), +(3687, 1133, "8", "Kidal"), +(3688, 1133, "2", "Xoulikoro"), +(3689, 1133, "5", "Mopti"), +(3690, 1133, "4", "S69ou"), +(3691, 1133, "3", "Sikasso"), +(3692, 1133, "6", "Tombouctou"), +(3693, 1035, "07", "Ayeyarwady"), +(3694, 1035, "02", "Bago"), +(3695, 1035, "03", "Magway"), +(3696, 1035, "04", "Mandalay"), +(3697, 1035, "01", "Sagaing"), +(3698, 1035, "05", "Tanintharyi"), +(3699, 1035, "06", "Yangon"), +(3700, 1035, "14", "Chin"), +(3701, 1035, "11", "Kachin"), +(3702, 1035, "12", "Kayah"), +(3703, 1035, "13", "Kayin"), +(3704, 1035, "15", "Mon"), +(3705, 1035, "16", "Rakhine"), +(3706, 1035, "17", "Shan"), +(3707, 1144, "1", "Ulaanbaatar"), +(3708, 1144, "073", "Arhangay"), +(3709, 1144, "069", "Bayanhongor"), +(3710, 1144, "071", "Bayan-Olgiy"), +(3711, 1144, "067", "Bulgan"), +(3712, 1144, "037", "Darhan uul"), +(3713, 1144, "061", "Dornod"), +(3714, 1144, "063", "Dornogov,"), +(3715, 1144, "059", "DundgovL"), +(3716, 1144, "057", "Dzavhan"), +(3717, 1144, "065", "Govi-Altay"), +(3718, 1144, "064", "Govi-Smber"), +(3719, 1144, "039", "Hentiy"), +(3720, 1144, "043", "Hovd"), +(3721, 1144, "041", "Hovsgol"), +(3722, 1144, "053", "Omnogovi"), +(3723, 1144, "035", "Orhon"), +(3724, 1144, "055", "Ovorhangay"), +(3725, 1144, "049", "Selenge"), +(3726, 1144, "051", "Shbaatar"), +(3727, 1144, "047", "Tov"), +(3728, 1144, "046", "Uvs"), +(3729, 1137, "NKC", "Nouakchott"), +(3730, 1137, "03", "Assaba"), +(3731, 1137, "05", "Brakna"), +(3732, 1137, "08", "Dakhlet Nouadhibou"), +(3733, 1137, "04", "Gorgol"), +(3734, 1137, "10", "Guidimaka"), +(3735, 1137, "01", "Hodh ech Chargui"), +(3736, 1137, "02", "Hodh el Charbi"), +(3737, 1137, "12", "Inchiri"), +(3738, 1137, "09", "Tagant"), +(3739, 1137, "11", "Tiris Zemmour"), +(3740, 1137, "06", "Trarza"), +(3741, 1138, "BR", "Beau Bassin-Rose Hill"), +(3742, 1138, "CU", "Curepipe"), +(3743, 1138, "PU", "Port Louis"), +(3744, 1138, "QB", "Quatre Bornes"), +(3745, 1138, "VP", "Vacosa-Phoenix"), +(3746, 1138, "BL", "Black River"), +(3747, 1138, "FL", "Flacq"), +(3748, 1138, "GP", "Grand Port"), +(3749, 1138, "MO", "Moka"), +(3750, 1138, "PA", "Pamplemousses"), +(3751, 1138, "PW", "Plaines Wilhems"), +(3752, 1138, "RP", "Riviere du Rempart"), +(3753, 1138, "SA", "Savanne"), +(3754, 1138, "AG", "Agalega Islands"), +(3755, 1138, "CC", "Cargados Carajos Shoals"), +(3756, 1138, "RO", "Rodrigues Island"), +(3757, 1132, "MLE", "Male"), +(3758, 1132, "02", "Alif"), +(3759, 1132, "20", "Baa"), +(3760, 1132, "17", "Dhaalu"), +(3761, 1132, "14", "Faafu"), +(3762, 1132, "27", "Gaaf Alif"), +(3763, 1132, "28", "Gaefu Dhaalu"), +(3764, 1132, "29", "Gnaviyani"), +(3765, 1132, "07", "Haa Alif"), +(3766, 1132, "23", "Haa Dhaalu"), +(3767, 1132, "26", "Kaafu"), +(3768, 1132, "05", "Laamu"), +(3769, 1132, "03", "Lhaviyani"), +(3770, 1132, "12", "Meemu"), +(3771, 1132, "25", "Noonu"), +(3772, 1132, "13", "Raa"), +(3773, 1132, "01", "Seenu"), +(3774, 1132, "24", "Shaviyani"), +(3775, 1132, "08", "Thaa"), +(3776, 1132, "04", "Vaavu"), +(3777, 1130, "BA", "Balaka"), +(3778, 1130, "BL", "Blantyre"), +(3779, 1130, "CK", "Chikwawa"), +(3780, 1130, "CR", "Chiradzulu"), +(3781, 1130, "CT", "Chitipa"), +(3782, 1130, "DE", "Dedza"), +(3783, 1130, "DO", "Dowa"), +(3784, 1130, "KR", "Karonga"), +(3785, 1130, "KS", "Kasungu"), +(3786, 1130, "LK", "Likoma Island"), +(3787, 1130, "LI", "Lilongwe"), +(3788, 1130, "MH", "Machinga"), +(3789, 1130, "MG", "Mangochi"), +(3790, 1130, "MC", "Mchinji"), +(3791, 1130, "MU", "Mulanje"), +(3792, 1130, "MW", "Mwanza"), +(3793, 1130, "MZ", "Mzimba"), +(3794, 1130, "NB", "Nkhata Bay"), +(3795, 1130, "NK", "Nkhotakota"), +(3796, 1130, "NS", "Nsanje"), +(3797, 1130, "NU", "Ntcheu"), +(3798, 1130, "NI", "Ntchisi"), +(3799, 1130, "PH", "Phalomba"), +(3800, 1130, "RU", "Rumphi"), +(3801, 1130, "SA", "Salima"), +(3802, 1130, "TH", "Thyolo"), +(3803, 1130, "ZO", "Zomba"), +(3804, 1140, "AGU", "Aguascalientes"), +(3805, 1140, "BCN", "Baja California"), +(3806, 1140, "BCS", "Baja California Sur"), +(3807, 1140, "CAM", "Campeche"), +(3808, 1140, "COA", "Coahuila"), +(3809, 1140, "COL", "Colima"), +(3810, 1140, "CHP", "Chiapas"), +(3811, 1140, "CHH", "Chihuahua"), +(3812, 1140, "DUR", "Durango"), +(3813, 1140, "GUA", "Guanajuato"), +(3814, 1140, "GRO", "Guerrero"), +(3815, 1140, "HID", "Hidalgo"), +(3816, 1140, "JAL", "Jalisco"), +(3817, 1140, "MEX", "Mexico"), +(3818, 1140, "MIC", "Michoacin"), +(3819, 1140, "MOR", "Morelos"), +(3820, 1140, "NAY", "Nayarit"), +(3821, 1140, "NLE", "Nuevo Leon"), +(3822, 1140, "OAX", "Oaxaca"), +(3823, 1140, "PUE", "Puebla"), +(3824, 1140, "QUE", "Queretaro"), +(3825, 1140, "ROO", "Quintana Roo"), +(3826, 1140, "SLP", "San Luis Potosi"), +(3827, 1140, "SIN", "Sinaloa"), +(3828, 1140, "SON", "Sonora"), +(3829, 1140, "TAB", "Tabasco"), +(3830, 1140, "TAM", "Tamaulipas"), +(3831, 1140, "TLA", "Tlaxcala"), +(3832, 1140, "VER", "Veracruz"), +(3833, 1140, "YUC", "Yucatan"), +(3834, 1140, "ZAC", "Zacatecas"), +(3835, 1131, "14", "Wilayah Persekutuan Kuala Lumpur"), +(3836, 1131, "15", "Wilayah Persekutuan Labuan"), +(3837, 1131, "16", "Wilayah Persekutuan Putrajaya"), +(3838, 1131, "01", "Johor"), +(3839, 1131, "02", "Kedah"), +(3840, 1131, "03", "Kelantan"), +(3841, 1131, "04", "Melaka"), +(3842, 1131, "05", "Negeri Sembilan"), +(3843, 1131, "06", "Pahang"), +(3844, 1131, "08", "Perak"), +(3845, 1131, "09", "Perlis"), +(3846, 1131, "07", "Pulau Pinang"), +(3847, 1131, "12", "Sabah"), +(3848, 1131, "13", "Sarawak"), +(3849, 1131, "10", "Selangor"), +(3850, 1131, "11", "Terengganu"), +(3851, 1147, "MPM", "Maputo"), +(3852, 1147, "P", "Cabo Delgado"), +(3853, 1147, "G", "Gaza"), +(3854, 1147, "I", "Inhambane"), +(3855, 1147, "B", "Manica"), +(3856, 1147, "N", "Numpula"), +(3857, 1147, "A", "Niaaea"), +(3858, 1147, "S", "Sofala"), +(3859, 1147, "T", "Tete"), +(3860, 1147, "Q", "Zambezia"), +(3861, 1148, "CA", "Caprivi"), +(3862, 1148, "ER", "Erongo"), +(3863, 1148, "HA", "Hardap"), +(3864, 1148, "KA", "Karas"), +(3865, 1148, "KH", "Khomas"), +(3866, 1148, "KU", "Kunene"), +(3867, 1148, "OW", "Ohangwena"), +(3868, 1148, "OK", "Okavango"), +(3869, 1148, "OH", "Omaheke"), +(3870, 1148, "OS", "Omusati"), +(3871, 1148, "ON", "Oshana"), +(3872, 1148, "OT", "Oshikoto"), +(3873, 1148, "OD", "Otjozondjupa"), +(3874, 1156, "8", "Niamey"), +(3875, 1156, "1", "Agadez"), +(3876, 1156, "2", "Diffa"), +(3877, 1156, "3", "Dosso"), +(3878, 1156, "4", "Maradi"), +(3879, 1156, "S", "Tahoua"), +(3880, 1156, "6", "Tillaberi"), +(3881, 1156, "7", "Zinder"), +(3882, 1157, "FC", "Abuja Federal Capital Territory"), +(3883, 1157, "AB", "Abia"), +(3884, 1157, "AD", "Adamawa"), +(3885, 1157, "AK", "Akwa Ibom"), +(3886, 1157, "AN", "Anambra"), +(3887, 1157, "BA", "Bauchi"), +(3888, 1157, "BY", "Bayelsa"), +(3889, 1157, "BE", "Benue"), +(3890, 1157, "BO", "Borno"), +(3891, 1157, "CR", "Cross River"), +(3892, 1157, "DE", "Delta"), +(3893, 1157, "EB", "Ebonyi"), +(3894, 1157, "ED", "Edo"), +(3895, 1157, "EK", "Ekiti"), +(3896, 1157, "EN", "Enugu"), +(3897, 1157, "GO", "Gombe"), +(3898, 1157, "IM", "Imo"), +(3899, 1157, "JI", "Jigawa"), +(3900, 1157, "KD", "Kaduna"), +(3901, 1157, "KN", "Kano"), +(3902, 1157, "KT", "Katsina"), +(3903, 1157, "KE", "Kebbi"), +(3904, 1157, "KO", "Kogi"), +(3905, 1157, "KW", "Kwara"), +(3906, 1157, "LA", "Lagos"), +(3907, 1157, "NA", "Nassarawa"), +(3908, 1157, "NI", "Niger"), +(3909, 1157, "OG", "Ogun"), +(3910, 1157, "ON", "Ondo"), +(3911, 1157, "OS", "Osun"), +(3912, 1157, "OY", "Oyo"), +(3913, 1157, "RI", "Rivers"), +(3914, 1157, "SO", "Sokoto"), +(3915, 1157, "TA", "Taraba"), +(3916, 1157, "YO", "Yobe"), +(3917, 1157, "ZA", "Zamfara"), +(3918, 1155, "BO", "Boaco"), +(3919, 1155, "CA", "Carazo"), +(3920, 1155, "CI", "Chinandega"), +(3921, 1155, "CO", "Chontales"), +(3922, 1155, "ES", "Esteli"), +(3923, 1155, "JI", "Jinotega"), +(3924, 1155, "LE", "Leon"), +(3925, 1155, "MD", "Madriz"), +(3926, 1155, "MN", "Managua"), +(3927, 1155, "MS", "Masaya"), +(3928, 1155, "MT", "Matagalpa"), +(3929, 1155, "NS", "Nueva Segovia"), +(3930, 1155, "SJ", "Rio San Juan"), +(3931, 1155, "RI", "Rivas"), +(3932, 1155, "AN", "Atlantico Norte"), +(3933, 1155, "AS", "Atlantico Sur"), +(3934, 1152, "DR", "Drente"), +(3935, 1152, "FL", "Flevoland"), +(3936, 1152, "FR", "Friesland"), +(3937, 1152, "GL", "Gelderland"), +(3938, 1152, "GR", "Groningen"), +(3939, 1152, "NB", "Noord-Brabant"), +(3940, 1152, "NH", "Noord-Holland"), +(3941, 1152, "OV", "Overijssel"), +(3942, 1152, "UT", "Utrecht"), +(3943, 1152, "ZH", "Zuid-Holland"), +(3944, 1152, "ZL", "Zeeland"), +(3945, 1161, "02", "Akershus"), +(3946, 1161, "09", "Aust-Agder"), +(3947, 1161, "06", "Buskerud"), +(3948, 1161, "20", "Finnmark"), +(3949, 1161, "04", "Hedmark"), +(3950, 1161, "12", "Hordaland"), +(3951, 1161, "15", "Møre og Romsdal"), +(3952, 1161, "18", "Nordland"), +(3953, 1161, "17", "Nord-Trøndelag"), +(3954, 1161, "05", "Oppland"), +(3955, 1161, "03", "Oslo"), +(3956, 1161, "11", "Rogaland"), +(3957, 1161, "14", "Sogn og Fjordane"), +(3958, 1161, "16", "Sør-Trøndelag"), +(3959, 1161, "06", "Telemark"), +(3960, 1161, "19", "Troms"), +(3961, 1161, "10", "Vest-Agder"), +(3962, 1161, "07", "Vestfold"), +(3963, 1161, "01", "Østfold"), +(3964, 1161, "22", "Jan Mayen"), +(3965, 1161, "21", "Svalbard"), +(3966, 1154, "AUK", "Auckland"), +(3967, 1154, "BOP", "Bay of Plenty"), +(3968, 1154, "CAN", "Canterbury"), +(3969, 1154, "GIS", "Gisborne"), +(3970, 1154, "HKB", "Hawkes Bay"), +(3971, 1154, "MWT", "Manawatu-Wanganui"), +(3972, 1154, "MBH", "Marlborough"), +(3973, 1154, "NSN", "Nelson"), +(3974, 1154, "NTL", "Northland"), +(3975, 1154, "OTA", "Otago"), +(3976, 1154, "STL", "Southland"), +(3977, 1154, "TKI", "Taranaki"), +(3978, 1154, "TAS", "Tasman"), +(3979, 1154, "WKO", "Waikato"), +(3980, 1154, "WGN", "Wellington"), +(3981, 1154, "WTC", "West Coast"), +(3982, 1162, "DA", "Ad Dakhillyah"), +(3983, 1162, "BA", "Al Batinah"), +(3984, 1162, "JA", "Al Janblyah"), +(3985, 1162, "WU", "Al Wusta"), +(3986, 1162, "SH", "Ash Sharqlyah"), +(3987, 1162, "ZA", "Az Zahirah"), +(3988, 1162, "MA", "Masqat"), +(3989, 1162, "MU", "Musandam"), +(3990, 1166, "1", "Bocas del Toro"), +(3991, 1166, "2", "Cocle"), +(3992, 1166, "4", "Chiriqui"), +(3993, 1166, "5", "Darien"), +(3994, 1166, "6", "Herrera"), +(3995, 1166, "7", "Loa Santoa"), +(3996, 1166, "8", "Panama"), +(3997, 1166, "9", "Veraguas"), +(3998, 1166, "Q", "Comarca de San Blas"), +(3999, 1169, "CAL", "El Callao"), +(4000, 1169, "ANC", "Ancash"), +(4001, 1169, "APU", "Apurimac"), +(4002, 1169, "ARE", "Arequipa"), +(4003, 1169, "AYA", "Ayacucho"), +(4004, 1169, "CAJ", "Cajamarca"), +(4005, 1169, "CUS", "Cuzco"), +(4006, 1169, "HUV", "Huancavelica"), +(4007, 1169, "HUC", "Huanuco"), +(4008, 1169, "ICA", "Ica"), +(4009, 1169, "JUN", "Junin"), +(4010, 1169, "LAL", "La Libertad"), +(4011, 1169, "LAM", "Lambayeque"), +(4012, 1169, "LIM", "Lima"), +(4013, 1169, "LOR", "Loreto"), +(4014, 1169, "MDD", "Madre de Dios"), +(4015, 1169, "MOQ", "Moquegua"), +(4016, 1169, "PAS", "Pasco"), +(4017, 1169, "PIU", "Piura"), +(4018, 1169, "PUN", "Puno"), +(4019, 1169, "SAM", "San Martin"), +(4020, 1169, "TAC", "Tacna"), +(4021, 1169, "TUM", "Tumbes"), +(4022, 1169, "UCA", "Ucayali"), +(4023, 1167, "NCD", "National Capital District (Port Moresby)"), +(4024, 1167, "CPK", "Chimbu"), +(4025, 1167, "EHG", "Eastern Highlands"), +(4026, 1167, "EBR", "East New Britain"), +(4027, 1167, "ESW", "East Sepik"), +(4028, 1167, "EPW", "Enga"), +(4029, 1167, "GPK", "Gulf"), +(4030, 1167, "MPM", "Madang"), +(4031, 1167, "MRL", "Manus"), +(4032, 1167, "MBA", "Milne Bay"), +(4033, 1167, "MPL", "Morobe"), +(4034, 1167, "NIK", "New Ireland"), +(4035, 1167, "NSA", "North Solomons"), +(4036, 1167, "SAN", "Santaun"), +(4037, 1167, "SHM", "Southern Highlands"), +(4038, 1167, "WHM", "Western Highlands"), +(4039, 1167, "WBK", "West New Britain"), +(4040, 1170, "ABR", "Abra"), +(4041, 1170, "AGN", "Agusan del Norte"), +(4042, 1170, "AGS", "Agusan del Sur"), +(4043, 1170, "AKL", "Aklan"), +(4044, 1170, "ALB", "Albay"), +(4045, 1170, "ANT", "Antique"), +(4046, 1170, "APA", "Apayao"), +(4047, 1170, "AUR", "Aurora"), +(4048, 1170, "BAS", "Basilan"), +(4049, 1170, "BAN", "Bataan"), +(4050, 1170, "BTN", "Batanes"), +(4051, 1170, "BTG", "Batangas"), +(4052, 1170, "BEN", "Benguet"), +(4053, 1170, "BIL", "Biliran"), +(4054, 1170, "BOH", "Bohol"), +(4055, 1170, "BUK", "Bukidnon"), +(4056, 1170, "BUL", "Bulacan"), +(4057, 1170, "CAG", "Cagayan"), +(4058, 1170, "CAN", "Camarines Norte"), +(4059, 1170, "CAS", "Camarines Sur"), +(4060, 1170, "CAM", "Camiguin"), +(4061, 1170, "CAP", "Capiz"), +(4062, 1170, "CAT", "Catanduanes"), +(4063, 1170, "CAV", "Cavite"), +(4064, 1170, "CEB", "Cebu"), +(4065, 1170, "COM", "Compostela Valley"), +(4066, 1170, "DAV", "Davao"), +(4067, 1170, "DAS", "Davao del Sur"), +(4068, 1170, "DAO", "Davao Oriental"), +(4069, 1170, "EAS", "Eastern Samar"), +(4070, 1170, "GUI", "Guimaras"), +(4071, 1170, "IFU", "Ifugao"), +(4072, 1170, "ILN", "Ilocos Norte"), +(4073, 1170, "ILS", "Ilocos Sur"), +(4074, 1170, "ILI", "Iloilo"), +(4075, 1170, "ISA", "Isabela"), +(4076, 1170, "KAL", "Kalinga-Apayso"), +(4077, 1170, "LAG", "Laguna"), +(4078, 1170, "LAN", "Lanao del Norte"), +(4079, 1170, "LAS", "Lanao del Sur"), +(4080, 1170, "LUN", "La Union"), +(4081, 1170, "LEY", "Leyte"), +(4082, 1170, "MAG", "Maguindanao"), +(4083, 1170, "MAD", "Marinduque"), +(4084, 1170, "MAS", "Masbate"), +(4085, 1170, "MDC", "Mindoro Occidental"), +(4086, 1170, "MDR", "Mindoro Oriental"), +(4087, 1170, "MSC", "Misamis Occidental"), +(4088, 1170, "MSR", "Misamis Oriental"), +(4089, 1170, "MOU", "Mountain Province"), +(4090, 1170, "NEC", "Negroe Occidental"), +(4091, 1170, "NER", "Negros Oriental"), +(4092, 1170, "NCO", "North Cotabato"), +(4093, 1170, "NSA", "Northern Samar"), +(4094, 1170, "NUE", "Nueva Ecija"), +(4095, 1170, "NUV", "Nueva Vizcaya"), +(4096, 1170, "PLW", "Palawan"), +(4097, 1170, "PAM", "Pampanga"), +(4098, 1170, "PAN", "Pangasinan"), +(4099, 1170, "QUE", "Quezon"), +(4100, 1170, "QUI", "Quirino"), +(4101, 1170, "RIZ", "Rizal"), +(4102, 1170, "ROM", "Romblon"), +(4103, 1170, "SAR", "Sarangani"), +(4104, 1170, "SIG", "Siquijor"), +(4105, 1170, "SOR", "Sorsogon"), +(4106, 1170, "SCO", "South Cotabato"), +(4107, 1170, "SLE", "Southern Leyte"), +(4108, 1170, "SUK", "Sultan Kudarat"), +(4109, 1170, "SLU", "Sulu"), +(4110, 1170, "SUN", "Surigao del Norte"), +(4111, 1170, "SUR", "Surigao del Sur"), +(4112, 1170, "TAR", "Tarlac"), +(4113, 1170, "TAW", "Tawi-Tawi"), +(4114, 1170, "WSA", "Western Samar"), +(4115, 1170, "ZMB", "Zambales"), +(4116, 1170, "ZAN", "Zamboanga del Norte"), +(4117, 1170, "ZAS", "Zamboanga del Sur"), +(4118, 1170, "ZSI", "Zamboanga Sibiguey"), +(4119, 1163, "IS", "Islamabad Federal Capital Area"), +(4120, 1163, "BA", "Baluchistan"), +(4121, 1163, "NW", "Khyber Pakhtun Khawa"), +(4122, 1163, "SD", "Sindh"), +(4123, 1163, "TA", "Federally Administered Tribal Areas"), +(4124, 1163, "JK", "Azad Kashmir"), +(4125, 1163, "NA", "Gilgit-Baltistan"), +(4126, 1173, "01", "Aveiro"), +(4127, 1173, "02", "Beja"), +(4128, 1173, "03", "Braga"), +(4129, 1173, "04", "Braganca"), +(4130, 1173, "05", "Castelo Branco"), +(4131, 1173, "06", "Colmbra"), +(4132, 1173, "07", "Ovora"), +(4133, 1173, "08", "Faro"), +(4134, 1173, "09", "Guarda"), +(4135, 1173, "10", "Leiria"), +(4136, 1173, "11", "Lisboa"), +(4137, 1173, "12", "Portalegre"), +(4138, 1173, "13", "Porto"), +(4139, 1173, "14", "Santarem"), +(4140, 1173, "15", "Setubal"), +(4141, 1173, "16", "Viana do Castelo"), +(4142, 1173, "17", "Vila Real"), +(4143, 1173, "18", "Viseu"), +(4144, 1173, "20", "Regiao Autonoma dos Acores"), +(4145, 1173, "30", "Regiao Autonoma da Madeira"), +(4146, 1168, "ASU", "Asuncion"), +(4147, 1168, "16", "Alto Paraguay"), +(4148, 1168, "10", "Alto Parana"), +(4149, 1168, "13", "Amambay"), +(4150, 1168, "19", "Boqueron"), +(4151, 1168, "5", "Caeguazu"), +(4152, 1168, "6", "Caazapl"), +(4153, 1168, "14", "Canindeyu"), +(4154, 1168, "1", "Concepcion"), +(4155, 1168, "3", "Cordillera"), +(4156, 1168, "4", "Guaira"), +(4157, 1168, "7", "Itapua"), +(4158, 1168, "8", "Miaiones"), +(4159, 1168, "12", "Neembucu"), +(4160, 1168, "9", "Paraguari"), +(4161, 1168, "15", "Presidente Hayes"), +(4162, 1168, "2", "San Pedro"), +(4163, 1175, "DA", "Ad Dawhah"), +(4164, 1175, "GH", "Al Ghuwayriyah"), +(4165, 1175, "JU", "Al Jumayliyah"), +(4166, 1175, "KH", "Al Khawr"), +(4167, 1175, "WA", "Al Wakrah"), +(4168, 1175, "RA", "Ar Rayyan"), +(4169, 1175, "JB", "Jariyan al Batnah"), +(4170, 1175, "MS", "Madinat ash Shamal"), +(4171, 1175, "US", "Umm Salal"), +(4172, 1176, "B", "Bucuresti"), +(4173, 1176, "AB", "Alba"), +(4174, 1176, "AR", "Arad"), +(4175, 1176, "AG", "ArgeÈ™"), +(4176, 1176, "BC", "Bacău"), +(4177, 1176, "BH", "Bihor"), +(4178, 1176, "BN", "BistriÈ›a-Năsăud"), +(4179, 1176, "BT", "BotoÈ™ani"), +(4180, 1176, "BV", "BraÈ™ov"), +(4181, 1176, "BR", "Brăila"), +(4182, 1176, "BZ", "Buzău"), +(4183, 1176, "CS", "CaraÈ™-Severin"), +(4184, 1176, "CL", "CălăraÈ™i"), +(4185, 1176, "CJ", "Cluj"), +(4186, 1176, "CT", "ConstanÈ›a"), +(4187, 1176, "CV", "Covasna"), +(4188, 1176, "DB", "DâmboviÈ›a"), +(4189, 1176, "DJ", "Dolj"), +(4190, 1176, "GL", "GalaÈ›i"), +(4191, 1176, "GR", "Giurgiu"), +(4192, 1176, "GJ", "Gorj"), +(4193, 1176, "HR", "Harghita"), +(4194, 1176, "HD", "Hunedoara"), +(4195, 1176, "IL", "IalomiÈ›a"), +(4196, 1176, "IS", "IaÈ™i"), +(4197, 1176, "IF", "Ilfov"), +(4198, 1176, "MM", "MaramureÈ™"), +(4199, 1176, "MH", "MehedinÈ›i"), +(4200, 1176, "MS", "MureÈ™"), +(4201, 1176, "NT", "NeamÈ›"), +(4202, 1176, "OT", "Olt"), +(4203, 1176, "PH", "Prahova"), +(4204, 1176, "SM", "Satu Mare"), +(4205, 1176, "SJ", "Sălaj"), +(4206, 1176, "SB", "Sibiu"), +(4207, 1176, "SV", "Suceava"), +(4208, 1176, "TR", "Teleorman"), +(4209, 1176, "TM", "TimiÈ™"), +(4210, 1176, "TL", "Tulcea"), +(4211, 1176, "VS", "Vaslui"), +(4212, 1176, "VL", "Vâlcea"), +(4213, 1176, "VN", "Vrancea"), +(4214, 1177, "AD", "Adygeya, Respublika"), +(4215, 1177, "AL", "Altay, Respublika"), +(4216, 1177, "BA", "Bashkortostan, Respublika"), +(4217, 1177, "BU", "Buryatiya, Respublika"), +(4218, 1177, "CE", "Chechenskaya Respublika"), +(4219, 1177, "CU", "Chuvashskaya Respublika"), +(4220, 1177, "DA", "Dagestan, Respublika"), +(4221, 1177, "IN", "Ingushskaya Respublika"), +(4222, 1177, "KB", "Kabardino-Balkarskaya"), +(4223, 1177, "KL", "Kalmykiya, Respublika"), +(4224, 1177, "KC", "Karachayevo-Cherkesskaya Respublika"), +(4225, 1177, "KR", "Kareliya, Respublika"), +(4226, 1177, "KK", "Khakasiya, Respublika"), +(4227, 1177, "KO", "Komi, Respublika"), +(4228, 1177, "ME", "Mariy El, Respublika"), +(4229, 1177, "MO", "Mordoviya, Respublika"), +(4230, 1177, "SA", "Sakha, Respublika [Yakutiya]"), +(4231, 1177, "SE", "Severnaya Osetiya, Respublika"), +(4232, 1177, "TA", "Tatarstan, Respublika"), +(4233, 1177, "TY", "Tyva, Respublika [Tuva]"), +(4234, 1177, "UD", "Udmurtskaya Respublika"), +(4235, 1177, "ALT", "Altayskiy kray"), +(4236, 1177, "KHA", "Khabarovskiy kray"), +(4237, 1177, "KDA", "Krasnodarskiy kray"), +(4238, 1177, "KYA", "Krasnoyarskiy kray"), +(4239, 1177, "PRI", "Primorskiy kray"), +(4240, 1177, "STA", "Stavropol\'skiy kray"), +(4241, 1177, "AMU", "Amurskaya oblast\'"), +(4242, 1177, "ARK", "Arkhangel\'skaya oblast\'"), +(4243, 1177, "AST", "Astrakhanskaya oblast\'"), +(4244, 1177, "BEL", "Belgorodskaya oblast\'"), +(4245, 1177, "BRY", "Bryanskaya oblast\'"), +(4246, 1177, "CHE", "Chelyabinskaya oblast\'"), +(4247, 1177, "ZSK", "Zabaykalsky Krai\'"), +(4248, 1177, "IRK", "Irkutskaya oblast\'"), +(4249, 1177, "IVA", "Ivanovskaya oblast\'"), +(4250, 1177, "KGD", "Kaliningradskaya oblast\'"), +(4251, 1177, "KLU", "Kaluzhskaya oblast\'"), +(4252, 1177, "KAM", "Kamchatka Krai\'"), +(4253, 1177, "KEM", "Kemerovskaya oblast\'"), +(4254, 1177, "KIR", "Kirovskaya oblast\'"), +(4255, 1177, "KOS", "Kostromskaya oblast\'"), +(4256, 1177, "KGN", "Kurganskaya oblast\'"), +(4257, 1177, "KRS", "Kurskaya oblast\'"), +(4258, 1177, "LEN", "Leningradskaya oblast\'"), +(4259, 1177, "LIP", "Lipetskaya oblast\'"), +(4260, 1177, "MAG", "Magadanskaya oblast\'"), +(4261, 1177, "MOS", "Moskovskaya oblast\'"), +(4262, 1177, "MUR", "Murmanskaya oblast\'"), +(4263, 1177, "NIZ", "Nizhegorodskaya oblast\'"), +(4264, 1177, "NGR", "Novgorodskaya oblast\'"), +(4265, 1177, "NVS", "Novosibirskaya oblast\'"), +(4266, 1177, "OMS", "Omskaya oblast\'"), +(4267, 1177, "ORE", "Orenburgskaya oblast\'"), +(4268, 1177, "ORL", "Orlovskaya oblast\'"), +(4269, 1177, "PNZ", "Penzenskaya oblast\'"), +(4270, 1177, "PEK", "Perm krai\'"), +(4271, 1177, "PSK", "Pskovskaya oblast\'"), +(4272, 1177, "ROS", "Rostovskaya oblast\'"), +(4273, 1177, "RYA", "Ryazanskaya oblast\'"), +(4274, 1177, "SAK", "Sakhalinskaya oblast\'"), +(4275, 1177, "SAM", "Samarskaya oblast\'"), +(4276, 1177, "SAR", "Saratovskaya oblast\'"), +(4277, 1177, "SMO", "Smolenskaya oblast\'"), +(4278, 1177, "SVE", "Sverdlovskaya oblast\'"), +(4279, 1177, "TAM", "Tambovskaya oblast\'"), +(4280, 1177, "TOM", "Tomskaya oblast\'"), +(4281, 1177, "TUL", "Tul\'skaya oblast\'"), +(4282, 1177, "TVE", "Tverskaya oblast\'"), +(4283, 1177, "TYU", "Tyumenskaya oblast\'"), +(4284, 1177, "ULY", "Ul\'yanovskaya oblast\'"), +(4285, 1177, "VLA", "Vladimirskaya oblast\'"), +(4286, 1177, "VGG", "Volgogradskaya oblast\'"), +(4287, 1177, "VLG", "Vologodskaya oblast\'"), +(4288, 1177, "VOR", "Voronezhskaya oblast\'"), +(4289, 1177, "YAR", "Yaroslavskaya oblast\'"), +(4290, 1177, "MOW", "Moskva"), +(4291, 1177, "SPE", "Sankt-Peterburg"), +(4292, 1177, "YEV", "Yevreyskaya avtonomnaya oblast\'"), +(4294, 1177, "CHU", "Chukotskiy avtonomnyy okrug"), +(4296, 1177, "KHM", "Khanty-Mansiyskiy avtonomnyy okrug"), +(4299, 1177, "NEN", "Nenetskiy avtonomnyy okrug"), +(4302, 1177, "YAN", "Yamalo-Nenetskiy avtonomnyy okrug"), +(4303, 1178, "C", "Butare"), +(4304, 1178, "I", "Byumba"), +(4305, 1178, "E", "Cyangugu"), +(4306, 1178, "D", "Gikongoro"), +(4307, 1178, "G", "Gisenyi"), +(4308, 1178, "B", "Gitarama"), +(4309, 1178, "J", "Kibungo"), +(4310, 1178, "F", "Kibuye"), +(4311, 1178, "K", "Kigali-Rural Kigali y\' Icyaro"), +(4312, 1178, "L", "Kigali-Ville Kigali Ngari"), +(4313, 1178, "M", "Mutara"), +(4314, 1178, "H", "Ruhengeri"), +(4315, 1187, "11", "Al Bahah"), +(4316, 1187, "08", "Al Hudud Ash Shamaliyah"), +(4317, 1187, "12", "Al Jawf"), +(4318, 1187, "03", "Al Madinah"), +(4319, 1187, "05", "Al Qasim"), +(4320, 1187, "01", "Ar Riyad"), +(4321, 1187, "14", "Asir"), +(4322, 1187, "06", "Ha\'il"), +(4323, 1187, "09", "Jlzan"), +(4324, 1187, "02", "Makkah"), +(4325, 1187, "10", "Najran"), +(4326, 1187, "07", "Tabuk"), +(4327, 1194, "CT", "Capital Territory (Honiara)"), +(4328, 1194, "GU", "Guadalcanal"), +(4329, 1194, "IS", "Isabel"), +(4330, 1194, "MK", "Makira"), +(4331, 1194, "ML", "Malaita"), +(4332, 1194, "TE", "Temotu"), +(4333, 1200, "23", "A\'ali an Nil"), +(4334, 1200, "26", "Al Bah al Ahmar"), +(4335, 1200, "18", "Al Buhayrat"), +(4336, 1200, "07", "Al Jazirah"), +(4337, 1200, "03", "Al Khartum"), +(4338, 1200, "06", "Al Qadarif"), +(4339, 1200, "22", "Al Wahdah"), +(4340, 1200, "04", "An Nil"), +(4341, 1200, "08", "An Nil al Abyaq"), +(4342, 1200, "24", "An Nil al Azraq"), +(4343, 1200, "01", "Ash Shamallyah"), +(4344, 1200, "17", "Bahr al Jabal"), +(4345, 1200, "16", "Gharb al Istiwa\'iyah"), +(4346, 1200, "14", "Gharb Ba~r al Ghazal"), +(4347, 1200, "12", "Gharb Darfur"), +(4348, 1200, "10", "Gharb Kurdufan"), +(4349, 1200, "11", "Janub Darfur"), +(4350, 1200, "13", "Janub Rurdufan"), +(4351, 1200, "20", "Jnqall"), +(4352, 1200, "05", "Kassala"), +(4353, 1200, "15", "Shamal Batr al Ghazal"), +(4354, 1200, "02", "Shamal Darfur"), +(4355, 1200, "09", "Shamal Kurdufan"), +(4356, 1200, "19", "Sharq al Istiwa\'iyah"), +(4357, 1200, "25", "Sinnar"), +(4358, 1200, "21", "Warab"), +(4359, 1204, "K", "Blekinge län"), +(4360, 1204, "W", "Dalarnas län"), +(4361, 1204, "I", "Gotlands län"), +(4362, 1204, "X", "Gävleborgs län"), +(4363, 1204, "N", "Hallands län"), +(4364, 1204, "Z", "Jämtlands län"), +(4365, 1204, "F", "Jönkopings län"), +(4366, 1204, "H", "Kalmar län"), +(4367, 1204, "G", "Kronobergs län"), +(4368, 1204, "BD", "Norrbottens län"), +(4369, 1204, "M", "SkÃ¥ne län"), +(4370, 1204, "AB", "Stockholms län"), +(4371, 1204, "D", "Södermanlands län"), +(4372, 1204, "C", "Uppsala län"), +(4373, 1204, "S", "Värmlands län"), +(4374, 1204, "AC", "Västerbottens län"), +(4375, 1204, "Y", "Västernorrlands län"), +(4376, 1204, "U", "Västmanlands län"), +(4377, 1204, "Q", "Västra Götalands län"), +(4378, 1204, "T", "Örebro län"), +(4379, 1204, "E", "Östergötlands län"), +(4380, 1180, "SH", "Saint Helena"), +(4381, 1180, "AC", "Ascension"), +(4382, 1180, "TA", "Tristan da Cunha"), +(4383, 1193, "001", "AjdovÅ¡Äina"), +(4384, 1193, "002", "Beltinci"), +(4385, 1193, "148", "Benedikt"), +(4386, 1193, "149", "Bistrica ob Sotli"), +(4387, 1193, "003", "Bled"), +(4388, 1193, "150", "Bloke"), +(4389, 1193, "004", "Bohinj"), +(4390, 1193, "005", "Borovnica"), +(4391, 1193, "006", "Bovec"), +(4392, 1193, "151", "BraslovÄe"), +(4393, 1193, "007", "Brda"), +(4394, 1193, "008", "Brezovica"), +(4395, 1193, "009", "Brežice"), +(4396, 1193, "152", "Cankova"), +(4397, 1193, "011", "Celje"), +(4398, 1193, "012", "Cerklje na Gorenjskem"), +(4399, 1193, "013", "Cerknica"), +(4400, 1193, "014", "Cerkno"), +(4401, 1193, "153", "Cerkvenjak"), +(4402, 1193, "015", "ÄŒrenÅ¡ovci"), +(4403, 1193, "016", "ÄŒrna na KoroÅ¡kem"), +(4404, 1193, "017", "ÄŒrnomelj"), +(4405, 1193, "018", "Destrnik"), +(4406, 1193, "019", "DivaÄa"), +(4407, 1193, "154", "Dobje"), +(4408, 1193, "020", "Dobrepolje"), +(4409, 1193, "155", "Dobrna"), +(4410, 1193, "021", "Dobrova-Polhov Gradec"), +(4411, 1193, "156", "Dobrovnik"), +(4412, 1193, "022", "Dol pri Ljubljani"), +(4413, 1193, "157", "Dolenjske Toplice"), +(4414, 1193, "023", "Domžale"), +(4415, 1193, "024", "Dornava"), +(4416, 1193, "025", "Dravograd"), +(4417, 1193, "026", "Duplek"), +(4418, 1193, "027", "Gorenja vas-Poljane"), +(4419, 1193, "028", "GoriÅ¡nica"), +(4420, 1193, "029", "Gornja Radgona"), +(4421, 1193, "030", "Gornji Grad"), +(4422, 1193, "031", "Gornji Petrovci"), +(4423, 1193, "158", "Grad"), +(4424, 1193, "032", "Grosuplje"), +(4425, 1193, "159", "Hajdina"), +(4426, 1193, "160", "HoÄe-Slivnica"), +(4427, 1193, "161", "HodoÅ¡"), +(4428, 1193, "162", "Horjul"), +(4429, 1193, "034", "Hrastnik"), +(4430, 1193, "035", "Hrpelje-Kozina"), +(4431, 1193, "036", "Idrija"), +(4432, 1193, "037", "Ig"), +(4433, 1193, "038", "Ilirska Bistrica"), +(4434, 1193, "039", "IvanÄna Gorica"), +(4435, 1193, "040", "Izola"), +(4436, 1193, "041", "Jesenice"), +(4437, 1193, "163", "Jezersko"), +(4438, 1193, "042", "JurÅ¡inci"), +(4439, 1193, "043", "Kamnik"), +(4440, 1193, "044", "Kanal"), +(4441, 1193, "045", "KidriÄevo"), +(4442, 1193, "046", "Kobarid"), +(4443, 1193, "047", "Kobilje"), +(4444, 1193, "048", "KoÄevje"), +(4445, 1193, "049", "Komen"), +(4446, 1193, "164", "Komenda"), +(4447, 1193, "050", "Koper"), +(4448, 1193, "165", "Kostel"), +(4449, 1193, "051", "Kozje"), +(4450, 1193, "052", "Kranj"), +(4451, 1193, "053", "Kranjska Gora"), +(4452, 1193, "166", "Križevci"), +(4453, 1193, "054", "KrÅ¡ko"), +(4454, 1193, "055", "Kungota"), +(4455, 1193, "056", "Kuzma"), +(4456, 1193, "057", "LaÅ¡ko"), +(4457, 1193, "058", "Lenart"), +(4458, 1193, "059", "Lendava"), +(4459, 1193, "060", "Litija"), +(4460, 1193, "061", "Ljubljana"), +(4461, 1193, "062", "Ljubno"), +(4462, 1193, "063", "Ljutomer"), +(4463, 1193, "064", "Logatec"), +(4464, 1193, "065", "LoÅ¡ka dolina"), +(4465, 1193, "066", "LoÅ¡ki Potok"), +(4466, 1193, "167", "Lovrenc na Pohorju"), +(4467, 1193, "067", "LuÄe"), +(4468, 1193, "068", "Lukovica"), +(4469, 1193, "069", "MajÅ¡perk"), +(4470, 1193, "070", "Maribor"), +(4471, 1193, "168", "Markovci"), +(4472, 1193, "071", "Medvode"), +(4473, 1193, "072", "MengeÅ¡"), +(4474, 1193, "073", "Metlika"), +(4475, 1193, "074", "Mežica"), +(4476, 1193, "169", "Miklavž na Dravskem polju"), +(4477, 1193, "075", "Miren-Kostanjevica"), +(4478, 1193, "170", "Mirna PeÄ"), +(4479, 1193, "076", "Mislinja"), +(4480, 1193, "077", "MoravÄe"), +(4481, 1193, "078", "Moravske Toplice"), +(4482, 1193, "079", "Mozirje"), +(4483, 1193, "080", "Murska Sobota"), +(4484, 1193, "081", "Muta"), +(4485, 1193, "082", "Naklo"), +(4486, 1193, "083", "Nazarje"), +(4487, 1193, "084", "Nova Gorica"), +(4488, 1193, "085", "Novo mesto"), +(4489, 1193, "181", "Sveta Ana"), +(4490, 1193, "182", "Sveti Andraž v Slovenskih goricah"), +(4491, 1193, "116", "Sveti Jurij"), +(4492, 1193, "033", "Å alovci"), +(4493, 1193, "183", "Å empeter-Vrtojba"), +(4494, 1193, "117", "Å enÄur"), +(4495, 1193, "118", "Å entilj"), +(4496, 1193, "119", "Å entjernej"), +(4497, 1193, "120", "Å entjur"), +(4498, 1193, "121", "Å kocjan"), +(4499, 1193, "122", "Å kofja Loka"), +(4500, 1193, "123", "Å kofljica"), +(4501, 1193, "124", "Å marje pri JelÅ¡ah"), +(4502, 1193, "125", "Å martno ob Paki"), +(4503, 1193, "194", "Å martno pri Litiji"), +(4504, 1193, "126", "Å oÅ¡tanj"), +(4505, 1193, "127", "Å tore"), +(4506, 1193, "184", "Tabor"), +(4507, 1193, "010", "TiÅ¡ina"), +(4508, 1193, "128", "Tolmin"), +(4509, 1193, "129", "Trbovlje"), +(4510, 1193, "130", "Trebnje"), +(4511, 1193, "185", "Trnovska vas"), +(4512, 1193, "131", "TržiÄ"), +(4513, 1193, "186", "Trzin"), +(4514, 1193, "132", "TurniÅ¡Äe"), +(4515, 1193, "133", "Velenje"), +(4516, 1193, "187", "Velika Polana"), +(4517, 1193, "134", "Velike LaÅ¡Äe"), +(4518, 1193, "188", "Veržej"), +(4519, 1193, "135", "Videm"), +(4520, 1193, "136", "Vipava"), +(4521, 1193, "137", "Vitanje"), +(4522, 1193, "138", "Vojnik"), +(4523, 1193, "189", "Vransko"), +(4524, 1193, "140", "Vrhnika"), +(4525, 1193, "141", "Vuzenica"), +(4526, 1193, "142", "Zagorje ob Savi"), +(4527, 1193, "143", "ZavrÄ"), +(4528, 1193, "144", "ZreÄe"), +(4529, 1193, "190", "Žalec"), +(4530, 1193, "146", "Železniki"), +(4531, 1193, "191", "Žetale"), +(4532, 1193, "147", "Žiri"), +(4533, 1193, "192", "Žirovnica"), +(4534, 1193, "193", "Žužemberk"), +(4535, 1192, "BC", "Banskobystrický kraj"), +(4536, 1192, "BL", "Bratislavský kraj"), +(4537, 1192, "KI", "KoÅ¡ický kraj"), +(4538, 1192, "NJ", "Nitriansky kraj"), +(4539, 1192, "PV", "PreÅ¡ovský kraj"), +(4540, 1192, "TC", "TrenÄiansky kraj"), +(4541, 1192, "TA", "Trnavský kraj"), +(4542, 1192, "ZI", "Žilinský kraj"), +(4543, 1190, "W", "Western Area (Freetown)"), +(4544, 1188, "DK", "Dakar"), +(4545, 1188, "DB", "Diourbel"), +(4546, 1188, "FK", "Fatick"), +(4547, 1188, "KL", "Kaolack"), +(4548, 1188, "KD", "Kolda"), +(4549, 1188, "LG", "Louga"), +(4550, 1188, "MT", "Matam"), +(4551, 1188, "SL", "Saint-Louis"), +(4552, 1188, "TC", "Tambacounda"), +(4553, 1188, "TH", "Thies"), +(4554, 1188, "ZG", "Ziguinchor"), +(4555, 1195, "AW", "Awdal"), +(4556, 1195, "BK", "Bakool"), +(4557, 1195, "BN", "Banaadir"), +(4558, 1195, "BY", "Bay"), +(4559, 1195, "GA", "Galguduud"), +(4560, 1195, "GE", "Gedo"), +(4561, 1195, "HI", "Hiirsan"), +(4562, 1195, "JD", "Jubbada Dhexe"), +(4563, 1195, "JH", "Jubbada Hoose"), +(4564, 1195, "MU", "Mudug"), +(4565, 1195, "NU", "Nugaal"), +(4566, 1195, "SA", "Saneag"), +(4567, 1195, "SD", "Shabeellaha Dhexe"), +(4568, 1195, "SH", "Shabeellaha Hoose"), +(4569, 1195, "SO", "Sool"), +(4570, 1195, "TO", "Togdheer"), +(4571, 1195, "WO", "Woqooyi Galbeed"), +(4572, 1201, "BR", "Brokopondo"), +(4573, 1201, "CM", "Commewijne"), +(4574, 1201, "CR", "Coronie"), +(4575, 1201, "MA", "Marowijne"), +(4576, 1201, "NI", "Nickerie"), +(4577, 1201, "PM", "Paramaribo"), +(4578, 1201, "SA", "Saramacca"), +(4579, 1201, "SI", "Sipaliwini"), +(4580, 1201, "WA", "Wanica"), +(4581, 1207, "P", "Principe"), +(4582, 1207, "S", "Sao Tome"), +(4583, 1066, "AH", "Ahuachapan"), +(4584, 1066, "CA", "Cabanas"), +(4585, 1066, "CU", "Cuscatlan"), +(4586, 1066, "CH", "Chalatenango"), +(4587, 1066, "MO", "Morazan"), +(4588, 1066, "SM", "San Miguel"), +(4589, 1066, "SS", "San Salvador"), +(4590, 1066, "SA", "Santa Ana"), +(4591, 1066, "SV", "San Vicente"), +(4592, 1066, "SO", "Sonsonate"), +(4593, 1066, "US", "Usulutan"), +(4594, 1206, "HA", "Al Hasakah"), +(4595, 1206, "LA", "Al Ladhiqiyah"), +(4596, 1206, "QU", "Al Qunaytirah"), +(4597, 1206, "RA", "Ar Raqqah"), +(4598, 1206, "SU", "As Suwayda\'"), +(4599, 1206, "DR", "Dar\'a"), +(4600, 1206, "DY", "Dayr az Zawr"), +(4601, 1206, "DI", "Dimashq"), +(4602, 1206, "HL", "Halab"), +(4603, 1206, "HM", "Hamah"), +(4604, 1206, "HI", "Jim\'"), +(4605, 1206, "ID", "Idlib"), +(4606, 1206, "RD", "Rif Dimashq"), +(4607, 1206, "TA", "Tarts"), +(4608, 1203, "HH", "Hhohho"), +(4609, 1203, "LU", "Lubombo"), +(4610, 1203, "MA", "Manzini"), +(4611, 1203, "SH", "Shiselweni"), +(4612, 1043, "BA", "Batha"), +(4613, 1043, "BI", "Biltine"), +(4614, 1043, "BET", "Borkou-Ennedi-Tibesti"), +(4615, 1043, "CB", "Chari-Baguirmi"), +(4616, 1043, "GR", "Guera"), +(4617, 1043, "KA", "Kanem"), +(4618, 1043, "LC", "Lac"), +(4619, 1043, "LO", "Logone-Occidental"), +(4620, 1043, "LR", "Logone-Oriental"), +(4621, 1043, "MK", "Mayo-Kebbi"), +(4622, 1043, "MC", "Moyen-Chari"), +(4623, 1043, "OD", "Ouaddai"), +(4624, 1043, "SA", "Salamat"), +(4625, 1043, "TA", "Tandjile"), +(4626, 1214, "K", "Kara"), +(4627, 1214, "M", "Maritime (Region)"), +(4628, 1214, "S", "Savannes"), +(4629, 1211, "10", "Krung Thep Maha Nakhon Bangkok"), +(4630, 1211, "S", "Phatthaya"), +(4631, 1211, "37", "Amnat Charoen"), +(4632, 1211, "15", "Ang Thong"), +(4633, 1211, "31", "Buri Ram"), +(4634, 1211, "24", "Chachoengsao"), +(4635, 1211, "18", "Chai Nat"), +(4636, 1211, "36", "Chaiyaphum"), +(4637, 1211, "22", "Chanthaburi"), +(4638, 1211, "50", "Chiang Mai"), +(4639, 1211, "57", "Chiang Rai"), +(4640, 1211, "20", "Chon Buri"), +(4641, 1211, "86", "Chumphon"), +(4642, 1211, "46", "Kalasin"), +(4643, 1211, "62", "Kamphasng Phet"), +(4644, 1211, "71", "Kanchanaburi"), +(4645, 1211, "40", "Khon Kaen"), +(4646, 1211, "81", "Krabi"), +(4647, 1211, "52", "Lampang"), +(4648, 1211, "51", "Lamphun"), +(4649, 1211, "42", "Loei"), +(4650, 1211, "16", "Lop Buri"), +(4651, 1211, "58", "Mae Hong Son"), +(4652, 1211, "44", "Maha Sarakham"), +(4653, 1211, "49", "Mukdahan"), +(4654, 1211, "26", "Nakhon Nayok"), +(4655, 1211, "73", "Nakhon Pathom"), +(4656, 1211, "48", "Nakhon Phanom"), +(4657, 1211, "30", "Nakhon Ratchasima"), +(4658, 1211, "60", "Nakhon Sawan"), +(4659, 1211, "80", "Nakhon Si Thammarat"), +(4660, 1211, "55", "Nan"), +(4661, 1211, "96", "Narathiwat"), +(4662, 1211, "39", "Nong Bua Lam Phu"), +(4663, 1211, "43", "Nong Khai"), +(4664, 1211, "12", "Nonthaburi"), +(4665, 1211, "13", "Pathum Thani"), +(4666, 1211, "94", "Pattani"), +(4667, 1211, "82", "Phangnga"), +(4668, 1211, "93", "Phatthalung"), +(4669, 1211, "56", "Phayao"), +(4670, 1211, "67", "Phetchabun"), +(4671, 1211, "76", "Phetchaburi"), +(4672, 1211, "66", "Phichit"), +(4673, 1211, "65", "Phitsanulok"), +(4674, 1211, "54", "Phrae"), +(4675, 1211, "14", "Phra Nakhon Si Ayutthaya"), +(4676, 1211, "83", "Phuket"), +(4677, 1211, "25", "Prachin Buri"), +(4678, 1211, "77", "Prachuap Khiri Khan"), +(4679, 1211, "85", "Ranong"), +(4680, 1211, "70", "Ratchaburi"), +(4681, 1211, "21", "Rayong"), +(4682, 1211, "45", "Roi Et"), +(4683, 1211, "27", "Sa Kaeo"), +(4684, 1211, "47", "Sakon Nakhon"), +(4685, 1211, "11", "Samut Prakan"), +(4686, 1211, "74", "Samut Sakhon"), +(4687, 1211, "75", "Samut Songkhram"), +(4688, 1211, "19", "Saraburi"), +(4689, 1211, "91", "Satun"), +(4690, 1211, "17", "Sing Buri"), +(4691, 1211, "33", "Si Sa Ket"), +(4692, 1211, "90", "Songkhla"), +(4693, 1211, "64", "Sukhothai"), +(4694, 1211, "72", "Suphan Buri"), +(4695, 1211, "84", "Surat Thani"), +(4696, 1211, "32", "Surin"), +(4697, 1211, "63", "Tak"), +(4698, 1211, "92", "Trang"), +(4699, 1211, "23", "Trat"), +(4700, 1211, "34", "Ubon Ratchathani"), +(4701, 1211, "41", "Udon Thani"), +(4702, 1211, "61", "Uthai Thani"), +(4703, 1211, "53", "Uttaradit"), +(4704, 1211, "95", "Yala"), +(4705, 1211, "35", "Yasothon"), +(4706, 1209, "SU", "Sughd"), +(4707, 1209, "KT", "Khatlon"), +(4708, 1209, "GB", "Gorno-Badakhshan"), +(4709, 1220, "A", "Ahal"), +(4710, 1220, "B", "Balkan"), +(4711, 1220, "D", "Dasoguz"), +(4712, 1220, "L", "Lebap"), +(4713, 1220, "M", "Mary"), +(4714, 1218, "31", "Béja"), +(4715, 1218, "13", "Ben Arous"), +(4716, 1218, "23", "Bizerte"), +(4717, 1218, "81", "Gabès"), +(4718, 1218, "71", "Gafsa"), +(4719, 1218, "32", "Jendouba"), +(4720, 1218, "41", "Kairouan"), +(4721, 1218, "42", "Rasserine"), +(4722, 1218, "73", "Kebili"), +(4723, 1218, "12", "L\'Ariana"), +(4724, 1218, "33", "Le Ref"), +(4725, 1218, "53", "Mahdia"), +(4726, 1218, "14", "La Manouba"), +(4727, 1218, "82", "Medenine"), +(4728, 1218, "52", "Moneatir"), +(4729, 1218, "21", "Naboul"), +(4730, 1218, "61", "Sfax"), +(4731, 1218, "43", "Sidi Bouxid"), +(4732, 1218, "34", "Siliana"), +(4733, 1218, "51", "Sousse"), +(4734, 1218, "83", "Tataouine"), +(4735, 1218, "72", "Tozeur"), +(4736, 1218, "11", "Tunis"), +(4737, 1218, "22", "Zaghouan"), +(4738, 1219, "01", "Adana"), +(4739, 1219, "02", "Ad yaman"), +(4740, 1219, "03", "Afyon"), +(4741, 1219, "04", "Ag r"), +(4742, 1219, "68", "Aksaray"), +(4743, 1219, "05", "Amasya"), +(4744, 1219, "06", "Ankara"), +(4745, 1219, "07", "Antalya"), +(4746, 1219, "75", "Ardahan"), +(4747, 1219, "08", "Artvin"), +(4748, 1219, "09", "Aydin"), +(4749, 1219, "10", "Bal kesir"), +(4750, 1219, "74", "Bartin"), +(4751, 1219, "72", "Batman"), +(4752, 1219, "69", "Bayburt"), +(4753, 1219, "11", "Bilecik"), +(4754, 1219, "12", "Bingol"), +(4755, 1219, "13", "Bitlis"), +(4756, 1219, "14", "Bolu"), +(4757, 1219, "15", "Burdur"), +(4758, 1219, "16", "Bursa"), +(4759, 1219, "17", "Canakkale"), +(4760, 1219, "18", "Cankir"), +(4761, 1219, "19", "Corum"), +(4762, 1219, "20", "Denizli"), +(4763, 1219, "21", "Diyarbakir"), +(4764, 1219, "81", "Duzce"), +(4765, 1219, "22", "Edirne"), +(4766, 1219, "23", "Elazig"), +(4767, 1219, "24", "Erzincan"), +(4768, 1219, "25", "Erzurum"), +(4769, 1219, "26", "Eskis\'ehir"), +(4770, 1219, "27", "Gaziantep"), +(4771, 1219, "28", "Giresun"), +(4772, 1219, "29", "Gms\'hane"), +(4773, 1219, "30", "Hakkari"), +(4774, 1219, "31", "Hatay"), +(4775, 1219, "76", "Igidir"), +(4776, 1219, "32", "Isparta"), +(4777, 1219, "33", "Icel"), +(4778, 1219, "34", "Istanbul"), +(4779, 1219, "35", "Izmir"), +(4780, 1219, "46", "Kahramanmaras"), +(4781, 1219, "78", "Karabk"), +(4782, 1219, "70", "Karaman"), +(4783, 1219, "36", "Kars"), +(4784, 1219, "37", "Kastamonu"), +(4785, 1219, "38", "Kayseri"), +(4786, 1219, "71", "Kirikkale"), +(4787, 1219, "39", "Kirklareli"), +(4788, 1219, "40", "Kirs\'ehir"), +(4789, 1219, "79", "Kilis"), +(4790, 1219, "41", "Kocaeli"), +(4791, 1219, "42", "Konya"), +(4792, 1219, "43", "Ktahya"), +(4793, 1219, "44", "Malatya"), +(4794, 1219, "45", "Manisa"), +(4795, 1219, "47", "Mardin"), +(4796, 1219, "48", "Mugila"), +(4797, 1219, "49", "Mus"), +(4798, 1219, "50", "Nevs\'ehir"), +(4799, 1219, "51", "Nigide"), +(4800, 1219, "52", "Ordu"), +(4801, 1219, "80", "Osmaniye"), +(4802, 1219, "53", "Rize"), +(4803, 1219, "54", "Sakarya"), +(4804, 1219, "55", "Samsun"), +(4805, 1219, "56", "Siirt"), +(4806, 1219, "57", "Sinop"), +(4807, 1219, "58", "Sivas"), +(4808, 1219, "63", "S\'anliurfa"), +(4809, 1219, "73", "S\'rnak"), +(4810, 1219, "59", "Tekirdag"), +(4811, 1219, "60", "Tokat"), +(4812, 1219, "61", "Trabzon"), +(4813, 1219, "62", "Tunceli"), +(4814, 1219, "64", "Us\'ak"), +(4815, 1219, "65", "Van"), +(4816, 1219, "77", "Yalova"), +(4817, 1219, "66", "Yozgat"), +(4818, 1219, "67", "Zonguldak"), +(4819, 1217, "CTT", "Couva-Tabaquite-Talparo"), +(4820, 1217, "DMN", "Diego Martin"), +(4821, 1217, "ETO", "Eastern Tobago"), +(4822, 1217, "PED", "Penal-Debe"), +(4823, 1217, "PRT", "Princes Town"), +(4824, 1217, "RCM", "Rio Claro-Mayaro"), +(4825, 1217, "SGE", "Sangre Grande"), +(4826, 1217, "SJL", "San Juan-Laventille"), +(4827, 1217, "SIP", "Siparia"), +(4828, 1217, "TUP", "Tunapuna-Piarco"), +(4829, 1217, "WTO", "Western Tobago"), +(4830, 1217, "ARI", "Arima"), +(4831, 1217, "CHA", "Chaguanas"), +(4832, 1217, "PTF", "Point Fortin"), +(4833, 1217, "POS", "Port of Spain"), +(4834, 1217, "SFO", "San Fernando"), +(4835, 1063, "AL", "Aileu"), +(4836, 1063, "AN", "Ainaro"), +(4837, 1063, "BA", "Bacucau"), +(4838, 1063, "BO", "Bobonaro"), +(4839, 1063, "CO", "Cova Lima"), +(4840, 1063, "DI", "Dili"), +(4841, 1063, "ER", "Ermera"), +(4842, 1063, "LA", "Laulem"), +(4843, 1063, "LI", "Liquica"), +(4844, 1063, "MT", "Manatuto"), +(4845, 1063, "MF", "Manafahi"), +(4846, 1063, "OE", "Oecussi"), +(4847, 1063, "VI", "Viqueque"), +(4848, 1208, "CHA", "Changhua County"), +(4849, 1208, "CYQ", "Chiayi County"), +(4850, 1208, "HSQ", "Hsinchu County"), +(4851, 1208, "HUA", "Hualien County"), +(4852, 1208, "ILA", "Ilan County"), +(4853, 1208, "KHQ", "Kaohsiung County"), +(4854, 1208, "MIA", "Miaoli County"), +(4855, 1208, "NAN", "Nantou County"), +(4856, 1208, "PEN", "Penghu County"), +(4857, 1208, "PIF", "Pingtung County"), +(4858, 1208, "TXQ", "Taichung County"), +(4859, 1208, "TNQ", "Tainan County"), +(4860, 1208, "TPQ", "Taipei County"), +(4861, 1208, "TTT", "Taitung County"), +(4862, 1208, "TAO", "Taoyuan County"), +(4863, 1208, "YUN", "Yunlin County"), +(4864, 1208, "KEE", "Keelung City"), +(4865, 1210, "01", "Arusha"), +(4866, 1210, "02", "Dar-es-Salaam"), +(4867, 1210, "03", "Dodoma"), +(4868, 1210, "04", "Iringa"), +(4869, 1210, "05", "Kagera"), +(4870, 1210, "06", "Kaskazini Pemba"), +(4871, 1210, "07", "Kaskazini Unguja"), +(4872, 1210, "08", "Xigoma"), +(4873, 1210, "09", "Kilimanjaro"), +(4874, 1210, "10", "Rusini Pemba"), +(4875, 1210, "11", "Kusini Unguja"), +(4876, 1210, "12", "Lindi"), +(4877, 1210, "26", "Manyara"), +(4878, 1210, "13", "Mara"), +(4879, 1210, "14", "Mbeya"), +(4880, 1210, "15", "Mjini Magharibi"), +(4881, 1210, "16", "Morogoro"), +(4882, 1210, "17", "Mtwara"), +(4883, 1210, "19", "Pwani"), +(4884, 1210, "20", "Rukwa"), +(4885, 1210, "21", "Ruvuma"), +(4886, 1210, "22", "Shinyanga"), +(4887, 1210, "23", "Singida"), +(4888, 1210, "24", "Tabora"), +(4889, 1210, "25", "Tanga"), +(4890, 1224, "71", "Cherkas\'ka Oblast\'"), +(4891, 1224, "74", "Chernihivs\'ka Oblast\'"), +(4892, 1224, "77", "Chernivets\'ka Oblast\'"), +(4893, 1224, "12", "Dnipropetrovs\'ka Oblast\'"), +(4894, 1224, "14", "Donets\'ka Oblast\'"), +(4895, 1224, "26", "Ivano-Frankivs\'ka Oblast\'"), +(4896, 1224, "63", "Kharkivs\'ka Oblast\'"), +(4897, 1224, "65", "Khersons\'ka Oblast\'"), +(4898, 1224, "68", "Khmel\'nyts\'ka Oblast\'"), +(4899, 1224, "35", "Kirovohrads\'ka Oblast\'"), +(4900, 1224, "32", "Kyivs\'ka Oblast\'"), +(4901, 1224, "09", "Luhans\'ka Oblast\'"), +(4902, 1224, "46", "L\'vivs\'ka Oblast\'"), +(4903, 1224, "48", "Mykolaivs\'ka Oblast\'"), +(4904, 1224, "51", "Odes \'ka Oblast\'"), +(4905, 1224, "53", "Poltavs\'ka Oblast\'"), +(4906, 1224, "56", "Rivnens\'ka Oblast\'"), +(4907, 1224, "59", "Sums \'ka Oblast\'"), +(4908, 1224, "61", "Ternopil\'s\'ka Oblast\'"), +(4909, 1224, "05", "Vinnyts\'ka Oblast\'"), +(4910, 1224, "07", "Volyos\'ka Oblast\'"), +(4911, 1224, "21", "Zakarpats\'ka Oblast\'"), +(4912, 1224, "23", "Zaporiz\'ka Oblast\'"), +(4913, 1224, "18", "Zhytomyrs\'ka Oblast\'"), +(4914, 1224, "43", "Respublika Krym"), +(4915, 1224, "30", "Kyiv"), +(4916, 1224, "40", "Sevastopol"), +(4917, 1223, "301", "Adjumani"), +(4918, 1223, "302", "Apac"), +(4919, 1223, "303", "Arua"), +(4920, 1223, "201", "Bugiri"), +(4921, 1223, "401", "Bundibugyo"), +(4922, 1223, "402", "Bushenyi"), +(4923, 1223, "202", "Busia"), +(4924, 1223, "304", "Gulu"), +(4925, 1223, "403", "Hoima"), +(4926, 1223, "203", "Iganga"), +(4927, 1223, "204", "Jinja"), +(4928, 1223, "404", "Kabale"), +(4929, 1223, "405", "Kabarole"), +(4930, 1223, "213", "Kaberamaido"), +(4931, 1223, "101", "Kalangala"), +(4932, 1223, "102", "Kampala"), +(4933, 1223, "205", "Kamuli"), +(4934, 1223, "413", "Kamwenge"), +(4935, 1223, "414", "Kanungu"), +(4936, 1223, "206", "Kapchorwa"), +(4937, 1223, "406", "Kasese"), +(4938, 1223, "207", "Katakwi"), +(4939, 1223, "112", "Kayunga"), +(4940, 1223, "407", "Kibaale"), +(4941, 1223, "103", "Kiboga"), +(4942, 1223, "408", "Kisoro"), +(4943, 1223, "305", "Kitgum"), +(4944, 1223, "306", "Kotido"), +(4945, 1223, "208", "Kumi"), +(4946, 1223, "415", "Kyenjojo"), +(4947, 1223, "307", "Lira"), +(4948, 1223, "104", "Luwero"), +(4949, 1223, "105", "Masaka"), +(4950, 1223, "409", "Masindi"), +(4951, 1223, "214", "Mayuge"), +(4952, 1223, "209", "Mbale"), +(4953, 1223, "410", "Mbarara"), +(4954, 1223, "308", "Moroto"), +(4955, 1223, "309", "Moyo"), +(4956, 1223, "106", "Mpigi"), +(4957, 1223, "107", "Mubende"), +(4958, 1223, "108", "Mukono"), +(4959, 1223, "311", "Nakapiripirit"), +(4960, 1223, "109", "Nakasongola"), +(4961, 1223, "310", "Nebbi"), +(4962, 1223, "411", "Ntungamo"), +(4963, 1223, "312", "Pader"), +(4964, 1223, "210", "Pallisa"), +(4965, 1223, "110", "Rakai"), +(4966, 1223, "412", "Rukungiri"), +(4967, 1223, "111", "Sembabule"), +(4968, 1223, "215", "Sironko"), +(4969, 1223, "211", "Soroti"), +(4970, 1223, "212", "Tororo"), +(4971, 1223, "113", "Wakiso"), +(4972, 1223, "313", "Yumbe"), +(4973, 1227, "81", "Baker Island"), +(4974, 1227, "84", "Howland Island"), +(4975, 1227, "86", "Jarvis Island"), +(4976, 1227, "67", "Johnston Atoll"), +(4977, 1227, "89", "Kingman Reef"), +(4978, 1227, "71", "Midway Islands"), +(4979, 1227, "76", "Navassa Island"), +(4980, 1227, "95", "Palmyra Atoll"), +(4981, 1227, "79", "Wake Island"), +(4982, 1229, "AR", "Artigsa"), +(4983, 1229, "CA", "Canelones"), +(4984, 1229, "CL", "Cerro Largo"), +(4985, 1229, "CO", "Colonia"), +(4986, 1229, "DU", "Durazno"), +(4987, 1229, "FS", "Flores"), +(4988, 1229, "LA", "Lavalleja"), +(4989, 1229, "MA", "Maldonado"), +(4990, 1229, "MO", "Montevideo"), +(4991, 1229, "PA", "Paysandu"), +(4992, 1229, "RV", "Rivera"), +(4993, 1229, "RO", "Rocha"), +(4994, 1229, "SA", "Salto"), +(4995, 1229, "SO", "Soriano"), +(4996, 1229, "TA", "Tacuarembo"), +(4997, 1229, "TT", "Treinta y Tres"), +(4998, 1230, "TK", "Toshkent (city)"), +(4999, 1230, "QR", "Qoraqalpogiston Respublikasi"), +(5000, 1230, "AN", "Andijon"), +(5001, 1230, "BU", "Buxoro"), +(5002, 1230, "FA", "Farg\'ona"), +(5003, 1230, "JI", "Jizzax"), +(5004, 1230, "KH", "Khorazm"), +(5005, 1230, "NG", "Namangan"), +(5006, 1230, "NW", "Navoiy"), +(5007, 1230, "QA", "Qashqadaryo"), +(5008, 1230, "SA", "Samarqand"), +(5009, 1230, "SI", "Sirdaryo"), +(5010, 1230, "SU", "Surxondaryo"), +(5011, 1230, "TO", "Toshkent"), +(5012, 1230, "XO", "Xorazm"), +(5013, 1232, "A", "Distrito Federal"), +(5014, 1232, "B", "Anzoategui"), +(5015, 1232, "C", "Apure"), +(5016, 1232, "D", "Aragua"), +(5017, 1232, "E", "Barinas"), +(5018, 1232, "G", "Carabobo"), +(5019, 1232, "H", "Cojedes"), +(5020, 1232, "I", "Falcon"), +(5021, 1232, "J", "Guarico"), +(5022, 1232, "K", "Lara"), +(5023, 1232, "L", "Merida"), +(5024, 1232, "M", "Miranda"), +(5025, 1232, "N", "Monagas"), +(5026, 1232, "O", "Nueva Esparta"), +(5027, 1232, "P", "Portuguesa"), +(5028, 1232, "S", "Tachira"), +(5029, 1232, "T", "Trujillo"), +(5030, 1232, "X", "Vargas"), +(5031, 1232, "U", "Yaracuy"), +(5032, 1232, "V", "Zulia"), +(5033, 1232, "Y", "Delta Amacuro"), +(5034, 1232, "W", "Dependencias Federales"), +(5035, 1233, "44", "An Giang"), +(5036, 1233, "43", "Ba Ria - Vung Tau"), +(5037, 1233, "53", "Bac Can"), +(5038, 1233, "54", "Bac Giang"), +(5039, 1233, "55", "Bac Lieu"), +(5040, 1233, "56", "Bac Ninh"), +(5041, 1233, "50", "Ben Tre"), +(5042, 1233, "31", "Binh Dinh"), +(5043, 1233, "57", "Binh Duong"), +(5044, 1233, "58", "Binh Phuoc"), +(5045, 1233, "40", "Binh Thuan"), +(5046, 1233, "59", "Ca Mau"), +(5047, 1233, "48", "Can Tho"), +(5048, 1233, "04", "Cao Bang"), +(5049, 1233, "60", "Da Nang, thanh pho"), +(5050, 1233, "39", "Dong Nai"), +(5051, 1233, "45", "Dong Thap"), +(5052, 1233, "30", "Gia Lai"), +(5053, 1233, "03", "Ha Giang"), +(5054, 1233, "63", "Ha Nam"), +(5055, 1233, "64", "Ha Noi, thu do"), +(5056, 1233, "15", "Ha Tay"), +(5057, 1233, "23", "Ha Tinh"), +(5058, 1233, "61", "Hai Duong"), +(5059, 1233, "62", "Hai Phong, thanh pho"), +(5060, 1233, "14", "Hoa Binh"), +(5061, 1233, "65", "Ho Chi Minh, thanh pho [Sai Gon]"), +(5062, 1233, "66", "Hung Yen"), +(5063, 1233, "34", "Khanh Hoa"), +(5064, 1233, "47", "Kien Giang"), +(5065, 1233, "28", "Kon Tum"), +(5066, 1233, "01", "Lai Chau"), +(5067, 1233, "35", "Lam Dong"), +(5068, 1233, "09", "Lang Son"), +(5069, 1233, "02", "Lao Cai"), +(5070, 1233, "41", "Long An"), +(5071, 1233, "67", "Nam Dinh"), +(5072, 1233, "22", "Nghe An"), +(5073, 1233, "18", "Ninh Binh"), +(5074, 1233, "36", "Ninh Thuan"), +(5075, 1233, "68", "Phu Tho"), +(5076, 1233, "32", "Phu Yen"), +(5077, 1233, "24", "Quang Binh"), +(5078, 1233, "27", "Quang Nam"), +(5079, 1233, "29", "Quang Ngai"), +(5080, 1233, "13", "Quang Ninh"), +(5081, 1233, "25", "Quang Tri"), +(5082, 1233, "52", "Soc Trang"), +(5083, 1233, "05", "Son La"), +(5084, 1233, "37", "Tay Ninh"), +(5085, 1233, "20", "Thai Binh"), +(5086, 1233, "69", "Thai Nguyen"), +(5087, 1233, "21", "Thanh Hoa"), +(5088, 1233, "26", "Thua Thien-Hue"), +(5089, 1233, "46", "Tien Giang"), +(5090, 1233, "51", "Tra Vinh"), +(5091, 1233, "07", "Tuyen Quang"), +(5092, 1233, "49", "Vinh Long"), +(5093, 1233, "70", "Vinh Phuc"), +(5094, 1233, "06", "Yen Bai"), +(5095, 1231, "MAP", "Malampa"), +(5096, 1231, "PAM", "Penama"), +(5097, 1231, "SAM", "Sanma"), +(5098, 1231, "SEE", "Shefa"), +(5099, 1231, "TAE", "Tafea"), +(5100, 1231, "TOB", "Torba"), +(5101, 1185, "AA", "A\'ana"), +(5102, 1185, "AL", "Aiga-i-le-Tai"), +(5103, 1185, "AT", "Atua"), +(5104, 1185, "FA", "Fa\'aaaleleaga"), +(5105, 1185, "GE", "Gaga\'emauga"), +(5106, 1185, "GI", "Gagaifomauga"), +(5107, 1185, "PA", "Palauli"), +(5108, 1185, "SA", "Satupa\'itea"), +(5109, 1185, "TU", "Tuamasaga"), +(5110, 1185, "VF", "Va\'a-o-Fonoti"), +(5111, 1185, "VS", "Vaisigano"), +(5112, 1243, "CG", "Crna Gora"), +(5113, 1242, "SR", "Srbija"), +(5114, 1242, "KM", "Kosovo-Metohija"), +(5115, 1242, "VO", "Vojvodina"), +(5116, 1237, "AB", "Abyan"), +(5117, 1237, "AD", "Adan"), +(5118, 1237, "DA", "Ad Dali"), +(5119, 1237, "BA", "Al Bayda\'"), +(5120, 1237, "MU", "Al Hudaydah"), +(5121, 1237, "MR", "Al Mahrah"), +(5122, 1237, "MW", "Al Mahwit"), +(5123, 1237, "AM", "Amran"), +(5124, 1237, "DH", "Dhamar"), +(5125, 1237, "HD", "Hadramawt"), +(5126, 1237, "HJ", "Hajjah"), +(5127, 1237, "IB", "Ibb"), +(5128, 1237, "LA", "Lahij"), +(5129, 1237, "MA", "Ma\'rib"), +(5130, 1237, "SD", "Sa\'dah"), +(5131, 1237, "SN", "San\'a\'"), +(5132, 1237, "SH", "Shabwah"), +(5133, 1237, "TA", "Ta\'izz"), +(5134, 1196, "EC", "Eastern Cape"), +(5135, 1196, "FS", "Free State"), +(5136, 1196, "GT", "Gauteng"), +(5137, 1196, "NL", "Kwazulu-Natal"), +(5138, 1196, "MP", "Mpumalanga"), +(5139, 1196, "NC", "Northern Cape"), +(5140, 1196, "NP", "Limpopo"), +(5141, 1196, "WC", "Western Cape"), +(5142, 1239, "08", "Copperbelt"), +(5143, 1239, "04", "Luapula"), +(5144, 1239, "09", "Lusaka"), +(5145, 1239, "06", "North-Western"), +(5146, 1240, "BU", "Bulawayo"), +(5147, 1240, "HA", "Harare"), +(5148, 1240, "MA", "Manicaland"), +(5149, 1240, "MC", "Mashonaland Central"), +(5150, 1240, "ME", "Mashonaland East"), +(5151, 1240, "MW", "Mashonaland West"), +(5152, 1240, "MV", "Masvingo"), +(5153, 1240, "MN", "Matabeleland North"), +(5154, 1240, "MS", "Matabeleland South"), +(5155, 1240, "MI", "Midlands"), +(5156, 1075, "SK", "South Karelia"), +(5157, 1075, "SO", "South Ostrobothnia"), +(5158, 1075, "ES", "Etelä-Savo"), +(5159, 1075, "HH", "Häme"), +(5160, 1075, "IU", "Itä-Uusimaa"), +(5161, 1075, "KA", "Kainuu"), +(5162, 1075, "CO", "Central Ostrobothnia"), +(5163, 1075, "CF", "Central Finland"), +(5164, 1075, "KY", "Kymenlaakso"), +(5165, 1075, "LA", "Lapland"), +(5166, 1075, "TR", "Tampere Region"), +(5167, 1075, "OB", "Ostrobothnia"), +(5168, 1075, "NK", "North Karelia"), +(5169, 1075, "NO", "Northern Ostrobothnia"), +(5170, 1075, "NS", "Northern Savo"), +(5171, 1075, "PH", "Päijät-Häme"), +(5172, 1075, "SK", "Satakunta"), +(5173, 1075, "UM", "Uusimaa"), +(5174, 1075, "SW", "South-West Finland"), +(5175, 1075, "AL", "Ã…land"), +(5176, 1152, "LI", "Limburg"), +(5177, 1098, "CW", "Central and Western"), +(5178, 1098, "EA", "Eastern"), +(5179, 1098, "SO", "Southern"), +(5180, 1098, "WC", "Wan Chai"), +(5181, 1098, "KC", "Kowloon City"), +(5182, 1098, "KU", "Kwun Tong"), +(5183, 1098, "SS", "Sham Shui Po"), +(5184, 1098, "WT", "Wong Tai Sin"), +(5185, 1098, "YT", "Yau Tsim Mong"), +(5186, 1098, "IS", "Islands"), +(5187, 1098, "KI", "Kwai Tsing"), +(5188, 1098, "NO", "North"), +(5189, 1098, "SK", "Sai Kung"), +(5190, 1098, "ST", "Sha Tin"), +(5191, 1098, "TP", "Tai Po"), +(5192, 1098, "TW", "Tsuen Wan"), +(5193, 1098, "TM", "Tuen Mun"), +(5194, 1098, "YL", "Yuen Long"), +(5195, 1108, "MR", "Manchester"), +(5196, 1016, "13", "Al ManÄmah (Al ‘Āşimah)"), +(5197, 1016, "14", "Al JanÅ«bÄ«yah"), +-- (5198, 1016, "15", "Al Muḩarraq"), -- conflicts with id 1872, Al Muharraq +(5199, 1016, "16", "Al Wusţá"), +(5200, 1016, "17", "Ash ShamÄlÄ«yah"), + +-- Palestinian governorates from http://en.wikipedia.org/wiki/Governorates_of_the_Palestinian_National_Authority (no ISO 3166-2 entries yet, hence temporary codes) +(5201, 1165, "_A", "Jenin"), +(5202, 1165, "_B", "Tubas"), +(5203, 1165, "_C", "Tulkarm"), +(5204, 1165, "_D", "Nablus"), +(5205, 1165, "_E", "Qalqilya"), +(5206, 1165, "_F", "Salfit"), +(5207, 1165, "_G", "Ramallah and Al-Bireh"), +(5208, 1165, "_H", "Jericho"), +(5209, 1165, "_I", "Jerusalem"), +(5210, 1165, "_J", "Bethlehem"), +(5211, 1165, "_K", "Hebron"), +(5212, 1165, "_L", "North Gaza"), +(5213, 1165, "_M", "Gaza"), +(5214, 1165, "_N", "Deir el-Balah"), +(5215, 1165, "_O", "Khan Yunis"), +(5216, 1165, "_P", "Rafah"), + +(5217, 1020, "BRU", "Brussels"), + +(5218, 1140, "DIF", "Distrito Federal"), +(5219, 1208, "TXG", "Taichung City"), +(5220, 1208, "KHH", "Kaohsiung City"), +(5221, 1208, "TPE", "Taipei City"), +(5222, 1208, "CYI", "Chiayi City"), +(5223, 1208, "HSZ", "Hsinchu City"), +(5224, 1208, "TNN", "Tainan City"), +(9000, 1196, "NW", "North West"), + +(9986, 1226, "TWR", "Tyne and Wear"), +(9988, 1226, "GTM", "Greater Manchester"), +(9989, 1226, "TYR", "Co Tyrone"), +(9990, 1226, "WYK", "West Yorkshire"), +(9991, 1226, "SYK", "South Yorkshire"), +(9992, 1226, "MSY", "Merseyside"), +(9993, 1226, "BRK", "Berkshire"), +(9994, 1226, "WMD", "West Midlands"), +(9998, 1226, "WGM", "West Glamorgan"), +(9999, 1226, "LON", "London"), + +(10000, 1107, "CI", "Carbonia-Iglesias"), +(10001, 1107, "OT", "Olbia-Tempio"), +(10002, 1107, "VS", "Medio Campidano"), +(10003, 1107, "OG", "Ogliastra"), + +-- department of France (CRM-4769) +(10009, 1076, "39", "Jura"), + +-- new Italian provinces, as yet without codes (CRM-5048) +(10010, 1107, "Bar", "Barletta-Andria-Trani"), +(10011, 1107, "Fer", "Fermo"), +(10012, 1107, "Mon", "Monza e Brianza"), + +-- new UK provinces (CRM-5224) +(10013, 1226, "CWD", "Clwyd"), +(10014, 1226, "DFD", "Dyfed"), +(10015, 1226, "SGM", "South Glamorgan"), + +-- Haiti (CRM-5628) +(10016, 1094, "AR", "Artibonite"), +(10017, 1094, "CE", "Centre"), +(10018, 1094, "NI", "Nippes"), +(10019, 1094, "ND", "Nord"), + +-- CRM-6002 - Argentinian provinces suplemented +(10020, 1010, "F", "La Rioja"), + +-- CRM-6063 - Added states for Andorra +(10021, 1005, "07", "Andorra la Vella"), +(10022, 1005, "02", "Canillo"), +(10023, 1005, "03", "Encamp"), +(10024, 1005, "08", "Escaldes-Engordany"), +(10025, 1005, "04", "La Massana"), +(10026, 1005, "05", "Ordino"), +(10027, 1005, "06", "Sant Julia de Loria"), + +-- CRM-6198 - Added provinces of Bahamas +(NULL, 1212, "AB", "Abaco Islands"), +(NULL, 1212, "AN", "Andros Island"), +(NULL, 1212, "BR", "Berry Islands"), +(NULL, 1212, "EL", "Eleuthera"), +(NULL, 1212, "GB", "Grand Bahama"), +(NULL, 1212, "RC", "Rum Cay"), +(NULL, 1212, "SS", "San Salvador Island"), + +-- Added provinces of The Democratic Republic of the Congo + +(NULL, 1050, "01", "Kongo central"), +(NULL, 1050, "02", "Kwango"), +(NULL, 1050, "03", "Kwilu"), +(NULL, 1050, "04", "Mai-Ndombe"), +(NULL, 1050, "05", "Kasai"), +(NULL, 1050, "06", "Lulua"), +(NULL, 1050, "07", "Lomami"), +(NULL, 1050, "08", "Sankuru"), +(NULL, 1050, "09", "Ituri"), +(NULL, 1050, "10", "Haut-Uele"), +(NULL, 1050, "11", "Tshopo"), +(NULL, 1050, "12", "Bas-Uele"), +(NULL, 1050, "13", "Nord-Ubangi"), +(NULL, 1050, "14", "Mongala"), +(NULL, 1050, "15", "Sud-Ubangi"), +(NULL, 1050, "16", "Tshuapa"), +(NULL, 1050, "17", "Haut-Lomami"), +(NULL, 1050, "18", "Lualaba"), +(NULL, 1050, "19", "Haut-Katanga"), +(NULL, 1050, "20", "Tanganyika"), + +-- CRM-8009 Added Missing Provinces for Spain +(NULL, 1198, "TO", "Toledo" ), +(NULL, 1198, "CO", "Córdoba" ), + +-- CRM-8769 Added Missing Province for Philippines +(NULL, 1170, "MNL", "Metropolitan Manila" ), + +-- CRM-9686 Added Missing Province for Honduras +(NULL, 1097, "LP", "La Paz"), + +-- CRM-10473 Added Missing Provinces of Ningxia Autonomous Region of China +(NULL, 1045, "YN", "Yinchuan"), +(NULL, 1045, "SZ", "Shizuishan"), +(NULL, 1045, "WZ", "Wuzhong"), +(NULL, 1045, "GY", "Guyuan"), +(NULL, 1045, "ZW", "Zhongwei"), + +-- CRM-10863 Added Missing Province for Luxembourg +(NULL, 1126, "L", "Luxembourg"), + +-- CRM-11367 Latvian regions +(NULL, 1119, "002", "Aizkraukles novads"), +(NULL, 1119, "038", "Jaunjelgavas novads"), +(NULL, 1119, "072", "Pļaviņu novads"), +(NULL, 1119, "046", "Kokneses novads"), +(NULL, 1119, "065", "Neretas novads"), +(NULL, 1119, "092", "SkrÄ«veru novads"), +(NULL, 1119, "007", "AlÅ«ksnes novads"), +(NULL, 1119, "009", "Apes novads"), +(NULL, 1119, "015", "Balvu novads"), +(NULL, 1119, "108", "Viļakas novads"), +(NULL, 1119, "014", "Baltinavas novads"), +(NULL, 1119, "082", "RugÄju novads"), +(NULL, 1119, "016", "Bauskas novads"), +(NULL, 1119, "034", "Iecavas novads"), +(NULL, 1119, "083", "RundÄles novads"), +(NULL, 1119, "105", "Vecumnieku novads"), +(NULL, 1119, "022", "CÄ“su novads"), +(NULL, 1119, "055", "LÄ«gatnes novads"), +(NULL, 1119, "008", "Amatas novads"), +(NULL, 1119, "039", "Jaunpiebalgas novads"), +(NULL, 1119, "075", "Priekuļu novads"), +(NULL, 1119, "070", "PÄrgaujas novads"), +(NULL, 1119, "076", "Raunas novads"), +(NULL, 1119, "104", "Vecpiebalgas novads"), +(NULL, 1119, "025", "Daugavpils novads"), +(NULL, 1119, "036", "IlÅ«kstes novads"), +(NULL, 1119, "026", "Dobeles novads"), +(NULL, 1119, "010", "Auces novads"), +(NULL, 1119, "098", "TÄ“rvetes novads"), +(NULL, 1119, "033", "Gulbenes novads"), +(NULL, 1119, "041", "Jelgavas novads"), +(NULL, 1119, "069", "Ozolnieku novads"), +(NULL, 1119, "042", "JÄ“kabpils novads"), +(NULL, 1119, "004", "AknÄ«stes novads"), +(NULL, 1119, "107", "ViesÄ«tes novads"), +(NULL, 1119, "049", "Krustpils novads"), +(NULL, 1119, "085", "Salas novads"), +(NULL, 1119, "047", "KrÄslavas novads"), +(NULL, 1119, "024", "Dagdas novads"), +(NULL, 1119, "001", "Aglonas novads"), +(NULL, 1119, "050", "KuldÄ«gas novads"), +(NULL, 1119, "093", "Skrundas novads"), +(NULL, 1119, "006", "Alsungas novads"), +(NULL, 1119, "003", "Aizputes novads"), +(NULL, 1119, "028", "Durbes novads"), +(NULL, 1119, "032", "Grobiņas novads"), +(NULL, 1119, "071", "PÄvilostas novads"), +(NULL, 1119, "074", "Priekules novads"), +(NULL, 1119, "066", "NÄ«cas novads"), +(NULL, 1119, "081", "Rucavas novads"), +(NULL, 1119, "100", "Vaiņodes novads"), +(NULL, 1119, "054", "Limbažu novads"), +(NULL, 1119, "005", "Alojas novads"), +(NULL, 1119, "086", "SalacgrÄ«vas novads"), +(NULL, 1119, "058", "Ludzas novads"), +(NULL, 1119, "044", "KÄrsavas novads"), +(NULL, 1119, "110", "Zilupes novads"), +(NULL, 1119, "023", "Ciblas novads"), +(NULL, 1119, "059", "Madonas novads"), +(NULL, 1119, "021", "Cesvaines novads"), +(NULL, 1119, "057", "LubÄnas novads"), +(NULL, 1119, "102", "VarakļÄnu novads"), +(NULL, 1119, "030", "Ä’rgļu novads"), +(NULL, 1119, "067", "Ogres novads"), +(NULL, 1119, "035", "IkÅ¡Ä·iles novads"), +(NULL, 1119, "051", "Ķeguma novads"), +(NULL, 1119, "053", "LielvÄrdes novads"), +(NULL, 1119, "073", "Preiļu novads"), +(NULL, 1119, "056", "LÄ«vÄnu novads"), +(NULL, 1119, "078", "Riebiņu novads"), +(NULL, 1119, "103", "VÄrkavas novads"), +(NULL, 1119, "077", "RÄ“zeknes novads"), +(NULL, 1119, "109", "ViļÄnu novads"), +(NULL, 1119, "013", "Baldones novads"), +(NULL, 1119, "052", "Ķekavas novads"), +(NULL, 1119, "068", "Olaines novads"), +(NULL, 1119, "087", "Salaspils novads"), +(NULL, 1119, "089", "Saulkrastu novads"), +(NULL, 1119, "091", "Siguldas novads"), +(NULL, 1119, "037", "InÄukalna novads"), +(NULL, 1119, "011", "Ä€dažu novads"), +(NULL, 1119, "012", "BabÄ«tes novads"), +(NULL, 1119, "020", "Carnikavas novads"), +(NULL, 1119, "031", "Garkalnes novads"), +(NULL, 1119, "048", "Krimuldas novads"), +(NULL, 1119, "061", "MÄlpils novads"), +(NULL, 1119, "062", "MÄrupes novads"), +(NULL, 1119, "080", "Ropažu novads"), +(NULL, 1119, "090", "SÄ“jas novads"), +(NULL, 1119, "095", "Stopiņu novads"), +(NULL, 1119, "088", "Saldus novads"), +(NULL, 1119, "018", "BrocÄ“nu novads"), +(NULL, 1119, "097", "Talsu novads"), +(NULL, 1119, "027", "Dundagas novads"), +(NULL, 1119, "063", "MÄ“rsraga novads"), +(NULL, 1119, "079", "Rojas novads"), +(NULL, 1119, "099", "Tukuma novads"), +(NULL, 1119, "043", "Kandavas novads"), +(NULL, 1119, "029", "Engures novads"), +(NULL, 1119, "040", "Jaunpils novads"), +(NULL, 1119, "101", "Valkas novads"), +(NULL, 1119, "094", "Smiltenes novads"), +(NULL, 1119, "096", "StrenÄu novads"), +(NULL, 1119, "045", "KocÄ“nu novads"), +(NULL, 1119, "060", "Mazsalacas novads"), +(NULL, 1119, "084", "RÅ«jienas novads"), +(NULL, 1119, "017", "BeverÄ«nas novads"), +(NULL, 1119, "019", "Burtnieku novads"), +(NULL, 1119, "064", "NaukÅ¡Ä“nu novads"), +(NULL, 1119, "106", "Ventspils novads"), +(NULL, 1119, "JKB", "JÄ“kabpils"), +(NULL, 1119, "VMR", "Valmiera"), + +-- CRM-13314 Added States for Uruguay +(NULL, 1229, "FL", "Florida"), +(NULL, 1229, "RN", "Rio Negro"), +(NULL, 1229, "SJ", "San Jose"), + +-- Added Nigeria States(CRM-14183) +(NULL, 1157, "PL", "Plateau"), + + +-- CRM-14493 Added State for Greece +(NULL, 1085, "61", "Pieria"), + +-- CRM-14843 Added States for Chile and Modify Santiago Metropolitan for consistency +(NULL, 1044, "LR", "Los Rios"), +(NULL, 1044, "AP", "Arica y Parinacota"), + +-- Add missing Peruvian State (Amazonas) +(NULL, 1169, "AMA", "Amazonas"), + +-- Add missing Indonesian provinces (Kalimantan Tengah, Sulawesi Barat, Kalimantan Utara) and revised outdated names in code above +(NULL, 1102, "KT", "Kalimantan Tengah"), +(NULL, 1102, "SR", "Sulawesi Barat"), +(NULL, 1102, "KU", "Kalimantan Utara"), + +-- Add missing Slovenian municipalities +(NULL, 1193, "86", "Ankaran"), +(NULL, 1193, "87", "ApaÄe"), +(NULL, 1193, "88", "Cirkulane"), +(NULL, 1193, "89", "Gorje"), +(NULL, 1193, "90", "Kostanjevica na Krki"), +(NULL, 1193, "91", "Log-Dragomer"), +(NULL, 1193, "92", "Makole"), +(NULL, 1193, "93", "Mirna"), +(NULL, 1193, "94", "Mokronog-Trebelno"), +(NULL, 1193, "95", "Odranci"), +(NULL, 1193, "96", "Oplotnica"), +(NULL, 1193, "97", "Ormož"), +(NULL, 1193, "98", "Osilnica"), +(NULL, 1193, "99", "Pesnica"), +(NULL, 1193, "100", "Piran"), +(NULL, 1193, "101", "Pivka"), +(NULL, 1193, "102", "PodÄetrtek"), +(NULL, 1193, "103", "Podlehnik"), +(NULL, 1193, "104", "Podvelka"), +(NULL, 1193, "105", "PoljÄane"), +(NULL, 1193, "106", "Polzela"), +(NULL, 1193, "107", "Postojna"), +(NULL, 1193, "108", "Prebold"), +(NULL, 1193, "109", "Preddvor"), +(NULL, 1193, "110", "Prevalje"), +(NULL, 1193, "111", "Ptuj"), +(NULL, 1193, "112", "Puconci"), +(NULL, 1193, "113", "RaÄe-Fram"), +(NULL, 1193, "114", "RadeÄe"), +(NULL, 1193, "115", "Radenci"), +(NULL, 1193, "139", "Radlje ob Dravi"), +(NULL, 1193, "145", "Radovljica"), +(NULL, 1193, "171", "Ravne na KoroÅ¡kem"), +(NULL, 1193, "172", "Razkrižje"), +(NULL, 1193, "173", "ReÄica ob Savinji"), +(NULL, 1193, "174", "RenÄe-Vogrsko"), +(NULL, 1193, "175", "Ribnica"), +(NULL, 1193, "176", "Ribnica na Pohorju"), +(NULL, 1193, "177", "RogaÅ¡ka Slatina"), +(NULL, 1193, "178", "RogaÅ¡ovci"), +(NULL, 1193, "179", "Rogatec"), +(NULL, 1193, "180", "RuÅ¡e"), +(NULL, 1193, "195", "Selnica ob Dravi"), +(NULL, 1193, "196", "SemiÄ"), +(NULL, 1193, "197", "Å entrupert"), +(NULL, 1193, "198", "Sevnica"), +(NULL, 1193, "199", "Sežana"), +(NULL, 1193, "200", "Slovenj Gradec"), +(NULL, 1193, "201", "Slovenska Bistrica"), +(NULL, 1193, "202", "Slovenske Konjice"), +(NULL, 1193, "203", "Å marjeÅ¡ke Toplice"), +(NULL, 1193, "204", "Sodražica"), +(NULL, 1193, "205", "SolÄava"), +(NULL, 1193, "206", "SrediÅ¡Äe ob Dravi"), +(NULL, 1193, "207", "StarÅ¡e"), +(NULL, 1193, "208", "Straža"), +(NULL, 1193, "209", "Sveta Trojica v Slovenskih goricah"), +(NULL, 1193, "210", "Sveti Jurij v Slovenskih goricah"), +(NULL, 1193, "211", "Sveti Tomaž"), +(NULL, 1193, "212", "Vodice"), + +-- CRM-16452 Missing administrative divisions for Georgia +(NULL, 1081, "AB", "Abkhazia"), +(NULL, 1081, "AJ", "Adjara"), +(NULL, 1081, "TB", "Tbilisi"), +(NULL, 1081, "GU", "Guria"), +(NULL, 1081, "IM", "Imereti"), +(NULL, 1081, "KA", "Kakheti"), +(NULL, 1081, "KK", "Kvemo Kartli"), +(NULL, 1081, "MM", "Mtskheta-Mtianeti"), +(NULL, 1081, "RL", "Racha-Lechkhumi and Kvemo Svaneti"), +(NULL, 1081, "SZ", "Samegrelo-Zemo Svaneti"), +(NULL, 1081, "SJ", "Samtskhe-Javakheti"), +(NULL, 1081, "SK", "Shida Kartli"), +(NULL, 1074, "C", "Central"), + +-- CRM-17136 Add missing Pakistani Province (Punjab) +(NULL, 1163, "PB", "Punjab"), + +-- CRM-17184 +(NULL, 1066, "LI", "La Libertad"), +(NULL, 1066, "PA", "La Paz"), +(NULL, 1066, "UN", "La Union"), + +-- CRM-17660 Add missing Cameroon Provinces +(NULL, 1038, "LT", "Littoral"), +(NULL, 1038, "NW", "Nord-Ouest"), + +-- Add Indian province of Telangana +(NULL, 1101, "TG", "Telangana"), + +-- CRM-17800 +(NULL, 1187, "04", "Ash Sharqiyah"), + +-- CRM-19134 Missing French overseas departments. +(NULL, 1076, "GP", "Guadeloupe"), +(NULL, 1076, "MQ", "Martinique"), +(NULL, 1076, "GF", "Guyane"), +(NULL, 1076, "RE", "La Réunion"), +(NULL, 1076, "YT", "Mayotte"), + +-- CRM-20062 New counties of Kenya. +(NULL, 1112, "01", "Baringo"), +(NULL, 1112, "02", "Bomet"), +(NULL, 1112, "03", "Bungoma"), +(NULL, 1112, "04", "Busia"), +(NULL, 1112, "05", "Elgeyo/Marakwet"), +(NULL, 1112, "06", "Embu"), +(NULL, 1112, "07", "Garissa"), +(NULL, 1112, "08", "Homa Bay"), +(NULL, 1112, "09", "Isiolo"), +(NULL, 1112, "10", "Kajiado"), +(NULL, 1112, "11", "Kakamega"), +(NULL, 1112, "12", "Kericho"), +(NULL, 1112, "13", "Kiambu"), +(NULL, 1112, "14", "Kilifi"), +(NULL, 1112, "15", "Kirinyaga"), +(NULL, 1112, "16", "Kisii"), +(NULL, 1112, "17", "Kisumu"), +(NULL, 1112, "18", "Kitui"), +(NULL, 1112, "19", "Kwale"), +(NULL, 1112, "20", "Laikipia"), +(NULL, 1112, "21", "Lamu"), +(NULL, 1112, "22", "Machakos"), +(NULL, 1112, "23", "Makueni"), +(NULL, 1112, "24", "Mandera"), +(NULL, 1112, "25", "Marsabit"), +(NULL, 1112, "26", "Meru"), +(NULL, 1112, "27", "Migori"), +(NULL, 1112, "28", "Mombasa"), +(NULL, 1112, "29", "Murang'a"), +(NULL, 1112, "30", "Nairobi City"), +(NULL, 1112, "31", "Nakuru"), +(NULL, 1112, "32", "Nandi"), +(NULL, 1112, "33", "Narok"), +(NULL, 1112, "34", "Nyamira"), +(NULL, 1112, "35", "Nyandarua"), +(NULL, 1112, "36", "Nyeri"), +(NULL, 1112, "37", "Samburu"), +(NULL, 1112, "38", "Siaya"), +(NULL, 1112, "39", "Taita/Taveta"), +(NULL, 1112, "40", "Tana River"), +(NULL, 1112, "41", "Tharaka-Nithi"), +(NULL, 1112, "42", "Trans Nzoia"), +(NULL, 1112, "43", "Turkana"), +(NULL, 1112, "44", "Uasin Gishu"), +(NULL, 1112, "45", "Vihiga"), +(NULL, 1112, "46", "Wajir"), +(NULL, 1112, "47", "West Pokot"), + +-- CRM-19993 Fixes for ISO compliance with countries and counties +-- Add states for: India, Ghana, Sierra Leone, Saint Kitts & Nevis +(NULL, 1101, "CH", "Chandigarh"), +(NULL, 1083, "CP", "Central"), +(NULL, 1083, "EP", "Eastern"), +(NULL, 1083, "NP", "Northern"), +(NULL, 1083, "WP", "Western"), +(NULL, 1181, "K", "Saint Kitts"), +(NULL, 1181, "N", "Nevis"), +(NULL, 1190, "E", "Eastern"), +(NULL, 1190, "N", "Northern"), +(NULL, 1190, "S", "Southern"), + +-- CRM-21234 Missing subdivisions of Tajikistan. +(NULL, 1209, "DU", "Dushanbe"), +(NULL, 1209, "RA", "Nohiyahoi Tobei JumhurÃ"), + +-- CRM-21268 Missing French overseas departments. +(NULL, 1076, "WF", "Wallis-et-Futuna"), +(NULL, 1076, "NC", "Nouvelle-Calédonie"), + +-- CRM-21532 Add French state/departments +(NULL, 1076, "52", "Haute-Marne"), + +-- Add states for: Barbados and Antigua and Barbuda +(NULL, 1009, "03", "Saint George"), +(NULL, 1009, "04", "Saint John"), +(NULL, 1009, "05", "Saint Mary"), +(NULL, 1009, "06", "Saint Paul"), +(NULL, 1009, "07", "Saint Peter"), +(NULL, 1009, "08", "Saint Philip"), +(NULL, 1009, "10", "Barbuda"), +(NULL, 1009, "11", "Redonda"), +(NULL, 1018, "01", "Christ Church"), +(NULL, 1018, "02", "Saint Andrew"), +(NULL, 1018, "03", "Saint George"), +(NULL, 1018, "04", "Saint James"), +(NULL, 1018, "05", "Saint John"), +(NULL, 1018, "06", "Saint Joseph"), +(NULL, 1018, "07", "Saint Lucy"), +(NULL, 1018, "08", "Saint Michael"), +(NULL, 1018, "09", "Saint Peter"), +(NULL, 1018, "10", "Saint Philip"), +(NULL, 1018, "11", "Saint Thomas"), + +-- CRM-21837 - Missing states for Gabon +(NULL, 1080, "01", "Estuaire"), +(NULL, 1080, "02", "Haut-Ogooué"), +(NULL, 1080, "03", "Moyen-Ogooué"), +(NULL, 1080, "04", "Ngounié"), +(NULL, 1080, "05", "Nyanga"), +(NULL, 1080, "06", "Ogooué-Ivindo"), +(NULL, 1080, "07", "Ogooué-Lolo"), +(NULL, 1080, "08", "Ogooué-Maritime"), +(NULL, 1080, "09", "Woleu-Ntem"); \ No newline at end of file diff --git a/civicrm/xml/templates/civicrm_version.tpl b/civicrm/xml/templates/civicrm_version.tpl new file mode 100644 index 0000000000000000000000000000000000000000..a91c1c26ec10a94994a2a328a922e7fca057fedb --- /dev/null +++ b/civicrm/xml/templates/civicrm_version.tpl @@ -0,0 +1,8 @@ +<?php +/** + * Get the CiviCRM version. + */ +function civicrmVersion( ) {ldelim} + return array( 'version' => '{$db_version}', + 'cms' => '{$cms}', ); +{rdelim} diff --git a/civicrm/xml/templates/civicrm_version_sql.tpl b/civicrm/xml/templates/civicrm_version_sql.tpl new file mode 100644 index 0000000000000000000000000000000000000000..3a199a484cdd1b20efb8563291c307ffb6445aa2 --- /dev/null +++ b/civicrm/xml/templates/civicrm_version_sql.tpl @@ -0,0 +1 @@ +UPDATE civicrm_domain SET version = '{$db_version}'; diff --git a/civicrm/xml/templates/dao.tpl b/civicrm/xml/templates/dao.tpl new file mode 100644 index 0000000000000000000000000000000000000000..222ffbb30928f9bc2f9d2e44398349db0003f6c8 --- /dev/null +++ b/civicrm/xml/templates/dao.tpl @@ -0,0 +1,240 @@ +<?php +/** + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2018 + * + * Generated from {$table.sourceFile} + * {$generated} + * (GenCodeChecksum:{$genCodeChecksum}) + */ + +/** + * Database access object for the {$table.entity} entity. + */ +class {$table.className} extends CRM_Core_DAO {ldelim} + + /** + * Static instance to hold the table name. + * + * @var string + */ + static $_tableName = '{$table.name}'; + + /** + * Should CiviCRM log any modifications to this table in the civicrm_log table. + * + * @var bool + */ + static $_log = {$table.log|strtoupper}; + +{foreach from=$table.fields item=field} + /** +{if $field.comment} + * {$field.comment} + * +{/if} + * @var {$field.phpType} + */ + public ${$field.name}; + +{/foreach} {* table.fields *} + + /** + * Class constructor. + */ + public function __construct( ) {ldelim} + $this->__table = '{$table.name}'; + + parent::__construct( ); + {rdelim} + +{if $table.foreignKey || $table.dynamicForeignKey} + /** + * Returns foreign keys and entity references. + * + * @return array + * [CRM_Core_Reference_Interface] + */ + public static function getReferenceColumns() {ldelim} + if (!isset(Civi::$statics[__CLASS__]['links'])) {ldelim} + Civi::$statics[__CLASS__]['links'] = static::createReferenceColumns(__CLASS__); +{foreach from=$table.foreignKey item=foreign} + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Basic(self::getTableName(), '{$foreign.name}', '{$foreign.table}', '{$foreign.key}'); +{/foreach} + +{foreach from=$table.dynamicForeignKey item=foreign} + Civi::$statics[__CLASS__]['links'][] = new CRM_Core_Reference_Dynamic(self::getTableName(), '{$foreign.idColumn}', NULL, '{$foreign.key|default:'id'}', '{$foreign.typeColumn}'); +{/foreach} + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'links_callback', Civi::$statics[__CLASS__]['links']); + {rdelim} + return Civi::$statics[__CLASS__]['links']; + {rdelim} +{/if} {* table.foreignKey *} + + /** + * Returns all the column names of this table + * + * @return array + */ + public static function &fields( ) {ldelim} + if ( ! isset(Civi::$statics[__CLASS__]['fields']) ) {ldelim} + Civi::$statics[__CLASS__]['fields'] = array( +{foreach from=$table.fields item=field} + +{if $field.uniqueName} + '{$field.uniqueName}' +{else} + '{$field.name}' +{/if} + => array( + 'name' => '{$field.name}', + 'type' => {$field.crmType}, +{if $field.title} + 'title' => ts('{$field.title}'), +{/if} +{if $field.comment} + 'description' => '{$field.comment|replace:"'":"\'"}', +{/if} +{if $field.required} + 'required' => {$field.required|strtoupper}, +{/if} {* field.required *} +{if $field.length} + 'maxlength' => {$field.length}, +{/if} {* field.length *} +{if $field.precision} + 'precision' => array({$field.precision}), +{/if} +{if $field.size} + 'size' => {$field.size}, +{/if} {* field.size *} +{if $field.rows} + 'rows' => {$field.rows}, +{/if} {* field.rows *} +{if $field.cols} + 'cols' => {$field.cols}, +{/if} {* field.cols *} + +{if $field.import} + 'import' => {$field.import|strtoupper}, + 'where' => '{$table.name}.{$field.name}', + 'headerPattern' => '{$field.headerPattern}', + 'dataPattern' => '{$field.dataPattern}', +{/if} {* field.import *} +{if $field.export} + 'export' => {$field.export|strtoupper}, + {if ! $field.import} + 'where' => '{$table.name}.{$field.name}', + 'headerPattern' => '{$field.headerPattern}', + 'dataPattern' => '{$field.dataPattern}', + {/if} +{/if} {* field.export *} +{if $field.rule} + 'rule' => '{$field.rule}', +{/if} {* field.rule *} +{if $field.default} + 'default' => '{if ($field.default[0]=="'" or $field.default[0]=='"')}{$field.default|substring:1:-1}{else}{$field.default}{/if}', +{/if} {* field.default *} + 'table_name' => '{$table.name}', + 'entity' => '{$table.entity}', + 'bao' => '{$table.bao}', + 'localizable' => {if ($field.localizable)}{1}{else}{0}{/if}, + +{if $field.FKClassName} + 'FKClassName' => '{$field.FKClassName}', +{/if} +{if $field.serialize} + 'serialize' => self::SERIALIZE_{$field.serialize|strtoupper}, +{/if} +{if $field.html} + 'html' => {$field.html|@print_array}, +{/if} {* field.html *} +{if $field.pseudoconstant} + 'pseudoconstant' => {$field.pseudoconstant|@print_array} +{/if} {* field.pseudoconstant *} ), +{/foreach} {* table.fields *} + ); + CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']); + {rdelim} + return Civi::$statics[__CLASS__]['fields']; + {rdelim} + + /** + * Return a mapping from field-name to the corresponding key (as used in fields()). + * + * @return array + * Array(string $name => string $uniqueName). + */ + public static function &fieldKeys( ) {ldelim} + if (!isset(Civi::$statics[__CLASS__]['fieldKeys'])) {ldelim} + Civi::$statics[__CLASS__]['fieldKeys'] = array_flip(CRM_Utils_Array::collect('name', self::fields())); + {rdelim} + return Civi::$statics[__CLASS__]['fieldKeys']; + {rdelim} + + /** + * Returns the names of this table + * + * @return string + */ + public static function getTableName( ) {ldelim} + {if $table.localizable} + return CRM_Core_DAO::getLocaleTableName( self::$_tableName ); + {else} + return self::$_tableName; + {/if} + {rdelim} + + /** + * Returns if this table needs to be logged + * + * @return bool + */ + public function getLog( ) {ldelim} + return self::$_log; + {rdelim} + + /** + * Returns the list of fields that can be imported + * + * @param bool $prefix + * + * @return array + */ + public static function &import( $prefix = FALSE ) {ldelim} + $r = CRM_Core_DAO_AllCoreTables::getImports(__CLASS__, '{$table.labelName}', $prefix, array( + {if $table.foreignKey}{foreach from=$table.foreignKey item=foreign} + {if $foreign.import}'{$foreign.className}',{/if} + {/foreach}{/if} + )); + return $r; + {rdelim} + + /** + * Returns the list of fields that can be exported + * + * @param bool $prefix + * + * @return array + */ + public static function &export( $prefix = FALSE ) {ldelim} + $r = CRM_Core_DAO_AllCoreTables::getExports(__CLASS__, '{$table.labelName}', $prefix, array( + {if $table.foreignKey}{foreach from=$table.foreignKey item=foreign} + {if $foreign.export}'{$foreign.className}',{/if} + {/foreach}{/if} + )); + return $r; + {rdelim} + + /** + * Returns the list of indices + * + * @param bool $localize + * + * @return array + */ + public static function indices($localize = TRUE) {ldelim} + $indices = {$indicesPhp}; + return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices; + {rdelim} + +{rdelim} diff --git a/civicrm/xml/templates/drop.tpl b/civicrm/xml/templates/drop.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c851acc3f719b903fb6db7f6c06b9e464d451e7e --- /dev/null +++ b/civicrm/xml/templates/drop.tpl @@ -0,0 +1,40 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +-- /******************************************************* +-- * +-- * Clean up the exisiting tables +-- * +-- *******************************************************/ + +SET FOREIGN_KEY_CHECKS=0; + +{foreach from=$dropOrder item=name} +DROP TABLE IF EXISTS `{$name}`; +{/foreach} + +SET FOREIGN_KEY_CHECKS=1; diff --git a/civicrm/xml/templates/joomla.tpl b/civicrm/xml/templates/joomla.tpl new file mode 100644 index 0000000000000000000000000000000000000000..f51a8cba80705871eda97558e175caec3fb73246 --- /dev/null +++ b/civicrm/xml/templates/joomla.tpl @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Generated from {$smarty.template} + {$generated} +--> +<extension method="upgrade" type="component" version="2.5"> + <name>CiviCRM</name> + <creationDate>{$creationDate}</creationDate> + <copyright>(C) CiviCRM LLC</copyright> + <author>CiviCRM LLC</author> + <authorEmail>info@civicrm.org</authorEmail> + <authorUrl>civicrm.org</authorUrl> + <version>{$CiviCRMVersion}</version> + <description>CiviCRM</description> + <files folder="site"> + <filename>civicrm.php</filename> + <filename>civicrm.html.php</filename> + <folder>views</folder> + <folder>elements</folder> + </files> + <install> + <queries> + </queries> + </install> + <uninstall> + <queries> + </queries> + </uninstall> + <scriptfile>script.civicrm.php</scriptfile> + <administration> + <menu task="civicrm/dashboard&reset=1">COM_CIVICRM_MENU</menu> + <files folder="admin"> + <filename>admin.civicrm.php</filename> + <filename>civicrm.php</filename> + <filename>configure.php</filename> + <filename>access.xml</filename> + <filename>config.xml</filename> +{if $pkgType eq 'alt'} + <folder>civicrm</folder> +{else} + <filename>civicrm.zip</filename> +{/if} + <folder>helpers</folder> + </files> + <languages folder="admin"> + <language tag="en-GB">language/en-GB/en-GB.com_civicrm.ini</language> + <language tag="en-GB">language/en-GB/en-GB.com_civicrm.sys.ini</language> + </languages> + </administration> + <plugins> + <plugin folder="admin/plugins" plugin="civicrm" name="CiviCRM User Management" group="user" /> + <plugin folder="admin/plugins" plugin="civicrmsys" name="CiviCRM System Listener" group="system" /> + <plugin folder="admin/plugins" plugin="civicrmicon" name="CiviCRM QuickIcon" group="quickicon" /> + </plugins> +</extension> diff --git a/civicrm/xml/templates/languages.tpl b/civicrm/xml/templates/languages.tpl new file mode 100644 index 0000000000000000000000000000000000000000..e14eb8a860d79d482a550cb3240f770a93e000a9 --- /dev/null +++ b/civicrm/xml/templates/languages.tpl @@ -0,0 +1,212 @@ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +-- CRM-6138 +-- language list from http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes +-- most common languages, according to http://en.wikipedia.org/wiki/List_of_languages_by_number_of_native_speakers enabled + +INSERT INTO `civicrm_option_group` + (`name`, {localize field='title'}`title`{/localize}, {localize field='description'}`description`{/localize}, `is_reserved`, `is_active`) +VALUES + ('languages', {localize}'{ts escape="sql"}Languages{/ts}'{/localize}, {localize}'{ts escape="sql"}List of Languages{/ts}'{/localize}, 1, 1); + +SELECT @option_group_id_languages := max(id) from civicrm_option_group where name = 'languages'; + +SELECT @counter := 0; +INSERT INTO civicrm_option_value + (option_group_id, is_default, is_active, name, value, {localize field='label'}label{/localize}, weight) +VALUES + (@option_group_id_languages, 0, 0, 'ab_GE', 'ab', {localize}'{ts escape="sql"}Abkhaz{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'aa_ET', 'aa', {localize}'{ts escape="sql"}Afar{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'af_ZA', 'af', {localize}'{ts escape="sql"}Afrikaans{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ak_GH', 'ak', {localize}'{ts escape="sql"}Akan{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'sq_AL', 'sq', {localize}'{ts escape="sql"}Albanian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'am_ET', 'am', {localize}'{ts escape="sql"}Amharic{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'ar_EG', 'ar', {localize}'{ts escape="sql"}Arabic{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'an_ES', 'an', {localize}'{ts escape="sql"}Aragonese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'hy_AM', 'hy', {localize}'{ts escape="sql"}Armenian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'as_IN', 'as', {localize}'{ts escape="sql"}Assamese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'av_RU', 'av', {localize}'{ts escape="sql"}Avaric{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ae_XX', 'ae', {localize}'{ts escape="sql"}Avestan{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ay_BO', 'ay', {localize}'{ts escape="sql"}Aymara{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'az_AZ', 'az', {localize}'{ts escape="sql"}Azerbaijani{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'bm_ML', 'bm', {localize}'{ts escape="sql"}Bambara{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ba_RU', 'ba', {localize}'{ts escape="sql"}Bashkir{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'eu_ES', 'eu', {localize}'{ts escape="sql"}Basque{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'be_BY', 'be', {localize}'{ts escape="sql"}Belarusian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'bn_BD', 'bn', {localize}'{ts escape="sql"}Bengali{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'bh_IN', 'bh', {localize}'{ts escape="sql"}Bihari{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'bi_VU', 'bi', {localize}'{ts escape="sql"}Bislama{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'bs_BA', 'bs', {localize}'{ts escape="sql"}Bosnian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'br_FR', 'br', {localize}'{ts escape="sql"}Breton{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'bg_BG', 'bg', {localize}'{ts escape="sql"}Bulgarian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'my_MM', 'my', {localize}'{ts escape="sql"}Burmese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'ca_ES', 'ca', {localize}'{ts escape="sql"}Catalan; Valencian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ch_GU', 'ch', {localize}'{ts escape="sql"}Chamorro{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ce_RU', 'ce', {localize}'{ts escape="sql"}Chechen{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ny_MW', 'ny', {localize}'{ts escape="sql"}Chichewa; Chewa; Nyanja{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'zh_CN', 'zh', {localize}'{ts escape="sql"}Chinese (China){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'zh_TW', 'zh', {localize}'{ts escape="sql"}Chinese (Taiwan){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'cv_RU', 'cv', {localize}'{ts escape="sql"}Chuvash{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'kw_GB', 'kw', {localize}'{ts escape="sql"}Cornish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'co_FR', 'co', {localize}'{ts escape="sql"}Corsican{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'cr_CA', 'cr', {localize}'{ts escape="sql"}Cree{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'hr_HR', 'hr', {localize}'{ts escape="sql"}Croatian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'cs_CZ', 'cs', {localize}'{ts escape="sql"}Czech{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'da_DK', 'da', {localize}'{ts escape="sql"}Danish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'dv_MV', 'dv', {localize}'{ts escape="sql"}Divehi; Dhivehi; Maldivian;{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'nl_NL', 'nl', {localize}'{ts escape="sql"}Dutch{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'dz_BT', 'dz', {localize}'{ts escape="sql"}Dzongkha{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'en_AU', 'en', {localize}'{ts escape="sql"}English (Australia){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'en_CA', 'en', {localize}'{ts escape="sql"}English (Canada){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'en_GB', 'en', {localize}'{ts escape="sql"}English (United Kingdom){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 1, 1, 'en_US', 'en', {localize}'{ts escape="sql"}English (United States){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'eo_XX', 'eo', {localize}'{ts escape="sql"}Esperanto{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'et_EE', 'et', {localize}'{ts escape="sql"}Estonian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ee_GH', 'ee', {localize}'{ts escape="sql"}Ewe{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'fo_FO', 'fo', {localize}'{ts escape="sql"}Faroese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'fj_FJ', 'fj', {localize}'{ts escape="sql"}Fijian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'fi_FI', 'fi', {localize}'{ts escape="sql"}Finnish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'fr_CA', 'fr', {localize}'{ts escape="sql"}French (Canada){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'fr_FR', 'fr', {localize}'{ts escape="sql"}French (France){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ff_SN', 'ff', {localize}'{ts escape="sql"}Fula; Fulah; Pulaar; Pular{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'gl_ES', 'gl', {localize}'{ts escape="sql"}Galician{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ka_GE', 'ka', {localize}'{ts escape="sql"}Georgian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'de_DE', 'de', {localize}'{ts escape="sql"}German{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'de_CH', 'de', {localize}'{ts escape="sql"}German (Swiss){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'el_GR', 'el', {localize}'{ts escape="sql"}Greek, Modern{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'gn_PY', 'gn', {localize}'{ts escape="sql"}GuaraniÂ{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'gu_IN', 'gu', {localize}'{ts escape="sql"}Gujarati{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ht_HT', 'ht', {localize}'{ts escape="sql"}Haitian; Haitian Creole{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ha_NG', 'ha', {localize}'{ts escape="sql"}Hausa{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'he_IL', 'he', {localize}'{ts escape="sql"}Hebrew (modern){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'hz_NA', 'hz', {localize}'{ts escape="sql"}Herero{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'hi_IN', 'hi', {localize}'{ts escape="sql"}Hindi{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ho_PG', 'ho', {localize}'{ts escape="sql"}Hiri Motu{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'hu_HU', 'hu', {localize}'{ts escape="sql"}Hungarian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ia_XX', 'ia', {localize}'{ts escape="sql"}Interlingua{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'id_ID', 'id', {localize}'{ts escape="sql"}Indonesian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ie_XX', 'ie', {localize}'{ts escape="sql"}Interlingue{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ga_IE', 'ga', {localize}'{ts escape="sql"}Irish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ig_NG', 'ig', {localize}'{ts escape="sql"}Igbo{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ik_US', 'ik', {localize}'{ts escape="sql"}Inupiaq{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'io_XX', 'io', {localize}'{ts escape="sql"}Ido{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'is_IS', 'is', {localize}'{ts escape="sql"}Icelandic{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'it_IT', 'it', {localize}'{ts escape="sql"}Italian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'iu_CA', 'iu', {localize}'{ts escape="sql"}Inuktitut{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'ja_JP', 'ja', {localize}'{ts escape="sql"}Japanese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'jv_ID', 'jv', {localize}'{ts escape="sql"}Javanese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'kl_GL', 'kl', {localize}'{ts escape="sql"}Kalaallisut, Greenlandic{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'kn_IN', 'kn', {localize}'{ts escape="sql"}Kannada{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'kr_NE', 'kr', {localize}'{ts escape="sql"}Kanuri{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ks_IN', 'ks', {localize}'{ts escape="sql"}Kashmiri{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'kk_KZ', 'kk', {localize}'{ts escape="sql"}Kazakh{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'km_KH', 'km', {localize}'{ts escape="sql"}Khmer{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ki_KE', 'ki', {localize}'{ts escape="sql"}Kikuyu, Gikuyu{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'rw_RW', 'rw', {localize}'{ts escape="sql"}Kinyarwanda{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ky_KG', 'ky', {localize}'{ts escape="sql"}Kirghiz, Kyrgyz{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'kv_RU', 'kv', {localize}'{ts escape="sql"}Komi{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'kg_CD', 'kg', {localize}'{ts escape="sql"}Kongo{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ko_KR', 'ko', {localize}'{ts escape="sql"}Korean{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ku_IQ', 'ku', {localize}'{ts escape="sql"}Kurdish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'kj_NA', 'kj', {localize}'{ts escape="sql"}Kwanyama, Kuanyama{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'la_VA', 'la', {localize}'{ts escape="sql"}Latin{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'lb_LU', 'lb', {localize}'{ts escape="sql"}Luxembourgish, Letzeburgesch{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'lg_UG', 'lg', {localize}'{ts escape="sql"}Luganda{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'li_NL', 'li', {localize}'{ts escape="sql"}Limburgish, Limburgan, Limburger{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ln_CD', 'ln', {localize}'{ts escape="sql"}Lingala{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'lo_LA', 'lo', {localize}'{ts escape="sql"}Lao{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'lt_LT', 'lt', {localize}'{ts escape="sql"}Lithuanian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'lu_CD', 'lu', {localize}'{ts escape="sql"}Luba-Katanga{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'lv_LV', 'lv', {localize}'{ts escape="sql"}Latvian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'gv_IM', 'gv', {localize}'{ts escape="sql"}Manx{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'mk_MK', 'mk', {localize}'{ts escape="sql"}Macedonian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'mg_MG', 'mg', {localize}'{ts escape="sql"}Malagasy{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ms_MY', 'ms', {localize}'{ts escape="sql"}Malay{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ml_IN', 'ml', {localize}'{ts escape="sql"}Malayalam{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'mt_MT', 'mt', {localize}'{ts escape="sql"}Maltese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'mi_NZ', 'mi', {localize}'{ts escape="sql"}MÄori{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'mr_IN', 'mr', {localize}'{ts escape="sql"}Marathi{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'mh_MH', 'mh', {localize}'{ts escape="sql"}Marshallese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'mn_MN', 'mn', {localize}'{ts escape="sql"}Mongolian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'na_NR', 'na', {localize}'{ts escape="sql"}Nauru{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'nv_US', 'nv', {localize}'{ts escape="sql"}Navajo, Navaho{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'nb_NO', 'nb', {localize}'{ts escape="sql"}Norwegian BokmÃ¥l{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'nd_ZW', 'nd', {localize}'{ts escape="sql"}North Ndebele{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ne_NP', 'ne', {localize}'{ts escape="sql"}Nepali{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ng_NA', 'ng', {localize}'{ts escape="sql"}Ndonga{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'nn_NO', 'nn', {localize}'{ts escape="sql"}Norwegian Nynorsk{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'no_NO', 'no', {localize}'{ts escape="sql"}Norwegian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ii_CN', 'ii', {localize}'{ts escape="sql"}Nuosu{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'nr_ZA', 'nr', {localize}'{ts escape="sql"}South Ndebele{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'oc_FR', 'oc', {localize}'{ts escape="sql"}Occitan (after 1500){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'oj_CA', 'oj', {localize}'{ts escape="sql"}Ojibwa{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'cu_BG', 'cu', {localize}'{ts escape="sql"}Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'om_ET', 'om', {localize}'{ts escape="sql"}Oromo{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'or_IN', 'or', {localize}'{ts escape="sql"}Oriya{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'os_GE', 'os', {localize}'{ts escape="sql"}Ossetian, Ossetic{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'pa_IN', 'pa', {localize}'{ts escape="sql"}Panjabi, Punjabi{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'pi_KH', 'pi', {localize}'{ts escape="sql"}Pali{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'fa_IR', 'fa', {localize}'{ts escape="sql"}Persian (Iran){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'pl_PL', 'pl', {localize}'{ts escape="sql"}Polish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ps_AF', 'ps', {localize}'{ts escape="sql"}Pashto, Pushto{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'pt_BR', 'pt', {localize}'{ts escape="sql"}Portuguese (Brazil){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'pt_PT', 'pt', {localize}'{ts escape="sql"}Portuguese (Portugal){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'qu_PE', 'qu', {localize}'{ts escape="sql"}Quechua{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'rm_CH', 'rm', {localize}'{ts escape="sql"}Romansh{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'rn_BI', 'rn', {localize}'{ts escape="sql"}Kirundi{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'ro_RO', 'ro', {localize}'{ts escape="sql"}Romanian, Moldavian, Moldovan{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'ru_RU', 'ru', {localize}'{ts escape="sql"}Russian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'sa_IN', 'sa', {localize}'{ts escape="sql"}Sanskrit{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'sc_IT', 'sc', {localize}'{ts escape="sql"}Sardinian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'sd_IN', 'sd', {localize}'{ts escape="sql"}Sindhi{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'se_NO', 'se', {localize}'{ts escape="sql"}Northern Sami{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'sm_WS', 'sm', {localize}'{ts escape="sql"}Samoan{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'sg_CF', 'sg', {localize}'{ts escape="sql"}Sango{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'sr_RS', 'sr', {localize}'{ts escape="sql"}Serbian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'gd_GB', 'gd', {localize}'{ts escape="sql"}Scottish Gaelic; Gaelic{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'sn_ZW', 'sn', {localize}'{ts escape="sql"}Shona{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'si_LK', 'si', {localize}'{ts escape="sql"}Sinhala, Sinhalese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'sk_SK', 'sk', {localize}'{ts escape="sql"}Slovak{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'sl_SI', 'sl', {localize}'{ts escape="sql"}Slovene{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'so_SO', 'so', {localize}'{ts escape="sql"}Somali{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'st_ZA', 'st', {localize}'{ts escape="sql"}Southern Sotho{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'es_ES', 'es', {localize}'{ts escape="sql"}Spanish; Castilian (Spain){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'es_MX', 'es', {localize}'{ts escape="sql"}Spanish; Castilian (Mexico){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'es_PR', 'es', {localize}'{ts escape="sql"}Spanish; Castilian (Puerto Rico){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'su_ID', 'su', {localize}'{ts escape="sql"}Sundanese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'sw_TZ', 'sw', {localize}'{ts escape="sql"}Swahili{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ss_ZA', 'ss', {localize}'{ts escape="sql"}Swati{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'sv_SE', 'sv', {localize}'{ts escape="sql"}Swedish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ta_IN', 'ta', {localize}'{ts escape="sql"}Tamil{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'te_IN', 'te', {localize}'{ts escape="sql"}Telugu{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'tg_TJ', 'tg', {localize}'{ts escape="sql"}Tajik{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'th_TH', 'th', {localize}'{ts escape="sql"}Thai{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ti_ET', 'ti', {localize}'{ts escape="sql"}Tigrinya{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'bo_CN', 'bo', {localize}'{ts escape="sql"}Tibetan Standard, Tibetan, Central{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'tk_TM', 'tk', {localize}'{ts escape="sql"}Turkmen{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'tl_PH', 'tl', {localize}'{ts escape="sql"}Tagalog{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'tn_ZA', 'tn', {localize}'{ts escape="sql"}Tswana{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'to_TO', 'to', {localize}'{ts escape="sql"}Tonga (Tonga Islands){/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'tr_TR', 'tr', {localize}'{ts escape="sql"}Turkish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ts_ZA', 'ts', {localize}'{ts escape="sql"}Tsonga{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'tt_RU', 'tt', {localize}'{ts escape="sql"}Tatar{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'tw_GH', 'tw', {localize}'{ts escape="sql"}Twi{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ty_PF', 'ty', {localize}'{ts escape="sql"}Tahitian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ug_CN', 'ug', {localize}'{ts escape="sql"}Uighur, Uyghur{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'uk_UA', 'uk', {localize}'{ts escape="sql"}Ukrainian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'ur_PK', 'ur', {localize}'{ts escape="sql"}Urdu{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'uz_UZ', 'uz', {localize}'{ts escape="sql"}Uzbek{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 've_ZA', 've', {localize}'{ts escape="sql"}Venda{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 1, 'vi_VN', 'vi', {localize}'{ts escape="sql"}Vietnamese{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'vo_XX', 'vo', {localize}'{ts escape="sql"}Volapük{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'wa_BE', 'wa', {localize}'{ts escape="sql"}Walloon{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'cy_GB', 'cy', {localize}'{ts escape="sql"}Welsh{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'wo_SN', 'wo', {localize}'{ts escape="sql"}Wolof{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'fy_NL', 'fy', {localize}'{ts escape="sql"}Western Frisian{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'xh_ZA', 'xh', {localize}'{ts escape="sql"}Xhosa{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'yi_US', 'yi', {localize}'{ts escape="sql"}Yiddish{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'yo_NG', 'yo', {localize}'{ts escape="sql"}Yoruba{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'za_CN', 'za', {localize}'{ts escape="sql"}Zhuang, Chuang{/ts}'{/localize}, @counter := @counter + 1), + (@option_group_id_languages, 0, 0, 'zu_ZA', 'zu', {localize}'{ts escape="sql"}Zulu{/ts}'{/localize}, @counter := @counter + 1); diff --git a/civicrm/xml/templates/listAll.tpl b/civicrm/xml/templates/listAll.tpl new file mode 100644 index 0000000000000000000000000000000000000000..32d6313ec298a47efe0e0fe2ba6969431832afed --- /dev/null +++ b/civicrm/xml/templates/listAll.tpl @@ -0,0 +1,39 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ +*/ + +// (GenCodeChecksum:{$genCodeChecksum}) + +return array( +{foreach from=$tables key=tableName item=table} + '{$table.className}' => array( + 'name' => '{$table.objectName}', + 'class' => '{$table.className}', + 'table' => '{$tableName}', + ), +{/foreach} +); diff --git a/civicrm/xml/templates/message_templates/case_activity_html.tpl b/civicrm/xml/templates/message_templates/case_activity_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..0dcc6c47656fa81491667656686429d19ed042c5 --- /dev/null +++ b/civicrm/xml/templates/message_templates/case_activity_html.tpl @@ -0,0 +1,104 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Activity Summary{/ts} - {$activityTypeName} + </th> + </tr> + {if $isCaseActivity} + <tr> + <td {$labelStyle}> + {ts}Your Case Role(s){/ts} + </td> + <td {$valueStyle}> + {$contact.role} + </td> + </tr> + {if $manageCaseURL} + <tr> + <td colspan="2" {$valueStyle}> + <a href="{$manageCaseURL}" title="{ts}Manage Case{/ts}">{ts}Manage Case{/ts}</a> + </td> + </tr> + {/if} + {/if} + {if $editActURL} + <tr> + <td colspan="2" {$valueStyle}> + <a href="{$editActURL}" title="{ts}Edit activity{/ts}">{ts}Edit activity{/ts}</a> + </td> + </tr> + {/if} + {if $viewActURL} + <tr> + <td colspan="2" {$valueStyle}> + <a href="{$viewActURL}" title="{ts}View activity{/ts}">{ts}View activity{/ts}</a> + </td> + </tr> + {/if} + {foreach from=$activity.fields item=field} + <tr> + <td {$labelStyle}> + {$field.label}{if $field.category}({$field.category}){/if} + </td> + <td {$valueStyle}> + {if $field.type eq 'Date'} + {$field.value|crmDate:$config->dateformatDatetime} + {else} + {$field.value} + {/if} + </td> + </tr> + {/foreach} + + {foreach from=$activity.customGroups key=customGroupName item=customGroup} + <tr> + <th {$headerStyle}> + {$customGroupName} + </th> + </tr> + {foreach from=$customGroup item=field} + <tr> + <td {$labelStyle}> + {$field.label} + </td> + <td {$valueStyle}> + {if $field.type eq 'Date'} + {$field.value|crmDate:$config->dateformatDatetime} + {else} + {$field.value} + {/if} + </td> + </tr> + {/foreach} + {/foreach} + </table> + </td> + </tr> + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/case_activity_subject.tpl b/civicrm/xml/templates/message_templates/case_activity_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..bad8753838041f4e122b1620382ff8d650e22900 --- /dev/null +++ b/civicrm/xml/templates/message_templates/case_activity_subject.tpl @@ -0,0 +1 @@ +{if $idHash}[case #{$idHash}]{/if} {$activitySubject} diff --git a/civicrm/xml/templates/message_templates/case_activity_text.tpl b/civicrm/xml/templates/message_templates/case_activity_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..0bfa04a85ba25145a2b143e4160746caeb7b7a52 --- /dev/null +++ b/civicrm/xml/templates/message_templates/case_activity_text.tpl @@ -0,0 +1,38 @@ +=========================================================== +{ts}Activity Summary{/ts} - {$activityTypeName} +=========================================================== +{if $isCaseActivity} +{ts}Your Case Role(s){/ts} : {$contact.role} +{if $manageCaseURL} +{ts}Manage Case{/ts} : {$manageCaseURL} +{/if} +{/if} + +{if $editActURL} +{ts}Edit activity{/ts} : {$editActURL} +{/if} +{if $viewActURL} +{ts}View activity{/ts} : {$viewActURL} +{/if} + +{foreach from=$activity.fields item=field} +{if $field.type eq 'Date'} +{$field.label}{if $field.category}({$field.category}){/if} : {$field.value|crmDate:$config->dateformatDatetime} +{else} +{$field.label}{if $field.category}({$field.category}){/if} : {$field.value} +{/if} +{/foreach} + +{foreach from=$activity.customGroups key=customGroupName item=customGroup} +========================================================== +{$customGroupName} +========================================================== +{foreach from=$customGroup item=field} +{if $field.type eq 'Date'} +{$field.label} : {$field.value|crmDate:$config->dateformatDatetime} +{else} +{$field.label} : {$field.value} +{/if} +{/foreach} + +{/foreach} diff --git a/civicrm/xml/templates/message_templates/contribution_dupalert_html.tpl b/civicrm/xml/templates/message_templates/contribution_dupalert_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..0f782a9c980f54f8f295b877c12769c7d60c5c11 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_dupalert_html.tpl @@ -0,0 +1,86 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts}</p> + <p>{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts}</p> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <td {$labelStyle}> + {ts}Organization Name{/ts} + </td> + <td {$valueStyle}> + {$onBehalfName} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Organization Email{/ts} + </td> + <td {$valueStyle}> + {$onBehalfEmail} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Organization Contact ID{/ts} + </td> + <td {$valueStyle}> + {$onBehalfID} + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td> + <p>{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to "Contacts >> Find and Merge Duplicate Contacts". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts}</p> + </td> + </tr> + {if $receiptMessage} + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Copy of Contribution Receipt{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {* FIXME: the below is most probably not HTML-ised *} + {$receiptMessage} + </td> + </tr> + </table> + </td> + </tr> + {/if} + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/contribution_dupalert_subject.tpl b/civicrm/xml/templates/message_templates/contribution_dupalert_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..3e255fa5fb05faaea921361cbfcb83cbd4a6fff4 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_dupalert_subject.tpl @@ -0,0 +1 @@ +{ts}CiviContribute Alert: Possible Duplicate Contact Record{/ts} diff --git a/civicrm/xml/templates/message_templates/contribution_dupalert_text.tpl b/civicrm/xml/templates/message_templates/contribution_dupalert_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..28b2a37f2235b15023c3f037acaa287bb776d897 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_dupalert_text.tpl @@ -0,0 +1,17 @@ +{ts}A contribution / membership signup was made on behalf of the organization listed below.{/ts} +{ts}The information provided matched multiple existing database records based on the configured Duplicate Matching Rules for your site.{/ts} + +{ts}Organization Name{/ts}: {$onBehalfName} +{ts}Organization Email{/ts}: {$onBehalfEmail} +{ts}Organization Contact ID{/ts}: {$onBehalfID} + +{ts}If you think this may be a duplicate contact which should be merged with an existing record - Go to "Contacts >> Find and Merge Duplicate Contacts". Use the strict rule for Organizations to find the potential duplicates and merge them if appropriate.{/ts} + +{if $receiptMessage} +########################################################### +{ts}Copy of Contribution Receipt{/ts} + +########################################################### +{$receiptMessage} + +{/if} diff --git a/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..75d7bf006c457ba98d6123280fcc32a428dd9fcb --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_html.tpl @@ -0,0 +1,458 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns = "http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv = "Content-Type" content="text/html; charset=UTF-8" /> + <title></title> + </head> + <body> + <table style = "margin-top:2px;padding-left:7px;"> + <tr> + <td><img src = "{$resourceBase}/i/civi99.png" height = "34px" width = "99px"></td> + </tr> + </table> + <center> + <table style = "padding-right:19px;font-family: Arial, Verdana, sans-serif;" width = "500" height = "100" border = "0" cellpadding = "2" cellspacing = "1"> + <tr> + <td style = "padding-left:15px;" ><b><font size = "4" align = "center">{ts}INVOICE{/ts}</font></b></td> + <td colspan = "1"></td> + <td style = "padding-left:70px;"><b><font size = "1" align = "center" >{ts}Invoice Date:{/ts}</font></b></td> + <td><font size = "1" align = "right">{$domain_organization}</font></td> + </tr> + <tr> + {if $organization_name} + <td style = "padding-left:17px;"><font size = "1" align = "center" >{$display_name} ({$organization_name})</font></td> + {else} + <td style = "padding-left:15px;"><font size = "1" align = "center" >{$display_name}</font></td> + {/if} + <td colspan = "1"></td> + <td style = "padding-left:70px;"><font size = "1" align = "right">{$invoice_date}</font></td> + <td> + <font size = "1" align = "right"> + {if $domain_street_address }{$domain_street_address}{/if} + {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if} + </font> + </td> + </tr> + <tr> + <td style = "padding-left:17px;"><font size = "1" align = "center">{$street_address} {$supplemental_address_1}</font></td> + <td colspan = "1"></td> + <td style = "padding-left:70px;"><b><font size = "1" align = "right">{ts}Invoice Number:{/ts}</font></b></td> + <td> + <font size = "1" align = "right"> + {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if} + {if $domain_state }{$domain_state}{/if} + </font> + </td> + </tr> + <tr> + <td style = "padding-left:17px;"><font size = "1" align = "center">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td> + <td colspan="1"></td> + <td style = "padding-left:70px;"><font size = "1" align = "right">{$invoice_number}</font></td> + <td> + <font size = "1" align = "right"> + {if $domain_city}{$domain_city}{/if} + {if $domain_postal_code }{$domain_postal_code}{/if} + </font> + </td> + </tr> + <tr> + <td style = "padding-left:17px;"><font size = "1" align = "right">{$city} {$postal_code}</font></td> + <td colspan="1"></td> + <td height = "10" style = "padding-left:70px;"><b><font size = "1"align = "right">{ts}Reference:{/ts}</font></b></td> + <td><font size = "1" align = "right"> {if $domain_country}{$domain_country}{/if}</font></td> + </tr> + <tr> + <td></td> + <td></td> + <td style = "padding-left:70px;"><font size = "1"align = "right">{$source}</font></td> + <td><font size = "1" align = "right"> {if $domain_phone}{$domain_phone}{/if}</font> </td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td><font size = "1" align = "right"> {if $domain_email}{$domain_email}{/if}</font> </td> + </tr> + </table> + <table style = "margin-top:75px;font-family: Arial, Verdana, sans-serif" width = "590" border = "0"cellpadding = "-5" cellspacing = "19" id = "desc"> + <tr> + <td colspan = "2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th style = "padding-right:34px;text-align:left;font-weight:bold;width:200px;"><font size = "1">{ts}Description{/ts}</font></th> + <th style = "padding-left:34px;text-align:right;font-weight:bold;" ><font size = "1">{ts}Quantity{/ts}</font></th> + <th style = "padding-left:34px;text-align:right;font-weight:bold;"><font size = "1">{ts}Unit Price{/ts}</font></th> + <th style = "padding-left:34px;text-align:right;font-weight:bold;width:20px;"><font size = "1">{$taxTerm} </font></th> + <th style = "padding-left:34px;text-align:right;font-weight:bold;"><font size = "1">{ts 1=$defaultCurrency}Amount %1{/ts}</font></th> + </tr> + {foreach from=$lineItem item=value key=priceset name=taxpricevalue} + {if $smarty.foreach.taxpricevalue.index eq 0} + <tr> + <td colspan = "5" ><hr size="3" style = "color:#000;"></hr></td> + </tr> + {else} + <tr> + <td colspan = "5" style = "color:#F5F5F5;"><hr></hr></td> + </tr> + {/if} + <tr> + <td style="text-align:left;" ><font size = "1"> + {if $value.html_type eq 'Text'} + {$value.label} + {else} + {$value.field_title} - {$value.label} + {/if} + {if $value.description} + <div>{$value.description|truncate:30:"..."}</div> + {/if} + </font> + </td> + <td style = "padding-left:34px;text-align:right;"><font size = "1"> {$value.qty}</font></td> + <td style = "padding-left:34px;text-align:right;"><font size = "1"> {$value.unit_price|crmMoney:$currency}</font></td> + {if $value.tax_amount != ''} + <td style = "padding-left:34px;text-align:right;width:20px;"><font size = "1"> {$value.tax_rate}%</font></td> + {else} + <td style = "padding-left:34px;text-align:right;width:20px;"><font size = "1">{ts 1=$taxTerm}No %1{/ts}</font></td> + {/if} + <td style = "padding-left:34px;text-align:right;"><font size = "1">{$value.subTotal|crmMoney:$currency}</font></td> + </tr> + {/foreach} + <tr><td colspan = "5" style = "color:#F5F5F5;"><hr></hr></td></tr> + <tr> + <td colspan = "3"></td> + <td style = "padding-left:20px;text-align:right;"><font size = "1">{ts}Sub Total{/ts}</font></td> + <td style = "padding-left:34px;text-align:right;"><font size = "1"> {$subTotal|crmMoney:$currency}</font></td> + </tr> + {foreach from = $dataArray item = value key = priceset} + <tr> + <td colspan = "3"></td> + {if $priceset} + <td style = "padding-left:20px;text-align:right;"><font size = "1"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td> + <td style = "padding-left:34px;text-align:right"><font size = "1" align = "right">{$value|crmMoney:$currency}</font> </td> + {elseif $priceset == 0} + <td style = "padding-left:20px;text-align:right;"><font size = "1">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td> + <td style = "padding-left:34px;text-align:right"><font size = "1" align = "right">{$value|crmMoney:$currency}</font> </td> + </tr> + {/if} + {/foreach} + <tr> + <td colspan = "3"></td> + <td colspan = "2"><hr></hr></td> + </tr> + <tr> + <td colspan = "3"></td> + <td style = "padding-left:20px;text-align:right;"><b><font size = "1">{ts 1=$defaultCurrency}TOTAL %1{/ts}</font></b></td> + <td style = "padding-left:34px;text-align:right;"><font size = "1">{$amount|crmMoney:$currency}</font></td> + <td style = "padding-left:34px;"><font size = "1" align = "right"></font></td> + </tr> + {if $is_pay_later == 0} + <tr> + <td colspan = "3"></td> + <td style = "padding-left:20px;text-align:right;"><font size = "1"> + {if $contribution_status_id == $refundedStatusId} + {ts}LESS Amount Credited{/ts} + {else} + {ts}LESS Amount Paid{/ts} + {/if} + </font> + </td> + <td style = "padding-left:34px;text-align:right;"><font size = "1">{$amountPaid|crmMoney:$currency}</font></td> + </tr> + <tr> + <td colspan = "3"></td> + <td colspan = "2" ><hr></hr></td> + </tr> + <tr> + <td colspan = "3"></td> + <td style = "padding-left:20px;text-align:right;"><b><font size = "1">{ts}AMOUNT DUE:{/ts} </font></b></td> + <td style = "padding-left:34px;text-align:right;"><b><font size = "1">{$amountDue|crmMoney:$currency}</font></b></td> + <td style = "padding-left:34px;"><font size = "1" align = "right"></font></td> + </tr> + {/if} + <br/><br/><br/> + <tr> + <td colspan = "3"></td> + </tr> + {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1} + <tr> + <td><b><font size = "1" align = "center">{ts 1=$dueDate}DUE DATE: %1{/ts}</font></b></td> + <td colspan = "3"></td> + </tr> + {/if} + </table> + </td> + </tr> + </table> + {if $contribution_status_id == $pendingStatusId && $is_pay_later == 1} + <table style = "margin-top:5px;padding-right:45px;"> + <tr> + <td><img src = "{$resourceBase}/i/contribute/cut_line.png" height = "15" width = "630"></td> + </tr> + </table> + <table style = "margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif" width = "480" border = "0"cellpadding = "-5" cellspacing="19" id = "desc"> + <tr> + <td width="60%"><b><font size = "4" align = "right">{ts}PAYMENT ADVICE{/ts}</font></b> <br/><br/> <font size = "1" align = "right"><b>{ts}To: {/ts}</b><div style="width:17em;word-wrap:break-word;"> + {$domain_organization} <br /> + {$domain_street_address} {$domain_supplemental_address_1} <br /> + {$domain_supplemental_address_2} {$domain_state} <br /> + {$domain_city} {$domain_postal_code} <br /> + {$domain_country} <br /> + {$domain_phone} <br /> + {$domain_email}</div> + </font><br/><br/><font size="1" align="right">{$notes}</font> + </td> + <td width="40%"> + <table cellpadding = "-10" cellspacing = "22" align="right" > + <tr> + <td colspan = "2"></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{ts}Customer: {/ts}</font></td> + <td ><font size = "1" align = "right">{$display_name}</font></td> + </tr> + <tr> + <td colspan = "2"></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{ts}Invoice Number: {/ts}</font></td> + <td><font size = "1" align = "right">{$invoice_id}</font></td> + </tr> + <tr><td colspan = "5"style = "color:#F5F5F5;"><hr></hr></td></tr> + {if $is_pay_later == 1} + <tr> + <td colspan = "2"></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{ts}Amount Due:{/ts}</font></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{$amount|crmMoney:$currency}</font></td> + </tr> + {else} + <tr> + <td colspan = "2"></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{ts}Amount Due: {/ts}</font></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{$amountDue|crmMoney:$currency}</font></td> + </tr> + {/if} + <tr> + <td colspan = "2"></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{ts}Due Date: {/ts}</font></td> + <td><font size = "1" align = "right">{$dueDate}</font></td> + </tr> + <tr> + <td colspan = "5" style = "color:#F5F5F5;"><hr></hr></td> + </tr> + </table> + </td> + </tr> + </table> + {/if} + + {if $contribution_status_id == $refundedStatusId || $contribution_status_id == $cancelledStatusId} + <table style = "margin-top:2px;padding-left:7px;page-break-before: always;"> + <tr> + <td><img src = "{$resourceBase}/i/civi99.png" height = "34px" width = "99px"></td> + </tr> + </table> + <center> + + <table style = "padding-right:19px;font-family: Arial, Verdana, sans-serif" width = "500" height = "100" border = "0" cellpadding = "2" cellspacing = "1"> + <tr> + <td style = "padding-left:15px;" ><b><font size = "4" align = "center">{ts}CREDIT NOTE{/ts}</font></b></td> + <td colspan = "1"></td> + <td style = "padding-left:70px;"><b><font size = "1" align = "right">{ts}Date:{/ts}</font></b></td> + <td><font size = "1" align = "right">{$domain_organization}</font></td> + </tr> + <tr> + {if $organization_name} + <td style = "padding-left:17px;"><font size = "1" align = "center">{$display_name} ({$organization_name})</font></td> + {else} + <td style = "padding-left:17px;"><font size = "1" align = "center">{$display_name}</font></td> + {/if} + <td colspan = "1"></td> + <td style = "padding-left:70px;"><font size = "1" align = "right">{$invoice_date}</font></td> + <td> + <font size = "1" align = "right"> + {if $domain_street_address }{$domain_street_address}{/if} + {if $domain_supplemental_address_1 }{$domain_supplemental_address_1}{/if} + </font> + </td> + </tr> + <tr> + <td style = "padding-left:17px;"><font size = "1" align = "center">{$street_address} {$supplemental_address_1}</font></td> + <td colspan = "1"></td> + <td style = "padding-left:70px;"><b><font size = "1" align = "right">{ts}Credit Note Number:{/ts}</font></b></td> + <td> + <font size = "1" align = "right"> + {if $domain_supplemental_address_2 }{$domain_supplemental_address_2}{/if} + {if $domain_state }{$domain_state}{/if} + </font> + </td> + </tr> + <tr> + <td style = "padding-left:17px;"><font size = "1" align = "center">{$supplemental_address_2} {$stateProvinceAbbreviation}</font></td> + <td colspan="1"></td> + <td style = "padding-left:70px;"><font size = "1" align = "right">{$creditnote_id}</font></td> + <td> + <font size = "1" align = "right"> + {if $domain_city}{$domain_city}{/if} + {if $domain_postal_code }{$domain_postal_code}{/if} + </font> + </td> + </tr> + <tr> + <td style = "padding-left:17px;"><font size = "1" align = "right">{$city} {$postal_code}</font></td> + <td colspan="1"></td> + <td height = "10" style = "padding-left:70px;"><b><font size = "1"align = "right">{ts}Reference:{/ts}</font></b></td> + <td> + <font size = "1" align = "right"> + {if $domain_country}{$domain_country}{/if} + </font> + </td> + </tr> + <tr> + <td></td> + <td></td> + <td style = "padding-left:70px;"><font size = "1"align = "right">{$source}</font></td> + <td> + <font size = "1" align = "right"> + {if $domain_phone}{$domain_phone}{/if} + </font> + </td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td> + <font size = "1" align = "right"> + {if $domain_email}{$domain_email}{/if} + </font> + </td> + </tr> + </table> + + <table style = "margin-top:75px;font-family: Arial, Verdana, sans-serif" width = "590" border = "0"cellpadding = "-5" cellspacing = "19" id = "desc"> + <tr> + <td colspan = "2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th style = "padding-right:28px;text-align:left;font-weight:bold;width:200px;"><font size = "1">{ts}Description{/ts}</font></th> + <th style = "padding-left:28px;text-align:right;font-weight:bold;"><font size = "1">{ts}Quantity{/ts}</font></th> + <th style = "padding-left:28px;text-align:right;font-weight:bold;"><font size = "1">{ts}Unit Price{/ts}</font></th> + <th style = "padding-left:28px;text-align:right;font-weight:bold;"><font size = "1">{$taxTerm} </font></th> + <th style = "padding-left:28px;text-align:right;font-weight:bold;"><font size = "1">{ts 1=$defaultCurrency}Amount %1{/ts}</font></th> + </tr> + {foreach from=$lineItem item=value key=priceset name=pricevalue} + {if $smarty.foreach.pricevalue.index eq 0} + <tr><td colspan = "5" ><hr size="3" style = "color:#000;"></hr></td></tr> + {else} + <tr><td colspan = "5" style = "color:#F5F5F5;"><hr></hr></td></tr> + {/if} + <tr> + <td style ="text-align:left;" > + <font size = "1"> + {if $value.html_type eq 'Text'} + {$value.label} + {else} + {$value.field_title} - {$value.label} + {/if} + {if $value.description} + <div>{$value.description|truncate:30:"..."}</div> + {/if} + </font> + </td> + <td style = "padding-left:28px;text-align:right;"><font size = "1"> {$value.qty}</font></td> + <td style = "padding-left:28px;text-align:right;"><font size = "1"> {$value.unit_price|crmMoney:$currency}</font></td> + {if $value.tax_amount != ''} + <td style = "padding-left:28px;text-align:right;"><font size = "1"> {$value.tax_rate}%</font></td> + {else} + <td style = "padding-left:28px;text-align:right"><font size = "1" >{ts 1=$taxTerm}No %1{/ts}</font></td> + {/if} + <td style = "padding-left:28px;text-align:right;"><font size = "1" >{$value.subTotal|crmMoney:$currency}</font></td> + </tr> + {/foreach} + <tr><td colspan = "5" style = "color:#F5F5F5;"><hr></hr></td></tr> + <tr> + <td colspan = "3"></td> + <td style = "padding-left:28px;text-align:right;"><font size = "1">{ts}Sub Total{/ts}</font></td> + <td style = "padding-left:28px;text-align:right;"><font size = "1"> {$subTotal|crmMoney:$currency}</font></td> + </tr> + {foreach from = $dataArray item = value key = priceset} + <tr> + <td colspan = "3"></td> + {if $priceset} + <td style = "padding-left:28px;text-align:right;"><font size = "1"> {ts 1=$taxTerm 2=$priceset}TOTAL %1 %2%{/ts}</font></td> + <td style = "padding-left:28px;text-align:right;"><font size = "1" align = "right">{$value|crmMoney:$currency}</font> </td> + {elseif $priceset == 0} + <td style = "padding-left:28px;text-align:right;"><font size = "1">{ts 1=$taxTerm}TOTAL NO %1{/ts}</font></td> + <td style = "padding-left:28px;text-align:right;"><font size = "1" align = "right">{$value|crmMoney:$currency}</font> </td> + </tr> + {/if} + {/foreach} + <tr> + <td colspan = "3"></td> + <td colspan = "2"><hr></hr></td> + </tr> + <tr> + <td colspan = "3"></td> + <td style = "padding-left:28px;text-align:right;"><b><font size = "1">{ts 1=$defaultCurrency}TOTAL %1{/ts}</font></b></td> + <td style = "padding-left:28px;text-align:right;"><font size = "1">{$amount|crmMoney:$currency}</font></td> + </tr> + {if $is_pay_later == 0} + <tr> + <td colspan = "3"></td> + <td style = "padding-left:28px;text-align:right;"><font size = "1" >{ts}LESS Credit to invoice(s){/ts}</font></td> + <td style = "padding-left:28px;text-align:right;"><font size = "1">{$amount|crmMoney:$currency}</font></td> + </tr> + <tr> + <td colspan = "3"></td> + <td colspan = "2" ><hr></hr></td> + </tr> + <tr> + <td colspan = "3"></td> + <td style = "padding-left:28px;text-align:right;"><b><font size = "1">{ts}REMAINING CREDIT{/ts}</font></b></td> + <td style = "padding-left:28px;text-align:right;"><b><font size = "1">{$amountDue|crmMoney:$currency}</font></b></td> + <td style = "padding-left:28px;"><font size = "1" align = "right"></font></td> + </tr> + {/if} + <br/><br/><br/> + <tr> + <td colspan = "3"></td> + </tr> + <tr> + <td></td> + <td colspan = "3"></td> + </tr> + </table> + </td> + </tr> + </table> + <table style = "margin-top:5px;padding-right:45px;"> + <tr> + <td><img src = "{$resourceBase}/i/contribute/cut_line.png" height = "15" width = "630"></td> + </tr> + </table> + + <table style = "margin-top:6px;padding-right:20px;font-family: Arial, Verdana, sans-serif" width = "507" border = "0"cellpadding = "-5" cellspacing="19" id = "desc"> + <tr> + <td width="60%"><font size = "4" align = "right"><b>{ts}CREDIT ADVICE{/ts}</b><br/><br /><div style="font-size:10px;max-width:300px;">{ts}Please do not pay on this advice. Deduct the amount of this Credit Note from your next payment to us{/ts}</div><br/></font></td> + <td width="40%"> + <table align="right" > + <tr> + <td colspan = "2"></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{ts}Customer:{/ts} </font></td> + <td><font size = "1" align = "right" >{$display_name}</font></td> + </tr> + <tr> + <td colspan = "2"></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{ts}Credit Note#:{/ts} </font></td> + <td><font size = "1" align = "right">{$creditnote_id}</font></td> + </tr> + <tr><td colspan = "5"style = "color:#F5F5F5;"><hr></hr></td></tr> + <tr> + <td colspan = "2"></td> + <td><font size = "1" align = "right" style="font-weight:bold;">{ts}Credit Amount:{/ts}</font></td> + <td width='50px'><font size = "1" align = "right" style="font-weight:bold;">{$amount|crmMoney:$currency}</font></td> + </tr> + </table> + </td> + </tr> + </table> + {/if} + </center> + </body> +</html> diff --git a/civicrm/xml/templates/message_templates/contribution_invoice_receipt_subject.tpl b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..f99fe44750252079fc7d33c4c05b320ad1a3908d --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_subject.tpl @@ -0,0 +1,11 @@ +{if $title} + {if $component} + {if $component == 'event'} + {ts 1=$title}Event Registration Invoice: %1{/ts} + {else} + {ts 1=$title}Contribution Invoice: %1{/ts} + {/if} + {/if} +{else} + {ts}Invoice{/ts} +{/if} diff --git a/civicrm/xml/templates/message_templates/contribution_invoice_receipt_text.tpl b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..37e2edf09d10af81eef256c10e30aa768ffff227 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_invoice_receipt_text.tpl @@ -0,0 +1 @@ +{ts}Contribution Invoice{/ts} diff --git a/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl b/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..8a840cef62c24540b60a62cbc006c9273a99c285 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_offline_receipt_html.tpl @@ -0,0 +1,319 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + + {if $formValues.receipt_text} + <p>{$formValues.receipt_text|htmlize}</p> + {else} + <p>{ts}Thank you for your support.{/ts}</p> + {/if} + + <p>{ts}Please print this receipt for your records.{/ts}</p> + + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Contribution Information{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Financial Type{/ts} + </td> + <td {$valueStyle}> + {$formValues.contributionType_name} + </td> + </tr> + + {if $lineItem and !$is_quick_config} + {foreach from=$lineItem item=value key=priceset} + <tr> + <td colspan="2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th>{ts}Item{/ts}</th> + <th>{ts}Qty{/ts}</th> + <th>{ts}Each{/ts}</th> + {if $getTaxDetails} + <th>{ts}Subtotal{/ts}</th> + <th>{ts}Tax Rate{/ts}</th> + <th>{ts}Tax Amount{/ts}</th> + {/if} + <th>{ts}Total{/ts}</th> + </tr> + {foreach from=$value item=line} + <tr> + <td> + {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} + </td> + <td> + {$line.qty} + </td> + <td> + {$line.unit_price|crmMoney:$currency} + </td> + {if $getTaxDetails} + <td> + {$line.unit_price*$line.qty|crmMoney:$currency} + </td> + {if $line.tax_rate != "" || $line.tax_amount != ""} + <td> + {$line.tax_rate|string_format:"%.2f"}% + </td> + <td> + {$line.tax_amount|crmMoney:$currency} + </td> + {else} + <td></td> + <td></td> + {/if} + {/if} + <td> + {$line.line_total+$line.tax_amount|crmMoney:$currency} + </td> + </tr> + {/foreach} + </table> + </td> + </tr> + {/foreach} + {/if} + {if $getTaxDetails && $dataArray} + <tr> + <td {$labelStyle}> + {ts} Amount before Tax : {/ts} + </td> + <td {$valueStyle}> + {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + + {foreach from=$dataArray item=value key=priceset} + <tr> + {if $priceset || $priceset == 0 || $value != ''} + <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {$value|crmMoney:$currency}</td> + {else} + <td> {ts}No{/ts} {$taxTerm}</td> + <td> {$value|crmMoney:$currency}</td> + {/if} + </tr> + {/foreach} + {/if} + + {if isset($totalTaxAmount) && $totalTaxAmount !== 'null'} + <tr> + <td {$labelStyle}> + {ts}Total Tax Amount{/ts} + </td> + <td {$valueStyle}> + {$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + {/if} + + <tr> + <td {$labelStyle}> + {ts}Total Amount{/ts} + </td> + <td {$valueStyle}> + {$formValues.total_amount|crmMoney:$currency} + </td> + </tr> + + {if $receive_date} + <tr> + <td {$labelStyle}> + {ts}Date Received{/ts} + </td> + <td {$valueStyle}> + {$receive_date|truncate:10:''|crmDate} + </td> + </tr> + {/if} + + {if $receipt_date} + <tr> + <td {$labelStyle}> + {ts}Receipt Date{/ts} + </td> + <td {$valueStyle}> + {$receipt_date|truncate:10:''|crmDate} + </td> + </tr> + {/if} + + {if $formValues.paidBy and !$formValues.hidden_CreditCard} + <tr> + <td {$labelStyle}> + {ts}Paid By{/ts} + </td> + <td {$valueStyle}> + {$formValues.paidBy} + </td> + </tr> + {if $formValues.check_number} + <tr> + <td {$labelStyle}> + {ts}Check Number{/ts} + </td> + <td {$valueStyle}> + {$formValues.check_number} + </td> + </tr> + {/if} + {/if} + + {if $formValues.trxn_id} + <tr> + <td {$labelStyle}> + {ts}Transaction ID{/ts} + </td> + <td {$valueStyle}> + {$formValues.trxn_id} + </td> + </tr> + {/if} + + {if $ccContribution} + <tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$billingName}<br /> + {$address|nl2br} + </td> + </tr> + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} + </td> + </tr> + {/if} + + {if $softCreditTypes and $softCredits} + {foreach from=$softCreditTypes item=softCreditType key=n} + <tr> + <th {$headerStyle}> + {$softCreditType} + </th> + </tr> + {foreach from=$softCredits.$n item=value key=label} + <tr> + <td {$labelStyle}> + {$label} + </td> + <td {$valueStyle}> + {$value} + </td> + </tr> + {/foreach} + {/foreach} + {/if} + + {if $customGroup} + {foreach from=$customGroup item=value key=customName} + <tr> + <th {$headerStyle}> + {$customName} + </th> + </tr> + {foreach from=$value item=v key=n} + <tr> + <td {$labelStyle}> + {$n} + </td> + <td {$valueStyle}> + {$v} + </td> + </tr> + {/foreach} + {/foreach} + {/if} + + {if $formValues.product_name} + <tr> + <th {$headerStyle}> + {ts}Premium Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$labelStyle}> + {$formValues.product_name} + </td> + </tr> + {if $formValues.product_option} + <tr> + <td {$labelStyle}> + {ts}Option{/ts} + </td> + <td {$valueStyle}> + {$formValues.product_option} + </td> + </tr> + {/if} + {if $formValues.product_sku} + <tr> + <td {$labelStyle}> + {ts}SKU{/ts} + </td> + <td {$valueStyle}> + {$formValues.product_sku} + </td> + </tr> + {/if} + {if $fulfilled_date} + <tr> + <td {$labelStyle}> + {ts}Sent{/ts} + </td> + <td {$valueStyle}> + {$fulfilled_date|truncate:10:''|crmDate} + </td> + </tr> + {/if} + {/if} + + </table> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/contribution_offline_receipt_subject.tpl b/civicrm/xml/templates/message_templates/contribution_offline_receipt_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..a2e2f61c76501677a8dc475748227f171c5a906c --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_offline_receipt_subject.tpl @@ -0,0 +1 @@ +{ts}Contribution Receipt{/ts} diff --git a/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl b/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..6b46e34259eb30e24c93751578b388379b7497c7 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_offline_receipt_text.tpl @@ -0,0 +1,118 @@ +{if $formValues.receipt_text} +{$formValues.receipt_text} +{else}{ts}Thank you for your support.{/ts}{/if} + +{ts}Please print this receipt for your records.{/ts} + + +=========================================================== +{ts}Contribution Information{/ts} + +=========================================================== +{ts}Financial Type{/ts}: {$formValues.contributionType_name} +{if $lineItem} +{foreach from=$lineItem item=value key=priceset} +--------------------------------------------------------- +{capture assign=ts_item}{ts}Item{/ts}{/capture} +{capture assign=ts_qty}{ts}Qty{/ts}{/capture} +{capture assign=ts_each}{ts}Each{/ts}{/capture} +{if $getTaxDetails} +{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture} +{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture} +{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture} +{/if} +{capture assign=ts_total}{ts}Total{/ts}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if $getTaxDetails} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} +---------------------------------------------------------- +{foreach from=$value item=line} +{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney:$currency|string_format:"%10s"} {if $getTaxDetails}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if $line.tax_rate != "" || $line.tax_amount != ""} {$line.tax_rate|string_format:"%.2f"} % {$line.tax_amount|crmMoney:$currency|string_format:"%10s"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:"%10s"} +{/foreach} +{/foreach} +{/if} + +{if $getTaxDetails && $dataArray} +{ts}Amount before Tax{/ts} : {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency} + +{foreach from=$dataArray item=value key=priceset} +{if $priceset || $priceset == 0 || $value != ''} +{$taxTerm} {$priceset|string_format:"%.2f"}% : {$value|crmMoney:$currency} +{else} +{ts}No{/ts} {$taxTerm} : {$value|crmMoney:$currency} +{/if} +{/foreach} +{/if} + +{if isset($totalTaxAmount) && $totalTaxAmount !== 'null'} +{ts}Total Tax Amount{/ts} : {$totalTaxAmount|crmMoney:$currency} +{/if} +{ts}Total Amount{/ts} : {$formValues.total_amount|crmMoney:$currency} +{if $receive_date} +{ts}Date Received{/ts}: {$receive_date|truncate:10:''|crmDate} +{/if} +{if $receipt_date} +{ts}Receipt Date{/ts}: {$receipt_date|truncate:10:''|crmDate} +{/if} +{if $formValues.paidBy and !$formValues.hidden_CreditCard} +{ts}Paid By{/ts}: {$formValues.paidBy} +{if $formValues.check_number} +{ts}Check Number{/ts}: {$formValues.check_number} +{/if} +{/if} +{if $formValues.trxn_id} +{ts}Transaction ID{/ts}: {$formValues.trxn_id} +{/if} + +{if $ccContribution} +=========================================================== +{ts}Billing Name and Address{/ts} + +=========================================================== +{$billingName} +{$address} + +=========================================================== +{ts}Credit Card Information{/ts} + +=========================================================== +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} +{/if} +{if $customGroup} +{foreach from=$customGroup item=value key=customName} +=========================================================== +{$customName} +=========================================================== +{foreach from=$value item=v key=n} +{$n}: {$v} +{/foreach} +{/foreach} +{/if} + +{if $softCreditTypes and $softCredits} +{foreach from=$softCreditTypes item=softCreditType key=n} +=========================================================== +{$softCreditType} +=========================================================== +{foreach from=$softCredits.$n item=value key=label} +{$label}: {$value} +{/foreach} +{/foreach} +{/if} + +{if $formValues.product_name} +=========================================================== +{ts}Premium Information{/ts} + +=========================================================== +{$formValues.product_name} +{if $formValues.product_option} +{ts}Option{/ts}: {$formValues.product_option} +{/if} +{if $formValues.product_sku} +{ts}SKU{/ts}: {$formValues.product_sku} +{/if} +{if $fulfilled_date} +{ts}Sent{/ts}: {$fulfilled_date|crmDate} +{/if} +{/if} diff --git a/civicrm/xml/templates/message_templates/contribution_online_receipt_html.tpl b/civicrm/xml/templates/message_templates/contribution_online_receipt_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..ec976ed0e52579cd1878f42907ef7248e132ba8b --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_online_receipt_html.tpl @@ -0,0 +1,473 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="500" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + + {if $receipt_text} + <p>{$receipt_text|htmlize}</p> + {/if} + + {if $is_pay_later} + <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *} + {else} + <p>{ts}Please print this confirmation for your records.{/ts}</p> + {/if} + + </td> + </tr> + </table> + <table width="500" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> + + {if $amount} + + + <tr> + <th {$headerStyle}> + {ts}Contribution Information{/ts} + </th> + </tr> + + {if $lineItem and $priceSetID and !$is_quick_config} + + {foreach from=$lineItem item=value key=priceset} + <tr> + <td colspan="2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th>{ts}Item{/ts}</th> + <th>{ts}Qty{/ts}</th> + <th>{ts}Each{/ts}</th> + {if $dataArray} + <th>{ts}Subtotal{/ts}</th> + <th>{ts}Tax Rate{/ts}</th> + <th>{ts}Tax Amount{/ts}</th> + {/if} + <th>{ts}Total{/ts}</th> + </tr> + {foreach from=$value item=line} + <tr> + <td> + {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} + </td> + <td> + {$line.qty} + </td> + <td> + {$line.unit_price|crmMoney:$currency} + </td> + {if $getTaxDetails} + <td> + {$line.unit_price*$line.qty|crmMoney:$currency} + </td> + {if $line.tax_rate != "" || $line.tax_amount != ""} + <td> + {$line.tax_rate|string_format:"%.2f"}% + </td> + <td> + {$line.tax_amount|crmMoney:$currency} + </td> + {else} + <td></td> + <td></td> + {/if} + {/if} + <td> + {$line.line_total+$line.tax_amount|crmMoney:$currency} + </td> + </tr> + {/foreach} + </table> + </td> + </tr> + {/foreach} + {if $dataArray} + <tr> + <td {$labelStyle}> + {ts} Amount before Tax : {/ts} + </td> + <td {$valueStyle}> + {$amount-$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + + {foreach from=$dataArray item=value key=priceset} + <tr> + {if $priceset || $priceset == 0} + <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {$value|crmMoney:$currency}</td> + {else} + <td> {ts}No{/ts} {$taxTerm}</td> + <td> {$value|crmMoney:$currency}</td> + {/if} + </tr> + {/foreach} + + {/if} + {if $totalTaxAmount} + <tr> + <td {$labelStyle}> + {ts}Total Tax{/ts} + </td> + <td {$valueStyle}> + {$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + {/if} + <tr> + <td {$labelStyle}> + {ts}Total Amount{/ts} + </td> + <td {$valueStyle}> + {$amount|crmMoney:$currency} + </td> + </tr> + + {else} + + {if $totalTaxAmount} + <tr> + <td {$labelStyle}> + {ts}Total Tax Amount{/ts} + </td> + <td {$valueStyle}> + {$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + {/if} + <tr> + <td {$labelStyle}> + {ts}Amount{/ts} + </td> + <td {$valueStyle}> + {$amount|crmMoney:$currency} {if $amount_level} - {$amount_level}{/if} + </td> + </tr> + + {/if} + + {/if} + + + {if $receive_date} + <tr> + <td {$labelStyle}> + {ts}Date{/ts} + </td> + <td {$valueStyle}> + {$receive_date|crmDate} + </td> + </tr> + {/if} + + {if $is_monetary and $trxn_id} + <tr> + <td {$labelStyle}> + {ts}Transaction #{/ts} + </td> + <td {$valueStyle}> + {$trxn_id} + </td> + </tr> + {/if} + + {if $is_recur} + {if $contributeMode eq 'notify' or $contributeMode eq 'directIPN'} + <tr> + <td colspan="2" {$labelStyle}> + {ts 1=$cancelSubscriptionUrl}This is a recurring contribution. You can cancel future contributions by <a href="%1">visiting this web page</a>.{/ts} + </td> + {if $updateSubscriptionBillingUrl} + </tr> + <tr> + <td colspan="2" {$labelStyle}> + {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} + </td> + {/if} + </tr> + <tr> + <td colspan="2" {$labelStyle}> + {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} + </td> + </tr> + {/if} + {/if} + + {if $honor_block_is_active} + <tr> + <th {$headerStyle}> + {$soft_credit_type} + </th> + </tr> + {foreach from=$honoreeProfile item=value key=label} + <tr> + <td {$labelStyle}> + {$label} + </td> + <td {$valueStyle}> + {$value} + </td> + </tr> + {/foreach} + {elseif $softCreditTypes and $softCredits} + {foreach from=$softCreditTypes item=softCreditType key=n} + <tr> + <th {$headerStyle}> + {$softCreditType} + </th> + </tr> + {foreach from=$softCredits.$n item=value key=label} + <tr> + <td {$labelStyle}> + {$label} + </td> + <td {$valueStyle}> + {$value} + </td> + </tr> + {/foreach} + {/foreach} + {/if} + + {if $pcpBlock} + <tr> + <th {$headerStyle}> + {ts}Personal Campaign Page{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Display In Honor Roll{/ts} + </td> + <td {$valueStyle}> + {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} + </td> + </tr> + {if $pcp_roll_nickname} + <tr> + <td {$labelStyle}> + {ts}Nickname{/ts} + </td> + <td {$valueStyle}> + {$pcp_roll_nickname} + </td> + </tr> + {/if} + {if $pcp_personal_note} + <tr> + <td {$labelStyle}> + {ts}Personal Note{/ts} + </td> + <td {$valueStyle}> + {$pcp_personal_note} + </td> + </tr> + {/if} + {/if} + + {if $onBehalfProfile} + <tr> + <th {$headerStyle}> + {$onBehalfProfile_grouptitle} + </th> + </tr> + {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName} + <tr> + <td {$labelStyle}> + {$onBehalfName} + </td> + <td {$valueStyle}> + {$onBehalfValue} + </td> + </tr> + {/foreach} + {/if} + + {if $isShare} + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=contributionUrl}{crmURL p='civicrm/contribute/transact' q="reset=1&id=`$contributionPageId`" a=true fe=1 h=1}{/capture} + {include file="CRM/common/SocialNetwork.tpl" emailMode=true url=$contributionUrl title=$title pageURL=$contributionUrl} + </td> + </tr> + {/if} + + {if ! ($contributeMode eq 'notify' OR $contributeMode eq 'directIPN') and $is_monetary} + {if $is_pay_later && !$isBillingAddressRequiredForPayLater} + <tr> + <th {$headerStyle}> + {ts}Registered Email{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$email} + </td> + </tr> + {elseif $amount GT 0} + <tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$billingName}<br /> + {$address|nl2br}<br /> + {$email} + </td> + </tr> + {/if} + {/if} + + {if $contributeMode eq 'direct' AND !$is_pay_later AND $amount GT 0} + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}<br /> + </td> + </tr> + {/if} + + {if $selectPremium} + <tr> + <th {$headerStyle}> + {ts}Premium Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$labelStyle}> + {$product_name} + </td> + </tr> + {if $option} + <tr> + <td {$labelStyle}> + {ts}Option{/ts} + </td> + <td {$valueStyle}> + {$option} + </td> + </tr> + {/if} + {if $sku} + <tr> + <td {$labelStyle}> + {ts}SKU{/ts} + </td> + <td {$valueStyle}> + {$sku} + </td> + </tr> + {/if} + {if $start_date} + <tr> + <td {$labelStyle}> + {ts}Start Date{/ts} + </td> + <td {$valueStyle}> + {$start_date|crmDate} + </td> + </tr> + {/if} + {if $end_date} + <tr> + <td {$labelStyle}> + {ts}End Date{/ts} + </td> + <td {$valueStyle}> + {$end_date|crmDate} + </td> + </tr> + {/if} + {if $contact_email OR $contact_phone} + <tr> + <td colspan="2" {$valueStyle}> + <p>{ts}For information about this premium, contact:{/ts}</p> + {if $contact_email} + <p>{$contact_email}</p> + {/if} + {if $contact_phone} + <p>{$contact_phone}</p> + {/if} + </td> + </tr> + {/if} + {if $is_deductible AND $price} + <tr> + <td colspan="2" {$valueStyle}> + <p>{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p> + </td> + </tr> + {/if} + {/if} + + {if $customPre} + <tr> + <th {$headerStyle}> + {$customPre_grouptitle} + </th> + </tr> + {foreach from=$customPre item=customValue key=customName} + {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + <tr> + <td {$labelStyle}> + {$customName} + </td> + <td {$valueStyle}> + {$customValue} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $customPost} + <tr> + <th {$headerStyle}> + {$customPost_grouptitle} + </th> + </tr> + {foreach from=$customPost item=customValue key=customName} + {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + <tr> + <td {$labelStyle}> + {$customName} + </td> + <td {$valueStyle}> + {$customValue} + </td> + </tr> + {/if} + {/foreach} + {/if} + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/contribution_online_receipt_subject.tpl b/civicrm/xml/templates/message_templates/contribution_online_receipt_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..32d4e402a82c44f576f5ec568449ab695210618c --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_online_receipt_subject.tpl @@ -0,0 +1 @@ +{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} diff --git a/civicrm/xml/templates/message_templates/contribution_online_receipt_text.tpl b/civicrm/xml/templates/message_templates/contribution_online_receipt_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c6328bc46e8921d9a50670ff3cb1e68b9b9d3dfa --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_online_receipt_text.tpl @@ -0,0 +1,209 @@ +{if $receipt_text} +{$receipt_text} +{/if} +{if $is_pay_later} + +=========================================================== +{$pay_later_receipt} +=========================================================== +{else} + +{ts}Please print this receipt for your records.{/ts} +{/if} + +{if $amount} +=========================================================== +{ts}Contribution Information{/ts} + +=========================================================== +{if $lineItem and $priceSetID and !$is_quick_config} +{foreach from=$lineItem item=value key=priceset} +--------------------------------------------------------- +{capture assign=ts_item}{ts}Item{/ts}{/capture} +{capture assign=ts_qty}{ts}Qty{/ts}{/capture} +{capture assign=ts_each}{ts}Each{/ts}{/capture} +{if $dataArray} +{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture} +{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture} +{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture} +{/if} +{capture assign=ts_total}{ts}Total{/ts}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if $dataArray} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} +---------------------------------------------------------- +{foreach from=$value item=line} +{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney:$currency|string_format:"%10s"} {if $dataArray}{$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if $line.tax_rate != "" || $line.tax_amount != ""} {$line.tax_rate|string_format:"%.2f"} % {$line.tax_amount|crmMoney:$currency|string_format:"%10s"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:"%10s"} +{/foreach} +{/foreach} + +{if $dataArray} +{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency} + +{foreach from=$dataArray item=value key=priceset} +{if $priceset || $priceset == 0} +{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{else} +{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{/if} +{/foreach} +{/if} + +{if $totalTaxAmount} +{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} +{/if} + +{ts}Total Amount{/ts}: {$amount|crmMoney:$currency} +{else} +{ts}Amount{/ts}: {$amount|crmMoney:$currency} {if $amount_level } - {$amount_level} {/if} +{/if} +{/if} +{if $receive_date} + +{ts}Date{/ts}: {$receive_date|crmDate} +{/if} +{if $is_monetary and $trxn_id} +{ts}Transaction #{/ts}: {$trxn_id} +{/if} + +{if $is_recur and ($contributeMode eq 'notify' or $contributeMode eq 'directIPN')} +{ts}This is a recurring contribution. You can cancel future contributions at:{/ts} + +{$cancelSubscriptionUrl} + +{if $updateSubscriptionBillingUrl} +{ts}You can update billing details for this recurring contribution at:{/ts} + +{$updateSubscriptionBillingUrl} + +{/if} +{ts}You can update recurring contribution amount or change the number of installments for this recurring contribution at:{/ts} + +{$updateSubscriptionUrl} + +{/if} + +{if $honor_block_is_active} +=========================================================== +{$soft_credit_type} +=========================================================== +{foreach from=$honoreeProfile item=value key=label} +{$label}: {$value} +{/foreach} +{elseif $softCreditTypes and $softCredits} +{foreach from=$softCreditTypes item=softCreditType key=n} +=========================================================== +{$softCreditType} +=========================================================== +{foreach from=$softCredits.$n item=value key=label} +{$label}: {$value} +{/foreach} +{/foreach} +{/if} +{if $pcpBlock} +=========================================================== +{ts}Personal Campaign Page{/ts} + +=========================================================== +{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} + +{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if} + +{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} + +{/if} +{if $onBehalfProfile} +=========================================================== +{ts}On Behalf Of{/ts} + +=========================================================== +{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName} +{$onBehalfName}: {$onBehalfValue} +{/foreach} +{/if} + +{if !( $contributeMode eq 'notify' OR $contributeMode eq 'directIPN' ) and $is_monetary} +{if $is_pay_later && !$isBillingAddressRequiredForPayLater} +=========================================================== +{ts}Registered Email{/ts} + +=========================================================== +{$email} +{elseif $amount GT 0} +=========================================================== +{ts}Billing Name and Address{/ts} + +=========================================================== +{$billingName} +{$address} + +{$email} +{/if} {* End ! is_pay_later condition. *} +{/if} +{if $contributeMode eq 'direct' AND !$is_pay_later AND $amount GT 0} + +=========================================================== +{ts}Credit Card Information{/ts} + +=========================================================== +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} +{/if} + +{if $selectPremium } +=========================================================== +{ts}Premium Information{/ts} + +=========================================================== +{$product_name} +{if $option} +{ts}Option{/ts}: {$option} +{/if} +{if $sku} +{ts}SKU{/ts}: {$sku} +{/if} +{if $start_date} +{ts}Start Date{/ts}: {$start_date|crmDate} +{/if} +{if $end_date} +{ts}End Date{/ts}: {$end_date|crmDate} +{/if} +{if $contact_email OR $contact_phone} + +{ts}For information about this premium, contact:{/ts} + +{if $contact_email} + {$contact_email} +{/if} +{if $contact_phone} + {$contact_phone} +{/if} +{/if} +{if $is_deductible AND $price} + +{ts 1=$price|crmMoney:$currency}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if} +{/if} + +{if $customPre} +=========================================================== +{$customPre_grouptitle} + +=========================================================== +{foreach from=$customPre item=customValue key=customName} +{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {$customName}: {$customValue} +{/if} +{/foreach} +{/if} + + +{if $customPost} +=========================================================== +{$customPost_grouptitle} + +=========================================================== +{foreach from=$customPost item=customValue key=customName} +{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {$customName}: {$customValue} +{/if} +{/foreach} +{/if} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_billing_html.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_billing_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..f2b9d48842391578f8bc0d227c5260e4755200a3 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_billing_html.tpl @@ -0,0 +1,65 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts}</p> + </td> + </tr> + <tr> + </table> + + <table width="500" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> +<tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$billingName}<br /> + {$address|nl2br}<br /> + {$email} + </td> + </tr> + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}<br /> + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts} + </td> + </tr> + </table> +</center> + +</body> +</html> \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_billing_subject.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_billing_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..69d9c9012910f8bf4d8f73cd6342c225fd733919 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_billing_subject.tpl @@ -0,0 +1 @@ +{ts}Recurring Contribution Billing Updates{/ts} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_billing_text.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_billing_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..37e7ed750216569cc92de18eb8e30193216ee9a2 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_billing_text.tpl @@ -0,0 +1,23 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Billing details for your recurring contribution of %1, every %2 %3 have been updated.{/ts} + +=========================================================== +{ts}Billing Name and Address{/ts} + +=========================================================== +{$billingName} +{$address} + +{$email} + +=========================================================== +{ts}Credit Card Information{/ts} + +=========================================================== +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} + + +{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_html.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..674333e079fbbc187d8ef2cb67bf8d3e9a52981e --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_html.tpl @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts}</p> + </td> + </tr> + <tr> + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_subject.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..d389480e14fa459af7d081a36b04e6d1fc2db320 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_subject.tpl @@ -0,0 +1 @@ +{ts}Recurring Contribution Cancellation Notification{/ts} diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_text.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..f10d37432f5cf5b58a237517b492abe408bde914 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_cancelled_text.tpl @@ -0,0 +1,3 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Your recurring contribution of %1, every %2 %3 has been cancelled as requested.{/ts} diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_edit_html.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_edit_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..0ef701f9c28b3dea9d20a0761674718caafcdfda --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_edit_html.tpl @@ -0,0 +1,36 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + <p>{ts}Your recurring contribution has been updated as requested:{/ts} + <p>{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts}{if $installments}{ts 1=$installments} for %1 installments{/ts}{/if}.</p> + + <p>{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts}</p> + </td> + </tr> + <tr> + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_edit_subject.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_edit_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..d4a5da1aea994aa1110343f53c27571e88d3e90b --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_edit_subject.tpl @@ -0,0 +1 @@ +{ts}Recurring Contribution Update Notification{/ts} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_edit_text.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_edit_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..b1e038b5da3dbcae019c59b4b7545a51e3eaccef --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_edit_text.tpl @@ -0,0 +1,8 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts}Your recurring contribution has been updated as requested:{/ts} + +{ts 1=$amount 2=$recur_frequency_interval 3=$recur_frequency_unit}Recurring contribution is for %1, every %2 %3(s){/ts} +{if $installments}{ts 1=$installments} for %1 installments.{/ts}{/if} + +{ts 1=$receipt_from_email}If you have questions please contact us at %1.{/ts} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_notify_html.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_notify_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..3ed5eb713ef1868d9605a7eaf89cfebcdb93dd51 --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_notify_html.tpl @@ -0,0 +1,129 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$displayName}Dear %1{/ts},</p> + </td> + </tr> + + <tr> + <td> </td> + </tr> + + {if $recur_txnType eq 'START'} + {if $auto_renew_membership} + <tr> + <td> + <p>{ts}Thanks for your auto renew membership sign-up.{/ts}</p> + <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s). {/ts}</p> + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts 1=$cancelSubscriptionUrl}This membership will be renewed automatically. You can cancel the auto-renewal option by <a href="%1">visiting this web page</a>.{/ts} + </td> + </tr> + {if $updateSubscriptionBillingUrl} + <tr> + <td {$labelStyle}> + {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href="%1">visiting this web page</a>.{/ts} + </td> + </tr> + {/if} + {else} + <tr> + <td> + <p>{ts}Thanks for your recurring contribution sign-up.{/ts}</p> + <p>{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments }{ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}.</p> + <p>{ts}Start Date{/ts}: {$recur_start_date|crmDate}</p> + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts 1=$cancelSubscriptionUrl} You can cancel the recurring contribution option by <a href="%1">visiting this web page</a>.{/ts} + </td> + </tr> + {if $updateSubscriptionBillingUrl} + <tr> + <td {$labelStyle}> + {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} + </td> + </tr> + {/if} + <tr> + <td {$labelStyle}> + {ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments details for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} + </td> + </tr> + {/if} + + {elseif $recur_txnType eq 'END'} + + {if $auto_renew_membership} + <tr> + <td> + <p>{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts}</p> + </td> + </tr> + {else} + <tr> + <td> + <p>{ts}Your recurring contribution term has ended.{/ts}</p> + <p>{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you for your support.{/ts}</p> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Start Date{/ts} + </td> + <td {$valueStyle}> + {$recur_start_date|crmDate} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}End Date{/ts} + </td> + <td {$valueStyle}> + {$recur_end_date|crmDate} + </td> + </tr> + </table> + </td> + </tr> + + {/if} + {/if} + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_notify_subject.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_notify_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..0dfee3ad39252315160083fe79435650e2d25fcb --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_notify_subject.tpl @@ -0,0 +1 @@ +{ts}Recurring Contribution Notification{/ts} diff --git a/civicrm/xml/templates/message_templates/contribution_recurring_notify_text.tpl b/civicrm/xml/templates/message_templates/contribution_recurring_notify_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..46aa380a370c47b803136620a5720749d88909cc --- /dev/null +++ b/civicrm/xml/templates/message_templates/contribution_recurring_notify_text.tpl @@ -0,0 +1,54 @@ +{ts 1=$displayName}Dear %1{/ts}, + +{if $recur_txnType eq 'START'} +{if $auto_renew_membership} +{ts}Thanks for your auto renew membership sign-up.{/ts} + + +{ts 1=$recur_frequency_interval 2=$recur_frequency_unit}This membership will be automatically renewed every %1 %2(s).{/ts} + +{ts 1=$cancelSubscriptionUrl}This membership will be renewed automatically. You can cancel the auto-renewal option by <a href="%1">visiting this web page</a>.{/ts} + +{if $updateSubscriptionBillingUrl} +{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href="%1">visiting this web page</a>.{/ts} + +{/if} +{else} +{ts}Thanks for your recurring contribution sign-up.{/ts} + + +{ts 1=$recur_frequency_interval 2=$recur_frequency_unit 3=$recur_installments}This recurring contribution will be automatically processed every %1 %2(s){/ts}{if $recur_installments } {ts 1=$recur_installments} for a total of %1 installment(s){/ts}{/if}. + +{ts}Start Date{/ts}: {$recur_start_date|crmDate} + +{ts 1=$cancelSubscriptionUrl}You can cancel the recurring contribution option by <a href="%1">visiting this web page</a>.{/ts} + +{if $updateSubscriptionBillingUrl} +{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} + +{/if} +{ts 1=$updateSubscriptionUrl}You can update recurring contribution amount or change the number of installments for this recurring contribution by <a href="%1">visiting this web page</a>.{/ts} +{/if} + +{elseif $recur_txnType eq 'END'} +{if $auto_renew_membership} +{ts}Your auto renew membership sign-up has ended and your membership will not be automatically renewed.{/ts} + + +{else} +{ts}Your recurring contribution term has ended.{/ts} + + +{ts 1=$recur_installments}You have successfully completed %1 recurring contributions. Thank you for your support.{/ts} + + +================================================== +{ts 1=$recur_installments}Interval of Subscription for %1 installment(s){/ts} + +================================================== +{ts}Start Date{/ts}: {$recur_start_date|crmDate} + +{ts}End Date{/ts}: {$recur_end_date|crmDate} + +{/if} +{/if} diff --git a/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl b/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..58ff6f1fd18c68811fdb4f4ca2322e2ea9a29a67 --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_offline_receipt_html.tpl @@ -0,0 +1,513 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{contact.email_greeting}</p> + + {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} + <p>{$event.confirm_email_text|htmlize}</p> + {/if} + + {if $isOnWaitlist} + <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> + {if $isPrimary} + <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p> + {/if} + {elseif $isRequireApproval} + <p>{ts}Your registration has been submitted.{/ts}</p> + {if $isPrimary} + <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p> + {/if} + {elseif $is_pay_later} + <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *} + {else} + <p>{ts}Please print this confirmation for your records.{/ts}</p> + {/if} + + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Event Information and Location{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$event.event_title}<br /> + {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + </td> + </tr> + + {if $event.participant_role neq 'Attendee' and $defaultRole} + <tr> + <td {$labelStyle}> + {ts}Participant Role{/ts} + </td> + <td {$valueStyle}> + {$event.participant_role} + </td> + </tr> + {/if} + + {if $isShowLocation} + <tr> + <td colspan="2" {$valueStyle}> + {$location.address.1.display|nl2br} + </td> + </tr> + {/if} + + {if $location.phone.1.phone || $location.email.1.email} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Event Contacts:{/ts} + </td> + </tr> + {foreach from=$location.phone item=phone} + {if $phone.phone} + <tr> + <td {$labelStyle}> + {if $phone.phone_type} + {$phone.phone_type_display} + {else} + {ts}Phone{/ts} + {/if} + </td> + <td {$valueStyle}> + {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} + </td> + </tr> + {/if} + {/foreach} + {foreach from=$location.email item=eventEmail} + {if $eventEmail.email} + <tr> + <td {$labelStyle}> + {ts}Email{/ts} + </td> + <td {$valueStyle}> + {$eventEmail.email} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $event.is_public} + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + </td> + </tr> + {/if} + + {if $email} + <tr> + <th {$headerStyle}> + {ts}Registered Email{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$email} + </td> + </tr> + {/if} + + + {if $event.is_monetary} + + <tr> + <th {$headerStyle}> + {$event.fee_label} + </th> + </tr> + + {if $lineItem} + {foreach from=$lineItem item=value key=priceset} + {if $value neq 'skip'} + {if $isPrimary} + {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} + <tr> + <td colspan="2" {$labelStyle}> + {ts 1=$priceset+1}Participant %1{/ts} + </td> + </tr> + {/if} + {/if} + <tr> + <td colspan="2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th>{ts}Item{/ts}</th> + <th>{ts}Qty{/ts}</th> + <th>{ts}Each{/ts}</th> + {if $dataArray} + <th>{ts}SubTotal{/ts}</th> + <th>{ts}Tax Rate{/ts}</th> + <th>{ts}Tax Amount{/ts}</th> + {/if} + <th>{ts}Total{/ts}</th> + {if $pricesetFieldsCount }<th>{ts}Total Participants{/ts}</th>{/if} + </tr> + {foreach from=$value item=line} + <tr> + <td> + {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} + </td> + <td> + {$line.qty} + </td> + <td> + {$line.unit_price|crmMoney} + </td> + {if $dataArray} + <td> + {$line.unit_price*$line.qty|crmMoney} + </td> + {if $line.tax_rate != "" || $line.tax_amount != ""} + <td> + {$line.tax_rate|string_format:"%.2f"}% + </td> + <td> + {$line.tax_amount|crmMoney} + </td> + {else} + <td></td> + <td></td> + {/if} + {/if} + <td> + {$line.line_total+$line.tax_amount|crmMoney} + </td> + {if $pricesetFieldsCount } + <td> + {$line.participant_count} + </td> + {/if} + </tr> + {/foreach} + </table> + </td> + </tr> + {/if} + {/foreach} + {if $dataArray} + <tr> + <td {$labelStyle}> + {ts}Amount Before Tax:{/ts} + </td> + <td {$valueStyle}> + {$totalAmount-$totalTaxAmount|crmMoney} + </td> + </tr> + {foreach from=$dataArray item=value key=priceset} + <tr> + {if $priceset || $priceset == 0} + <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {$value|crmMoney:$currency}</td> + {else} + <td> {ts}No{/ts} {$taxTerm}</td> + <td> {$value|crmMoney:$currency}</td> + {/if} + </tr> + {/foreach} + {/if} + {/if} + + {if $amount && !$lineItem} + {foreach from=$amount item=amnt key=level} + <tr> + <td colspan="2" {$valueStyle}> + {$amnt.amount|crmMoney} {$amnt.label} + </td> + </tr> + {/foreach} + {/if} + {if $totalTaxAmount} + <tr> + <td {$labelStyle}> + {ts}Total Tax Amount{/ts} + </td> + <td {$valueStyle}> + {$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + {/if} + {if $isPrimary} + <tr> + <td {$labelStyle}> + {if $balanceAmount} + {ts}Total Paid{/ts} + {else} + {ts}Total Amount{/ts} + {/if} + </td> + <td {$valueStyle}> + {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} + </td> + </tr> + {if $balanceAmount} + <tr> + <td {$labelStyle}> + {ts}Balance{/ts} + </td> + <td {$valueStyle}> + {$balanceAmount|crmMoney} + </td> + </tr> + {/if} + {if $pricesetFieldsCount } + <tr> + <td {$labelStyle}> + {ts}Total Participants{/ts}</td> + <td {$valueStyle}> + {assign var="count" value= 0} + {foreach from=$lineItem item=pcount} + {assign var="lineItemCount" value=0} + {if $pcount neq 'skip'} + {foreach from=$pcount item=p_count} + {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} + {/foreach} + {if $lineItemCount < 1 } + assign var="lineItemCount" value=1} + {/if} + {assign var="count" value=$count+$lineItemCount} + {/if} + {/foreach} + {$count} + </td> + </tr> + {/if} + {if $is_pay_later} + <tr> + <td colspan="2" {$labelStyle}> + {$pay_later_receipt} + </td> + </tr> + {/if} + + {if $register_date} + <tr> + <td {$labelStyle}> + {ts}Registration Date{/ts} + </td> + <td {$valueStyle}> + {$register_date|crmDate} + </td> + </tr> + {/if} + + {if $receive_date} + <tr> + <td {$labelStyle}> + {ts}Transaction Date{/ts} + </td> + <td {$valueStyle}> + {$receive_date|crmDate} + </td> + </tr> + {/if} + + {if $financialTypeName} + <tr> + <td {$labelStyle}> + {ts}Financial Type{/ts} + </td> + <td {$valueStyle}> + {$financialTypeName} + </td> + </tr> + {/if} + + {if $trxn_id} + <tr> + <td {$labelStyle}> + {ts}Transaction #{/ts} + </td> + <td {$valueStyle}> + {$trxn_id} + </td> + </tr> + {/if} + + {if $paidBy} + <tr> + <td {$labelStyle}> + {ts}Paid By{/ts} + </td> + <td {$valueStyle}> + {$paidBy} + </td> + </tr> + {/if} + + {if $checkNumber} + <tr> + <td {$labelStyle}> + {ts}Check Number{/ts} + </td> + <td {$valueStyle}> + {$checkNumber} + </td> + </tr> + {/if} + + {if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} + <tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$billingName}<br /> + {$address|nl2br} + </td> + </tr> + {/if} + + {if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} + </td> + </tr> + {/if} + + {/if} + + {/if} {* End of conditional section for Paid events *} + + {if $customPre} + <tr> + <th {$headerStyle}> + {$customPre_grouptitle} + </th> + </tr> + {foreach from=$customPre item=value key=customName} + {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + <tr> + <td {$labelStyle}> + {$customName} + </td> + <td {$valueStyle}> + {$value} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $customPost} + <tr> + <th {$headerStyle}> + {$customPost_grouptitle} + </th> + </tr> + {foreach from=$customPost item=value key=customName} + {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + <tr> + <td {$labelStyle}> + {$customName} + </td> + <td {$valueStyle}> + {$value} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $customProfile} + {foreach from=$customProfile item=value key=customName} + <tr> + <th {$headerStyle}> + {ts 1=$customName+1}Participant Information - Participant %1{/ts} + </th> + </tr> + {foreach from=$value item=val key=field} + {if $field eq 'additionalCustomPre' or $field eq 'additionalCustomPost'} + <tr> + <td colspan="2" {$labelStyle}> + {if $field eq 'additionalCustomPre'} + {$additionalCustomPre_grouptitle} + {else} + {$additionalCustomPost_grouptitle} + {/if} + </td> + </tr> + {foreach from=$val item=v key=f} + <tr> + <td {$labelStyle}> + {$f} + </td> + <td {$valueStyle}> + {$v} + </td> + </tr> + {/foreach} + {/if} + {/foreach} + {/foreach} + {/if} + + {if $customGroup} + {foreach from=$customGroup item=value key=customName} + <tr> + <th {$headerStyle}> + {$customName} + </th> + </tr> + {foreach from=$value item=v key=n} + <tr> + <td {$labelStyle}> + {$n} + </td> + <td {$valueStyle}> + {$v} + </td> + </tr> + {/foreach} + {/foreach} + {/if} + + </table> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/event_offline_receipt_subject.tpl b/civicrm/xml/templates/message_templates/event_offline_receipt_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..5cbe60c144e7ba638a9aa94a92b00ab4634631c5 --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_offline_receipt_subject.tpl @@ -0,0 +1 @@ +{ts}Event Confirmation{/ts} - {$event.title} diff --git a/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl b/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..ceb48e0c209498cb2610997fbe6ec16ac5d05a51 --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_offline_receipt_text.tpl @@ -0,0 +1,292 @@ +{contact.email_greeting} +{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} +{$event.confirm_email_text} +{/if} + +{if $isOnWaitlist} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}You have been added to the WAIT LIST for this event.{/ts} + +{if $isPrimary} +{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts} + +{/if} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{elseif $isRequireApproval} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}Your registration has been submitted.{/ts} + +{if $isPrimary} +{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts} + +{/if} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{elseif $is_pay_later} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$pay_later_receipt} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{else} + +{ts}Please print this confirmation for your records.{/ts} +{/if} + + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}Event Information and Location{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$event.event_title} +{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + +{if $event.participant_role neq 'Attendee' and $defaultRole} +{ts}Participant Role{/ts}: {$event.participant_role} +{/if} + +{if $isShowLocation} +{$location.address.1.display|strip_tags:false} +{/if}{*End of isShowLocation condition*} + +{if $location.phone.1.phone || $location.email.1.email} + +{ts}Event Contacts:{/ts} +{foreach from=$location.phone item=phone} +{if $phone.phone} + +{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} +{/foreach} +{foreach from=$location.email item=eventEmail} +{if $eventEmail.email} + +{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} +{/if} + +{if $event.is_public} +{capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Download iCalendar File:{/ts} {$icalFeed} +{/if} + +{if $email} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}Registered Email{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$email} +{/if} +{if $event.is_monetary} {* This section for Paid events only.*} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$event.fee_label} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{if $lineItem}{foreach from=$lineItem item=value key=priceset} + +{if $value neq 'skip'} +{if $isPrimary} +{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} +{ts 1=$priceset+1}Participant %1{/ts} +{/if} +{/if} +---------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} + +{capture assign=ts_item}{ts}Item{/ts}{/capture} +{capture assign=ts_qty}{ts}Qty{/ts}{/capture} +{capture assign=ts_each}{ts}Each{/ts}{/capture} +{if $dataArray} +{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture} +{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture} +{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture} +{/if} +{capture assign=ts_total}{ts}Total{/ts}{/capture} +{capture assign=ts_participant_total}{if $pricesetFieldsCount }{ts}Total Participants{/ts}{/if}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if $dataArray} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} {$ts_participant_total|string_format:"%10s"} +----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} + +{foreach from=$value item=line} +{if $pricesetFieldsCount }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if} +{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney|string_format:"%10s"} {if $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if $line.tax_rate != "" || $line.tax_amount != ""} {$line.tax_rate|string_format:"%.2f"} % {$line.tax_amount|crmMoney:$currency|string_format:"%10s"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:"%10s"} {$ts_participant_count|string_format:"%10s"} +{/foreach} +{/if} +{/foreach} + +{if $dataArray} +{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency} + +{foreach from=$dataArray item=value key=priceset} +{if $priceset || $priceset == 0} +{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{else} +{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{/if} +{/foreach} +{/if} +{/if} + +{if $amount && !$lineItem} +{foreach from=$amount item=amnt key=level}{$amnt.amount|crmMoney} {$amnt.label} +{/foreach} +{/if} + +{if $totalTaxAmount} +{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} +{/if} +{if $isPrimary} + +{if $balanceAmount}{ts}Total Paid{/ts}{else}{ts}Total Amount{/ts}{/if}: {$totalAmount|crmMoney} {if $hookDiscount.message}({$hookDiscount.message}){/if} + +{if $balanceAmount} +{ts}Balance{/ts}: {$balanceAmount|crmMoney} +{/if} + +{if $pricesetFieldsCount } + {assign var="count" value= 0} + {foreach from=$lineItem item=pcount} + {assign var="lineItemCount" value=0} + {if $pcount neq 'skip'} + {foreach from=$pcount item=p_count} + {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} + {/foreach} + {if $lineItemCount < 1 } + {assign var="lineItemCount" value=1} + {/if} + {assign var="count" value=$count+$lineItemCount} + {/if} + {/foreach} + +{ts}Total Participants{/ts}: {$count} +{/if} + +{if $is_pay_later } + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$pay_later_receipt} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{/if} + +{if $register_date} +{ts}Registration Date{/ts}: {$register_date|crmDate} +{/if} +{if $receive_date} +{ts}Transaction Date{/ts}: {$receive_date|crmDate} +{/if} +{if $financialTypeName} +{ts}Financial Type{/ts}: {$financialTypeName} +{/if} +{if $trxn_id} +{ts}Transaction #{/ts}: {$trxn_id} +{/if} +{if $paidBy} +{ts}Paid By{/ts}: {$paidBy} +{/if} +{if $checkNumber} +{ts}Check Number{/ts}: {$checkNumber} +{/if} +{if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}Billing Name and Address{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$billingName} +{$address} +{/if} + +{if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} +=========================================================== +{ts}Credit Card Information{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} +{/if} +{/if} +{/if} {* End of conditional section for Paid events *} + +{if $customPre} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$customPre_grouptitle} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{foreach from=$customPre item=value key=customName} +{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{$customName}: {$value} +{/if} +{/foreach} +{/if} + +{if $customPost} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$customPost_grouptitle} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{foreach from=$customPost item=value key=customName} +{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} +{$customName}: {$value} +{/if} +{/foreach} +{/if} +{if $customProfile} + +{foreach from=$customProfile item=value key=customName} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts 1=$customName+1}Participant Information - Participant %1{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{foreach from=$value item=val key=field} +{if $field eq 'additionalCustomPre' or $field eq 'additionalCustomPost' } +{if $field eq 'additionalCustomPre' } +----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} + +{$additionalCustomPre_grouptitle} +----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} + +{else} +----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} + +{$additionalCustomPost_grouptitle} +----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} + +{/if} +{foreach from=$val item=v key=f} +{$f}: {$v} +{/foreach} +{/if} +{/foreach} +{/foreach} +{/if} +{if $customGroup} +{foreach from=$customGroup item=value key=customName} +=========================================================={if $pricesetFieldsCount }===================={/if} + +{$customName} +=========================================================={if $pricesetFieldsCount }===================={/if} + +{foreach from=$value item=v key=n} +{$n}: {$v} +{/foreach} +{/foreach} +{/if} + + diff --git a/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl b/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..f7ebf3663efd15343b1bb75cea531928c0bc1d56 --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_online_receipt_html.tpl @@ -0,0 +1,514 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} +{capture assign=tdfirstStyle}style="width: 180px; padding-bottom: 15px;"{/capture} +{capture assign=tdStyle}style="width: 100px;"{/capture} +{capture assign=participantTotal}style="margin: 0.5em 0 0.5em;padding: 0.5em;background-color: #999999;font-weight: bold;color: #FAFAFA;border-radius: 2px;"{/capture} + + +<center> + <table width="700" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{contact.email_greeting},</p> + + {if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} + <p>{$event.confirm_email_text|htmlize}</p> + + {else} + <p>{ts}Thank you for your participation.{/ts} + {if $participant_status}{ts 1=$participant_status}This letter is a confirmation that your registration has been received and your status has been updated to <strong> %1</strong>.{/ts} + {else}{if $isOnWaitlist}{ts}This letter is a confirmation that your registration has been received and your status has been updated to <strong>waitlisted</strong>.{/ts}{else}{ts}This letter is a confirmation that your registration has been received and your status has been updated to <strong>registered<strong>.{/ts}{/if}{/if}.</p> + + {/if} + + <p> + {if $isOnWaitlist} + <p>{ts}You have been added to the WAIT LIST for this event.{/ts}</p> + {if $isPrimary} + <p>{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts}</p> + {/if} + {elseif $isRequireApproval} + <p>{ts}Your registration has been submitted.{/ts}</p> + {if $isPrimary} + <p>{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts}</p> + {/if} + {elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant} + <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *} + {else} + <p>{ts}Please print this confirmation for your records.{/ts}</p> + {/if} + + </td> + </tr> + <tr> + <td> + <table width="700" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> + <tr> + <th {$headerStyle}> + {ts}Event Information and Location{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$event.event_title}<br /> + {$event.event_start_date|date_format:"%A"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:"%A"} {$event.event_end_date|crmDate}{/if}{/if} + </td> + </tr> + + + {if $conference_sessions} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Your schedule:{/ts} + </td> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {assign var='group_by_day' value='NA'} + {foreach from=$conference_sessions item=session} + {if $session.start_date|date_format:"%Y/%m/%d" != $group_by_day|date_format:"%Y/%m/%d"} + {assign var='group_by_day' value=$session.start_date} + <em>{$group_by_day|date_format:"%m/%d/%Y"}</em><br /> + {/if} + {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br /> + {if $session.location} {$session.location}<br />{/if} + {/foreach} + </td> + </tr> + {/if} + + {if $event.participant_role neq 'Attendee' and $defaultRole} + <tr> + <td {$labelStyle}> + {ts}Participant Role{/ts} + </td> + <td {$valueStyle}> + {$event.participant_role} + </td> + </tr> + {/if} + + {if $isShowLocation} + <tr> + <td colspan="2" {$valueStyle}> + {$location.address.1.display|nl2br} + </td> + </tr> + {/if} + + {if $location.phone.1.phone || $location.email.1.email} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Event Contacts:{/ts} + </td> + </tr> + {foreach from=$location.phone item=phone} + {if $phone.phone} + <tr> + <td {$labelStyle}> + {if $phone.phone_type} + {$phone.phone_type_display} + {else} + {ts}Phone{/ts} + {/if} + </td> + <td {$valueStyle}> + {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} + </td> + </tr> + {/if} + {/foreach} + {foreach from=$location.email item=eventEmail} + {if $eventEmail.email} + <tr> + <td {$labelStyle}> + {ts}Email{/ts} + </td> + <td {$valueStyle}> + {$eventEmail.email} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $event.is_public} + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + </td> + </tr> + {/if} + + {if $event.is_share} + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=eventUrl}{crmURL p='civicrm/event/info' q="id=`$event.id`&reset=1" a=true fe=1 h=1}{/capture} + {include file="CRM/common/SocialNetwork.tpl" emailMode=true url=$eventUrl title=$event.title pageURL=$eventUrl} + </td> + </tr> + {/if} + {if $payer.name} + <tr> + <th {$headerStyle}> + {ts}You were registered by:{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$payer.name} + </td> + </tr> + {/if} + {if $event.is_monetary} + + <tr> + <th {$headerStyle}> + {$event.fee_label} + </th> + </tr> + + {if $lineItem} + {foreach from=$lineItem item=value key=priceset} + {if $value neq 'skip'} + {if $isPrimary} + {if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} + <tr> + <td colspan="2" {$labelStyle}> + {ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info} + </td> + </tr> + {/if} + {/if} + <tr> + <td colspan="2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th>{ts}Item{/ts}</th> + <th>{ts}Qty{/ts}</th> + <th>{ts}Each{/ts}</th> + {if $dataArray} + <th>{ts}SubTotal{/ts}</th> + <th>{ts}Tax Rate{/ts}</th> + <th>{ts}Tax Amount{/ts}</th> + {/if} + <th>{ts}Total{/ts}</th> + {if $pricesetFieldsCount }<th>{ts}Total Participants{/ts}</th>{/if} + </tr> + {foreach from=$value item=line} + <tr> + <td {$tdfirstStyle}> + {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} + </td> + <td {$tdStyle} align="middle"> + {$line.qty} + </td> + <td {$tdStyle}> + {$line.unit_price|crmMoney:$currency} + </td> + {if $dataArray} + <td {$tdStyle}> + {$line.unit_price*$line.qty|crmMoney} + </td> + {if $line.tax_rate != "" || $line.tax_amount != ""} + <td {$tdStyle}> + {$line.tax_rate|string_format:"%.2f"}% + </td> + <td {$tdStyle}> + {$line.tax_amount|crmMoney} + </td> + {else} + <td></td> + <td></td> + {/if} + {/if} + <td {$tdStyle}> + {$line.line_total+$line.tax_amount|crmMoney:$currency} + </td> + {if $pricesetFieldsCount }<td {$tdStyle}>{$line.participant_count}</td> {/if} + </tr> + {/foreach} + {if $individual} + <tr {$participantTotal}> + <td colspan=3>{ts}Participant Total{/ts}</td> + <td colspan=2>{$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney}</td> + <td colspan=1>{$individual.$priceset.totalTaxAmt|crmMoney}</td> + <td colspan=2>{$individual.$priceset.totalAmtWithTax|crmMoney}</td> + </tr> + {/if} + </table> + </td> + </tr> + {/if} + {/foreach} + {if $dataArray} + <tr> + <td {$labelStyle}> + {ts} Amount Before Tax: {/ts} + </td> + <td {$valueStyle}> + {$totalAmount-$totalTaxAmount|crmMoney} + </td> + </tr> + {foreach from=$dataArray item=value key=priceset} + <tr> + {if $priceset || $priceset == 0} + <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {$value|crmMoney:$currency}</td> + {else} + <td> {ts}No{/ts} {$taxTerm}</td> + <td> {$value|crmMoney:$currency}</td> + {/if} + </tr> + {/foreach} + {/if} + {/if} + + {if $amounts && !$lineItem} + {foreach from=$amounts item=amnt key=level} + <tr> + <td colspan="2" {$valueStyle}> + {$amnt.amount|crmMoney:$currency} {$amnt.label} + </td> + </tr> + {/foreach} + {/if} + + {if $totalTaxAmount} + <tr> + <td {$labelStyle}> + {ts}Total Tax Amount{/ts} + </td> + <td {$valueStyle}> + {$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + {/if} + {if $isPrimary} + <tr> + <td {$labelStyle}> + {ts}Total Amount{/ts} + </td> + <td {$valueStyle}> + {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} + </td> + </tr> + {if $pricesetFieldsCount } + <tr> + <td {$labelStyle}> + {ts}Total Participants{/ts}</td> + <td {$valueStyle}> + {assign var="count" value= 0} + {foreach from=$lineItem item=pcount} + {assign var="lineItemCount" value=0} + {if $pcount neq 'skip'} + {foreach from=$pcount item=p_count} + {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} + {/foreach} + {if $lineItemCount < 1 } + {assign var="lineItemCount" value=1} + {/if} + {assign var="count" value=$count+$lineItemCount} + {/if} + {/foreach} + {$count} + </td> </tr> + {/if} + + {if $register_date} + <tr> + <td {$labelStyle}> + {ts}Registration Date{/ts} + </td> + <td {$valueStyle}> + {$register_date|crmDate} + </td> + </tr> + {/if} + + {if $receive_date} + <tr> + <td {$labelStyle}> + {ts}Transaction Date{/ts} + </td> + <td {$valueStyle}> + {$receive_date|crmDate} + </td> + </tr> + {/if} + + {if $financialTypeName} + <tr> + <td {$labelStyle}> + {ts}Financial Type{/ts} + </td> + <td {$valueStyle}> + {$financialTypeName} + </td> + </tr> + {/if} + + {if $trxn_id} + <tr> + <td {$labelStyle}> + {ts}Transaction #{/ts} + </td> + <td {$valueStyle}> + {$trxn_id} + </td> + </tr> + {/if} + + {if $paidBy} + <tr> + <td {$labelStyle}> + {ts}Paid By{/ts} + </td> + <td {$valueStyle}> + {$paidBy} + </td> + </tr> + {/if} + + {if $checkNumber} + <tr> + <td {$labelStyle}> + {ts}Check Number{/ts} + </td> + <td {$valueStyle}> + {$checkNumber} + </td> + </tr> + {/if} + + {if $contributeMode ne 'notify' and !$isAmountzero and (!$is_pay_later or $isBillingAddressRequiredForPayLater) and !$isOnWaitlist and !$isRequireApproval} + <tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$billingName}<br /> + {$address|nl2br} + </td> + </tr> + {/if} + + {if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} + </td> + </tr> + {/if} + + {/if} + + {/if} {* End of conditional section for Paid events *} + + +{if $customPre} +{foreach from=$customPre item=customPr key=i} + <tr> <th {$headerStyle}>{$customPre_grouptitle.$i}</th></tr> + {foreach from=$customPr item=customValue key=customName} + {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + <tr> + <td {$labelStyle}>{$customName}</td> + <td {$valueStyle}>{$customValue}</td> + </tr> + {/if} + {/foreach} +{/foreach} +{/if} + +{if $customPost} +{foreach from=$customPost item=customPos key=j} + <tr> <th {$headerStyle}>{$customPost_grouptitle.$j}</th></tr> + {foreach from=$customPos item=customValue key=customName} + {if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + <tr> + <td {$labelStyle}>{$customName}</td> + <td {$valueStyle}>{$customValue}</td> + </tr> +{/if} +{/foreach} +{/foreach} +{/if} + +{if $customProfile} +{foreach from=$customProfile.profile item=eachParticipant key=participantID} + <tr><th {$headerStyle}>{ts 1=$participantID+2}Participant %1{/ts} </th></tr> + {foreach from=$eachParticipant item=eachProfile key=pid} + <tr><th {$headerStyle}>{$customProfile.title.$pid}</th></tr> + {foreach from=$eachProfile item=val key=field} + <tr>{foreach from=$val item=v key=f} + <td {$labelStyle}>{$field}</td> + <td {$valueStyle}>{$v}</td> + {/foreach} + </tr> + {/foreach} +{/foreach} +{/foreach} +{/if} + + {if $customGroup} + {foreach from=$customGroup item=value key=customName} + <tr> + <th {$headerStyle}> + {$customName} + </th> + </tr> + {foreach from=$value item=v key=n} + <tr> + <td {$labelStyle}> + {$n} + </td> + <td {$valueStyle}> + {$v} + </td> + </tr> + {/foreach} + {/foreach} + {/if} + </table> + {if $event.allow_selfcancelxfer } + <tr> + <td colspan="2" {$valueStyle}> + {ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br /> + {capture assign=selfService}{crmURL p='civicrm/event/selfsvcupdate' q="reset=1&pid=`$participant.id`&{contact.checksum}" h=0 a=1 fe=1}{/capture} + <a href="{$selfService}">{ts}Click here to transfer or cancel your registration.{/ts}</a> + </td> + </tr> + {/if} + </td> + </tr> + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/event_online_receipt_subject.tpl b/civicrm/xml/templates/message_templates/event_online_receipt_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c847397dbb7b1bea44a209bdde25d4e668188d15 --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_online_receipt_subject.tpl @@ -0,0 +1 @@ +{if $isOnWaitlist}{ts}Wait List Confirmation{/ts}{else}{ts}Registration Confirmation{/ts}{/if} - {$event.event_title} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl b/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..b0233b41ea55d2d484459951f0f740d329dc7778 --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_online_receipt_text.tpl @@ -0,0 +1,302 @@ +{contact.email_greeting}, + +{if $event.confirm_email_text AND (not $isOnWaitlist AND not $isRequireApproval)} +{$event.confirm_email_text} + +{else} + {ts}Thank you for your participation.{/ts} + {if $participant_status}{ts 1=$participant_status}This letter is a confirmation that your registration has been received and your status has been updated to %1.{/ts} + {else}{if $isOnWaitlist}{ts}This letter is a confirmation that your registration has been received and your status has been updated to waitlisted.{/ts}{else}{ts}This letter is a confirmation that your registration has been received and your status has been updated to registered.{/ts}{/if} + {/if}. + +{/if} + +{if $isOnWaitlist} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}You have been added to the WAIT LIST for this event.{/ts} + +{if $isPrimary} +{ts}If space becomes available you will receive an email with a link to a web page where you can complete your registration.{/ts} +{/if} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{elseif $isRequireApproval} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}Your registration has been submitted.{/ts} + +{if $isPrimary} +{ts}Once your registration has been reviewed, you will receive an email with a link to a web page where you can complete the registration process.{/ts} + +{/if} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{elseif $is_pay_later && !$isAmountzero && !$isAdditionalParticipant} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$pay_later_receipt} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{else} + +{ts}Please print this confirmation for your records.{/ts} +{/if} + + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}Event Information and Location{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$event.event_title} +{$event.event_start_date|date_format:"%A"} {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|date_format:"%A"} {$event.event_end_date|crmDate}{/if}{/if} +{if $conference_sessions} + + +{ts}Your schedule:{/ts} +{assign var='group_by_day' value='NA'} +{foreach from=$conference_sessions item=session} +{if $session.start_date|date_format:"%Y/%m/%d" != $group_by_day|date_format:"%Y/%m/%d"} +{assign var='group_by_day' value=$session.start_date} + +{$group_by_day|date_format:"%m/%d/%Y"} + + +{/if} +{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title} +{if $session.location} {$session.location}{/if} +{/foreach} +{/if} + +{if $event.participant_role neq 'Attendee' and $defaultRole} +{ts}Participant Role{/ts}: {$event.participant_role} +{/if} + +{if $isShowLocation} +{$location.address.1.display|strip_tags:false} +{/if}{*End of isShowLocation condition*} + +{if $location.phone.1.phone || $location.email.1.email} + +{ts}Event Contacts:{/ts} +{foreach from=$location.phone item=phone} +{if $phone.phone} + +{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} +{/foreach} +{foreach from=$location.email item=eventEmail} +{if $eventEmail.email} + +{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} +{/if} + +{if $event.is_public} +{capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Download iCalendar File:{/ts} {$icalFeed} +{/if} + +{if $payer.name} +You were registered by: {$payer.name} +{/if} +{if $event.is_monetary} {* This section for Paid events only.*} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$event.fee_label} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{if $lineItem}{foreach from=$lineItem item=value key=priceset} + +{if $value neq 'skip'} +{if $isPrimary} +{if $lineItem|@count GT 1} {* Header for multi participant registration cases. *} +{ts 1=$priceset+1}Participant %1{/ts} {$part.$priceset.info} + +{/if} +{/if} +-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if} + +{capture assign=ts_item}{ts}Item{/ts}{/capture} +{capture assign=ts_qty}{ts}Qty{/ts}{/capture} +{capture assign=ts_each}{ts}Each{/ts}{/capture} +{if $dataArray} +{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture} +{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture} +{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture} +{/if} +{capture assign=ts_total}{ts}Total{/ts}{/capture} +{if $pricesetFieldsCount }{capture assign=ts_participant_total}{ts}Total Participants{/ts}{/capture}{/if} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {if $dataArray} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {/if} {$ts_total|string_format:"%10s"} {$ts_participant_total|string_format:"%10s"} +-----------------------------------------------------------{if $pricesetFieldsCount }-----------------------------------------------------{/if} + +{foreach from=$value item=line} +{if $pricesetFieldsCount }{capture assign=ts_participant_count}{$line.participant_count}{/capture}{/if} +{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney:$currency|string_format:"%10s"} {if $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if $line.tax_rate != "" || $line.tax_amount != ""} {$line.tax_rate|string_format:"%.2f"} % {$line.tax_amount|crmMoney:$currency|string_format:"%10s"} {else} {/if} {/if} {$line.line_total+$line.tax_amount|crmMoney:$currency|string_format:"%10s"}{$ts_participant_count|string_format:"%10s"} +{/foreach} +---------------------------------------------------------------------------------------------------------------- +{if $individual}{ts}Participant Total{/ts} {$individual.$priceset.totalAmtWithTax-$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:"%29s"} {$individual.$priceset.totalTaxAmt|crmMoney:$currency|string_format:"%33s"} {$individual.$priceset.totalAmtWithTax|crmMoney:$currency|string_format:"%12s"}{/if} +{/if} +{""|string_format:"%120s"} +{/foreach} +{""|string_format:"%120s"} + +{if $dataArray} +{ts}Amount before Tax{/ts}: {$totalAmount-$totalTaxAmount|crmMoney:$currency} + +{foreach from=$dataArray item=value key=priceset} +{if $priceset || $priceset == 0} +{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{else} +{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{/if} +{/foreach} +{/if} +{/if} + +{if $amounts && !$lineItem} +{foreach from=$amounts item=amnt key=level}{$amnt.amount|crmMoney:$currency} {$amnt.label} +{/foreach} +{/if} + +{if $totalTaxAmount} +{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} +{/if} +{if $isPrimary } + +{ts}Total Amount{/ts}: {$totalAmount|crmMoney:$currency} {if $hookDiscount.message}({$hookDiscount.message}){/if} + +{if $pricesetFieldsCount } + {assign var="count" value= 0} + {foreach from=$lineItem item=pcount} + {assign var="lineItemCount" value=0} + {if $pcount neq 'skip'} + {foreach from=$pcount item=p_count} + {assign var="lineItemCount" value=$lineItemCount+$p_count.participant_count} + {/foreach} + {if $lineItemCount < 1 } + {assign var="lineItemCount" value=1} + {/if} + {assign var="count" value=$count+$lineItemCount} + {/if} + {/foreach} + +{ts}Total Participants{/ts}: {$count} +{/if} + +{if $register_date} +{ts}Registration Date{/ts}: {$register_date|crmDate} +{/if} +{if $receive_date} +{ts}Transaction Date{/ts}: {$receive_date|crmDate} +{/if} +{if $financialTypeName} +{ts}Financial Type{/ts}: {$financialTypeName} +{/if} +{if $trxn_id} +{ts}Transaction #{/ts}: {$trxn_id} +{/if} +{if $paidBy} +{ts}Paid By{/ts}: {$paidBy} +{/if} +{if $checkNumber} +{ts}Check Number{/ts}: {$checkNumber} +{/if} +{if $contributeMode ne 'notify' and !$isAmountzero and (!$is_pay_later or $isBillingAddressRequiredForPayLater) and !$isOnWaitlist and !$isRequireApproval} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}Billing Name and Address{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$billingName} +{$address} +{/if} + +{if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later and !$isOnWaitlist and !$isRequireApproval} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts}Credit Card Information{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} +{/if} +{/if} +{/if} {* End of conditional section for Paid events *} + +{if $customPre} +{foreach from=$customPre item=customPr key=i} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$customPre_grouptitle.$i} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{foreach from=$customPr item=customValue key=customName} +{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {$customName}: {$customValue} +{/if} +{/foreach} +{/foreach} +{/if} + +{if $customPost} +{foreach from=$customPost item=customPos key=j} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{$customPost_grouptitle.$j} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{foreach from=$customPos item=customValue key=customName} +{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {$customName}: {$customValue} +{/if} +{/foreach} +{/foreach} +{/if} +{if $customProfile} + +{foreach from=$customProfile.profile item=eachParticipant key=participantID} +==========================================================={if $pricesetFieldsCount }===================={/if} + +{ts 1=$participantID+2}Participant Information - Participant %1{/ts} + +==========================================================={if $pricesetFieldsCount }===================={/if} + +{foreach from=$eachParticipant item=eachProfile key=pid} +----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} + +{$customProfile.title.$pid} +----------------------------------------------------------{if $pricesetFieldsCount }--------------------{/if} + +{foreach from=$eachProfile item=val key=field} +{foreach from=$val item=v key=f} +{$field}: {$v} +{/foreach} +{/foreach} +{/foreach} +{/foreach} +{/if} +{if $customGroup} +{foreach from=$customGroup item=value key=customName} +=========================================================={if $pricesetFieldsCount }===================={/if} + +{$customName} +=========================================================={if $pricesetFieldsCount }===================={/if} + +{foreach from=$value item=v key=n} +{$n}: {$v} +{/foreach} +{/foreach} +{/if} + +{if $event.allow_selfcancelxfer } +{ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if} + {capture assign=selfService}{crmURL p='civicrm/event/selfsvcupdate' q="reset=1&pid=`$participant.id`&{contact.checksum}" h=0 a=1 fe=1}{/capture} +{ts}Transfer or cancel your registration:{/ts} {$selfService} +{/if} diff --git a/civicrm/xml/templates/message_templates/event_registration_receipt_html.tpl b/civicrm/xml/templates/message_templates/event_registration_receipt_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..3436a1903486a05e25bda1a94936b708f1cbb498 --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_registration_receipt_html.tpl @@ -0,0 +1,175 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> + </head> + <body> + {capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} + {capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} + {capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + + <p>Dear {contact.display_name},</p> + {if $is_pay_later} + <p> + This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received. + </p> + {else} + <p> + This is being sent to you as a {if $is_refund}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase. + </p> + {/if} + + {if $is_pay_later} + <p>{$pay_later_receipt}</p> + {/if} + + <p>Your order number is #{$transaction_id}. Please print this confirmation for your records.{if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if} + Here's a summary of your transaction placed on {$transaction_date|date_format:"%D %I:%M %p %Z"}:</p> + + +{if $billing_name} + <table class="billing-info"> + <tr> + <th style="text-align: left;"> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td> + {$billing_name}<br /> + {$billing_street_address}<br /> + {$billing_city}, {$billing_state} {$billing_postal_code}<br/> + <br/> + {$email} + </td> + </tr> + </table> +{/if} +{if $credit_card_type} + <p> </p> + <table class="billing-info"> + <tr> + <th style="text-align: left;"> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y} + </td> + </tr> + </table> +{/if} +{if $source} + <p> </p> + {$source} +{/if} + <p> </p> + <table width="600"> + <thead> + <tr> +{if $line_items} + <th style="text-align: left;"> + Event + </th> + <th style="text-align: left;"> + Participants + </th> +{/if} + <th style="text-align: left;"> + Price + </th> + <th style="text-align: left;"> + Total + </th> + </tr> + </thead> + <tbody> + {foreach from=$line_items item=line_item} + <tr> + <td style="width: 220px"> + {$line_item.event->title} ({$line_item.event->start_date|date_format:"%D"})<br /> + {if $line_item.event->is_show_location} + {$line_item.location.address.1.display|nl2br} + {/if}{*End of isShowLocation condition*}<br /><br /> + {$line_item.event->start_date|date_format:"%D %I:%M %p"} - {$line_item.event->end_date|date_format:"%I:%M %p"} + </td> + <td style="width: 180px"> + {$line_item.num_participants} + {if $line_item.num_participants > 0} + <div class="participants" style="padding-left: 10px;"> + {foreach from=$line_item.participants item=participant} + {$participant.display_name}<br /> + {/foreach} + </div> + {/if} + {if $line_item.num_waiting_participants > 0} + Waitlisted:<br/> + <div class="participants" style="padding-left: 10px;"> + {foreach from=$line_item.waiting_participants item=participant} + {$participant.display_name}<br /> + {/foreach} + </div> + {/if} + </td> + <td style="width: 100px"> + {$line_item.cost|crmMoney:$currency|string_format:"%10s"} + </td> + <td style="width: 100px"> + {$line_item.amount|crmMoney:$currency|string_format:"%10s"} + </td> + </tr> + {/foreach} + </tbody> + <tfoot> + {if $discounts} + <tr> + <td> + </td> + <td> + </td> + <td> + Subtotal: + </td> + <td> + {$sub_total|crmMoney:$currency|string_format:"%10s"} + </td> + </tr> + {foreach from=$discounts key=myId item=i} + <tr> + <td> + {$i.title} + </td> + <td> + </td> + <td> + </td> + <td> + -{$i.amount} + </td> + </tr> + {/foreach} + {/if} + <tr> +{if $line_items} + <td> + </td> + <td> + </td> +{/if} + <td> + <strong>Total:</strong> + </td> + <td> + <strong> {$total|crmMoney:$currency|string_format:"%10s"}</strong> + </td> + </tr> + </tfoot> + </table> + + If you have questions about the status of your registration or purchase please feel free to contact us. + </body> +</html> diff --git a/civicrm/xml/templates/message_templates/event_registration_receipt_subject.tpl b/civicrm/xml/templates/message_templates/event_registration_receipt_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..faed123a7f854d585aad54e3119629667c57c9ea --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_registration_receipt_subject.tpl @@ -0,0 +1 @@ +Receipt for {if $events_in_cart} Event Registration{/if} diff --git a/civicrm/xml/templates/message_templates/event_registration_receipt_text.tpl b/civicrm/xml/templates/message_templates/event_registration_receipt_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..695b53d60432e6eea04eda09425abe997d2baf8c --- /dev/null +++ b/civicrm/xml/templates/message_templates/event_registration_receipt_text.tpl @@ -0,0 +1,80 @@ +Dear {contact.display_name}, +{if $is_pay_later} + This is being sent to you as an acknowledgement that you have registered one or more members for the following workshop, event or purchase. Please note, however, that the status of your payment is pending, and the registration for this event will not be completed until your payment is received. +{else} + This is being sent to you as a {if $is_refund}confirmation of refund{else}receipt of payment made{/if} for the following workshop, event registration or purchase. +{/if} + +{if $is_pay_later} + {$pay_later_receipt} +{/if} + + Your order number is #{$transaction_id}. Please print this confirmation for your records.{if $line_items && !$is_refund} Information about the workshops will be sent separately to each participant.{/if} + Here's a summary of your transaction placed on {$transaction_date|date_format:"%D %I:%M %p %Z"}: + +{if $billing_name} +=========================================================== +{ts}Billing Name and Address{/ts} + +=========================================================== +{$billing_name} + +{$billing_street_address} + +{$billing_city}, {$billing_state} {$billing_postal_code} + +{$email} +{/if} + +{if $source} +{$source} +{/if} + + +{foreach from=$line_items item=line_item} +{$line_item.event->title} ({$line_item.event->start_date|date_format:"%D"}) +{if $line_item.event->is_show_location} + {$line_item.location.address.1.display|strip_tags:false} +{/if}{*End of isShowLocation condition*} +{$line_item.event->start_date|date_format:"%D %I:%M %p"} - {$line_item.event->end_date|date_format:"%I:%M %p"} + + Quantity: {$line_item.num_participants} + +{if $line_item.num_participants > 0} + {foreach from=$line_item.participants item=participant} + {$participant.display_name} + {/foreach} +{/if} +{if $line_item.num_waiting_participants > 0} + Waitlisted: + {foreach from=$line_item.waiting_participants item=participant} + {$participant.display_name} + {/foreach} +{/if} +Cost: {$line_item.cost|crmMoney:$currency|string_format:"%10s"} +Total For This Event: {$line_item.amount|crmMoney:$currency|string_format:"%10s"} + +{/foreach} + +{if $discounts} +Subtotal: {$sub_total|crmMoney:$currency|string_format:"%10s"} +-------------------------------------- +Discounts +{foreach from=$discounts key=myId item=i} + {$i.title}: -{$i.amount|crmMoney:$currency|string_format:"%10s"} +{/foreach} +{/if} +====================================== +Total: {$total|crmMoney:$currency|string_format:"%10s"} + +{if $credit_card_type} +=========================================================== +{ts}Payment Information{/ts} + +=========================================================== +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date.M}/{$credit_card_exp_date.Y} +{/if} + + If you have questions about the status of your registration or purchase please feel free to contact us. diff --git a/civicrm/xml/templates/message_templates/friend_html.tpl b/civicrm/xml/templates/message_templates/friend_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..8ebd8c2a6d5678413cf6b30fbf767d430db3e365 --- /dev/null +++ b/civicrm/xml/templates/message_templates/friend_html.tpl @@ -0,0 +1,40 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{$senderMessage}</p> + {if $generalLink} + <p><a href="{$generalLink}">{ts}More information{/ts}</a></p> + {/if} + {if $contribute} + <p><a href="{$pageURL}">{ts}Make a contribution{/ts}</a></p> + {/if} + {if $event} + <p><a href="{$pageURL}">{ts}Find out more about this event{/ts}</a></p> + {/if} + </td> + </tr> + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/friend_subject.tpl b/civicrm/xml/templates/message_templates/friend_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c628fa3e4b089ccd61b7197d89fb283a6bdb4e04 --- /dev/null +++ b/civicrm/xml/templates/message_templates/friend_subject.tpl @@ -0,0 +1 @@ +{ts 1=$senderContactName 2=$title}%1 wants you to know about %2{/ts} diff --git a/civicrm/xml/templates/message_templates/friend_text.tpl b/civicrm/xml/templates/message_templates/friend_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..2712ae35d940cdb5eea4eaaf7962ad0ec592d0c6 --- /dev/null +++ b/civicrm/xml/templates/message_templates/friend_text.tpl @@ -0,0 +1,15 @@ +{$senderMessage} + +{if $generalLink}{ts}For more information, visit:{/ts} +>> {$generalLink} + +{/if} +{if $contribute}{ts}To make a contribution, go to:{/ts} +>> {$pageURL} + +{/if} +{if $event}{ts}To find out more about this event, go to:{/ts} +>> {$pageURL} +{/if} + + diff --git a/civicrm/xml/templates/message_templates/membership_autorenew_billing_html.tpl b/civicrm/xml/templates/message_templates/membership_autorenew_billing_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..a8ec69f11623ee3b10e87810029832ec2e3290b8 --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_autorenew_billing_html.tpl @@ -0,0 +1,66 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + <p>{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts}</p> + </td> + </tr> + <tr> + </table> + + <table width="500" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> +<tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$billingName}<br /> + {$address|nl2br}<br /> + {$email} + </td> + </tr> + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}<br /> + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts} + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/membership_autorenew_billing_subject.tpl b/civicrm/xml/templates/message_templates/membership_autorenew_billing_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c03dab7845b900c143b3fea50ce914490126aaec --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_autorenew_billing_subject.tpl @@ -0,0 +1 @@ +{ts}Membership Autorenewal Billing Updates{/ts} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/membership_autorenew_billing_text.tpl b/civicrm/xml/templates/message_templates/membership_autorenew_billing_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..8df337a3a21bb9e631653c9bfef91f3d72c05505 --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_autorenew_billing_text.tpl @@ -0,0 +1,23 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts 1=$membershipType}Billing details for your automatically renewed %1 membership have been updated.{/ts} + +=========================================================== +{ts}Billing Name and Address{/ts} + +=========================================================== +{$billingName} +{$address} + +{$email} + +=========================================================== +{ts}Credit Card Information{/ts} + +=========================================================== +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} + + +{ts 1=$receipt_from_email}If you have questions please contact us at %1{/ts} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_html.tpl b/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..77e11ff632f1d268e7a4eae3d142bba096ce2140 --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_html.tpl @@ -0,0 +1,70 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="500" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + + <p>{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts}</p> + + </td> + </tr> + </table> + <table width="500" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> + + <tr> + <th {$headerStyle}> + {ts}Membership Information{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Membership Status{/ts} + </td> + <td {$valueStyle}> + {$membership_status} + </td> + </tr> + {if $mem_start_date} + <tr> + <td {$labelStyle}> + {ts}Membership Start Date{/ts} + </td> + <td {$valueStyle}> + {$mem_start_date|crmDate} + </td> + </tr> + {/if} + {if $mem_end_date} + <tr> + <td {$labelStyle}> + {ts}Membership End Date{/ts} + </td> + <td {$valueStyle}> + {$mem_end_date|crmDate} + </td> + </tr> + {/if} + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_subject.tpl b/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..ccfb0de98f69c1f31177bcbd9210d18d0bdd9204 --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_subject.tpl @@ -0,0 +1 @@ +{ts}Autorenew Membership Cancellation Notification{/ts} diff --git a/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_text.tpl b/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..51cec8cff6a71e0a2a37bbafe1d59123facfccf7 --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_autorenew_cancelled_text.tpl @@ -0,0 +1,12 @@ +{ts 1=$membershipType}The automatic renewal of your %1 membership has been cancelled as requested. This does not affect the status of your membership - you will receive a separate notification when your membership is up for renewal.{/ts} + +=========================================================== +{ts}Membership Information{/ts} + +=========================================================== +{ts}Membership Status{/ts}: {$membership_status} +{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate} +{/if} +{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate} +{/if} + diff --git a/civicrm/xml/templates/message_templates/membership_offline_receipt_html.tpl b/civicrm/xml/templates/message_templates/membership_offline_receipt_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..8d5347a721c63b6f5db75bfff01f02f484030c1f --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_offline_receipt_html.tpl @@ -0,0 +1,296 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + {if $formValues.receipt_text_signup} + <p>{$formValues.receipt_text_signup|htmlize}</p> + {elseif $formValues.receipt_text_renewal} + <p>{$formValues.receipt_text_renewal|htmlize}</p> + {else} + <p>{ts}Thank you for your support.{/ts}</p> + {/if} + {if ! $cancelled} + <p>{ts}Please print this receipt for your records.{/ts}</p> + {/if} + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + {if !$lineItem} + <tr> + <th {$headerStyle}> + {ts}Membership Information{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Membership Type{/ts} + </td> + <td {$valueStyle}> + {$membership_name} + </td> + </tr> + {/if} + {if ! $cancelled} + {if !$lineItem} + <tr> + <td {$labelStyle}> + {ts}Membership Start Date{/ts} + </td> + <td {$valueStyle}> + {$mem_start_date} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Membership End Date{/ts} + </td> + <td {$valueStyle}> + {$mem_end_date} + </td> + </tr> + {/if} + {if $formValues.total_amount OR $formValues.total_amount eq 0 } + <tr> + <th {$headerStyle}> + {ts}Membership Fee{/ts} + </th> + </tr> + {if $formValues.contributionType_name} + <tr> + <td {$labelStyle}> + {ts}Financial Type{/ts} + </td> + <td {$valueStyle}> + {$formValues.contributionType_name} + </td> + </tr> + {/if} + + {if $lineItem} + {foreach from=$lineItem item=value key=priceset} + <tr> + <td colspan="2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th>{ts}Item{/ts}</th> + <th>{ts}Fee{/ts}</th> + {if $dataArray} + <th>{ts}SubTotal{/ts}</th> + <th>{ts}Tax Rate{/ts}</th> + <th>{ts}Tax Amount{/ts}</th> + <th>{ts}Total{/ts}</th> + {/if} + <th>{ts}Membership Start Date{/ts}</th> + <th>{ts}Membership End Date{/ts}</th> + </tr> + {foreach from=$value item=line} + <tr> + <td> + {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} + </td> + <td> + {$line.line_total|crmMoney} + </td> + {if $dataArray} + <td> + {$line.unit_price*$line.qty|crmMoney} + </td> + {if $line.tax_rate != "" || $line.tax_amount != ""} + <td> + {$line.tax_rate|string_format:"%.2f"}% + </td> + <td> + {$line.tax_amount|crmMoney} + </td> + {else} + <td></td> + <td></td> + {/if} + <td> + {$line.line_total+$line.tax_amount|crmMoney} + </td> + {/if} + <td> + {$line.start_date} + </td> + <td> + {$line.end_date} + </td> + </tr> + {/foreach} + </table> + </td> + </tr> + {/foreach} + {if $dataArray} + <tr> + <td {$labelStyle}> + {ts}Amount Before Tax:{/ts} + </td> + <td {$valueStyle}> + {$formValues.total_amount-$totalTaxAmount|crmMoney} + </td> + </tr> + {foreach from=$dataArray item=value key=priceset} + <tr> + {if $priceset} + <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {$value|crmMoney:$currency}</td> + {elseif $priceset == 0} + <td> {ts}No{/ts} {$taxTerm}</td> + <td> {$value|crmMoney:$currency}</td> + {/if} + </tr> + {/foreach} + {/if} + {/if} + {if isset($totalTaxAmount)} + <tr> + <td {$labelStyle}> + {ts}Total Tax Amount{/ts} + </td> + <td {$valueStyle}> + {$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + {/if} + <tr> + <td {$labelStyle}> + {ts}Amount{/ts} + </td> + <td {$valueStyle}> + {$formValues.total_amount|crmMoney} + </td> + </tr> + {if $receive_date} + <tr> + <td {$labelStyle}> + {ts}Date Received{/ts} + </td> + <td {$valueStyle}> + {$receive_date|truncate:10:''|crmDate} + </td> + </tr> + {/if} + {if $formValues.paidBy} + <tr> + <td {$labelStyle}> + {ts}Paid By{/ts} + </td> + <td {$valueStyle}> + {$formValues.paidBy} + </td> + </tr> + {if $formValues.check_number} + <tr> + <td {$labelStyle}> + {ts}Check Number{/ts} + </td> + <td {$valueStyle}> + {$formValues.check_number} + </td> + </tr> + {/if} + {/if} + {/if} + {/if} + </table> + </td> + </tr> + + {if $isPrimary} + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + + {if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later } + <tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {$billingName}<br /> + {$address} + </td> + </tr> + {/if} + + {if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later} + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Expires{/ts} + </td> + <td {$valueStyle}> + {$credit_card_exp_date|truncate:7:''|crmDate} + </td> + </tr> + {/if} + + </table> + </td> + </tr> + {/if} + + {if $customValues} + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Membership Options{/ts} + </th> + </tr> + {foreach from=$customValues item=value key=customName} + <tr> + <td {$labelStyle}> + {$customName} + </td> + <td {$valueStyle}> + {$value} + </td> + </tr> + {/foreach} + </table> + </td> + </tr> + {/if} + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/membership_offline_receipt_subject.tpl b/civicrm/xml/templates/message_templates/membership_offline_receipt_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..ccc8b3cfa6a0451ed145ea4e1b885b319d051da0 --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_offline_receipt_subject.tpl @@ -0,0 +1,5 @@ +{if $receiptType EQ 'membership signup'} +{ts}Membership Confirmation and Receipt{/ts} +{elseif $receiptType EQ 'membership renewal'} +{ts}Membership Renewal Confirmation and Receipt{/ts} +{/if} diff --git a/civicrm/xml/templates/message_templates/membership_offline_receipt_text.tpl b/civicrm/xml/templates/message_templates/membership_offline_receipt_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..7df285af46b28f39eb8259867d826bd9259f658b --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_offline_receipt_text.tpl @@ -0,0 +1,113 @@ +{if $formValues.receipt_text_signup} +{$formValues.receipt_text_signup} +{elseif $formValues.receipt_text_renewal} +{$formValues.receipt_text_renewal} +{else}{ts}Thank you for your support.{/ts}{/if} + +{if ! $cancelled}{ts}Please print this receipt for your records.{/ts} + + +{/if} +{if !$lineItem} +=========================================================== +{ts}Membership Information{/ts} + +=========================================================== +{ts}Membership Type{/ts}: {$membership_name} +{/if} +{if ! $cancelled} +{if !$lineItem} +{ts}Membership Start Date{/ts}: {$mem_start_date} +{ts}Membership End Date{/ts}: {$mem_end_date} +{/if} + +{if $formValues.total_amount OR $formValues.total_amount eq 0 } +=========================================================== +{ts}Membership Fee{/ts} + +=========================================================== +{if $formValues.contributionType_name} +{ts}Financial Type{/ts}: {$formValues.contributionType_name} +{/if} +{if $lineItem} +{foreach from=$lineItem item=value key=priceset} +{capture assign=ts_item}{ts}Item{/ts}{/capture} +{capture assign=ts_total}{ts}Fee{/ts}{/capture} +{if $dataArray} +{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture} +{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture} +{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture} +{capture assign=ts_total}{ts}Total{/ts}{/capture} +{/if} +{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture} +{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {if $dataArray} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {$ts_total|string_format:"%10s"} {/if} {$ts_start_date|string_format:"%20s"} {$ts_end_date|string_format:"%20s"} +-------------------------------------------------------------------------------------------------- + +{foreach from=$value item=line} +{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.line_total|crmMoney|string_format:"%10s"} {if $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if $line.tax_rate != "" || $line.tax_amount != ""} {$line.tax_rate|string_format:"%.2f"} % {$line.tax_amount|crmMoney:$currency|string_format:"%10s"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:"%10s"} {/if} {$line.start_date|string_format:"%20s"} {$line.end_date|string_format:"%20s"} +{/foreach} +{/foreach} + +{if $dataArray} +{ts}Amount before Tax{/ts}: {$formValues.total_amount-$totalTaxAmount|crmMoney:$currency} + +{foreach from=$dataArray item=value key=priceset} +{if $priceset} +{$taxTerm} {$priceset|string_format:"%.2f"} %: {$value|crmMoney:$currency} +{elseif $priceset == 0} +{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{/if} +{/foreach} +{/if} +-------------------------------------------------------------------------------------------------- +{/if} + +{if isset($totalTaxAmount)} +{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} +{/if} + +{ts}Amount{/ts}: {$formValues.total_amount|crmMoney} +{if $receive_date} +{ts}Date Received{/ts}: {$receive_date|truncate:10:''|crmDate} +{/if} +{if $formValues.paidBy} +{ts}Paid By{/ts}: {$formValues.paidBy} +{if $formValues.check_number} +{ts}Check Number{/ts}: {$formValues.check_number} +{/if} +{/if} +{/if} +{/if} + +{if $isPrimary } +{if $contributeMode ne 'notify' and !$isAmountzero and !$is_pay_later } + +=========================================================== +{ts}Billing Name and Address{/ts} + +=========================================================== +{$billingName} +{$address} +{/if} + +{if $contributeMode eq 'direct' and !$isAmountzero and !$is_pay_later} +=========================================================== +{ts}Credit Card Information{/ts} + +=========================================================== +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} +{/if} +{/if} + +{if $customValues} +=========================================================== +{ts}Membership Options{/ts} + +=========================================================== +{foreach from=$customValues item=value key=customName} + {$customName} : {$value} +{/foreach} +{/if} diff --git a/civicrm/xml/templates/message_templates/membership_online_receipt_html.tpl b/civicrm/xml/templates/message_templates/membership_online_receipt_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..2e6136414f148edd0cd0fb99e2b5f8e67438b702 --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_online_receipt_html.tpl @@ -0,0 +1,556 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="500" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + + {if $receipt_text} + <p>{$receipt_text|htmlize}</p> + {/if} + + {if $is_pay_later} + <p>{$pay_later_receipt}</p> {* FIXME: this might be text rather than HTML *} + {else} + <p>{ts}Please print this confirmation for your records.{/ts}</p> + {/if} + + </td> + </tr> + </table> + <table width="500" style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse;"> + + {if $membership_assign && !$useForMember} + <tr> + <th {$headerStyle}> + {ts}Membership Information{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Membership Type{/ts} + </td> + <td {$valueStyle}> + {$membership_name} + </td> + </tr> + {if $mem_start_date} + <tr> + <td {$labelStyle}> + {ts}Membership Start Date{/ts} + </td> + <td {$valueStyle}> + {$mem_start_date|crmDate} + </td> + </tr> + {/if} + {if $mem_end_date} + <tr> + <td {$labelStyle}> + {ts}Membership End Date{/ts} + </td> + <td {$valueStyle}> + {$mem_end_date|crmDate} + </td> + </tr> + {/if} + {/if} + + + {if $amount} + <tr> + <th {$headerStyle}> + {ts}Membership Fee{/ts} + </th> + </tr> + + {if !$useForMember and $membership_amount and $is_quick_config} + + <tr> + <td {$labelStyle}> + {ts 1=$membership_name}%1 Membership{/ts} + </td> + <td {$valueStyle}> + {$membership_amount|crmMoney} + </td> + </tr> + {if $amount && !$is_separate_payment } + <tr> + <td {$labelStyle}> + {ts}Contribution Amount{/ts} + </td> + <td {$valueStyle}> + {$amount|crmMoney} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Total{/ts} + </td> + <td {$valueStyle}> + {$amount+$membership_amount|crmMoney} + </td> + </tr> + {/if} + + {elseif !$useForMember && $lineItem and $priceSetID and !$is_quick_config} + + {foreach from=$lineItem item=value key=priceset} + <tr> + <td colspan="2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th>{ts}Item{/ts}</th> + <th>{ts}Qty{/ts}</th> + <th>{ts}Each{/ts}</th> + <th>{ts}Total{/ts}</th> + </tr> + {foreach from=$value item=line} + <tr> + <td> + {$line.description|truncate:30:"..."} + </td> + <td> + {$line.qty} + </td> + <td> + {$line.unit_price|crmMoney} + </td> + <td> + {$line.line_total|crmMoney} + </td> + </tr> + {/foreach} + </table> + </td> + </tr> + {/foreach} + <tr> + <td {$labelStyle}> + {ts}Total Amount{/ts} + </td> + <td {$valueStyle}> + {$amount|crmMoney} + </td> + </tr> + + {else} + {if $useForMember && $lineItem and !$is_quick_config} + {foreach from=$lineItem item=value key=priceset} + <tr> + <td colspan="2" {$valueStyle}> + <table> {* FIXME: style this table so that it looks like the text version (justification, etc.) *} + <tr> + <th>{ts}Item{/ts}</th> + <th>{ts}Fee{/ts}</th> + {if $dataArray} + <th>{ts}SubTotal{/ts}</th> + <th>{ts}Tax Rate{/ts}</th> + <th>{ts}Tax Amount{/ts}</th> + <th>{ts}Total{/ts}</th> + {/if} + <th>{ts}Membership Start Date{/ts}</th> + <th>{ts}Membership End Date{/ts}</th> + </tr> + {foreach from=$value item=line} + <tr> + <td> + {if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description}<div>{$line.description|truncate:30:"..."}</div>{/if} + </td> + <td> + {$line.line_total|crmMoney} + </td> + {if $dataArray} + <td> + {$line.unit_price*$line.qty|crmMoney} + </td> + {if $line.tax_rate != "" || $line.tax_amount != ""} + <td> + {$line.tax_rate|string_format:"%.2f"}% + </td> + <td> + {$line.tax_amount|crmMoney} + </td> + {else} + <td></td> + <td></td> + {/if} + <td> + {$line.line_total+$line.tax_amount|crmMoney} + </td> + {/if} + <td> + {$line.start_date} + </td> + <td> + {$line.end_date} + </td> + </tr> + {/foreach} + </table> + </td> + </tr> + {/foreach} + {if $dataArray} + <tr> + <td {$labelStyle}> + {ts}Amount Before Tax:{/ts} + </td> + <td {$valueStyle}> + {$amount-$totalTaxAmount|crmMoney} + </td> + </tr> + {foreach from=$dataArray item=value key=priceset} + <tr> + {if $priceset || $priceset == 0} + <td> {$taxTerm} {$priceset|string_format:"%.2f"}%</td> + <td> {$value|crmMoney:$currency}</td> + {else} + <td> {ts}NO{/ts} {$taxTerm}</td> + <td> {$value|crmMoney:$currency}</td> + {/if} + </tr> + {/foreach} + {/if} + {/if} + {if $totalTaxAmount} + <tr> + <td {$labelStyle}> + {ts}Total Tax Amount{/ts} + </td> + <td {$valueStyle}> + {$totalTaxAmount|crmMoney:$currency} + </td> + </tr> + {/if} + <tr> + <td {$labelStyle}> + {ts}Amount{/ts} + </td> + <td {$valueStyle}> + {$amount|crmMoney} {if $amount_level} - {$amount_level}{/if} + </td> + </tr> + + {/if} + + + {elseif $membership_amount} + + + <tr> + <th {$headerStyle}> + {ts}Membership Fee{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts 1=$membership_name}%1 Membership{/ts} + </td> + <td {$valueStyle}> + {$membership_amount|crmMoney} + </td> + </tr> + + + {/if} + + {if $receive_date} + <tr> + <td {$labelStyle}> + {ts}Date{/ts} + </td> + <td {$valueStyle}> + {$receive_date|crmDate} + </td> + </tr> + {/if} + + {if $is_monetary and $trxn_id} + <tr> + <td {$labelStyle}> + {ts}Transaction #{/ts} + </td> + <td {$valueStyle}> + {$trxn_id} + </td> + </tr> + {/if} + + {if $membership_trx_id} + <tr> + <td {$labelStyle}> + {ts}Membership Transaction #{/ts} + </td> + <td {$valueStyle}> + {$membership_trx_id} + </td> + </tr> + {/if} + {if $is_recur} + {if $contributeMode eq 'notify' or $contributeMode eq 'directIPN'} + <tr> + <td colspan="2" {$labelStyle}> + {ts 1=$cancelSubscriptionUrl}This membership will be renewed automatically. You can cancel the auto-renewal option by <a href="%1">visiting this web page</a>.{/ts} + </td> + </tr> + {if $updateSubscriptionBillingUrl} + <tr> + <td colspan="2" {$labelStyle}> + {ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href="%1">visiting this web page</a>.{/ts} + </td> + </tr> + {/if} + {/if} + {/if} + + {if $honor_block_is_active} + <tr> + <th {$headerStyle}> + {$soft_credit_type} + </th> + </tr> + {foreach from=$honoreeProfile item=value key=label} + <tr> + <td {$labelStyle}> + {$label} + </td> + <td {$valueStyle}> + {$value} + </td> + </tr> + {/foreach} + {/if} + + {if $pcpBlock} + <tr> + <th {$headerStyle}> + {ts}Personal Campaign Page{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Display In Honor Roll{/ts} + </td> + <td {$valueStyle}> + {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} + </td> + </tr> + {if $pcp_roll_nickname} + <tr> + <td {$labelStyle}> + {ts}Nickname{/ts} + </td> + <td {$valueStyle}> + {$pcp_roll_nickname} + </td> + </tr> + {/if} + {if $pcp_personal_note} + <tr> + <td {$labelStyle}> + {ts}Personal Note{/ts} + </td> + <td {$valueStyle}> + {$pcp_personal_note} + </td> + </tr> + {/if} + {/if} + + {if $onBehalfProfile} + <tr> + <th {$headerStyle}> + {$onBehalfProfile_grouptitle} + </th> + </tr> + {foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName} + <tr> + <td {$labelStyle}> + {$onBehalfName} + </td> + <td {$valueStyle}> + {$onBehalfValue} + </td> + </tr> + {/foreach} + {/if} + + {if ! ($contributeMode eq 'notify' OR $contributeMode eq 'directIPN') and $is_monetary} + {if $is_pay_later} + <tr> + <th {$headerStyle}> + {ts}Registered Email{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$email} + </td> + </tr> + {elseif $amount GT 0 OR $membership_amount GT 0} + <tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$billingName}<br /> + {$address|nl2br}<br /> + {$email} + </td> + </tr> + {/if} + {/if} + + {if $contributeMode eq 'direct' AND !$is_pay_later AND ($amount GT 0 OR $membership_amount GT 0)} + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}<br /> + </td> + </tr> + {/if} + + {if $selectPremium} + <tr> + <th {$headerStyle}> + {ts}Premium Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$labelStyle}> + {$product_name} + </td> + </tr> + {if $option} + <tr> + <td {$labelStyle}> + {ts}Option{/ts} + </td> + <td {$valueStyle}> + {$option} + </td> + </tr> + {/if} + {if $sku} + <tr> + <td {$labelStyle}> + {ts}SKU{/ts} + </td> + <td {$valueStyle}> + {$sku} + </td> + </tr> + {/if} + {if $start_date} + <tr> + <td {$labelStyle}> + {ts}Start Date{/ts} + </td> + <td {$valueStyle}> + {$start_date|crmDate} + </td> + </tr> + {/if} + {if $end_date} + <tr> + <td {$labelStyle}> + {ts}End Date{/ts} + </td> + <td {$valueStyle}> + {$end_date|crmDate} + </td> + </tr> + {/if} + {if $contact_email OR $contact_phone} + <tr> + <td colspan="2" {$valueStyle}> + <p>{ts}For information about this premium, contact:{/ts}</p> + {if $contact_email} + <p>{$contact_email}</p> + {/if} + {if $contact_phone} + <p>{$contact_phone}</p> + {/if} + </td> + </tr> + {/if} + {if $is_deductible AND $price} + <tr> + <td colspan="2" {$valueStyle}> + <p>{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}</p> + </td> + </tr> + {/if} + {/if} + + {if $customPre} + <tr> + <th {$headerStyle}> + {$customPre_grouptitle} + </th> + </tr> + {foreach from=$customPre item=customValue key=customName} + {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + <tr> + <td {$labelStyle}> + {$customName} + </td> + <td {$valueStyle}> + {$customValue} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $customPost} + <tr> + <th {$headerStyle}> + {$customPost_grouptitle} + </th> + </tr> + {foreach from=$customPost item=customValue key=customName} + {if ($trackingFields and ! in_array($customName, $trackingFields)) or ! $trackingFields} + <tr> + <td {$labelStyle}> + {$customName} + </td> + <td {$valueStyle}> + {$customValue} + </td> + </tr> + {/if} + {/foreach} + {/if} + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/membership_online_receipt_subject.tpl b/civicrm/xml/templates/message_templates/membership_online_receipt_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..32d4e402a82c44f576f5ec568449ab695210618c --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_online_receipt_subject.tpl @@ -0,0 +1 @@ +{if $is_pay_later}{ts}Invoice{/ts}{else}{ts}Receipt{/ts}{/if} - {$title} diff --git a/civicrm/xml/templates/message_templates/membership_online_receipt_text.tpl b/civicrm/xml/templates/message_templates/membership_online_receipt_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..aebd6d484ebba005bd41eac97aa0f7c536a6afb4 --- /dev/null +++ b/civicrm/xml/templates/message_templates/membership_online_receipt_text.tpl @@ -0,0 +1,241 @@ +{if $receipt_text} +{$receipt_text} +{/if} +{if $is_pay_later} + +=========================================================== +{$pay_later_receipt} +=========================================================== +{else} + +{ts}Please print this receipt for your records.{/ts} +{/if} + +{if $membership_assign && !$useForMember} +=========================================================== +{ts}Membership Information{/ts} + +=========================================================== +{ts}Membership Type{/ts}: {$membership_name} +{if $mem_start_date}{ts}Membership Start Date{/ts}: {$mem_start_date|crmDate} +{/if} +{if $mem_end_date}{ts}Membership End Date{/ts}: {$mem_end_date|crmDate} +{/if} + +{/if} +{if $amount} +=========================================================== +{ts}Membership Fee{/ts} + +=========================================================== +{if !$useForMember && $membership_amount && $is_quick_config} +{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney} +{if $amount && !$is_separate_payment } +{ts}Contribution Amount{/ts}: {$amount|crmMoney} +------------------------------------------- +{ts}Total{/ts}: {$amount+$membership_amount|crmMoney} +{/if} +{elseif !$useForMember && $lineItem and $priceSetID & !$is_quick_config} +{foreach from=$lineItem item=value key=priceset} +--------------------------------------------------------- +{capture assign=ts_item}{ts}Item{/ts}{/capture} +{capture assign=ts_qty}{ts}Qty{/ts}{/capture} +{capture assign=ts_each}{ts}Each{/ts}{/capture} +{capture assign=ts_total}{ts}Total{/ts}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_qty|string_format:"%5s"} {$ts_each|string_format:"%10s"} {$ts_total|string_format:"%10s"} +---------------------------------------------------------- +{foreach from=$value item=line} +{$line.description|truncate:30:"..."|string_format:"%-30s"} {$line.qty|string_format:"%5s"} {$line.unit_price|crmMoney|string_format:"%10s"} {$line.line_total|crmMoney|string_format:"%10s"} +{/foreach} +{/foreach} + +{ts}Total Amount{/ts}: {$amount|crmMoney} +{else} +{if $useForMember && $lineItem && !$is_quick_config} +{foreach from=$lineItem item=value key=priceset} +{capture assign=ts_item}{ts}Item{/ts}{/capture} +{capture assign=ts_total}{ts}Fee{/ts}{/capture} +{if $dataArray} +{capture assign=ts_subtotal}{ts}Subtotal{/ts}{/capture} +{capture assign=ts_taxRate}{ts}Tax Rate{/ts}{/capture} +{capture assign=ts_taxAmount}{ts}Tax Amount{/ts}{/capture} +{capture assign=ts_total}{ts}Total{/ts}{/capture} +{/if} +{capture assign=ts_start_date}{ts}Membership Start Date{/ts}{/capture} +{capture assign=ts_end_date}{ts}Membership End Date{/ts}{/capture} +{$ts_item|string_format:"%-30s"} {$ts_total|string_format:"%10s"} {if $dataArray} {$ts_subtotal|string_format:"%10s"} {$ts_taxRate|string_format:"%10s"} {$ts_taxAmount|string_format:"%10s"} {$ts_total|string_format:"%10s"} {/if} {$ts_start_date|string_format:"%20s"} {$ts_end_date|string_format:"%20s"} +-------------------------------------------------------------------------------------------------- + +{foreach from=$value item=line} +{capture assign=ts_item}{if $line.html_type eq 'Text'}{$line.label}{else}{$line.field_title} - {$line.label}{/if} {if $line.description} {$line.description}{/if}{/capture}{$ts_item|truncate:30:"..."|string_format:"%-30s"} {$line.line_total|crmMoney|string_format:"%10s"} {if $dataArray} {$line.unit_price*$line.qty|crmMoney:$currency|string_format:"%10s"} {if $line.tax_rate != "" || $line.tax_amount != ""} {$line.tax_rate|string_format:"%.2f"} % {$line.tax_amount|crmMoney:$currency|string_format:"%10s"} {else} {/if} {$line.line_total+$line.tax_amount|crmMoney|string_format:"%10s"} {/if} {$line.start_date|string_format:"%20s"} {$line.end_date|string_format:"%20s"} +{/foreach} +{/foreach} + +{if $dataArray} +{ts}Amount before Tax{/ts}: {$amount-$totalTaxAmount|crmMoney:$currency} + +{foreach from=$dataArray item=value key=priceset} +{if $priceset || $priceset == 0} +{$taxTerm} {$priceset|string_format:"%.2f"}%: {$value|crmMoney:$currency} +{else} +{ts}No{/ts} {$taxTerm}: {$value|crmMoney:$currency} +{/if} +{/foreach} +{/if} +-------------------------------------------------------------------------------------------------- +{/if} + +{if $totalTaxAmount} +{ts}Total Tax Amount{/ts}: {$totalTaxAmount|crmMoney:$currency} +{/if} + +{ts}Amount{/ts}: {$amount|crmMoney} {if $amount_level } - {$amount_level} {/if} +{/if} +{elseif $membership_amount} +=========================================================== +{ts}Membership Fee{/ts} + +=========================================================== +{ts 1=$membership_name}%1 Membership{/ts}: {$membership_amount|crmMoney} +{/if} + +{if $receive_date} + +{ts}Date{/ts}: {$receive_date|crmDate} +{/if} +{if $is_monetary and $trxn_id} +{ts}Transaction #{/ts}: {$trxn_id} + +{/if} +{if $membership_trx_id} +{ts}Membership Transaction #{/ts}: {$membership_trx_id} + +{/if} +{if $is_recur} +{if $contributeMode eq 'notify' or $contributeMode eq 'directIPN'} +{ts 1=$cancelSubscriptionUrl}This membership will be renewed automatically. You can cancel the auto-renewal option by visiting this web page: %1.{/ts} +{if $updateSubscriptionBillingUrl} + +{ts 1=$updateSubscriptionBillingUrl}You can update billing details for this automatically renewed membership by <a href="%1">visiting this web page</a>.{/ts} +{/if} +{/if} +{/if} + +{if $honor_block_is_active } +=========================================================== +{$soft_credit_type} +=========================================================== +{foreach from=$honoreeProfile item=value key=label} +{$label}: {$value} +{/foreach} + +{/if} +{if $pcpBlock} +=========================================================== +{ts}Personal Campaign Page{/ts} + +=========================================================== +{ts}Display In Honor Roll{/ts}: {if $pcp_display_in_roll}{ts}Yes{/ts}{else}{ts}No{/ts}{/if} + +{if $pcp_roll_nickname}{ts}Nickname{/ts}: {$pcp_roll_nickname}{/if} + +{if $pcp_personal_note}{ts}Personal Note{/ts}: {$pcp_personal_note}{/if} + +{/if} +{if $onBehalfProfile} +=========================================================== +{ts}On Behalf Of{/ts} + +=========================================================== +{foreach from=$onBehalfProfile item=onBehalfValue key=onBehalfName} +{$onBehalfName}: {$onBehalfValue} +{/foreach} +{/if} + +{if !( $contributeMode eq 'notify' OR $contributeMode eq 'directIPN' ) and $is_monetary} +{if $is_pay_later} +=========================================================== +{ts}Registered Email{/ts} + +=========================================================== +{$email} +{elseif $amount GT 0 OR $membership_amount GT 0 } +=========================================================== +{ts}Billing Name and Address{/ts} + +=========================================================== +{$billingName} +{$address} + +{$email} +{/if} {* End ! is_pay_later condition. *} +{/if} +{if $contributeMode eq 'direct' AND !$is_pay_later AND ( $amount GT 0 OR $membership_amount GT 0 ) } + +=========================================================== +{ts}Credit Card Information{/ts} + +=========================================================== +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} +{/if} + +{if $selectPremium } +=========================================================== +{ts}Premium Information{/ts} + +=========================================================== +{$product_name} +{if $option} +{ts}Option{/ts}: {$option} +{/if} +{if $sku} +{ts}SKU{/ts}: {$sku} +{/if} +{if $start_date} +{ts}Start Date{/ts}: {$start_date|crmDate} +{/if} +{if $end_date} +{ts}End Date{/ts}: {$end_date|crmDate} +{/if} +{if $contact_email OR $contact_phone} + +{ts}For information about this premium, contact:{/ts} + +{if $contact_email} + {$contact_email} +{/if} +{if $contact_phone} + {$contact_phone} +{/if} +{/if} +{if $is_deductible AND $price} + +{ts 1=$price|crmMoney}The value of this premium is %1. This may affect the amount of the tax deduction you can claim. Consult your tax advisor for more information.{/ts}{/if} +{/if} + +{if $customPre} +=========================================================== +{$customPre_grouptitle} + +=========================================================== +{foreach from=$customPre item=customValue key=customName} +{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {$customName}: {$customValue} +{/if} +{/foreach} +{/if} + + +{if $customPost} +=========================================================== +{$customPost_grouptitle} + +=========================================================== +{foreach from=$customPost item=customValue key=customName} +{if ( $trackingFields and ! in_array( $customName, $trackingFields ) ) or ! $trackingFields} + {$customName}: {$customValue} +{/if} +{/foreach} +{/if} diff --git a/civicrm/xml/templates/message_templates/participant_cancelled_html.tpl b/civicrm/xml/templates/message_templates/participant_cancelled_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..4a882c1259b3ffafc0689510ab80a1ca95556d25 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_cancelled_html.tpl @@ -0,0 +1,129 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + <p>{ts}Your Event Registration has been cancelled.{/ts}</p> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Event Information and Location{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$event.event_title}<br /> + {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Participant Role{/ts}: + </td> + <td {$valueStyle}> + {$participant.role} + </td> + </tr> + + {if $isShowLocation} + <tr> + <td colspan="2" {$valueStyle}> + {$event.location.address.1.display|nl2br} + </td> + </tr> + {/if} + + {if $event.location.phone.1.phone || $event.location.email.1.email} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Event Contacts:{/ts} + </td> + </tr> + {foreach from=$event.location.phone item=phone} + {if $phone.phone} + <tr> + <td {$labelStyle}> + {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if} + </td> + <td {$valueStyle}> + {$phone.phone} + </td> + </tr> + {/if} + {/foreach} + {foreach from=$event.location.email item=eventEmail} + {if $eventEmail.email} + <tr> + <td {$labelStyle}> + {ts}Email{/ts} + </td> + <td {$valueStyle}> + {$eventEmail.email} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $contact.email} + <tr> + <th {$headerStyle}> + {ts}Registered Email{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$contact.email} + </td> + </tr> + {/if} + + {if $register_date} + <tr> + <td {$labelStyle}> + {ts}Registration Date{/ts} + </td> + <td {$valueStyle}> + {$participant.register_date|crmDate} + </td> + </tr> + {/if} + + </table> + </td> + </tr> + + <tr> + <td> + <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/participant_cancelled_subject.tpl b/civicrm/xml/templates/message_templates/participant_cancelled_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..e45a6be64c9f09896c759b2f617809a5fc0aae71 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_cancelled_subject.tpl @@ -0,0 +1 @@ +{ts 1=$event.event_title}Event Registration Cancelled for %1{/ts} diff --git a/civicrm/xml/templates/message_templates/participant_cancelled_text.tpl b/civicrm/xml/templates/message_templates/participant_cancelled_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..b4430b33d19437bf5f9f81541aec0df07298df97 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_cancelled_text.tpl @@ -0,0 +1,47 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts}Your Event Registration has been cancelled.{/ts} + + +=========================================================== +{ts}Event Information and Location{/ts} + +=========================================================== +{$event.event_title} +{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + +{ts}Participant Role{/ts}: {$participant.role} + +{if $isShowLocation} +{$event.location.address.1.display|strip_tags:false} +{/if}{*End of isShowLocation condition*} + +{if $event.location.phone.1.phone || $event.location.email.1.email} + +{ts}Event Contacts:{/ts} +{foreach from=$event.location.phone item=phone} +{if $phone.phone} + +{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} +{/foreach} +{foreach from=$event.location.email item=eventEmail} +{if $eventEmail.email} + +{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} +{/if} + +{if $contact.email} + +=========================================================== +{ts}Registered Email{/ts} + +=========================================================== +{$contact.email} +{/if} + +{if $register_date} +{ts}Registration Date{/ts}: {$participant.register_date|crmDate} +{/if} + +{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts} + diff --git a/civicrm/xml/templates/message_templates/participant_confirm_html.tpl b/civicrm/xml/templates/message_templates/participant_confirm_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..ca6816d166f356b170afde10b4101951e6500e64 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_confirm_html.tpl @@ -0,0 +1,184 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + </td> + </tr> + {if !$isAdditional and $participant.id} + <tr> + <th {$headerStyle}> + {ts}Confirm Your Registration{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=confirmUrl}{crmURL p='civicrm/event/confirm' q="reset=1&participantId=`$participant.id`&cs=`$checksumValue`" a=true h=0 fe=1}{/capture} + <a href="{$confirmUrl}">Go to a web page where you can confirm your registration online</a> + </td> + </tr> + {/if} + {if $event.allow_selfcancelxfer } + This event allows for self-cancel or transfer + {capture assign=selfService}{crmURL p='civicrm/event/selfsvcupdate' q="reset=1&pid=`$participantID`&{contact.checksum}" h=0 a=1 fe=1}{/capture} + <a href="{$selfService}">{ts}Self service cancel transfer{/ts}</a> + {/if} + + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Event Information and Location{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$event.event_title}<br /> + {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + </td> + </tr> + {if $conference_sessions} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Your schedule:{/ts} + </td> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {assign var='group_by_day' value='NA'} + {foreach from=$conference_sessions item=session} + {if $session.start_date|date_format:"%Y/%m/%d" != $group_by_day|date_format:"%Y/%m/%d"} + {assign var='group_by_day' value=$session.start_date} + <em>{$group_by_day|date_format:"%m/%d/%Y"}</em><br /> + {/if} + {$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title}<br /> + {if $session.location} {$session.location}<br />{/if} + {/foreach} + </td> + </tr> + {/if} + <tr> + <td {$labelStyle}> + {ts}Participant Role{/ts}: + </td> + <td {$valueStyle}> + {$participant.role} + </td> + </tr> + + {if $isShowLocation} + <tr> + <td colspan="2" {$valueStyle}> + {$event.location.address.1.display|nl2br} + </td> + </tr> + {/if} + + {if $event.location.phone.1.phone || $event.location.email.1.email} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Event Contacts:{/ts} + </td> + </tr> + {foreach from=$event.location.phone item=phone} + {if $phone.phone} + <tr> + <td {$labelStyle}> + {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if} + </td> + <td {$valueStyle}> + {$phone.phone} + </td> + </tr> + {/if} + {/foreach} + {foreach from=$event.location.email item=eventEmail} + {if $eventEmail.email} + <tr> + <td {$labelStyle}> + {ts}Email{/ts} + </td> + <td {$valueStyle}> + {$eventEmail.email} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $event.is_public} + <tr> + <td colspan="2" {$valueStyle}> + {capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} + <a href="{$icalFeed}">{ts}Download iCalendar File{/ts}</a> + </td> + </tr> + {/if} + + {if $contact.email} + <tr> + <th {$headerStyle}> + {ts}Registered Email{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$contact.email} + </td> + </tr> + {/if} + + {if $register_date} + <tr> + <td {$labelStyle}> + {ts}Registration Date{/ts} + </td> + <td {$valueStyle}> + {$participant.register_date|crmDate} + </td> + </tr> + {/if} + + </table> + </td> + </tr> + {if $event.allow_selfcancelxfer } + <tr> + <td colspan="2" {$valueStyle}> + {ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if}<br /> + {capture assign=selfService}{crmURL p='civicrm/event/selfsvcupdate' q="reset=1&pid=`$participant.id`&{contact.checksum}" h=0 a=1 fe=1}{/capture} + <a href="{$selfService}">{ts}Click here to transfer or cancel your registration.{/ts}</a> + </td> + </tr> + {/if} + <tr> + <td colspan="2" {$valueStyle}> + <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/participant_confirm_subject.tpl b/civicrm/xml/templates/message_templates/participant_confirm_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..2f3b9479727e1eaece376473002952f570156b90 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_confirm_subject.tpl @@ -0,0 +1 @@ +{ts 1=$event.event_title}Confirm your registration for %1{/ts} diff --git a/civicrm/xml/templates/message_templates/participant_confirm_text.tpl b/civicrm/xml/templates/message_templates/participant_confirm_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..e8f90132b5c11c86825cde4be295473472ef0946 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_confirm_text.tpl @@ -0,0 +1,81 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, +{if !$isAdditional and $participant.id} + +=========================================================== +{ts}Confirm Your Registration{/ts} + +=========================================================== +{capture assign=confirmUrl}{crmURL p='civicrm/event/confirm' q="reset=1&participantId=`$participant.id`&cs=`$checksumValue`" a=true h=0 fe=1}{/capture} +Click this link to go to a web page where you can confirm your registration online: +{$confirmUrl} +{/if} +{if $event.allow_selfcancelxfer } +{ts 1=$event.selfcancelxfer_time}You may transfer your registration to another participant or cancel your registration up to %1 hours before the event.{/ts} {if $totalAmount}{ts}Cancellations are not refundable.{/ts}{/if} + {capture assign=selfService}{crmURL p='civicrm/event/selfsvcupdate' q="reset=1&pid=`$participant.id`&{contact.checksum}" h=0 a=1 fe=1}{/capture} +{ts}Transfer or cancel your registration:{/ts} {$selfService} +{/if} +=========================================================== +{ts}Event Information and Location{/ts} + +=========================================================== +{$event.event_title} +{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} +{if $conference_sessions} + + +{ts}Your schedule:{/ts} +{assign var='group_by_day' value='NA'} +{foreach from=$conference_sessions item=session} +{if $session.start_date|date_format:"%Y/%m/%d" != $group_by_day|date_format:"%Y/%m/%d"} +{assign var='group_by_day' value=$session.start_date} + +{$group_by_day|date_format:"%m/%d/%Y"} + + +{/if} +{$session.start_date|crmDate:0:1}{if $session.end_date}-{$session.end_date|crmDate:0:1}{/if} {$session.title} +{if $session.location} {$session.location}{/if} +{/foreach} +{/if} + + +{ts}Participant Role{/ts}: {$participant.role} + +{if $isShowLocation} +{$event.location.address.1.display|strip_tags:false} +{/if}{*End of isShowLocation condition*} + +{if $event.location.phone.1.phone || $event.location.email.1.email} + +{ts}Event Contacts:{/ts} +{foreach from=$event.location.phone item=phone} +{if $phone.phone} + +{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} +{/foreach} +{foreach from=$event.location.email item=eventEmail} +{if $eventEmail.email} + +{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} +{/if} + +{if $event.is_public} +{capture assign=icalFeed}{crmURL p='civicrm/event/ical' q="reset=1&id=`$event.id`" h=0 a=1 fe=1}{/capture} +{ts}Download iCalendar File:{/ts} {$icalFeed} +{/if} + +{if $contact.email} + +=========================================================== +{ts}Registered Email{/ts} + +=========================================================== +{$contact.email} +{/if} + +{if $register_date} +{ts}Registration Date{/ts}: {$participant.register_date|crmDate} +{/if} + +{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts} + diff --git a/civicrm/xml/templates/message_templates/participant_expired_html.tpl b/civicrm/xml/templates/message_templates/participant_expired_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..a11ff72685cfede07dcb6f603e31f72184dd7e6f --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_expired_html.tpl @@ -0,0 +1,132 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + <p>{ts 1=$event.event_title}Your pending event registration for %1 has expired +because you did not confirm your registration.{/ts}</p> + <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions +or want to inquire about reinstating your registration for this event.{/ts}</p> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Event Information and Location{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$event.event_title}<br /> + {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Participant Role{/ts}: + </td> + <td {$valueStyle}> + {$participant.role} + </td> + </tr> + + {if $isShowLocation} + <tr> + <td colspan="2" {$valueStyle}> + {$event.location.address.1.display|nl2br} + </td> + </tr> + {/if} + + {if $event.location.phone.1.phone || $event.location.email.1.email} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Event Contacts:{/ts} + </td> + </tr> + {foreach from=$event.location.phone item=phone} + {if $phone.phone} + <tr> + <td {$labelStyle}> + {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if} + </td> + <td {$valueStyle}> + {$phone.phone} + </td> + </tr> + {/if} + {/foreach} + {foreach from=$event.location.email item=eventEmail} + {if $eventEmail.email} + <tr> + <td {$labelStyle}> + {ts}Email{/ts} + </td> + <td {$valueStyle}> + {$eventEmail.email} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $contact.email} + <tr> + <th {$headerStyle}> + {ts}Registered Email{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$contact.email} + </td> + </tr> + {/if} + + {if $register_date} + <tr> + <td {$labelStyle}> + {ts}Registration Date{/ts} + </td> + <td {$valueStyle}> + {$participant.register_date|crmDate} + </td> + </tr> + {/if} + + </table> + </td> + </tr> + + <tr> + <td> + <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/participant_expired_subject.tpl b/civicrm/xml/templates/message_templates/participant_expired_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..aeb56d320432a018e475699b3e12fbb06015359e --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_expired_subject.tpl @@ -0,0 +1 @@ +{ts 1=$event.event_title}Event registration has expired for %1{/ts} diff --git a/civicrm/xml/templates/message_templates/participant_expired_text.tpl b/civicrm/xml/templates/message_templates/participant_expired_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..be649c11daee52728357834f9184b820c98e9b20 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_expired_text.tpl @@ -0,0 +1,51 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts 1=$event.event_title}Your pending event registration for %1 has expired +because you did not confirm your registration.{/ts} + + +{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions +or want to inquire about reinstating your registration for this event.{/ts} + +=========================================================== +{ts}Event Information and Location{/ts} + +=========================================================== +{$event.event_title} +{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + +{ts}Participant Role{/ts}: {$participant.role} + +{if $isShowLocation} +{$event.location.address.1.display|strip_tags:false} +{/if}{*End of isShowLocation condition*} + +{if $event.location.phone.1.phone || $event.location.email.1.email} + +{ts}Event Contacts:{/ts} +{foreach from=$event.location.phone item=phone} +{if $phone.phone} + +{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} +{/foreach} +{foreach from=$event.location.email item=eventEmail} +{if $eventEmail.email} + +{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} +{/if} + +{if $contact.email} + +=========================================================== +{ts}Registered Email{/ts} + +=========================================================== +{$contact.email} +{/if} + +{if $register_date} +{ts}Registration Date{/ts}: {$participant.register_date|crmDate} +{/if} + +{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts} + diff --git a/civicrm/xml/templates/message_templates/participant_transferred_html.tpl b/civicrm/xml/templates/message_templates/participant_transferred_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..26cbf37e1524c454e1cdc2196220591e62353fe0 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_transferred_html.tpl @@ -0,0 +1,129 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + <p>{ts 1=$to_participant}Your Event Registration has been Transferred to %1.{/ts}</p> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Event Information and Location{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$event.event_title}<br /> + {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Participant Role{/ts}: + </td> + <td {$valueStyle}> + {$participant.role} + </td> + </tr> + + {if $isShowLocation} + <tr> + <td colspan="2" {$valueStyle}> + {$event.location.address.1.display|nl2br} + </td> + </tr> + {/if} + + {if $event.location.phone.1.phone || $event.location.email.1.email} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Event Contacts:{/ts} + </td> + </tr> + {foreach from=$event.location.phone item=phone} + {if $phone.phone} + <tr> + <td {$labelStyle}> + {if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if} + </td> + <td {$valueStyle}> + {$phone.phone} + </td> + </tr> + {/if} + {/foreach} + {foreach from=$event.location.email item=eventEmail} + {if $eventEmail.email} + <tr> + <td {$labelStyle}> + {ts}Email{/ts} + </td> + <td {$valueStyle}> + {$eventEmail.email} + </td> + </tr> + {/if} + {/foreach} + {/if} + + {if $contact.email} + <tr> + <th {$headerStyle}> + {ts}Registered Email{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$contact.email} + </td> + </tr> + {/if} + + {if $register_date} + <tr> + <td {$labelStyle}> + {ts}Registration Date{/ts} + </td> + <td {$valueStyle}> + {$participant.register_date|crmDate} + </td> + </tr> + {/if} + + </table> + </td> + </tr> + + <tr> + <td> + <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts}</p> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/participant_transferred_subject.tpl b/civicrm/xml/templates/message_templates/participant_transferred_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..6488ece90baedcaeb0fc5b290b13ec07b082085c --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_transferred_subject.tpl @@ -0,0 +1 @@ +{ts 1=$event.event_title}Event Registration Transferred for %1{/ts} diff --git a/civicrm/xml/templates/message_templates/participant_transferred_text.tpl b/civicrm/xml/templates/message_templates/participant_transferred_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..aeac8a7ba15952a8a7937ba2c184029e6d65bfb1 --- /dev/null +++ b/civicrm/xml/templates/message_templates/participant_transferred_text.tpl @@ -0,0 +1,45 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts 1=$to_participant}Your Event Registration has been transferred to %1.{/ts} + +=========================================================== +{ts}Event Information and Location{/ts} + +=========================================================== +{$event.event_title} +{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + +{ts}Participant Role{/ts}: {$participant.role} + +{if $isShowLocation} +{$event.location.address.1.display|strip_tags:false} +{/if}{*End of isShowLocation condition*} + +{if $event.location.phone.1.phone || $event.location.email.1.email} + +{ts}Event Contacts:{/ts} +{foreach from=$event.location.phone item=phone} +{if $phone.phone} + +{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} +{/foreach} +{foreach from=$event.location.email item=eventEmail} +{if $eventEmail.email} + +{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} +{/if} + +{if $contact.email} + +=========================================================== +{ts}Registered Email{/ts} + +=========================================================== +{$contact.email} +{/if} + +{if $register_date} +{ts}Registration Date{/ts}: {$participant.register_date|crmDate} +{/if} + +{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions.{/ts} diff --git a/civicrm/xml/templates/message_templates/payment_or_refund_notification_html.tpl b/civicrm/xml/templates/message_templates/payment_or_refund_notification_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..709d7915d99e9e01db62d7954d7eb034904cd5bf --- /dev/null +++ b/civicrm/xml/templates/message_templates/payment_or_refund_notification_html.tpl @@ -0,0 +1,253 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} +{capture assign=emptyBlockStyle }style="padding: 10px; border-bottom: 1px solid #999;background-color: #f7f7f7;"{/capture} +{capture assign=emptyBlockValueStyle }style="padding: 10px; border-bottom: 1px solid #999;"{/capture} + +<p>Dear {$contactDisplayName}</p> +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + {if $isRefund} + <p>{ts}A refund has been issued based on changes in your registration selections.{/ts}</p> + {else} + <p>{ts}A payment has been received.{/ts}</p> + {/if} + <p>{ts}Please print this confirmation for your records.{/ts}</p> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + {if $isRefund} + <tr> + <th {$headerStyle}>{ts}Refund Details{/ts}</th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Total Amount{/ts} + </td> + <td {$valueStyle}> + {$totalAmount|crmMoney} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}You Paid{/ts} + </td> + <td {$valueStyle}> + {$totalPaid|crmMoney} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Refund Amount{/ts} + </td> + <td {$valueStyle}> + {$refundAmount|crmMoney} + <td> + </tr> + {else} + <tr> + <th {$headerStyle}>{ts}Payment Details{/ts}</th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Total Amount{/ts} + </td> + <td {$valueStyle}> + {$totalAmount|crmMoney} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}This Payment Amount{/ts} + </td> + <td {$valueStyle}> + {$paymentAmount|crmMoney} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Balance Owed{/ts} + </td> + <td {$valueStyle}> + {$amountOwed|crmMoney} + </td> {* This will be zero after final payment. *} + </tr> + <tr> <td {$emptyBlockStyle}></td> + <td {$emptyBlockValueStyle}></td></tr> + {if $paymentsComplete} + <tr> + <td colspan='2' {$valueStyle}> + {ts}Thank you for completing payment.{/ts} + </td> + </tr> + {/if} + {/if} + {if $receive_date} + <tr> + <td {$labelStyle}> + {ts}Transaction Date{/ts} + </td> + <td {$valueStyle}> + {$receive_date|crmDate} + </td> + </tr> + {/if} + {if $trxn_id} + <tr> + <td {$labelStyle}> + {ts}Transaction #{/ts} + </td> + <td {$valueStyle}> + {$trxn_id} + </td> + </tr> + {/if} + {if $paidBy} + <tr> + <td {$labelStyle}> + {ts}Paid By{/ts} + </td> + <td {$valueStyle}> + {$paidBy} + </td> + </tr> + {/if} + {if $checkNumber} + <tr> + <td {$labelStyle}> + {ts}Check Number{/ts} + </td> + <td {$valueStyle}> + {$checkNumber} + </td> + </tr> + {/if} + </table> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + {if $contributeMode eq 'direct' and !$isAmountzero} + <tr> + <th {$headerStyle}> + {ts}Billing Name and Address{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$billingName}<br /> + {$address|nl2br} + </td> + </tr> + {/if} + {if $contributeMode eq'direct' and !$isAmountzero} + <tr> + <th {$headerStyle}> + {ts}Credit Card Information{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$credit_card_type}<br /> + {$credit_card_number}<br /> + {ts}Expires:{/ts} {$credit_card_exp_date|truncate:7:''|crmDate} + </td> + </tr> + {/if} + {if $component eq 'event'} + <tr> + <th {$headerStyle}> + {ts}Event Information and Location{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {$event.event_title}<br /> + {$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + </td> + </tr> + + {if $event.participant_role} + <tr> + <td {$labelStyle}> + {ts}Participant Role{/ts} + </td> + <td {$valueStyle}> + {$event.participant_role} + </td> + </tr> + {/if} + + {if $isShowLocation} + <tr> + <td colspan="2" {$valueStyle}> + {$location.address.1.display|nl2br} + </td> + </tr> + {/if} + + {if $location.phone.1.phone || $location.email.1.email} + <tr> + <td colspan="2" {$labelStyle}> + {ts}Event Contacts:{/ts} + </td> + </tr> + {foreach from=$location.phone item=phone} + {if $phone.phone} + <tr> + <td {$labelStyle}> + {if $phone.phone_type} + {$phone.phone_type_display} + {else} + {ts}Phone{/ts} + {/if} + </td> + <td {$valueStyle}> + {$phone.phone} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} + </td> + </tr> + {/if} + {/foreach} + {foreach from=$location.email item=eventEmail} + {if $eventEmail.email} + <tr> + <td {$labelStyle}> + {ts}Email{/ts} + </td> + <td {$valueStyle}> + {$eventEmail.email} + </td> + </tr> + {/if} + {/foreach} + {/if} {*phone block close*} + {/if} + </table> + </td> + </tr> + + </table> + </center> + + </body> +</html> diff --git a/civicrm/xml/templates/message_templates/payment_or_refund_notification_subject.tpl b/civicrm/xml/templates/message_templates/payment_or_refund_notification_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..ef17a4ce556b9213bc9a51975f313dbf192da59c --- /dev/null +++ b/civicrm/xml/templates/message_templates/payment_or_refund_notification_subject.tpl @@ -0,0 +1 @@ +{if $isRefund}{ts}Refund Notification{/ts}{else}{ts}Payment Receipt{/ts}{/if} - {if $component eq 'event'}{$event.title}{/if} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/payment_or_refund_notification_text.tpl b/civicrm/xml/templates/message_templates/payment_or_refund_notification_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c713864c05f4d230dac5eed3179a7886c1deb306 --- /dev/null +++ b/civicrm/xml/templates/message_templates/payment_or_refund_notification_text.tpl @@ -0,0 +1,102 @@ +Dear {$contactDisplayName} +{if $isRefund} +{ts}A refund has been issued based on changes in your registration selections.{/ts} +{else} +{ts}A payment has been received.{/ts} +{/if} + +{ts}Please print this confirmation for your records.{/ts} + +{if $isRefund} +=============================================================================== + +{ts}Refund Details{/ts} + +=============================================================================== +{ts}Total Fees{/ts}: {$totalAmount|crmMoney} +{ts}You Paid{/ts}: {$totalPaid|crmMoney} +------------------------------------------------------------------------------------ +{ts}Refund Amount{/ts}: {$refundAmount|crmMoney} + +{else} +=============================================================================== + +{ts}Payment Details{/ts} + +=============================================================================== +{ts}Total Fees{/ts}: {$totalAmount|crmMoney} +{ts}This Payment Amount{/ts}: {$paymentAmount|crmMoney} +------------------------------------------------------------------------------------ +{ts}Balance Owed{/ts}: {$amountOwed|crmMoney} {* This will be zero after final payment. *} + +{if $paymentsComplete} + +{ts}Thank you for completing payment.{/ts} +{/if} +{/if} +{if $receive_date} +{ts}Transaction Date{/ts}: {$receive_date|crmDate} +{/if} +{if $trxn_id} +{ts}Transaction #{/ts}: {$trxn_id} +{/if} +{if $paidBy} +{ts}Paid By{/ts}: {$paidBy} +{/if} +{if $checkNumber} +{ts}Check Number{/ts}: {$checkNumber} +{/if} +{if $contributeMode eq 'direct' and !$isAmountzero} + +=============================================================================== + +{ts}Billing Name and Address{/ts} + +=============================================================================== + +{$billingName} +{$address} +{/if} + +{if $contributeMode eq 'direct' and !$isAmountzero} +=========================================================== +{ts}Credit Card Information{/ts} + +=============================================================================== + +{$credit_card_type} +{$credit_card_number} +{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate} +{/if} +{if $component eq 'event'} +=============================================================================== + +{ts}Event Information and Location{/ts} + +=============================================================================== + +{$event.event_title} +{$event.event_start_date|crmDate}{if $event.event_end_date}-{if $event.event_end_date|date_format:"%Y%m%d" == $event.event_start_date|date_format:"%Y%m%d"}{$event.event_end_date|crmDate:0:1}{else}{$event.event_end_date|crmDate}{/if}{/if} + +{if $event.participant_role} +{ts}Participant Role{/ts}: {$event.participant_role} +{/if} + +{if $isShowLocation} +{$location.address.1.display|strip_tags:false} +{/if}{*End of isShowLocation condition*} + +{if $location.phone.1.phone || $location.email.1.email} + +{ts}Event Contacts:{/ts} +{foreach from=$location.phone item=phone} +{if $phone.phone} + +{if $phone.phone_type}{$phone.phone_type_display}{else}{ts}Phone{/ts}{/if}: {$phone.phone}{/if} {if $phone.phone_ext} {ts}ext.{/ts} {$phone.phone_ext}{/if} +{/foreach} +{foreach from=$location.email item=eventEmail} +{if $eventEmail.email} + +{ts}Email{/ts}: {$eventEmail.email}{/if}{/foreach} +{/if} +{/if} diff --git a/civicrm/xml/templates/message_templates/pcp_notify_html.tpl b/civicrm/xml/templates/message_templates/pcp_notify_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..6e8e8b230dc0ab2c0ec057a532c68670a1ce6ff8 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_notify_html.tpl @@ -0,0 +1,96 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} +{capture assign=pcpURL }{crmURL p="civicrm/pcp/info" q="reset=1&id=`$pcpId`" h=0 a=1}{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Personal Campaign Page Notification{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Action{/ts}: + </td> + <td {$valueStyle}> + {if $mode EQ 'Update'} + {ts}Updated personal campaign page{/ts} + {else} + {ts}New personal campaign page{/ts} + {/if} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Personal Campaign Page Title{/ts} + </td> + <td {$valueStyle}> + {$pcpTitle} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Current Status{/ts} + </td> + <td {$valueStyle}> + {$pcpStatus} + </td> + </tr> + + <tr> + <td {$labelStyle}> + <a href="{$pcpURL}">{ts}View Page{/ts}</a> + </td> + <td></td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Supporter{/ts} + </td> + <td {$valueStyle}> + <a href="{$supporterUrl}">{$supporterName}</a> + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Linked to Contribution Page{/ts} + </td> + <td {$valueStyle}> + <a href="{$contribPageUrl}">{$contribPageTitle}</a> + </td> + </tr> + <tr> + <td {$labelStyle}> + <a href="{$managePCPUrl}">{ts}Manage Personal Campaign Pages{/ts}</a> + </td> + <td></td> + </tr> + + </table> + </td> + </tr> + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/pcp_notify_subject.tpl b/civicrm/xml/templates/message_templates/pcp_notify_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..d75d4601d040184768d7abec5b172df6477650d2 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_notify_subject.tpl @@ -0,0 +1 @@ +{ts}Personal Campaign Page Notification{/ts} diff --git a/civicrm/xml/templates/message_templates/pcp_notify_text.tpl b/civicrm/xml/templates/message_templates/pcp_notify_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..52f9761e58c418ed975eefefa7d0e5590ffd9fa6 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_notify_text.tpl @@ -0,0 +1,20 @@ +=========================================================== +{ts}Personal Campaign Page Notification{/ts} + +=========================================================== +{ts}Action{/ts}: {if $mode EQ 'Update'}{ts}Updated personal campaign page{/ts}{else}{ts}New personal campaign page{/ts}{/if} +{ts}Personal Campaign Page Title{/ts}: {$pcpTitle} +{ts}Current Status{/ts}: {$pcpStatus} +{capture assign=pcpURL}{crmURL p="civicrm/pcp/info" q="reset=1&id=`$pcpId`" h=0 a=1}{/capture} +{ts}View Page{/ts}: +>> {$pcpURL} + +{ts}Supporter{/ts}: {$supporterName} +>> {$supporterUrl} + +{ts}Linked to Contribution Page{/ts}: {$contribPageTitle} +>> {$contribPageUrl} + +{ts}Manage Personal Campaign Pages{/ts}: +>> {$managePCPUrl} + diff --git a/civicrm/xml/templates/message_templates/pcp_owner_notify_html.tpl b/civicrm/xml/templates/message_templates/pcp_owner_notify_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..9e4b6d29d66cb514b6ed368241ecb4c30d5dc609 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_owner_notify_html.tpl @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + + <p>{ts}You have received a donation at your personal page{/ts}: <a href="{$pcpInfoURL}">{$page_title}</a></p> + <p>{ts}Your fundraising total has been updated.{/ts}<br/> + {ts}The donor's information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} <br/> + {if $is_honor_roll_enabled} + {ts}The donor's name has been added to your honor roll unless they asked not to be included.{/ts}<br/> + {/if} + </p> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + <tr><td>{ts}Received{/ts}:</td><td> {$receive_date|crmDate}</td></tr> + <tr><td>{ts}Amount{/ts}:</td><td> {$total_amount|crmMoney:$currency}</td></tr> + <tr><td>{ts}Name{/ts}:</td><td> {$donors_display_name}</td></tr> + <tr><td>{ts}Email{/ts}:</td><td> {$donors_email}</td></tr> + </table> +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/pcp_owner_notify_subject.tpl b/civicrm/xml/templates/message_templates/pcp_owner_notify_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..83d9e8f933132915c003536ab7cba562a0f9d5d5 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_owner_notify_subject.tpl @@ -0,0 +1 @@ +{ts}Someone has just donated to your personal campaign page{/ts} diff --git a/civicrm/xml/templates/message_templates/pcp_owner_notify_text.tpl b/civicrm/xml/templates/message_templates/pcp_owner_notify_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..4c7f7841afc62385dbccb70149426758e4511e87 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_owner_notify_text.tpl @@ -0,0 +1,20 @@ +=========================================================== +{ts}Personal Campaign Page Owner Notification{/ts} + +=========================================================== +{ts}You have received a donation at your personal page{/ts}: {$page_title} +>> {$pcpInfoURL} + +{ts}Your fundraising total has been updated.{/ts} +{ts}The donor's information is listed below. You can choose to contact them and convey your thanks if you wish.{/ts} +{if $is_honor_roll_enabled} + {ts}The donor's name has been added to your honor roll unless they asked not to be included.{/ts} +{/if} + +{ts}Received{/ts}: {$receive_date|crmDate} + +{ts}Amount{/ts}: {$total_amount|crmMoney:$currency} + +{ts}Name{/ts}: {$donors_display_name} + +{ts}Email{/ts}: {$donors_email} diff --git a/civicrm/xml/templates/message_templates/pcp_status_change_html.tpl b/civicrm/xml/templates/message_templates/pcp_status_change_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..1e69086fb2de1155f8292564718312e0fe0ed369 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_status_change_html.tpl @@ -0,0 +1,57 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + + <h1>{ts}Your Personal Campaign Page{/ts}</h1> + + {if $pcpStatus eq 'Approved'} + + <p>{ts}Your personal campaign page has been approved and is now live.{/ts}</p> + <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p> + <ol> + <li><a href="{$loginUrl}">{ts}Login to your account{/ts}</a></li> + <li><a href="{$pcpInfoURL}">{ts}Go to your page{/ts}</a></li> + </ol> + <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p> + + {if $isTellFriendEnabled} + <p><a href="{$pcpTellFriendURL}">{ts}After logging in, you can use this form to promote your fundraising page{/ts}</a></p> + {/if} + + {if $pcpNotifyEmailAddress} + <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p> + {/if} + + {elseif $pcpStatus eq 'Not Approved'} + + <p>{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts}</p> + {if $pcpNotifyEmailAddress} + <p>{ts}Please contact our site administrator for more information{/ts}: {$pcpNotifyEmailAddress}</p> + {/if} + + {/if} + + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/pcp_status_change_subject.tpl b/civicrm/xml/templates/message_templates/pcp_status_change_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..dc5bc5ee1f58508905149cb9987a8d3af0f15405 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_status_change_subject.tpl @@ -0,0 +1 @@ +{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} diff --git a/civicrm/xml/templates/message_templates/pcp_status_change_text.tpl b/civicrm/xml/templates/message_templates/pcp_status_change_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..abcd54640a8ca056bea32900ddc08ae90cbfe26f --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_status_change_text.tpl @@ -0,0 +1,45 @@ +{if $pcpStatus eq 'Approved'} +============================ +{ts}Your Personal Campaign Page{/ts} + +============================ + +{ts}Your personal campaign page has been approved and is now live.{/ts} + +{ts}Whenever you want to preview, update or promote your page{/ts}: +1. {ts}Login to your account at{/ts}: +{$loginUrl} + +2. {ts}Click or paste this link into your browser to go to your page{/ts}: +{$pcpInfoURL} + +{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts} + +{if $isTellFriendEnabled} + +{ts}After logging in, you can use this form to promote your fundraising page{/ts}: +{$pcpTellFriendURL} + +{/if} + +{if $pcpNotifyEmailAddress} +{ts}Questions? Send email to{/ts}: +{$pcpNotifyEmailAddress} +{/if} + +{* Rejected message *} +{elseif $pcpStatus eq 'Not Approved'} +============================ +{ts}Your Personal Campaign Page{/ts} + +============================ + +{ts}Your personal campaign page has been reviewed. There were some issues with the content which prevented us from approving the page. We are sorry for any inconvenience.{/ts} + +{if $pcpNotifyEmailAddress} + +{ts}Please contact our site administrator for more information{/ts}: +{$pcpNotifyEmailAddress} +{/if} + +{/if} diff --git a/civicrm/xml/templates/message_templates/pcp_supporter_notify_html.tpl b/civicrm/xml/templates/message_templates/pcp_supporter_notify_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..d0e429b5cba53afd41df7b2566341695a8445dfa --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_supporter_notify_html.tpl @@ -0,0 +1,99 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts}Dear supporter{/ts},</p> + <p>{ts 1="$contribPageTitle"}Thanks for creating a personal campaign page in support of %1.{/ts}</p> + </td> + </tr> + + {if $pcpStatus eq 'Approved'} + + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Promoting Your Page{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + {if $isTellFriendEnabled} + <p>{ts}You can begin your fundraising efforts using our "Tell a Friend" form{/ts}:</p> + <ol> + <li><a href="{$loginUrl}">{ts}Login to your account{/ts}</a></li> + <li><a href="{$pcpTellFriendURL}">{ts}Click this link and follow the prompts{/ts}</a></li> + </ol> + {else} + <p>{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts} {ts}Include this link to your fundraising page in your emails{/ts}: {$pcpInfoURL}</p> + {/if} + </td> + </tr> + <tr> + <th {$headerStyle}> + {ts}Managing Your Page{/ts} + </th> + <tr> + <td colspan="2" {$valueStyle}> + <p>{ts}Whenever you want to preview, update or promote your page{/ts}:</p> + <ol> + <li><a href="{$loginUrl}">{ts}Login to your account{/ts}</a></li> + <li><a href="{$pcpInfoURL}">{ts}Go to your page{/ts}</a></li> + </ol> + <p>{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts}</p> + </td> + </tr> + </tr> + </table> + </td> + </tr> + + {elseif $pcpStatus EQ 'Waiting Review'} + + <tr> + <td> + <p>{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts}</p> + <p>{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts}</p> + <p>{ts}You can still preview your page prior to approval{/ts}:</p> + <ol> + <li><a href="{$loginUrl}">{ts}Login to your account{/ts}</a></li> + <li><a href="{$pcpInfoURL}">{ts}Click this link{/ts}</a></li> + </ol> + </td> + </tr> + + {/if} + + {if $pcpNotifyEmailAddress} + <tr> + <td> + <p>{ts}Questions? Send email to{/ts}: {$pcpNotifyEmailAddress}</p> + </td> + </tr> + {/if} + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/pcp_supporter_notify_subject.tpl b/civicrm/xml/templates/message_templates/pcp_supporter_notify_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..dc5bc5ee1f58508905149cb9987a8d3af0f15405 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_supporter_notify_subject.tpl @@ -0,0 +1 @@ +{ts 1=$contribPageTitle}Your Personal Campaign Page for %1{/ts} diff --git a/civicrm/xml/templates/message_templates/pcp_supporter_notify_text.tpl b/civicrm/xml/templates/message_templates/pcp_supporter_notify_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..6f00d5cc0dad8c8529ecc682dd6230d629b7e773 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pcp_supporter_notify_text.tpl @@ -0,0 +1,57 @@ +{ts}Dear supporter{/ts}, +{ts 1="$contribPageTitle"}Thanks for creating a personal campaign page in support of %1.{/ts} + +{if $pcpStatus eq 'Approved'} +==================== +{ts}Promoting Your Page{/ts} + +==================== +{if $isTellFriendEnabled} + +{ts}You can begin your fundraising efforts using our "Tell a Friend" form{/ts}: + +1. {ts}Login to your account at{/ts}: +{$loginUrl} + +2. {ts}Click or paste this link into your browser and follow the prompts{/ts}: +{$pcpTellFriendURL} +{else} + +{ts}Send email to family, friends and colleagues with a personal message about this campaign.{/ts} +{ts}Include this link to your fundraising page in your emails{/ts}: +{$pcpInfoURL} +{/if} + +=================== +{ts}Managing Your Page{/ts} + +=================== +{ts}Whenever you want to preview, update or promote your page{/ts}: +1. {ts}Login to your account at{/ts}: +{$loginUrl} + +2. {ts}Click or paste this link into your browser to go to your page{/ts}: +{$pcpInfoURL} + +{ts}When you view your campaign page WHILE LOGGED IN, the page includes links to edit your page, tell friends, and update your contact info.{/ts} + + +{elseif $pcpStatus EQ 'Waiting Review'} +{ts}Your page requires administrator review before you can begin your fundraising efforts.{/ts} + + +{ts}A notification email has been sent to the site administrator, and you will receive another notification from them as soon as the review process is complete.{/ts} + + +{ts}You can still preview your page prior to approval{/ts}: +1. {ts}Login to your account at{/ts}: +{$loginUrl} + +2. {ts}Click or paste this link into your browser{/ts}: +{$pcpInfoURL} + +{/if} +{if $pcpNotifyEmailAddress} +{ts}Questions? Send email to{/ts}: +{$pcpNotifyEmailAddress} +{/if} diff --git a/civicrm/xml/templates/message_templates/petition_confirmation_needed_html.tpl b/civicrm/xml/templates/message_templates/petition_confirmation_needed_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..2d30dc11c79d99d58938c9342e725e7f2909edf6 --- /dev/null +++ b/civicrm/xml/templates/message_templates/petition_confirmation_needed_html.tpl @@ -0,0 +1,10 @@ +<p>Thank you for signing {$petition.title}.</p> + +<p>In order to <b>complete your signature</b>, we must confirm your e-mail. +<br /> +Please do so by visiting the following web page by clicking +on the link below or pasting the link into your browser. +<br /><br /> +Email confirmation page: <a href="{$petition.confirmUrl} ">{$petition.confirmUrl}</a></p> + +<p>If you did not sign this petition, please ignore this message.</p> diff --git a/civicrm/xml/templates/message_templates/petition_confirmation_needed_subject.tpl b/civicrm/xml/templates/message_templates/petition_confirmation_needed_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..8f86ab9231a66c36dbb74b97d42713b77aaaf9b2 --- /dev/null +++ b/civicrm/xml/templates/message_templates/petition_confirmation_needed_subject.tpl @@ -0,0 +1 @@ +Confirmation of signature needed for {$petition.title} diff --git a/civicrm/xml/templates/message_templates/petition_confirmation_needed_text.tpl b/civicrm/xml/templates/message_templates/petition_confirmation_needed_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..8549b39b4c41d3544a1d04a508bfcf2ad0d20445 --- /dev/null +++ b/civicrm/xml/templates/message_templates/petition_confirmation_needed_text.tpl @@ -0,0 +1,8 @@ +Thank you for signing {$petition.title}. + +In order to complete your signature, we must confirm your e-mail. +Please do so by visiting the following email confirmation web page: + +{$petition.confirmUrlPlainText} + +If you did not sign this petition, please ignore this message. diff --git a/civicrm/xml/templates/message_templates/petition_sign_html.tpl b/civicrm/xml/templates/message_templates/petition_sign_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..6dfbaab34d573612d761067685b18d38890dbfd7 --- /dev/null +++ b/civicrm/xml/templates/message_templates/petition_sign_html.tpl @@ -0,0 +1,3 @@ +<p>Thank you for signing {$petition.title}.</p> + +{include file="CRM/Campaign/Page/Petition/SocialNetwork.tpl" petition_id=$survey_id noscript=true emailMode=true} diff --git a/civicrm/xml/templates/message_templates/petition_sign_subject.tpl b/civicrm/xml/templates/message_templates/petition_sign_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..49edf1e89b5ae36fe86d72a3c25163e21c95ada9 --- /dev/null +++ b/civicrm/xml/templates/message_templates/petition_sign_subject.tpl @@ -0,0 +1 @@ +Thank you for signing {$petition.title} \ No newline at end of file diff --git a/civicrm/xml/templates/message_templates/petition_sign_text.tpl b/civicrm/xml/templates/message_templates/petition_sign_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..8e8a555dfbf3835c9420ac548691550e54f52851 --- /dev/null +++ b/civicrm/xml/templates/message_templates/petition_sign_text.tpl @@ -0,0 +1 @@ +Thank you for signing {$petition.title}. diff --git a/civicrm/xml/templates/message_templates/pledge_acknowledge_html.tpl b/civicrm/xml/templates/message_templates/pledge_acknowledge_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c0727c407892d75ab4c4dfead936aef9c7d44f96 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pledge_acknowledge_html.tpl @@ -0,0 +1,117 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}dear %1{/ts},</p> + <p>{ts}thank you for your generous pledge. please print this acknowledgment for your records.{/ts}</p> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Pledge Information{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Pledge Received{/ts} + </td> + <td {$valueStyle}> + {$create_date|truncate:10:''|crmDate} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Total Pledge Amount{/ts} + </td> + <td {$valueStyle}> + {$total_pledge_amount|crmMoney:$currency} + </td> + </tr> + <tr> + <th {$headerStyle}> + {ts}Payment Schedule{/ts} + </th> + </tr> + <tr> + <td colspan="2" {$valueStyle}> + <p>{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts}</p> + + {if $frequency_day} + <p>{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts}</p> + {/if} + </td> + </tr> + + {if $payments} + {assign var="count" value="1"} + {foreach from=$payments item=payment} + <tr> + <td {$labelStyle}> + {ts 1=$count}Payment %1{/ts} + </td> + <td {$valueStyle}> + {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:''|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:''|crmDate}{/if} + </td> + </tr> + {assign var="count" value=`$count+1`} + {/foreach} + {/if} + + <tr> + <td colspan="2" {$valueStyle}> + <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions +or need to modify your payment schedule.{/ts}</p> + </td> + </tr> + + {if $customGroup} + {foreach from=$customGroup item=value key=customName} + <tr> + <th {$headerStyle}> + {$customName} + </th> + </tr> + {foreach from=$value item=v key=n} + <tr> + <td {$labelStyle}> + {$n} + </td> + <td {$valueStyle}> + {$v} + </td> + </tr> + {/foreach} + {/foreach} + {/if} + + </table> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/pledge_acknowledge_subject.tpl b/civicrm/xml/templates/message_templates/pledge_acknowledge_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..9648c9c71ba7bfae983421d00b66a26c5a5c2b93 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pledge_acknowledge_subject.tpl @@ -0,0 +1 @@ +{ts}Thank you for your Pledge{/ts} diff --git a/civicrm/xml/templates/message_templates/pledge_acknowledge_text.tpl b/civicrm/xml/templates/message_templates/pledge_acknowledge_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..571f1b1bea2ab45dfce3b2a1a24d0f36ebc04472 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pledge_acknowledge_text.tpl @@ -0,0 +1,45 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts}Thank you for your generous pledge. Please print this acknowledgment for your records.{/ts} + +=========================================================== +{ts}Pledge Information{/ts} + +=========================================================== +{ts}Pledge Received{/ts}: {$create_date|truncate:10:''|crmDate} +{ts}Total Pledge Amount{/ts}: {$total_pledge_amount|crmMoney:$currency} + +=========================================================== +{ts}Payment Schedule{/ts} + +=========================================================== +{ts 1=$scheduled_amount|crmMoney:$currency 2=$frequency_interval 3=$frequency_unit 4=$installments}%1 every %2 %3 for %4 installments.{/ts} + +{if $frequency_day} + +{ts 1=$frequency_day 2=$frequency_unit}Payments are due on day %1 of the %2.{/ts} +{/if} + +{if $payments} +{assign var="count" value="1"} +{foreach from=$payments item=payment} + +{ts 1=$count}Payment %1{/ts}: {$payment.amount|crmMoney:$currency} {if $payment.status eq 1}{ts}paid{/ts} {$payment.receive_date|truncate:10:''|crmDate}{else}{ts}due{/ts} {$payment.due_date|truncate:10:''|crmDate}{/if} +{assign var="count" value=`$count+1`} +{/foreach} +{/if} + + +{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions +or need to modify your payment schedule.{/ts} + +{if $customGroup} +{foreach from=$customGroup item=value key=customName} +=========================================================== +{$customName} +=========================================================== +{foreach from=$value item=v key=n} +{$n}: {$v} +{/foreach} +{/foreach} +{/if} diff --git a/civicrm/xml/templates/message_templates/pledge_reminder_html.tpl b/civicrm/xml/templates/message_templates/pledge_reminder_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..c2e42a57748e6068d924f47fdfc600ee0b021fa0 --- /dev/null +++ b/civicrm/xml/templates/message_templates/pledge_reminder_html.tpl @@ -0,0 +1,107 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <p>{ts 1=$contact.display_name}Dear %1{/ts},</p> + <p>{ts 1=$next_payment|truncate:10:''|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts}</p> + </td> + </tr> + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Payment Due{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Amount Due{/ts} + </td> + <td {$valueStyle}> + {$amount_due|crmMoney:$currency} + </td> + </tr> + </table> + </td> + </tr> + + <tr> + <td> + {if $contribution_page_id} + {capture assign=contributionUrl}{crmURL p='civicrm/contribute/transact' q="reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`" a=true h=0}{/capture} + <p><a href="{$contributionUrl}">{ts}Go to a web page where you can make your payment online{/ts}</a></p> + {else} + <p>{ts}Please mail your payment to{/ts}: {$domain.address}</p> + {/if} + </td> + </tr> + + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <th {$headerStyle}> + {ts}Pledge Information{/ts} + </th> + </tr> + <tr> + <td {$labelStyle}> + {ts}Pledge Received{/ts} + </td> + <td {$valueStyle}> + {$create_date|truncate:10:''|crmDate} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Total Pledge Amount{/ts} + </td> + <td {$valueStyle}> + {$amount|crmMoney:$currency} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Total Paid{/ts} + </td> + <td {$valueStyle}> + {$amount_paid|crmMoney:$currency} + </td> + </tr> + </table> + </td> + </tr> + + <tr> + <td> + <p>{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions +or need to modify your payment schedule.{/ts}</p> + <p>{ts}Thank your for your generous support.{/ts}</p> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/pledge_reminder_subject.tpl b/civicrm/xml/templates/message_templates/pledge_reminder_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..9e06198c3481c2e425f3d51cafcf5efd0834c0ee --- /dev/null +++ b/civicrm/xml/templates/message_templates/pledge_reminder_subject.tpl @@ -0,0 +1 @@ +{ts}Pledge Payment Reminder{/ts} diff --git a/civicrm/xml/templates/message_templates/pledge_reminder_text.tpl b/civicrm/xml/templates/message_templates/pledge_reminder_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..2761c3d36ac8ddc326e14b2f316320aaa25c62dd --- /dev/null +++ b/civicrm/xml/templates/message_templates/pledge_reminder_text.tpl @@ -0,0 +1,33 @@ +{ts 1=$contact.display_name}Dear %1{/ts}, + +{ts 1=$next_payment|truncate:10:''|crmDate}This is a reminder that the next payment on your pledge is due on %1.{/ts} + +=========================================================== +{ts}Payment Due{/ts} + +=========================================================== +{ts}Amount Due{/ts}: {$amount_due|crmMoney:$currency} +{ts}Due Date{/ts}: {$scheduled_payment_date|truncate:10:''|crmDate} + +{if $contribution_page_id} +{capture assign=contributionUrl}{crmURL p='civicrm/contribute/transact' q="reset=1&id=`$contribution_page_id`&cid=`$contact.contact_id`&pledgeId=`$pledge_id`&cs=`$checksumValue`" a=true h=0}{/capture} +Click this link to go to a web page where you can make your payment online: +{$contributionUrl} +{else} +{ts}Please mail your payment to{/ts}: +{$domain.address} +{/if} + +=========================================================== +{ts}Pledge Information{/ts} + +=========================================================== +{ts}Pledge Received{/ts}: {$create_date|truncate:10:''|crmDate} +{ts}Total Pledge Amount{/ts}: {$amount|crmMoney:$currency} +{ts}Total Paid{/ts}: {$amount_paid|crmMoney:$currency} + +{ts 1=$domain.phone 2=$domain.email}Please contact us at %1 or send email to %2 if you have questions +or need to modify your payment schedule.{/ts} + + +{ts}Thank your for your generous support.{/ts} diff --git a/civicrm/xml/templates/message_templates/sample/Sample CiviMail Newsletter.tpl b/civicrm/xml/templates/message_templates/sample/Sample CiviMail Newsletter.tpl new file mode 100644 index 0000000000000000000000000000000000000000..d5053437b6e9d2787cb63ea4ca7058f5951f2f78 --- /dev/null +++ b/civicrm/xml/templates/message_templates/sample/Sample CiviMail Newsletter.tpl @@ -0,0 +1,130 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +<table width=612 cellpadding=0 cellspacing=0 bgcolor="#ffffff"> + <tr> + <td colspan="2" bgcolor="#ffffff" valign="middle" > + <table border="0" cellpadding="0" cellspacing="0" > + <tr> + <td> + <a href="https://civicrm.org"><img src="https://civicrm.org/sites/civicrm.org/files/top-logo_2.png" border=0 alt="Replace this logo with the URL to your own"></a> + </td> + <td> </td> + <td> + <a href="https://civicrm.org" style="text-decoration: none;"><font size=5 face="Arial, Verdana, sans-serif" color="#8bc539">Your Newsletter Title</font></a> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td valign="top" width="70%"> + <!-- left column --> + <table cellpadding="10" cellspacing="0" border="0"> + <tr> + <td style="font-family: Arial, Verdana, sans-serif; font-size: 12px;" > + <font face="Arial, Verdana, sans-serif" size="2" > + Greetings {contact.display_name}, + <br /><br /> + This is a sample template designed to help you get started creating and sending your own CiviMail messages. This template uses an HTML layout that is generally compatible with the wide variety of email clients that your recipients might be using (e.g. Gmail, Outlook, Yahoo, etc.). + <br /><br />You can select this "Sample CiviMail Newsletter Template" from the "Use Template" drop-down in Step 3 of creating a mailing, and customize it to your needs. Then check the "Save as New Template" box on the bottom the page to save your customized version for use in future mailings. + <br /><br />The logo you use must be uploaded to your server. Copy and paste the URL path to the logo into the <img src= tag in the HTML at the top. Click "Source" or the Image button if you are using the text editor. + <br /><br /> + Edit the color of the links and headers using the color button or by editing the HTML. + <br /><br /> + Your newsletter message and donation appeal can go here. Click the link button to <a href="#">create links</a> - remember to use a fully qualified URL starting with http:// in all your links! + <br /><br /> + To use CiviMail: + <ul> + <li><a href="http://book.civicrm.org/user/advanced-configuration/email-system-configuration/">Configure your Email System</a>.</li> + <li>Make sure your web hosting provider allows outgoing bulk mail, and see if they have a restriction on quantity. If they don\'t allow bulk mail, consider <a href="https://civicrm.org/providers/hosting">finding a new host</a>.</li> + </ul> + Sincerely, + <br /><br /> + Your Team + <br /><br /> + </font> + </td> + </tr> + </table> + </td> + + <td valign="top" width="30%" bgcolor="#ffffff" style="border: 1px solid #056085;"> + <!-- right column --> + <table cellpadding=10 cellspacing=0 border=0> + <tr> + <td bgcolor="#056085"><font face="Arial, Verdana, sans-serif" size="4" color="#ffffff">News and Events</font></td> + </tr> + <tr> + <td style="color: #000; font-family: Arial, Verdana, sans-serif; font-size: 12px;" > + <font face="Arial, Verdana, sans-serif" size="2" > + <font color="#056085"><strong>Featured Events</strong> </font><br /> + Fundraising Dinner<br /> + Training Meeting<br /> + Board of Directors Annual Meeting<br /> + + <br /><br /> + <font color="#056085"><strong>Community Events</strong></font><br /> + Bake Sale<br /> + Charity Auction<br /> + Art Exhibit<br /> + + <br /><br /> + <font color="#056085"><strong>Important Dates</strong></font><br /> + Tuesday August 27<br /> + Wednesday September 8<br /> + Thursday September 29<br /> + Saturday October 1<br /> + Sunday October 20<br /> + </font> + </td> + </tr> + </table> + </td> + </tr> + + <tr> + <td colspan="2"> + <table cellpadding="10" cellspacing="0" border="0"> + <tr> + <td> + <font face="Arial, Verdana, sans-serif" size="2" > + <font color="#7dc857"><strong>Helpful Tips</strong></font> + <br /><br /> + <font color="#3b5187">Tokens</font><br /> + Click "Insert Tokens" to dynamically insert names, addresses, and other contact data of your recipients. + <br /><br /> + <font color="#3b5187">Plain Text Version</font><br /> + Some people refuse HTML emails altogether. We recommend sending a plain-text version of your important communications to accommodate them. Luckily, CiviCRM accommodates for this! Just click "Plain Text" and copy and paste in some text. Line breaks (carriage returns) and fully qualified URLs like http://www.example.com are all you get, no HTML here! + <br /><br /> + <font color="#3b5187">Play by the Rules</font><br /> + The address of the sender is required by the Can Spam Act law. This is an available token called domain.address. An unsubscribe or opt-out link is also required. There are several available tokens for this. <em>{action.optOutUrl}</em> creates a link for recipients to click if they want to opt out of receiving emails from your organization. <em>{action.unsubscribeUrl}</em> creates a link to unsubscribe from the specific mailing list used to send this message. Click on "Insert Tokens" to find these and look for tokens named "Domain" or "Unsubscribe". This sample template includes both required tokens at the bottom of the message. You can also configure a default Mailing Footer containing these tokens. + <br /><br /> + <font color="#3b5187">Composing Offline</font><br /> + If you prefer to compose an HTML email offline in your own text editor, you can upload this HTML content into CiviMail or simply click "Source" and then copy and paste the HTML in. + <br /><br /> + <font color="#3b5187">Images</font><br /> + Most email clients these days (Outlook, Gmail, etc) block image loading by default. This is to protect their users from annoying or harmful email. Not much we can do about this, so encourage recipients to add you to their contacts or "whitelist". Also use images sparingly, do not rely on images to convey vital information, and always use HTML "alt" tags which describe the image content. + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td colspan="2" style="color: #000; font-family: Arial, Verdana, sans-serif; font-size: 10px;"> + <font face="Arial, Verdana, sans-serif" size="2" > + <hr /> + <a href="{action.unsubscribeUrl}" title="click to unsubscribe">Click here</a> to unsubscribe from this mailing list.<br /><br /> + Our mailing address is:<br /> + {domain.address} + </td> + </tr> + </table> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/sample/Sample Responsive Design Newsletter - Single Column.tpl b/civicrm/xml/templates/message_templates/sample/Sample Responsive Design Newsletter - Single Column.tpl new file mode 100644 index 0000000000000000000000000000000000000000..bddc84c85503c6b7a7d7810c5c6dcf49e49d7c06 --- /dev/null +++ b/civicrm/xml/templates/message_templates/sample/Sample Responsive Design Newsletter - Single Column.tpl @@ -0,0 +1,496 @@ +<html xmlns="http://www.w3.org/1999/xhtml"> +<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> + <meta content="width=device-width, initial-scale=1.0" name="viewport" /> + <title></title> + + <style type="text/css"> + {literal} + /* Client-specific Styles */ + #outlook a {padding:0;} /* Force Outlook to provide a "view in browser" menu link. */ + body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;} + + /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */ + .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */ + .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */ + #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;} + img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;} + a img {border:none;} + .image_fix {display:block;} + p {margin: 0px 0px !important;} + table td {border-collapse: collapse;} + table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; } + a {text-decoration: none;text-decoration:none;} + + /*STYLES*/ + table[class=full] { width: 100%; clear: both; } + + /*IPAD STYLES*/ + @media only screen and (max-width: 640px) { + a[href^="tel"], a[href^="sms"] {text-decoration: none;color:#136388;pointer-events: none;cursor: default;} + .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {text-decoration: default;color:#136388;pointer-events: auto;cursor: default;} + table[class=devicewidth] {width: 440px!important;text-align:center!important;} + table[class=devicewidthmob] {width: 416px!important;text-align:center!important;} + table[class=devicewidthinner] {width: 416px!important;text-align:center!important;} + img[class=banner] {width: 440px!important;auto!important;} + img[class=col2img] {width: 440px!important;height:auto!important;} + table[class="cols3inner"] {width: 100px!important;} + table[class="col3img"] {width: 131px!important;} + img[class="col3img"] {width: 131px!important;height: auto!important;} + table[class="removeMobile"]{width:10px!important;} + img[class="blog"] {width: 440px!important;height: auto!important;} + } + + /*IPHONE STYLES*/ + @media only screen and (max-width: 480px) { + a[href^="tel"], a[href^="sms"] {text-decoration: none;color: #136388;pointer-events: none;cursor: default;} + .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {text-decoration: none;color:#136388;pointer-events: auto;cursor: default;} + + table[class=devicewidth] {width: 280px!important;text-align:center!important;} + table[class=devicewidthmob] {width: 260px!important;text-align:center!important;} + table[class=devicewidthinner] {width: 260px!important;text-align:center!important;} + img[class=banner] {width: 280px!important;height:100px!important;} + img[class=col2img] {width: 280px!important;height:auto!important;} + table[class="cols3inner"] {width: 260px!important;} + img[class="col3img"] {width: 280px!important;height: auto!important;} + table[class="col3img"] {width: 280px!important;} + img[class="blog"] {width: 280px!important;auto!important;} + td[class="padding-top-right15"]{padding:15px 15px 0 0 !important;} + td[class="padding-right15"]{padding-right:15px !important;} + } + + @media only screen and (max-device-width: 800px) + {td[class="padding-top-right15"]{padding:15px 15px 0 0 !important;} + td[class="padding-right15"]{padding-right:15px !important;}} + @media only screen and (max-device-width: 769px) { + .devicewidthmob {font-size:16px;} + } + + @media only screen and (max-width: 640px) { + .desktop-spacer {display:none !important;} + } + {/literal} + </style> + +<body> + <!-- Start of preheader --><!-- Start of preheader --> + <table bgcolor="#89c66b" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody><!-- Spacing --> + <tr> + <td height="20" width="100%"> </td> + </tr> + <!-- Spacing --> + <tr> + <td> + <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="310"> + <tbody> + <tr> + <td align="left" style="font-family: Helvetica, arial, sans-serif; font-size: 16px; line-height:120%; color: #f8f8f8;padding-left:15px; padding-bottom:5px;" valign="middle">Organization or Program Name Here</td> + </tr> + </tbody> + </table> + + <table align="right" border="0" cellpadding="0" cellspacing="0" class="emhide" width="310"> + <tbody> + <tr> + <td align="right" style="font-family: Helvetica, arial, sans-serif; font-size: 16px;color: #f8f8f8;padding-right:15px; text-align:right;" valign="middle">Month and Year</td> + </tr> + </tbody> + </table> + </td> + </tr> + <!-- Spacing --> + <tr> + <td height="20" width="100%"> </td> + </tr> + <!-- Spacing --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- End of main-banner--> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody><!-- Spacing --> + <tr> + <td height="20" width="100%"> + <table align="center" border="0" cellpadding="2" cellspacing="0" width="93%"> + <tbody> + <tr> + <td rowspan="2" style="padding-top:10px; padding-bottom:10px;" width="38%"><img src="https://civicrm.org/sites/default/files/civicrm/custom/images/civicrm-logo-transparent.png" alt="Replace with your own logo" width="220" border="0" /></td> + <td align="right" width="62%"> + <h6 class="collapse"> </h6> + </td> + </tr> + <tr> + <td align="right"> + <h5 style="font-family: Gill Sans, Gill Sans MT, Myriad Pro, DejaVu Sans Condensed, Helvetica, Arial, sans-serif; color:#136388;"> </h5> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody><!-- /Spacing --> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 23px; color:#f8f8f8; text-align:left; line-height: 32px; padding:5px 15px; background-color:#136388;">Headline Here</td> + </tr> + <!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="650"> + <tbody><!-- hero story --> + <tr> + <td align="center" class="devicewidthinner" width="100%"> + <div class="imgpop"><a href="#"><img alt="" border="0" class="blog" height="auto" src="https://civicrm.org/sites/default/files/civicrm/custom/images/650x396.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="650" /></a></div> + </td> + </tr> + <!-- /hero image --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px; color:#89c66b;"><a href="#" style="color:#89c66b;">Your Heading Here</a></td> + </tr> + <!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --><!-- content --> + <tr> + <td style="padding:0 15px;"> + <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;">{contact.email_greeting}, </p> + <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Replace with your text and images, and remember to link the facebook and twitter links in the footer to your pages. Have fun!</span></p> + </td> + </tr> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-left:15px;"><a href="#" style="color:#136388;text-decoration:none;font-weight:bold;" target="_blank" title="read more">Read More</a></td> + </tr> + <!-- /button --><!-- Spacing --> + <tr> + <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --><!-- end of content --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- end of hero image and story --><!-- story 1 --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody><!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="650"> + <tbody><!-- image --> + <tr> + <td align="center" class="devicewidthinner" width="100%"> + <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" class="blog" height="250" src="https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="650" /></a></div> + </td> + </tr> + <!-- /image --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px;"><a href="#" style="color:#89c66b;">Your Heading Here</a></td> + </tr> + <!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --><!-- content --> + <tr> + <td style="padding:0 15px;"> + <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #7a6e67; text-align:left; line-height: 26px; padding-bottom:10px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna </p> + </td> + </tr> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-left:15px;"><a href="#" style="color:#136388;text-decoration:none;font-weight:bold;" target="_blank" title="read more">Read More</a></td> + </tr> + <!-- /button --><!-- Spacing --> + <tr> + <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --><!-- end of content --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- /story 2--><!-- banner1 --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody><!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#89c66b" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="650"> + <tbody><!-- image --> + <tr> + <td align="center" class="devicewidthinner" width="100%"> + <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" class="blog" height="auto" src="https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="650" /></a></div> + </td> + </tr> + <!-- /image --><!-- content --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --> + <tr> + <td style="padding:15px;"> + <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #f0f0f0; text-align:left; line-height: 26px; padding-bottom:10px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna </p> + </td> + </tr> + <!-- /button --><!-- white button --> + <!-- /button --><!-- Spacing --><!-- end of content --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- /banner 1--><!-- banner 2 --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody><!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#136388" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="650"> + <tbody><!-- image --> + <tr> + <td align="center" class="devicewidthinner" width="100%"> + <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" class="blog" height="auto" src="https://civicrm.org/sites/default/files/civicrm/custom/images/banner-image-650-250.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="650" /></a></div> + </td> + </tr> + <!-- /image --><!-- content --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --> + <tr> + <td style="padding: 15px;"> + <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color: #f0f0f0; text-align:left; line-height: 26px; padding-bottom:10px;">Remember to link the facebook and twitter links below to your pages!</p> + </td> + </tr> + <!-- /button --><!-- white button --> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 16px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px; padding-bottom:10px; padding-left:15px;"><a href="#" style="color:#ffffff;text-decoration:none;font-weight:bold;" target="_blank" title="read more">Read More</a></td> + </tr> + <!-- /button --><!-- Spacing --><!-- end of content --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- /banner2 --><!-- footer --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="footer" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#89c66b" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="650"> + <tbody><!-- Spacing --> + <tr> + <td height="10" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + <tr> + <td><!-- logo --> + <table align="left" border="0" cellpadding="0" cellspacing="0" width="250"> + <tbody> + <tr> + <td width="20"> </td> + <td align="left" height="40" width="250"><span style="font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px;"><a href="{action.unsubscribeUrl}" style="color: #f0f0f0; ">Unsubscribe | </a><a href="{action.subscribeUrl}" style="color: #f0f0f0;">Subscribe |</a> <a href="{action.optOutUrl}" style="color: #f0f0f0;">Opt out</a></span></td> + </tr> + <tr> + <td width="20"> </td> + <td align="left" height="40" width="250"><span style="font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px; color: #f0f0f0;">{domain.address}</span></td> + </tr> + </tbody> + </table> + <!-- end of logo --><!-- start of social icons --> + + <table align="right" border="0" cellpadding="0" cellspacing="0" height="40" vaalign="middle" width="60"> + <tbody> + <tr> + <td align="left" height="22" width="22"> + <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" height="22" src="https://civicrm.org/sites/default/files/civicrm/custom/images/facebook.png" style="display:block; border:none; outline:none; text-decoration:none;" width="22" /> </a></div> + </td> + <td align="left" style="font-size:1px; line-height:1px;" width="10"> </td> + <td align="right" height="22" width="22"> + <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" height="22" src="https://civicrm.org/sites/default/files/civicrm/custom/images/twitter.png" style="display:block; border:none; outline:none; text-decoration:none;" width="22" /> </a></div> + </td> + <td align="left" style="font-size:1px; line-height:1px;" width="20"> </td> + </tr> + </tbody> + </table> + <!-- end of social icons --></td> + </tr> + <!-- Spacing --> + <tr> + <td height="10" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/sample/Sample Responsive Design Newsletter - Two Column.tpl b/civicrm/xml/templates/message_templates/sample/Sample Responsive Design Newsletter - Two Column.tpl new file mode 100644 index 0000000000000000000000000000000000000000..5181c7a49146c4433b533b6afb7b9271ba25f41b --- /dev/null +++ b/civicrm/xml/templates/message_templates/sample/Sample Responsive Design Newsletter - Two Column.tpl @@ -0,0 +1,672 @@ +<html xmlns="http://www.w3.org/1999/xhtml"> + <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> + <meta content="width=device-width, initial-scale=1.0" name="viewport" /> + <title></title> + <style type="text/css"> + {literal} + img {height: auto !important;} + /* Client-specific Styles */ + #outlook a {padding:0;} /* Force Outlook to provide a "view in browser" menu link. */ + body{width:100% !important; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; margin:0; padding:0;} + + /* Prevent Webkit and Windows Mobile platforms from changing default font sizes, while not breaking desktop design. */ + .ExternalClass {width:100%;} /* Force Hotmail to display emails at full width */ + .ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} /* Force Hotmail to display normal line spacing. */ + #backgroundTable {margin:0; padding:0; width:100% !important; line-height: 100% !important;} + img {outline:none; text-decoration:none;border:none; -ms-interpolation-mode: bicubic;} + a img {border:none;} + .image_fix {display:block;} + p {margin: 0px 0px !important;} + table td {border-collapse: collapse;} + table { border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; } + a {/*color: #33b9ff;*/text-decoration: none;text-decoration:none!important;} + + + /*STYLES*/ + table[class=full] { width: 100%; clear: both; } + + /*IPAD STYLES*/ + @media only screen and (max-width: 640px) { + a[href^="tel"], a[href^="sms"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;} + .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {text-decoration: default;color: #0a8cce !important;pointer-events: auto;cursor: default;} + table[class=devicewidth] {width: 440px!important;text-align:center!important;} + table[class=devicewidthmob] {width: 414px!important;text-align:center!important;} + table[class=devicewidthinner] {width: 414px!important;text-align:center!important;} + img[class=banner] {width: 440px!important;auto!important;} + img[class=col2img] {width: 440px!important;height:auto!important;} + table[class="cols3inner"] {width: 100px!important;} + table[class="col3img"] {width: 131px!important;} + img[class="col3img"] {width: 131px!important;height: auto!important;} + table[class="removeMobile"]{width:10px!important;} + img[class="blog"] {width: 440px!important;height: auto!important;} + } + + /*IPHONE STYLES*/ + @media only screen and (max-width: 480px) { + a[href^="tel"], a[href^="sms"] {text-decoration: none;color: #0a8cce;pointer-events: none;cursor: default;} + .mobile_link a[href^="tel"], .mobile_link a[href^="sms"] {text-decoration: default;color: #0a8cce !important; pointer-events: auto;cursor: default;} + table[class=devicewidth] {width: 280px!important;text-align:center!important;} + table[class=devicewidthmob] {width: 260px!important;text-align:center!important;} + table[class=devicewidthinner] {width: 260px!important;text-align:center!important;} + img[class=banner] {width: 280px!important;height:100px!important;} + img[class=col2img] {width: 280px!important;height:auto!important;} + table[class="cols3inner"] {width: 260px!important;} + img[class="col3img"] {width: 280px!important;height: auto!important;} + table[class="col3img"] {width: 280px!important;} + img[class="blog"] {width: 280px!important;auto!important;} + td[class="padding-top-right15"]{padding:15px 15px 0 0 !important;} + td[class="padding-right15"]{padding-right:15px !important;} + } + + @media only screen and (max-device-width: 800px) + {td[class="padding-top-right15"]{padding:15px 15px 0 0 !important;} + td[class="padding-right15"]{padding-right:15px !important;}} + @media only screen and (max-device-width: 769px) {.devicewidthmob {font-size:14px;}} + + @media only screen and (max-width: 640px) {.desktop-spacer {display:none !important;} + } + {/literal} + </style> + <body> + <!-- Start of preheader --><!-- Start of preheader --> + <table bgcolor="#0B4151" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody><!-- Spacing --> + <tr> + <td height="20" width="100%"> </td> + </tr> + <!-- Spacing --> + <tr> + <td> + <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="360"> + <tbody> + <tr> + <td align="left" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height:120%; color: #f8f8f8;padding-left:15px;" valign="middle">Organization or Program Name Here</td> + </tr> + </tbody> + </table> + + <table align="right" border="0" cellpadding="0" cellspacing="0" class="emhide" width="320"> + <tbody> + <tr> + <td align="right" style="font-family: Helvetica, arial, sans-serif; font-size: 16px;color: #f8f8f8;padding-right:15px;" valign="middle">Month Year</td> + </tr> + </tbody> + </table> + </td> + </tr> + <!-- Spacing --> + <tr> + <td height="20" width="100%"> </td> + </tr> + <!-- Spacing --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- End of preheader --><!-- start of logo --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody><!-- Spacing --> + <tr> + <td height="20" width="100%"> + <table align="center" border="0" cellpadding="2" cellspacing="0" width="93%"> + <tbody> + <tr> + <td rowspan="2" width="330"><a href="#"> <div class="imgpop"><img src="https://civicrm.org/sites/default/files/civicrm/custom/images/civicrm-logo-transparent.png" alt="Replace with your own logo" width="220" border="0" style="display:block;"/></div></a></td> + <td align="right" > + <h6 class="collapse"> </h6> + </td> + </tr> + <tr> + <td align="right"> + + </td> + </tr> + </tbody> + </table> + </td> + </tr> + + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- end of logo --> <!-- hero story 1 --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="101%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#f8f8f8" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#f8f8f8" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody><!-- /Spacing --> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 24px; color:#f8f8f8; text-align:left; line-height: 26px; padding:5px 15px; background-color: #80C457">Hero Story Heading</td> + </tr> + <!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidthinner" width="700"> + <tbody><!-- image --> + <tr> + <td align="center" class="devicewidthinner" width="100%"> + <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" class="blog" height="396" src="https://civicrm.org/sites/default/files/civicrm/custom/images/700x396.png" style="display:block; border:none; outline:none; text-decoration:none; padding:0; line-height:0;" width="700" /></a></div> + </td> + </tr> + <!-- /image --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --><!-- hero story --> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 26px; padding:0 15px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Subheading Here</a></td> + </tr> + <!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr><!-- /Spacing --> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 26px; padding:0 15px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Replace with your text and images, and remember to link the facebook and twitter links in the footer to your pages. Have fun!</span></td> + </tr> + + <!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr><!-- /Spacing --> + + <!-- /Spacing --><!-- /hero story --> + + <!-- Spacing --> <!-- Spacing --> + + + + <!-- Spacing --><!-- end of content --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + <!-- Section Heading --> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 24px; color:#f8f8f8; text-align:left; line-height: 26px; padding:5px 15px; background-color: #80C457">Section Heading Here</td> + </tr> + <!-- /Section Heading --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- /hero story 1 --><!-- story one --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody><!-- Spacing --> + <tr> + <td class="desktop-spacer" height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="660"> + <tbody> + <tr> + <td><!-- Start of left column --> + <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="330"> + <tbody><!-- image --> + <tr> + <td align="center" class="devicewidth" height="150" valign="top" width="330"><a href="#"><img alt="" border="0" class="col2img" src="https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png" style="display:block; border:none; outline:none; text-decoration:none; display:block;" width="330" /></a></td> + </tr> + <!-- /image --> + </tbody> + </table> + <!-- end of left column --><!-- spacing for mobile devices--> + + <table align="left" border="0" cellpadding="0" cellspacing="0" class="mobilespacing"> + <tbody> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + </tbody> + </table> + <!-- end of for mobile devices--><!-- start of right column --> + + <table align="right" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="310"> + <tbody> + <tr> + <td class="padding-top-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Heading Here</a><a href="#" style="color:#076187; text-decoration:none;" target="_blank" title="CiviCRM helps keep the “City Beautiful†Movementâ€going strong"></a></td> + </tr> + <!-- end of title --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --><!-- content --> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna </span></td> + </tr> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;"><a href="#" style="color:#80C457;text-decoration:none;font-weight:bold;" target="_blank" title="CiviCRM helps keep the “City Beautiful†Movementâ€going strong">Read More</a></td> + </tr> + <!-- /button --><!-- end of content --> + </tbody> + </table> + <!-- end of right column --></td> + </tr> + </tbody> + </table> + </td> + </tr> + <!-- Spacing --> + <tr> + <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- /story one --> + <!-- story two --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody><!-- Spacing --> + <tr> + <td bgcolor="#076187" height="0" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --><!-- Spacing --> + <tr> + <td class="desktop-spacer" height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="660"> + <tbody> + <tr> + <td><!-- Start of left column --> + <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="330"> + <tbody><!-- image --> + <tr> + <td align="center" class="devicewidth" height="150" valign="top" width="330"><a href="#"><img alt="" border="0" class="col2img" src="https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png" style="display:block; border:none; outline:none; text-decoration:none; display:block;" width="330" /></a></td> + </tr> + <!-- /image --> + </tbody> + </table> + <!-- end of left column --><!-- spacing for mobile devices--> + + <table align="left" border="0" cellpadding="0" cellspacing="0" class="mobilespacing"> + <tbody> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + </tbody> + </table> + <!-- end of for mobile devices--><!-- start of right column --> + + <table align="right" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="310"> + <tbody> + <tr> + <td class="padding-top-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Heading Here</a><a href="#" style="color:#076187; text-decoration:none;" target="_blank" title="How CiviCRM will take Tribodar Eco Learning Center to another level"></a></td> + </tr> + <!-- end of title --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --><!-- content --> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna </span></td> + </tr> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;"><a href="#" style="color:#80C457;text-decoration:none;font-weight:bold;" target="_blank" title="How CiviCRM will take Tribodar Eco Learning Center to another level">Read More</a></td> + </tr> + <!-- /button --><!-- end of content --> + </tbody> + </table> + <!-- end of right column --></td> + </tr> + </tbody> + </table> + </td> + </tr> + <!-- Spacing --> + <tr> + <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- /story two --><!-- story three --> + + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody><!-- Spacing --> + <tr> + <td bgcolor="#076187" height="0" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --><!-- Spacing --> + <tr> + <td height="20" class="desktop-spacer" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="660"> + <tbody> + <tr> + <td><!-- Start of left column --> + <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="330"> + <tbody><!-- image --> + <tr> + <td align="center" class="devicewidth" height="150" valign="top" width="330"><a href="#"><img alt="" border="0" class="col2img" src="https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png" style="display:block; border:none; outline:none; text-decoration:none; display:block;" width="330" /></a></td> + </tr> + <!-- /image --> + </tbody> + </table> + <!-- end of left column --><!-- spacing for mobile devices--> + + <table align="left" border="0" cellpadding="0" cellspacing="0" class="mobilespacing"> + <tbody> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + </tbody> + </table> + <!-- end of for mobile devices--><!-- start of right column --> + + <table align="right" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="310"> + <tbody> + <tr> + <td class="padding-top-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 18px; text-align:left; line-height: 24px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Heading Here</a><a href="#" style="color:#076187; text-decoration:none;" target="_blank" title="CiviCRM provides a soup-to-nuts open-source solution for Friends of the San Pedro River"></a></td> + </tr> + <!-- end of title --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --><!-- content --> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna </span></td> + </tr> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;"><a href="#" style="color:#80C457;text-decoration:none;font-weight:bold;" target="_blank" title="CiviCRM provides a soup-to-nuts open-source solution for Friends of the San Pedro River">Read More</a></td> + </tr> + <!-- /button --><!-- end of content --> + </tbody> + </table> + <!-- end of right column --></td> + </tr> + </tbody> + </table> + </td> + </tr> + <!-- Spacing --> + <tr> + <td height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- /story three --> + + + + + + <!-- story four --> + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="left-image" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <!-- Spacing --> + <tr> + <td bgcolor="#076187" height="0" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + <!-- Spacing --> + <tr> + <td class="desktop-spacer" height="20" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="660"> + <tbody> + <tr> + <td><!-- Start of left column --> + <table align="left" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="330"> + <tbody><!-- image --> + <tr> + <td align="center" class="devicewidth" height="150" valign="top" width="330"><a href="#"><img alt="" border="0" class="col2img" src="https://civicrm.org/sites/default/files/civicrm/custom/images/330x150.png" style="display:block; border:none; outline:none; text-decoration:none; display:block;" width="330" /></a></td> + </tr> + <!-- /image --> + </tbody> + </table> + <!-- end of left column --><!-- spacing for mobile devices--> + + <table align="left" border="0" cellpadding="0" cellspacing="0" class="mobilespacing"> + <tbody> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + </tbody> + </table> + <!-- end of for mobile devices--><!-- start of right column --> + + <table align="right" border="0" cellpadding="0" cellspacing="0" class="devicewidthmob" width="310"> + <tbody> + <tr> + <td class="padding-top-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 18px;text-align:left; line-height: 24px;"><a href="#" style="color:#076187; text-decoration:none; " target="_blank">Heading Here</a><a href="#" style="color:#076187; text-decoration:none;" target="_blank" title="Google Summer of Code"></a></td> + </tr> + <!-- end of title --><!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --><!-- content --> + <tr> + <td class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;"><span class="padding-right15" style="font-family: Helvetica, arial, sans-serif; font-size: 14px; color: #7a6e67; text-align:left; line-height: 24px;">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod + tempor incididunt ut labore et dolore magna </span></td> + </tr> + <tr> + <td style="font-family: Helvetica, arial, sans-serif; font-size: 14px; font-weight:bold; color: #333333; text-align:left;line-height: 24px; padding-top:10px;"><a href="#" style="color:#80C457;text-decoration:none;font-weight:bold;" target="_blank" title="Google Summer of Code">Read More</a></td> + </tr> + <!-- /button --><!-- end of content --> + </tbody> + </table> + <!-- end of right column --></td> + </tr> + </tbody> + </table> + </td> + </tr> + <!-- Spacing --> + <tr> + <td height="15" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;" width="100%"> </td> + </tr> + <!-- /Spacing --> + <tr> + <td style="padding: 15px;"> + <p style="font-family: Helvetica, arial, sans-serif; font-size: 16px; color:#076187; text-align:left; line-height: 26px; padding-bottom:10px;">Remember to link the facebook and twitter links below to your pages!</p> + </td> + </tr> + <!-- Spacing --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- /story four --> + + <!-- footer --> + + <!-- End of footer --><!-- Start of postfooter --> + <table bgcolor="#d8d8d8" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" st-sortable="footer" width="100%"> + <tbody> + <tr> + <td> + <table align="center" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody> + <tr> + <td width="100%"> + <table align="center" bgcolor="#89c66b" border="0" cellpadding="0" cellspacing="0" class="devicewidth" width="700"> + <tbody><!-- Spacing --> + <tr> + <td height="10" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + <tr> + <td><!-- logo --> + <table align="left" border="0" cellpadding="0" cellspacing="0" width="250"> + <tbody> + <tr> + <td width="20"> </td> + <td align="left" height="40" width="250"><span style="font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px;"><a href="{action.unsubscribeUrl}" style="color: #f0f0f0;">Unsubscribe | </a><a href="{action.subscribeUrl}" style="color: #f0f0f0;">Subscribe |</a> <a href="{action.optOutUrl}" style="color: #f0f0f0;">Opt out</a></span></td> + </tr> + <tr> + <td width="20"> </td> + <td align="left" height="40" width="250"><span style="font-family: Helvetica, arial, sans-serif; font-size: 13px; text-align:left; line-height: 26px; padding-bottom:10px; color: #f0f0f0;">{domain.address}</span></td> + </tr> + </tbody> + </table> + <!-- end of logo --><!-- start of social icons --> + <table align="right" border="0" cellpadding="0" cellspacing="0" height="40" vaalign="middle" width="60"> + <tbody> + <tr> + <td align="left" height="22" width="22"> + <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" height="22" src="https://civicrm.org/sites/default/files/civicrm/custom/images/facebook.png" style="display:block; border:none; outline:none; text-decoration:none;" width="22" /> </a></div> </td> + <td align="left" style="font-size:1px; line-height:1px;" width="10"> </td> + <td align="right" height="22" width="22"> + <div class="imgpop"><a href="#" target="_blank"><img alt="" border="0" height="22" src="https://civicrm.org/sites/default/files/civicrm/custom/images/twitter.png" style="display:block; border:none; outline:none; text-decoration:none;" width="22" /> </a></div> + </td> + <td align="left" style="font-size:1px; line-height:1px;" width="20"> </td> + </tr> + </tbody> + </table> + <!-- end of social icons --></td> + </tr> + <!-- Spacing --> + <tr> + <td height="10" style="font-size:1px; line-height:1px; mso-line-height-rule: exactly;"> </td> + </tr> + <!-- Spacing --> + <tr> + <td bgcolor="#80C457" height="10" width="100%"> </td> + </tr> + <!-- Spacing --> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + </td> + </tr> + </tbody> + </table> + <!-- End of footer --> + </body> +</html> diff --git a/civicrm/xml/templates/message_templates/test_preview_html.tpl b/civicrm/xml/templates/message_templates/test_preview_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..131da32e6e8e9c321fe4e26c5a4d521e027694d8 --- /dev/null +++ b/civicrm/xml/templates/message_templates/test_preview_html.tpl @@ -0,0 +1,10 @@ +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt_test" style="font-family: Arial, Verdana, sans-serif; text-align: left"> + <tr> + <td> + <p>{ts}Test-drive Email / Receipt{/ts}</p> + <p>{ts}This is a test-drive email. No live financial transaction has occurred.{/ts}</p> + </td> + </tr> + </table> +</center> diff --git a/civicrm/xml/templates/message_templates/test_preview_subject.tpl b/civicrm/xml/templates/message_templates/test_preview_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..20cc6a1050b7103ea792c42c10e14206e4bc0c3f --- /dev/null +++ b/civicrm/xml/templates/message_templates/test_preview_subject.tpl @@ -0,0 +1 @@ +[TEST] diff --git a/civicrm/xml/templates/message_templates/test_preview_text.tpl b/civicrm/xml/templates/message_templates/test_preview_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..5821007a01be32e6d2b4f2a2c00d27f6fb9f2790 --- /dev/null +++ b/civicrm/xml/templates/message_templates/test_preview_text.tpl @@ -0,0 +1,7 @@ +*********************************************************** + +{ts}Test-drive Email / Receipt{/ts} + +{ts}This is a test-drive email. No live financial transaction has occurred.{/ts} + +*********************************************************** diff --git a/civicrm/xml/templates/message_templates/uf_notify_html.tpl b/civicrm/xml/templates/message_templates/uf_notify_html.tpl new file mode 100644 index 0000000000000000000000000000000000000000..5ef389725c9bb2a5908dc09b9042f8ef75fa80ff --- /dev/null +++ b/civicrm/xml/templates/message_templates/uf_notify_html.tpl @@ -0,0 +1,74 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title></title> +</head> +<body> + +{capture assign=headerStyle}colspan="2" style="text-align: left; padding: 4px; border-bottom: 1px solid #999; background-color: #eee;"{/capture} +{capture assign=labelStyle }style="padding: 4px; border-bottom: 1px solid #999; background-color: #f7f7f7;"{/capture} +{capture assign=valueStyle }style="padding: 4px; border-bottom: 1px solid #999;"{/capture} + +<center> + <table width="620" border="0" cellpadding="0" cellspacing="0" id="crm-event_receipt" style="font-family: Arial, Verdana, sans-serif; text-align: left;"> + + <!-- BEGIN HEADER --> + <!-- You can add table row(s) here with logo or other header elements --> + <!-- END HEADER --> + + <!-- BEGIN CONTENT --> + + <tr> + <td> + <table style="border: 1px solid #999; margin: 1em 0em 1em; border-collapse: collapse; width:100%;"> + <tr> + <td {$labelStyle}> + {ts}Submitted For{/ts} + </td> + <td {$valueStyle}> + {$displayName} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Date{/ts} + </td> + <td {$valueStyle}> + {$currentDate} + </td> + </tr> + <tr> + <td {$labelStyle}> + {ts}Contact Summary{/ts} + </td> + <td {$valueStyle}> + {$contactLink} + </td> + </tr> + + <tr> + <th {$headerStyle}> + {$grouptitle} + </th> + </tr> + + {foreach from=$values item=value key=valueName} + <tr> + <td {$labelStyle}> + {$valueName} + </td> + <td {$valueStyle}> + {$value} + </td> + </tr> + {/foreach} + </table> + </td> + </tr> + + </table> +</center> + +</body> +</html> diff --git a/civicrm/xml/templates/message_templates/uf_notify_subject.tpl b/civicrm/xml/templates/message_templates/uf_notify_subject.tpl new file mode 100644 index 0000000000000000000000000000000000000000..0da62f65d25afd8e70beb0cc7f4bd3525c7e2434 --- /dev/null +++ b/civicrm/xml/templates/message_templates/uf_notify_subject.tpl @@ -0,0 +1 @@ +{$grouptitle} {ts 1=$displayName}Submitted by %1{/ts} diff --git a/civicrm/xml/templates/message_templates/uf_notify_text.tpl b/civicrm/xml/templates/message_templates/uf_notify_text.tpl new file mode 100644 index 0000000000000000000000000000000000000000..be3d1f615dcecae6e5ca0fc9f68305f84b380c4b --- /dev/null +++ b/civicrm/xml/templates/message_templates/uf_notify_text.tpl @@ -0,0 +1,11 @@ +{ts}Submitted For:{/ts} {$displayName} +{ts}Date:{/ts} {$currentDate} +{ts}Contact Summary:{/ts} {$contactLink} + +=========================================================== +{$grouptitle} + +=========================================================== +{foreach from=$values item=value key=valueName} +{$valueName}: {$value} +{/foreach} diff --git a/civicrm/xml/templates/schema.tpl b/civicrm/xml/templates/schema.tpl new file mode 100644 index 0000000000000000000000000000000000000000..b772a2ab2ae472de35418e01c83d7d241e2e05d5 --- /dev/null +++ b/civicrm/xml/templates/schema.tpl @@ -0,0 +1,91 @@ +-- +--------------------------------------------------------------------+ +-- | CiviCRM version 4.7 | +-- +--------------------------------------------------------------------+ +-- | Copyright CiviCRM LLC (c) 2004-2018 | +-- +--------------------------------------------------------------------+ +-- | This file is a part of CiviCRM. | +-- | | +-- | CiviCRM is free software; you can copy, modify, and distribute it | +-- | under the terms of the GNU Affero General Public License | +-- | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | +-- | | +-- | CiviCRM 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 Affero General Public License for more details. | +-- | | +-- | You should have received a copy of the GNU Affero General Public | +-- | License and the CiviCRM Licensing Exception along | +-- | with this program; if not, contact CiviCRM LLC | +-- | at info[AT]civicrm[DOT]org. If you have questions about the | +-- | GNU Affero General Public License or the licensing of CiviCRM, | +-- | see the CiviCRM license FAQ at http://civicrm.org/licensing | +-- +--------------------------------------------------------------------+ +-- +-- Generated from {$smarty.template} +-- {$generated} +-- +{$database.comments} + +{include file="drop.tpl"} + +-- /******************************************************* +-- * +-- * Create new tables +-- * +-- *******************************************************/ + +{foreach from=$tables item=table} +-- /******************************************************* +-- * +-- * {$table.name} +{if $table.comment} +-- * +-- * {$table.comment} +{/if} +-- * +-- *******************************************************/ +CREATE TABLE `{$table.name}` ( +{assign var='first' value=true} + +{foreach from=$table.fields item=field} +{if ! $first},{/if} +{assign var='first' value=false} + + `{$field.name}` {$field.sqlType}{if $field.collate} COLLATE {$field.collate}{/if} {if $field.required}{if $field.required == "false"}NULL{else}NOT NULL{/if}{/if} {if $field.autoincrement}AUTO_INCREMENT{/if} {if $field.default|count_characters}DEFAULT {$field.default}{/if} {if $field.comment}COMMENT '{ts escape=sql}{$field.comment}{/ts}'{/if} +{/foreach} {* table.fields *} + +{if $table.primaryKey} +{if ! $first},{/if} +{assign var='first' value=false} + + {assign var='firstIndexField' value=true} + PRIMARY KEY ({foreach from=$table.primaryKey.field item=fieldName}{if $firstIndexField}{assign var='firstIndexField' value=false}{else},{/if}`{$fieldName}`{/foreach}) +{/if} {* table.primaryKey *} + +{if $table.index} + {foreach from=$table.index item=index} + {if ! $first},{/if} + {assign var='first' value=false} + {if $index.unique} UNIQUE{/if} INDEX `{$index.name}`( + {assign var='firstIndexField' value=true} + {foreach from=$index.field item=fieldName} + {if $firstIndexField}{assign var='firstIndexField' value=false}{else}, {/if}{$fieldName} + {/foreach} +) +{/foreach} {* table.index *} +{/if} {* table.index *} + +{if $table.foreignKey} +{foreach from=$table.foreignKey item=foreign} +{if ! $first},{/if} +{assign var='first' value=false} + {if $mysql eq 'simple'} INDEX FKEY_{$foreign.name} ( `{$foreign.name}` ) , {/if} + CONSTRAINT {$foreign.uniqName} FOREIGN KEY (`{$foreign.name}`) REFERENCES `{$foreign.table}`(`{$foreign.key}`) {if $foreign.onDelete}ON DELETE {$foreign.onDelete}{/if} +{/foreach} {* table.foreignKey *} +{/if} {* table.foreignKey *} + +{* ) {if $mysql eq 'modern' }{$table.attributes}{/if}; *} +) {if $mysql eq 'modern' } {$table.attributes_modern} {else} {$table.attributes_simple} {/if} ; + +{/foreach} {* tables *} diff --git a/civicrm/xml/templates/schema_structure.tpl b/civicrm/xml/templates/schema_structure.tpl new file mode 100644 index 0000000000000000000000000000000000000000..92bd020ab0c55007fe4262dd16aeb3bb4e600106 --- /dev/null +++ b/civicrm/xml/templates/schema_structure.tpl @@ -0,0 +1,135 @@ +<?php + +/* + +--------------------------------------------------------------------+ + | CiviCRM version 4.7 | + +--------------------------------------------------------------------+ + | Copyright CiviCRM LLC (c) 2004-2018 | + +--------------------------------------------------------------------+ + | This file is a part of CiviCRM. | + | | + | CiviCRM is free software; you can copy, modify, and distribute it | + | under the terms of the GNU Affero General Public License | + | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | + | | + | CiviCRM 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 Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public | + | License and the CiviCRM Licensing Exception along | + | with this program; if not, contact CiviCRM LLC | + | at info[AT]civicrm[DOT]org. If you have questions about the | + | GNU Affero General Public License or the licensing of CiviCRM, | + | see the CiviCRM license FAQ at http://civicrm.org/licensing | + +--------------------------------------------------------------------+ +*/ + +/** + * + * @package CRM + * @copyright CiviCRM LLC (c) 2004-2018 + * + * Generated from {$smarty.template} + * {$generated} + */ +class CRM_Core_I18n_SchemaStructure +{ldelim} + + /** + * Get translatable columns. + * + * @return array + * A table-indexed array of translatable columns. + */ + public static function &columns() + {ldelim} + static $result = null; + if (!$result) {ldelim} + $result = array( + {foreach from=$columns key=table item=types} + '{$table}' => array( + {foreach from=$types key=column item=type} + '{$column}' => "{$type}", + {/foreach} + ), + {/foreach} + ); + {rdelim} + return $result; + {rdelim} + + /** + * Get a table indexed array of the indices for translatable fields. + * + * @return array + * Indices for translatable fields. + */ + public static function &indices() + {ldelim} + static $result = null; + if (!$result) {ldelim} + $result = array( + {foreach from=$indices key=table item=tableIndices} + '{$table}' => array( + {foreach from=$tableIndices key=name item=info} + '{$name}' => array( + 'name' => '{$info.name}', + 'field' => array( + {foreach from=$info.field item=field} + '{$field}', + {/foreach} + ), + {if $info.unique}'unique' => 1,{/if} + ), + {/foreach} + ), + {/foreach} + ); + {rdelim} + return $result; + {rdelim} + + /** + * Get tables with translatable fields. + * + * @return array + * Array of names of tables with fields that can be translated. + */ + static function &tables() + {ldelim} + static $result = null; + if (!$result) {ldelim} + $result = array_keys(self::columns()); + {rdelim} + return $result; + {rdelim} + + /** + * Get a list of widgets for editing translatable fields. + * + * @return array + * Array of the widgets for editing translatable fields. + */ + static function &widgets() + {ldelim} + static $result = null; + if (!$result) {ldelim} + $result = array( + {foreach from=$widgets key=table item=columns} + '{$table}' => array( + {foreach from=$columns key=column item=widget} + '{$column}' => array( + {foreach from=$widget key=name item=value} + '{$name}' => "{$value}", + {/foreach} + ), + {/foreach} + ), + {/foreach} + ); + {rdelim} + return $result; + {rdelim} +{rdelim} diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml new file mode 100644 index 0000000000000000000000000000000000000000..04e2b2d93f588900f358fc4ff7f4a3f560a78d3e --- /dev/null +++ b/civicrm/xml/version.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="iso-8859-1" ?> +<version> + <version_no>5.0.0</version_no> +</version> diff --git a/includes/civicrm.basepage.php b/includes/civicrm.basepage.php index 4559e38f4b3feb50013dc2af8eadd40a0c85ad98..78762ba06897e5761d75fa3d10d172dc7e4a64cb 100644 --- a/includes/civicrm.basepage.php +++ b/includes/civicrm.basepage.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/includes/civicrm.shortcodes.modal.php b/includes/civicrm.shortcodes.modal.php index 6cc59eb3a137a4ac34e9e93a3cb324dc634645bd..d606a8a0b44239a22832b34bcd555614af289821 100644 --- a/includes/civicrm.shortcodes.modal.php +++ b/includes/civicrm.shortcodes.modal.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/includes/civicrm.shortcodes.php b/includes/civicrm.shortcodes.php index 1ff858b834e612b0b3045a1856f1f1b1b87b8613..cf3068d5ffdd62cbb7125323062b2b5a51189b6d 100644 --- a/includes/civicrm.shortcodes.php +++ b/includes/civicrm.shortcodes.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/includes/civicrm.users.php b/includes/civicrm.users.php index 6557fa8613774814075de7b5220504a9281f6ccd..6c387d781854f30d9d303b138aad41297e22f7f0 100644 --- a/includes/civicrm.users.php +++ b/includes/civicrm.users.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/uninstall.php b/uninstall.php index 24d0eaa3857f0b6c61b2915ff3be187c9acdce7e..7579c21f7061c9182f0ba4514ed42b6616ef6b16 100644 --- a/uninstall.php +++ b/uninstall.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2017 + * @copyright CiviCRM LLC (c) 2004-2018 * */ diff --git a/wp-cli/civicrm.php b/wp-cli/civicrm.php index 1c2176a064b3299ca7fd6335681037dc2d34998f..8d8e2caa036b705f80678c6d6fc963b3b3180763 100644 --- a/wp-cli/civicrm.php +++ b/wp-cli/civicrm.php @@ -4,7 +4,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2017 | + | Copyright CiviCRM LLC (c) 2004-2018 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | |